偷窃软件研究者Joanna Rutkowska讲述她感兴趣的一些计算机安全问题,比如rootkits的威胁,以及为什么我们没有做好应对虚拟机技术的准备。
今年早些时候,Joanna Rutkowska在黑帽子简报上引起了一阵骚动,她示范了用rootkit感染Windows Vista的方法,并且引入了Blue Pill这个新概念。Blue Pill使用AMD的SVM/Pacifica 虚拟技术来创建“百分之百检测不到的恶意软件”。
在采访,Rutkowska谈了她感兴趣的计算机安全问题,偷窃软件威胁的现状,硬件虚拟化所带来的风险以及为什么防毒软件业显露不足。
“为了方便那些不知道你的读者了解你,你可以做个自我介绍吗?”
我是一名专致于盗窃技术以及系统入侵检测的安全研究者,研究的内容包括内核 rootkits,偷窃软件以及隐秘的网络通信。我目前供职于一家总部在新加坡的信息安全公司COSEING,居住在波兰华沙。
“你第一次听说rootkits是什么时候?”
我一开始关注的是漏洞的发展,之后开始考虑我们得到“壳”后该做些什么。当然我不是第一个想到这个的,所以我看到了很多基于Linux的rootkits,比如Knark或者Adore。我想那是在90年代末。之后,我开始考虑怎样能大致检测出那种恶意软件。
“做一个攻击性的rootkits有什么价值?这不是方便那些坏家伙们利用它吗?”
把当前市场防毒软件,尤其是防rootkit方案还远远不能防止或者发现系统被攻击这样的事实告诉人们是很重要的。换句话说,这是为了促使人们研发更好的防御措施。
我不相信谈论新的攻击技术就是帮助那些坏人。毕竟,如果地球上只有一个人或者一个组织发现某个特殊攻击的话,那就太奇怪了。我不觉得我是唯一一个发现这种技术的人。
“你如何防止泄漏?你发布了漏洞的细节或者攻击代码了吗?为什么发或者为什么不发?”
目前由于我是COMSEING的全职员工,我遵守公司的保密政策。总的来说,COSEING主要对能用于客户保护服务的研究感兴趣。当然我们也想对整个信息安全界的发展有一定影响。因此我们会通过在各种安全会议中发布我们的成果,以便跟社会各界共享我们的一些研究成果。
根据行规,我们不发布漏洞以及恶意代码,当然,除了我们确实觉得非常有必要让卖主修正特殊问题的那种情况。
例如,我们认为公布Blue Pill源代码没有什么好处,因为这对开发反Blue Pill方案没有任何帮助(跟一些人想得不一样)。
“最近你对基于虚拟机的rootkits很感兴趣。这是一个合理的攻击向量吗?为什么?”
最近Intel和AMD引进的硬件虚拟化技术非常强大。我个人认为,在主要的操作系统卖主能重新设计他们的系统,并阻止对它的滥用之前引进该技术还为时过早。
为了说明该虚拟机技术将会被怎样滥用,我开发了Blue Pill这个小程序——它创建一个硬件虚拟机然后把正在运行的本地操作系统(启动Blue Pill的这个系统)转移到虚拟机中,这样它自己就成了所谓的管理程序。整个过程一眨眼就会完成(耗时少于1毫秒)而本地操作系统甚至根本没有意识到它已经被转移到虚拟机中了。
只有本地的操作系统意识到虚拟机技术的潜在威胁,并且拥有自己的系统管理程序,才能阻止Blue Pill以及其他此类恶意软件的危害。实现这样的系统管理程序并不费事,人们期望接下来出现的系统会实现它,但是我想我们还需要2,3年才可以看到此类技术。
“我曾经看到一位rootkit专家(Greg Hoglund)说虚拟机技术只不过是实验玩具并不是实际威胁。他说的不对吧?”
我想Greg指的是基于软件虚拟化的rootkits,例如SubVirt,它是微软研究院和密歇根大学联合开发的。
这跟基于硬件虚拟化的rootkits是完全不同的,比如Blue Pill或者Matasano安全公司的Dino Dai开发的Vitriol。
坦白地说,我觉得基于Blue Pill的软件没有什么理由不被用于发起真实的攻击。当然我认为此类恶意软件不会被用于蠕虫病毒,而会是用于更精明的、有针对性的攻击中。更进一步的,我认为我们很难检测到它(前提是它实现了使用有强隐蔽性的渠道)。我敢打赌很多安全“专家”会断言说这样的恶意软件“根本不在现实中存在”。然而事实上,它们将被悄悄地大量使用。
“微软对你的针对Vista的攻击作何反应?Redmond有人与你联系吗?在公开之前,你跟他们谈过吗?”
我们决定首次公开攻击的细节是在七月底新加坡的SyScan会议上(由COSEINC组织的)。在那之前,我们认为没有联系软件卖主(不是我们客户的那些)的必要,因为问题是针对Beta 版的软件,并且实现攻击本身也需要攻击者取得管理权限。
在针对Vista的攻击的陈述中,我讨论了3种可能的解决方案。我也指出其中的一个方案——阻止用户模式应用程序访问原始硬盘扇区——实际上不是个好举措,而且我解释了我的理由。只是为了完整性的需要,我才把它作为一项可能的解决方案列举出来。
令人吃惊的是,在数周前发布的最新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各公司的问题。而应该是关于我们是否意识到这些危害的问题。既然已经知道有可能开发出此类恶意软件,我们就应该做点什么来对付它。