前一阵子Google输入法在Windows Vista的安全漏洞闹得沸沸扬扬。从CSDN,或是从我认识的微软中国同事那里,看到许多用户都有这么一个疑问?到底这是Google输入法实现的问题,还是Windows Vista系统本身的漏洞?
我们知道,在Windows系统下,应用程序都需要在相应的用户帐号(user account)下运行。比方说,如果你是以一个普通用户登录,然后执行一个应用程序,该程序的运行权限就是你的用户权限。运行于普通用户权限的应用程序是无法执行某些特殊的系统操作的,例如修改系统的重要配置信息,安装设备驱动程序等等。
按照这个道理,输入法的也应该运行于相应登录用户的权限下。但是,有一个特殊情况,在系统启动后的用户登录界面(logon screen)上,输入法就已经需要显示了。这时候,因为系统还没有任何一个用户登录,所以输入法只能运行在winlogon的帐号下,即系统帐号(system)。
如果此时输入法没有检查目前所在的机器状态(登录界面状态),就允许用户通过它启动IE或是其他什么功能,就会造成安全漏洞。Google输入法在Windows Vista的安全漏洞,就是这个原因。
这个错误微软自身的IME自己也犯过。参见安全漏洞MS00-069,
http://www.microsoft.com/technet/security/Bulletin/MS00-069.mspx
Input Method Editors (IMEs) enable character-based languages such as Chinese to be entered via a standard 101-key keyboard. When an IME is installed as part of the system setup, it is available by default as part of the logon screen. In such a case, the IME should recognize that it is running in the context of the LocalSystem and not in the context of a user, and restrict certain functions. However, the IME for Simplified Chinese does not correctly recognize the machine state, and exposes inappropriate functions as part of the logon screen. As a result, a malicious user who had access to either a physical keyboard or a terminal server session on an affected machine could gain LocalSystem privilege even without logging onto the machine.
说道这里,是不是说操作系统就完全没有责任了吗?在目前的Windows登录体系结构下,每个IME的实现都需要负责安全检查,已确定某些功能是否可以被用户激活。那么,是不是可以让操作系统来保证,如果机器的状态是登录状态,特定的功能(例如启动Internet explore)就应该被屏蔽?
说到这儿,争论Google输入法的安全漏洞是Google的责任,还是Microsoft的责任,没有太大的意义。安全是一个整体特性,应用程序和操作系统都必须在设计和实现中加以考虑。
操作系统的发展,会提供更多更好的安全支持。例如,对于缓存溢出这种安全漏洞而言,Windows先是实现software DEP功能,或者如果有硬件支持,可以使用hardware DEP的话,就会在很大程度上降低应用程序中的缓存溢出的危害。
但是,不管操作系统如何发展,仍然需要其上运行的应用程序加以配合,才能确保一个端对端(end-to-end)的安全方案。这就是为什么要把安全开发周期(SDL)在业界推广的原因。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1611528