技术开发 频道

面对IE保护模式的开发者生存之道


【IT168 专稿】 

   在微软开发者大会上看到Vista和IE 7之后,我已经表示它们的保护模式不仅仅阻挡了间谍软件,也让合法的IE插件变得非常困难。当我试用了Vista beta 2之后,我体验到了这种困难——我的产品之一是一个IE工具栏,保护模式破坏了它的许多主要功能,因为这个工具栏需要与IE之外的另一个进程进行通信。经过多次尝试,我最终让这些功能又可以正常使用了。关于如何在这种安全模式下对自己的应用程序做出必要的修改,我根据自己的经历总结出一些经验,希望和有这方面需求的朋友分享。

   这篇文章假定你已经熟悉C++、GUI和COM编程。示例代码是使用Visual Studio 2005、WTL 7.5和Windows SDK建立的。如果你想更多的了解WTL,可以查看我的关于WTL的系列文章(http://www.codeproject.com/wtl/wtl4mfc1.asp)。WTL只用于图形化界面;本文介绍的概念适用于所有应用程序,没有依赖于任何类库。

一.介绍保护模式

   IE浏览器的保护模式是Vista中的一个新功能,是类似用户帐号控制(UAC)的一种安全功能。在保护模式下,通过限制运行在IE进程下的代码不能修改系统部分文件,从而来保护计算机的安全。这样,即使一个恶意网页利用了IE或IE插件中的一个代码注入漏洞,注入的代码也不能够对系统造成破坏。

   在我们深入了解保护模式对IE插件开发者意味着什么之前,我们需要先快速了解一下相关的安全功能。

1.完整性级别和UIPI

   Vista引入了一种叫做强制完整性级别的安全对象新属性。分为四个级别:

  ·系统:被操作系统组件使用,不应被应用程序所使用;
  ·高:在提升的完全管理权限下运行的进程;
  ·中:正常方式启动的进程;
  ·低:被IE和Windows Mail使用来提供保护模式。

  Windows中关于进程的信息包含它是使用哪一个完整性级别启动的。一旦该进程启动后这个级别永远不会发生改变,它只能在进程被创建的时候被设定。一个进程的完整性级别具有以下三个主要的作用:

  (1)这个进程所创建的任何安全对象具有与它相同的完整性级别。
  (2)这个进程不能够存取完整性级别比它高的资源。
  (3)这个进程不能发送Windows消息到具有更高完整性级别的进程。

   这不是一个完整的列表,但是以上所列的三个是对插件具有最大影响的。前两条防止一个低完整性的进程篡改IPC资源,例如共享内存,包含敏感数据或一个应用程序正常运行所需要的数据。最后一条被称为用户界面特权隔离(UIPI),被设计来防止类似粉碎窗口攻击(shatter attack)之类的攻击,在粉碎窗口攻击中,攻击者通过发送给进程一个它不希望收到的消息,从而导致它运行非信任的代码。
0
相关文章