令人吃惊的是,在数周前发布的最新Vista RC2中,我注意到微软实现的正是我并不推荐的这个方案,就我看来,这种方法只是暂时解决问题。
“你跟AMD讨论过Blue Pill吗?你认为应该怎样保护系统不受此类攻击?”
AMD从来没有跟我讨论过Blue Pill,并且,就我所知,他们也没有跟COSEINC的任何人联系过。
想要防御此类攻击,有个取消虚拟化功能的很显然的办法,那就是在BIOS中进行相关设置。然而,不幸的是,我们现有的硬件中没有此类选项。但我听说基于Intel芯片的平台上存在这样的可能。
另一种方法,就如我上面提到的,就是在操作系统中植入系统管理程序。此种管理程序能够阻止人们安装另一个管理程序(比如Blue Pill)。
但是,这种方法实现起来还有很多问题。比如,有没有可能第三方应用程序(比如VMWare)为了自己的目的而利用硬件虚拟化技术?如果可能,那么如何把想要安装自己的系统管理程序的合法程序与恶意程序(比如Blue Pill)区分开呢?如果不可能,那是不是就意味着所有未来基于硬件的VMM,比如VMWare,将不得不和他们自己定制的操作系统一起销售,并且我们也不能再把它们当作一种应用程序来使用了呢?
还有,我们在保护此类操作系统提供的系统管理程序时也应当十分小心,没有一些相关技术(像TPM或者DMA防护(AMD上的DEV))的人是不可能胜任的。
因此,对我来说实现一个相对简单的防护措施,我们还需要至少2到3年。
“你测试过目前的那些rootkit扫描/安全工具吗?你觉得哪种比较可靠?”
我前面说过,我觉得现存的防毒措施都不是很好,尤其是那些针对Windows平台的。它们全都致力于找出“坏的”而不是确认系统处于“好”的状态。
因此,我们看到防毒产品使用了相当高明的技术来解决各种各样.exe-包以及区分被调查的.exe文件是“好的”还是“坏的”。
类似的,大多数rootkit扫描程序都实现了各种各样的检测隐藏对象(比如隐藏的进程)的功能,而忘了还有不必创建进程的强大偷窃恶意软件。此类软件就没有必要隐藏什么东西。大约一年前,我就示范过一种“stealth-by-design”的恶意软件。
我认为比较好的措施应该是对所有系统组件进行全面检查,从文件系统(数字证书文件),到验证所有内存中代码段没有被修改(我在我的SVV扫描程序中部分实现了这些功能),并且检查内核数据区的所有可能“动态联系区”。
后者不可能100%实现,因为没有人知道所有的动态联系区,但是我们至少可以开始列举它们。我相信联系区的数量对所有现存系统来说都是有限的。
换句话说,只有有限种方法来编写任何特殊的II类恶意软件(比如,按键记录程序)。
II类恶意软件被认为是不修改内存中的任何代码段的一种恶意软件,只修改数据段(因此很难被发现)。不用说,II类恶意软件确实存在。
不幸的是,即使我们开发了整体扫描程序,使它100%完善,并且我们也识别出了II类恶意软件使用的所有的动态联系区,还是有我们无法检测到的恶意软件。
我把这些称为III类恶意软件,Blue Pill就是一个例子。Blue Pill甚至不会修改内核或者其他内存的任一字节。因此无论我们如何彻底的检查,我们也不会监测到它。我们只能指望检测到些副作用,比如网络通信或者通过适时地分析来发现一个系统管理程序。
使用强大的隐藏通道或者其他技巧,都能有效地防止它们被以上方法发现。但是即使不能监测到III类恶意软件,我仍然认为应该有个好点的整体扫描程序,而不是使用传统的只是试图找到已知的“坏的东西”的反病毒产品。
“我们为什么要警惕偷窃软件?你认为这是一个大趋势吗?”
偷窃软件是暗中搅乱操作系统,使之不能再被信任的一种方法。而关键问题在于,理想情况下(以恶意软件开发者的角度),没有人能够知道系统到底有没有被入侵。
就我个人来说,我认为讨论它是否成为大趋势是没有意义的。这不是关于明年攻击者们使用II类或III类的“Stealth by Design”恶意软件(不创建额外的系统对象)发起有针对性地攻击,会危害100个还是100000各公司的问题。而应该是关于我们是否意识到这些危害的问题。既然已经知道有可能开发出此类恶意软件,我们就应该做点什么来对付它。
标签: