栏目导航
联系我们
|
主动防御 计算机病毒与Rootkits点击数:2923次 2013-06-29 11:33:36 来源: 新疆腾云网络信息技术有限公司 主动防御 计算机病毒与Rootkits
在计算机发展初期,有一个给人留下很深刻的印象就是DOS病毒,这些病毒以纯技术为主,甚至存在互相攻击的现象,当然病毒技术的过度也同时推进反病毒技术的发展。
回顾计算机病毒与反病毒的那些事儿 当计算机病毒这个概念所诞生的那一刹那,计算机被人冠以“电脑”的半导体物质出现了严重的问题,诸如不可控、死亡这些事情频繁发生,导致正常的运算无法进行,正常的工控逻辑杂乱无章、甚至正常的开机都存在问题,他们可以迅速的充斥计算机内部,将计算机变成一台计算机病毒的制造工厂。
主引导病毒与防毒卡 在曾经的DOS病毒时代,感染软盘、硬盘的主引导区是稀松平常的事情,其目的当然是在计算机在自举的时候获取优先的控制权,驻留代码至内存,修改相关中断向量或中断处理程序,隐藏自身内存驻留代码不被发现。 由于主引导记录在操作系统启动时担任的非常重要的角色,一旦其被修改为安装恶意代码的装载器,那么操作系统的安全是无法得到保障的,所以防毒卡的出现有效的从硬件方式保护了磁盘主引导记录不被修改。
变形病毒与虚拟机 随着病毒代码被安全厂商的不断破译与反病毒厂商的不断增加,计算机病毒为了应对反病毒厂商不断更新的特征码,所以变形引擎产生了,在计算机病毒与反病毒的不断对抗过程中变形引擎经历寄存器交换变形、等价指令变形以及在文件感染过程中的代码交换技术。 变形病毒的发现给予了反病毒厂商一个很大的难题,其一是因为病毒特征码不会固定在文件特定的偏移;其二是变形病毒不会在多个被感染的文件中存在同样的特征码;其三是病毒代码的分布与变形引擎的调用参数根据病毒感染文件的次数或当前时间的变化而变化,这三点无非给予了特征码扫描引擎致命的打击。指令虚拟机的出现使得破译这些变形病毒变得不再费力,因为这些被变形引擎插入的乱七八糟的代码在虚拟机的运行环境下已经被还原成了清晰的、有次序的、可阅读的代码,当然这些代码在虚拟机环境中是最好的病毒特征码。
海量病毒与主动防御 当计算机病毒从单纯的感染过渡到了层出不穷的木马、蠕虫、后门、间谍程序等,之前计算机病毒的定义已经发生了本质的变化,由于互联网经济产业的兴起,病毒的编写者目的已经从黑客技术的比拟一步步的陷入了经济陷阱,从而变得有目的的、有针对性的形成了一大批木马、间谍程序,这些恶意程序在同等的时间段也将会运用类似等同的技术完成它们所必须的目的,毕竟计算机病毒互相也存在技术借鉴的,而且很激烈。 根据这些就不难总结出这些形形色色的木马、蠕虫、后门、间谍程序、感染型病毒要达到其最终的目的终会使用那么一些固定的行为规则去完成,只要可以准确的判断程序的各个行为及其这些行为之间的目的关系则可以轻松的判断这个程序最终目的,如果这个目的本身就不正常且触发的行为调用关系又属于正常程序的范畴,那么可以确定的就是这是一个不正常的程序,如果要给予这个不正常程序一个名称作为性质的描述,那么根据它的目的则可以轻松的将其归类于一类病毒的定义,所以未知木马、未知蠕虫、未知后门、未知间谍、未知病毒这些代表着大类病毒的定义出现了。 让我们不能够忘记的那些蠕虫造成的互联网事件所思 在我们的记忆中,CodeRed、CodeBlue、CodeRedⅡ、NetKiller2003、Blaster、Sasser这些蠕虫酿成的互联网安全事件,几乎使得互联网就此瘫痪,然而我们不能够否认的就是蠕虫的威胁对于互联网产业是巨大的,而蠕虫背后所使用的漏洞才是真正所要面对的威胁,无论蠕虫存活在互联网还是局域网内,它就可以迅速的蔓延于网络之中,造成网络拥堵,使得业务系统瘫痪。 蠕虫的性质本就是贪婪的,它们需要在得到驻留后马上将它们迅速的传播到其他的计算机上,不错,蠕虫是为摧毁一个网络而诞生的,它们需要占据网络中每一台计算机的主控权,使得每一台计算机都具备蠕虫所具有的主动攻击性,使得它们以传播为目的所发出的数据包弥漫在整个网络中,以网状的攻击形式占据着每一台计算机相对于网络的信道,摧毁网络中正常业务系统的可运行性。这方面我们总结出了蠕虫具备的两个性质,而且它们是相辅相成的。其一就是它们需要驻留,只有这样它们才可以在每次系统启动的时候对其他的计算机进行探测和攻击进行自身传播;其二就是传播,只有这样它们才可以把探测和攻击所产生的威胁俞延愈大。 虽然蠕虫攻击对于一个网络系统的威胁是巨大的,但是我们依旧可以通过行为将他们识别出来,因为他们的主动性与传播性都是可圈可点的不正常行为,试问没有任何一款正常软件可以在随意的客户系统上做到将自身在不经过人为确认的情况下安装到其他的客户系统上吧。所以我们可以在客户系统与网络中部署监控设施,捕捉这一切自动植入的程序以及有规则发送的数据包,根据局域网保留带宽以及蠕虫攻击的频度通过一个人工智能的算式算出当前网络的威胁程度,触发一个威胁预警处理系统来通知客户系统中的监控设施阻断蠕虫连接或清除蠕虫程序。当然部分蠕虫是具备感染性的,比如活跃于全球网络六年之久依旧位居第一的Virut,它就可以在被植入客户系统中驻留至内存,而客户系统中被访问或生成的可执行文件会无一幸免的感染上该蠕虫,令人发指的是这个蠕虫具有多态性,也就是说一旦感染过程已经由网络变为本地,那么它产生的蠕虫程序会全部不相同,这就意味着它们再次发动攻击的时候会改变以前的形象存活于网络中,所以我们必须在客户系统的监控设施中有效的将感染过程阻断并且能够将其的感染行为条目列入人工智能的算式中。 利益趋势下的技术变迁 或许是上述中计算机病毒都是以技术的对抗出现的,其中将计算机病毒技术渲染到顶峰的莫过于臭名昭著的CIH,它不仅仅破坏了计算机的操作系统,而且还造成了这些计算机永远的损坏。 随着互联网在国内的普及,黑客技术的盛兴也随之而来,一些黑客已经厌倦了入侵他人的计算机带给他们的刺激,总想着在入侵之后留下些可以方便下次顺利进入的东西,这时候“后门”这个概念兴起了,当然这时候为后门提供隐藏保障的Rootkits组件还是薄弱的。后门的诞生给以了计算机黑客无尽的遐想,通过它黑客们可以随时的获取对方计算机的文件,当然被他们翻阅的文件在这些计算机拥有者面前是多么的重要,正是因为这一点,好奇的黑客们越来越想得到更多的商业机密或者个人隐私,因为这些可以给他们带来价值不菲的一批财富,所以后门这种靠黑客被动性植入的恶意程序演变为了木马这种能够使得用户们主动植入的程序,又随着互联网产业的兴起、虚拟财富的生活体现,木马的在利益的熏使下覆盖面积一发不可收,很快的占据了计算机病毒的主导地位,甚至蠕虫、感染型病毒的性质也是变得为它服务。现在如果说反病毒是一种手段,那么反木马无非是这种手段中的精华,当然未来人类对互联网的需求会越来越人性化,也给计算机木马造就了无比巨大的发挥空间,如果反木马程序的功能能够在互联网任意一款具有盈利性质的项目发布后紧随其后进行保护,那么其价值绝对是显而易见的。
Rootkits的演变 在利益的催化下,黑客们越来越希望自己种下的木马或留下的后门彻底的不能够被人发现,所有他们必须想尽一切办法隐藏掉他们犯罪的事实,Rootkits就在这种利益的催化下,成为了将来计算机终端安全最严重的问题。 我们首先回顾一下曾经的一些典型的Rootkit思路,来阐述在之后的计算机世界中Rootkits的变迁。 Hook,Rootkit的软肋 SSDT Kook的兴起给反病毒事业带来了颠覆性的改革,他们会在系统服务描述符表中修改指向实现文件遍历、系统信息查询等系统服务的入口地址,使得被隐藏的文件、进程、模块无法被常规的编程方法获取到,给计算机使用者造成不存在计算机威胁的假象,但后台却进行着监视或窃密的一系列龌龊动作。当然SSDT Hook是一种形式上的故意隐藏,只要找到原始函数的位置直接调用他们将变得一无是处,这种形式上的故意隐藏还有许多种,譬如对所需要的系统服务进行Inline Hook、IAT Hook、EAT Hook,Object Hook,当然能够出现这么多种Hook方式来实现Rootkit,是由于系统机制一步步调用有关的,也就是说系统机制的每一步调用实现都是Rootkit的切入点,当被Rootkit Hook的调用越底层,被察觉的机会也就越渺小,从另外的一个角度上也就越体现了编写者的编程水平。 虽然使用Hook方式可以以最简单的方式实现Rootkit,但它却不是无懈可击的,正因为它的存在是因为调用产生的,那么越过该调用就是发现这种Rootkit最简单的方式,如果遇到更底层Rootkit,比如Object Hook类型的Rootkits,我们还是可以采用恢复Hook来解决的,之所以将它们成为在形式上故意隐藏,是因为它们是隐藏,而不是无关或不存在。 Inject,Rootkit的精髓 注入在Rootkit技术中的应用将Rootkit为隐蔽性再一次做了一步提升,它们可以有效的将自身多携带的一部分代码以shellcode的形式植入到一个相对于给人可信的进程中,通过这个可信的程序作为傀儡进程进行Rootkit程序应有的工作。当然注入动作时多种多样的,似乎开启远程线程是最古老的方法,或许随着这种技术的应用越来越广泛,很多安全程序都对齐做了保护,虽然被注入的代码执行后与注入者不会存在这本质的联系,但这个注入的时机却被安全监控程序监视着,使得高级的Rootkit程序不得不使用更加隐秘的注入方式。 将主动注入化作为正常程序的被动执行是一种更加隐秘的注入方式,换种说法从本质上说这个可以不称作注入,而是被人误执行了。这一切的操作源自于微软操作系统中一个至今都没有修改的大众漏洞,dll黑洞,Rootkit程序就可以依据这个原理来劫持系统组件或应用程序组件,使得操作系统试图运行一个进程的时候将Rootkit程序主动的安装到这个进程中,而后Rootkit程序的dllmain函数被该进程调用后安装自身功能代码到该进程中,装载被自身劫持的dll组件后释放掉自身dll,这样就使得被安装了Rootkit的进程中也只会存在一段代码,而这段代码是找不到与谁有关的。或许我们可以考虑将进程的映像程序与其所调用的动态库程序用一种特殊的签名方式表达它们之间的关联性,在装载的时候有效的做签名检查验证被装载动态库的真伪,从而判断是否被恶意劫持,但这个方案只能够留给操作系统厂商与编译器厂商定义相关的规范去解决。 APC机制被黑客的挖掘使得微软的操作系统面对Rootkit更加的脆弱了,如果说上一段落所述的注入方式是被操作系统被动地装载程序到进程,那么利用APC机制的注入则是被操作系统被动的装载代码到线程,两者的差距可不是一般的大,要发现被这种方式注入执行的Rootkit程序势必需要枚举操作系统的所有线程入口通过特征码匹配方式进行扫描识别了。 凌驾于操作系统之上的Rootkits 在文章的开头曾经提到了一些DOS病毒的驻留方式,或许很多人会有疑问为什么要在本文中依旧提到那些老的可以要人遗忘的事情,但是那些驻留方式却是Bootkits的原型。到此我想我有必要将Bootkit做一个简要的说明: Bootkit是更高级的Rootkit,该概念最早于2005年被eEye Digital公司在他们的“BootRoot"项目中提及,该项目通过感染MBR(磁盘主引记录)的方式,实现绕过内核检查和启动隐身。可以认为,所有在开机时比Windows内核更早加载,实现内核劫持的技术,都可以称之为Bootkit。 Bootkit的发展主要的典型实例有2005年的eEye Bootroot、2007年Vbootkit、2009年Vbootkit V2、2009年Stoned Bootkit、2011年Evilcore x64,它们也遵循了Hook的机制,只不过使用方式却是在操作系统装载之前进行的,而且还是直接对硬盘中存储的MBR、VBR这些特殊区域直接进行感染的。它们的感染点依据了下面图例:
无论它们在上述的哪一个装载点被装入,它们首要的事情就是Hook
这种Rootkits的彻底切除必须使用复杂的手段,因为它们已经封锁了操作系统的任何接口对它们的影响,我们需要编写磁盘驱动程序绕过操作系统内核直接IO硬件方式读取磁盘上面的真实数据来检测Rootkits隐藏在磁盘中的代码,可能会受到多CPU、多磁盘驱动程序对磁盘IO同步的影响,我们有必要编写mini的私有操作系统来清除Bootkits,或许在不久的将来软盘这种几乎已经绝迹的存储媒介会因为Bootkits的流行而再次盛兴。 更加高级的硬件Rootkits Bios Rootkit的诞生标志着自从CIH之后恶意代码再次将矛头瞄准硬件,而它们的目的却不是破坏而是有目的的驻留。或许Bios Rootkit有着厂商的局限性不利于大面积攻击,黑客们将矛头指向了被统一规范的PCI总线。 我们知道当按下主机的电源按钮的时候CPU会在Reset信号返回成功后触发一个自举机制,通常由Bios的int19中断提供,这个机制分为两个部分,第一部分是POST,而第二部分就是被现在Bootkits大做文章的执行引导,不可否认的是这种更加高级的硬件Rootkits是在POST过程中驻留的,因为在POST例程中会相继调用各个hardware Rom中的自检程序,如下图所示黑客们可以通过特殊的手段在PCI Rom的flash芯片空余空间内写入Bootkit代码,并改写Entry point for INIT function所指向的代码到PCI Rom Bootkit代码入口,此刻的POST过程已经完全被Bootkit代码接管,它们转发相应的POST例程并驻留内存等待系统引导完成与修改主引导记录形式的Bootkit所相似的行为。
这种硬件级别的Bootkits已经不能够软件程序来解决了,因为它们不会处于相同的环境下执行,有效地办法就是在PCI总线上安装特定的芯片,并提升该芯片在PCI HOST配置空间的挂载点,使得其可以在第一时间内HOOK POST内存管理器PMM函数的PmmAllocate、PmmFind,获取固化程序装载到内存的地址,计算出Entry point for INIT function在内存的相对偏移进行特征码扫描并通过针对性的算法将内存中的Bootkit代码剥离掉,如果可以得到硬件厂商提供的接口甚至可以修复掉PCI Rom中被植入的Bootkits。 安全之道在于行为防御 虽然现阶段计算机病毒造成的安全事件已经不是很乐观,但是我们依然可以通过行为防御的方式防患于未然。我们可以使用局域网安全与终端安全相结合的防病毒与反入侵相关联的产品,将恶意程序的一切威胁动作尽收眼底,这样我们不但可以安全的防御了计算机病毒或网络入侵,同时也会将计算机病毒与入侵来源记录下来,找出安全薄弱环节与责任人。 对于层出不穷的未知蠕虫、病毒攻击、APT攻击,我们必须使用具有如下功能的安全系统进行防御: 1. 基于程序行为分析的反病毒系统可以有效的将计算机病毒在运行期间有效的识别出计算机病毒的性质与危害,这些计算机病毒性质包含但不限于木马、后门、局域网蠕虫、邮件蠕虫、间谍软件、感染型病毒、Rootkits/Bootkits、并可以对其作出妥善处理。 2. 恶意代码追踪系统可以根据计算机病毒的传输媒介找出造成网络安全的薄弱环节,当然这些传输媒介必须包含但不限于邮件客户端、WEB邮件、恶意网址、共享服务、可移动磁盘、光盘、漏洞利用。 3. 入侵行为追踪侦测系统可以有效地识别端口扫描、会话劫持、中间人攻击、口令破解、种植后门等黑客入侵手段并进行跳板跟踪,明确入侵目标与入侵者并具备阻断入侵功能。 4. 特种木马识别系统可以监控计算机运行的一切程序,并且当它们触发木马或后门行为时,可以阻断其动作并且获取目标连接地址。 5. Rootkits侦测系统可以通过直接硬件IO方式与文件系统解析技术相结合发现磁盘、固化程序中的恶意代码,利用底层的清除技术给予清除或发出警报。 6. 漏洞主动防御系统可以在溢出攻击发生时监控入侵者植入shellcode的行为,并对用户添加、开启telnet服务、开启终端服务、下载恶意程序、远程Shell操作等行为可以有效地识别并及时阻断。 当然在上述的行为防御之上我们必须要建立一个严格的管理系统,防止因为人为疏忽所造成的安全事件的发生,定期对主机或设备进行安全检查,譬如对交换机、路由器等网络设备的固化程序进行检查就是很有必要的一件事情,因为它们也会遭到攻击植入恶意代码。
【责任编辑:】(Top) 返回页面顶端
|