Java:当你无法放弃时的修复方案
关于Java在消费级和企业环境中的使用,有许多可讨论之处。与其他平台一样,它既有忠实的支持者,也有激烈的批评者。但对大多数人来说,Java是必需品,是达到目的的手段。
过去几年中,Java平台成为众多恶意软件攻击的目标,这些攻击利用了目标机器上的多个Java运行时漏洞。Java利用率的上升主要归因于未打补丁的软件,尽管零日漏洞偶尔也会出现。
幸运的是,可以采取一些措施来缓解这些问题。Oracle正在提供一系列措施,通过要求使用受信任证书签名,来防止未经授权的Java Applet和Web Start应用程序运行。这是一个很好的开始。然而,并非所有人都运行最新版本的Java运行时。长期以来,Java更新曾与旧版本并行安装。这已不再是情况,但未打补丁的软件问题仍然存在。此外,还有一些遗留应用程序需要较旧的平台才能运行。
对此可以做什么?如果你需要在浏览器中运行Java,没有太多选择——保持软件最新并仅访问受信任的网站。如果你只关心运行Java桌面应用程序,有一些缓解步骤允许客户在浏览器中禁用Java支持,同时保持桌面功能完整。这些步骤将消除普遍的远程利用向量,但同时为本地应用程序保留Java安装。这个主题已在其他地方讨论过;例如,这里。
我们的客户告诉我们,最有效的缓解策略既要全面(涵盖所有软件版本,过去和现在),又要对企业友好,因为企业面临复杂的部署问题。为了解决这些问题,我们发布了KB2751647的更新——如何在Internet Explorer中禁用Java Web插件。我们提供了一个“Microsoft Fix it”解决方案,通过Internet Explorer阻止所有Java Web攻击向量。该解决方案适用于所有版本的Java(测试过5及以上版本)和所有受支持的Internet Explorer版本(32位或64位):
Microsoft Fix it 50994
Microsoft Fix it 50995
Fix it解决方案包括两部分。第一部分利用Windows应用程序兼容性工具包,在运行时更改Internet Explorer的行为,以防止加载Oracle的Java Web插件。这是通过挂钩所有LoadLibrary函数实现的,当尝试加载所有Java ActiveX dll(_npjpi.dll, jp2iexp.dll)时,这些函数返回NULL(最后错误ERRORFILE_NOT_FOUND)。第二部分防止Internet Explorer自动打开JNLP文件。这是通过清除JNLP协议处理程序注册表位置(HKCR\JNLPFile)的ACL(访问控制列表)来实现的,从而阻止所有用户应用程序读取其内容。
该解决方案涵盖当前和过去的Java版本,以及可预见的未来版本。它也不会干扰Java的更新机制。事实上,即使在安装任何Java之前安装,Fix it也能按预期工作。它还可以利用msiexec的非交互选项轻松部署。
缓解措施。
当你无法放弃时,在IE中阻止Java
- Cristian Craioveanu, MSRC工程部,在Elia Florio和Gerardo Di Giacomo的帮助和支持下(谢谢!)