Internet Explorer体系结构(15)

  

1.7.3  扩展完整性防御

浏览器扩展,特别是诸如ActiveX控件和行为之类的二进制文件,都是传统的攻击对象。因此,IE在这个浏览器的所有新版本中都添加了额外的缓解措施。这些缓解措施试图阻止被用于危害数据和系统完整性的常见场景和安全漏洞。

1. ActiveX的初始化安全和脚本编写安全

ActiveX控件是在网页中运行的二进制应用程序。因为ActiveX控件可能是为了在受信任桌面应用程序中使用而编写的,所以开发人员可能没有考虑到不受信任调用方的安全威胁。为了缓解这一问题,IE要求控件发出“选择加入”声明,使该控件在IE的默认安全性设置之下运行。在实例化一个控件之前,IE尝试调用IObjectSafety::SetInterfaceSafetyOptions()方法,对不受信任的初始化数据和调用方,也能强制该控件的行为是安全的。

控件通过返回INTERFACESAFE_FOR_UNTRUSTED_DATA来声明它们对初始化是安全的。这一固定信息通知IE:该控件能够安全地处理传递给它的任何初始化数据(例如在OBJECT标记的PARAME属性中传递)。控件还可以通过返回INTERFACESAFE_FOR_ UNTRUSTED_CALLER来声明自己“对脚本编写也是安全的”。这一固定信息通知IE:该控件的方法和属性可以由JavaScript或VBScript调用或设置。

如果一个控件未能实现SetInterfaceSafetyOptions()方法,或者未能指出它对不受信任数据或不受信任调用方是安全的,IE将立即卸载该对象。

2. ActiveX选择加入

除了直接通过浏览器安装的ActiveX控件以及一定数量广泛应用、面向Internet的控件(例如Flash和RealPlayer)之外,所有其他ActiveX控件在默认情况下都禁止在IE中进行实例化。用户可以使用信息栏选择在浏览器中使用一个ActiveX控件。

因为一些常见的开发工具会自动实现IObjectSafety,所以有些控件在承诺自己能够安全地供浏览器使用时,可能会有些言过其实。这样可能会导致可被攻击的故障或者其他安全威胁。“ActiveX选择加入”强制用户事先验证一个控件,然后才能在IE中运行它,从而极大地缩小了针对ActiveX控件的攻击面。

3. ATL SiteLock模板和Per-Site ActiveX

ATL SiteLock模板和“Per-Site ActiveX”能够混合使用显式和隐式方法,将ActiveX控件绑定到一个或多个域。通过限制ActiveX控件的运行位置和上下文,开发人员和用户可以将改变控件用途的风险降至最低。

ATL SiteLock是一种显式机制,用于限制哪些域和哪些范围可以加载一个给定Activex控件。希望使用这一约束条件的控件开发人员可以将SiteLock模板应用到自己基于ATL的ActiveX控件。这些ActiveX控件没有实现IObjectSafety,而是实现IObjectSafetySiteLockImpl;这个界面是从IObjectSaftey派生而来的,使开发人员能够声明一个许可域(或区域)的列表,以在运行时进行检查。

SiteLock是防止ActiveX重用攻击的最可靠机制,在这种攻击方式中,恶意网站尝试滥用为在另一网站中使用而设计的控件。如果一个网站尝试加载SiteLock不允许的控件,将会防止该对象的实例化。不会出现信息栏或重载。

由于SiteLock机制需要控件开发人员付出一些努力,所以采用这一机制的控件数目有些不尽如人意。为此,微软在IE 8中添加了一个新功能,用于提供SiteLock的一些好处。

“Per-Site ActiveX”功能使用户能够决定允许在哪些域中运行一个控件。默认情况下,通过浏览器安装的控件只能在安装该控件的站点上运行。当另一个网站要实例化一个已安装控件时,会向用户显示信息栏,询问是否允许在当前域或所有域中运行控件(见图1-25)。

图1-25  ScriptX的“Per-Site ActiveX”信息栏

这个域列表可以通过“管理加载项”用户界面或通过“组策略”进行管理。

4. Per-User(Non-Admin)ActiveX

“Per-User ActiveX”(也称为“Non-Admin ActiveX”)使ActiveX控件包(CAB)能够在一个用户账户内安装,而不是在计算机范围内安装。如果开发人员希望将其CAB转换为按用户安装程序,可以在控件包的INF文件中设定InstallScope and RedirectToHKCU标志,以达到这一目的。

“Per-machine”(例如CAB)通常将文件放在Downloaded Program Files文件夹中,并向注册表的HKEY_LOCAL_MACHINE配置单元中写入信息。与之相对,Per-user应用程序将文件放在当前用户拥有的文件夹中,并将注册表项写到HKEY_CURRENT_USER。Per-user应用程序并不是新东西,也不是仅限于CAB文件。任何安装脚本或可执行文件都可以将扩展或应用程序转换为“Per-user”方式,只需要将安装过程限制于非系统文件夹和注册表项就行了。例如,谷歌Chrome将自己放在用户的Application Data文件夹中,而不是放在计算机范围内的Program Files文件夹中。

注意:

在“Per-user ActiveX”之前,IE会显式检查一个用户是否拥有管理权限,然后才会尝试安装一个网页上的ActiveX控件。

读书导航