网络安全与保密(第二版)课件:恶意代码安全_第1页
网络安全与保密(第二版)课件:恶意代码安全_第2页
网络安全与保密(第二版)课件:恶意代码安全_第3页
网络安全与保密(第二版)课件:恶意代码安全_第4页
网络安全与保密(第二版)课件:恶意代码安全_第5页
已阅读5页,还剩128页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

恶意代码安全13.1恶意代码13.2恶意代码的命名规则13.3恶意代码工作机理13.4恶意代码分析技术13.5动态分析参考文献思考题

13.1恶意代码

代码是指计算机用以执行完成特定功能的程序指令代码。任何事物都有正反两面,人类发明的所有工具既可造福也可作孽,这完全取决于使用工具的人。计算机程序也不例外,软件工程师在编写了大量的有用软件(操作系统、应用系统和数据库系统等)的同时,也出现了扰乱社会和他人的计算机程序,这些代码统称为恶意代码(MaliciousCodes)。

恶意代码或恶意软件(Malware)是指未经用户授权便干扰或破坏计算机系统/网络的程序或代码。由此定义,恶意代码有两个显著的特点:非授权性和破坏性。

恶意代码种类很多,主要有计算机病毒、网络蠕虫、特洛伊木马、后门、DDoS程序、僵尸程序、Rootkit、黑客攻击工具、间谍软件、广告软件、垃圾邮件和弹出窗体程序等。

图13-1给出了所有恶意代码的分类情况。这可以分成两类:需要宿主的程序和可以独立运行的程序。前者实际上是程序片段,它们不能脱离某些特定的应用程序、应用工具或系统程序而独立存在;而后者是完整的程序,操作系统可以调度和运行它们。

图13-1恶意代码分类

也可以把这些软件威胁按照能不能够自我复制来进行分类。不能够自我复制的可能是程序片段,当调用宿主程序完成特定功能时,就会激活它们。可以自我复制的程序可能是程序片段(病毒),也可能是一个独立的程序(蠕虫、细菌)。当执行它们时,将会复制出一个或多个自身的副本。以后这些副本可以在同一个系统中或其它系统中被激活。

值得注意的是,随着恶意代码编写技术的提升,各种代码之间都在取长补短,技术的融合日益深入,恶意代码之间的分界线愈益模糊。所以有些恶意代码可能包含其它的恶意代码。例如逻辑炸弹或特洛伊木马可能是病毒或者蠕虫的一部分。

1.后门(Backdoor/Trapdoor,陷阱门)

后门是进入程序的一个秘密入口,知道这个后门的人就可以通过它绕过访问控制的一般安全检查,而直接获得访问权限。很多年来,程序员为了调试和测试程序一直合法地使用后门。当这些后门被用来获得非授权访问时,后门就变成了一种安全威胁。RootKit就是一种通过替代或者修改被系统管理员或普通用户执行的程序进入系统,从而实现隐藏和创建后门的程序。

2.逻辑炸弹(Logicbomb)

合法程序中的代码,当符合某种条件的时候就会“爆炸”。用来触发逻辑炸弹的条件可以是某些文件的出现或缺失、某个日期或星期几、某一特定用户运行该应用程序等。

3.特洛伊木马程序(Trojanhorse)

特洛伊木马程序是一个有用的(或表面开起来很有用的)程序或命令过程,其中包含了秘密代码。当调用的时候,这些秘密代码将执行一些不必要的或有害的操作。

4.病毒(Virus)

计算机病毒是指编制、或者在计算机程序中插入的,破坏数据、影响计算机使用,并能自我复制的一组计算机指令或者程序代码。病毒是能够通过修改其它程序而“感染”它们的一种程序;修改以后的程序里面包含了病毒程序的一个副本,这样它们就能够继续感染其它程序,实现自我传播。

5.蠕虫(Worm)

网络蠕虫通过网络连接从一个系统向另一个系统传播。一旦在一个系统中激活,网络蠕虫就能够像计算机病毒或细菌一样活动。它也能植入特洛伊木马程序或执行一些破坏性动作。

在复制自身的时候,网络蠕虫会使用一些网络工具。这包括:

(1)电子邮件功能。蠕虫会把自身的副本邮寄到其它系统中去。

(2)远程执行能力。蠕虫能够运行其它系统中的副本。

(3)远程登录能力。蠕虫能够像用户一样登录到远程系统中,然后使用系统命令从一个系统向另一个系统复制自身。

这样蠕虫程序的一个新的副本就在远程系统中运行了。

网络蠕虫和计算机病毒有很多相似之处,包括休眠期、传播期、触发期和执行期。

6.细菌(Bacteria)

细菌是那些不会直接损坏文件的程序。它们的唯一目的就是复制自己。细菌以指数的形式增长,最终会占用全部的处理器、内存或磁盘空间,从而使用户无法访问这些资源。

13.2恶意代码的命名规则

恶意代码的一般命名格式为:

<恶意代码前缀>.<恶意代码名称>.<恶意代码后缀>

前缀表示了该病毒发作的操作平台或者病毒的类型,常见的前缀有:Trojan(木马程序)、Worm(网络蠕虫)、Macro、PE、Win32、Win95、VBS、BackDoor等。如果没有前缀,一般表示DOS操作系统下的病毒。

名称是指一个恶意代码的家族特征,是用来区别和标识恶意代码家族的。如CIH、Sasser(振荡波蠕虫)。

后缀是指一个恶意代码的变种特征,一般都采用英文中的26个字母来表示,如Worm.Sasser.B就是指振荡波蠕虫病毒的变种B,也可以采用数字与字母混合表示变种标识。

恶意代码的前缀对我们快速的判断该恶意代码属于哪种类型有非常大的帮助的。通过判断其类型,就可以对这个恶意代码有个大概的评估。下面附带一些常见的恶意代码前缀的解释:

1.系统恶意代码

系统病毒的前缀为:Win32、PE、Win95、W32、W95等。这些病毒的共有特性是可以感染Windows系统的 *.exe和 *.dl文件,并通过这些文件进行传播。

2.蠕虫

蠕虫的前缀是:Worm。蠕虫的公有特性是通过网络或者系统漏洞进行传播,很大部分的蠕虫都有向外发送带毒邮件,阻塞网络的特性。比如冲击波(阻塞网络),小邮差(发带毒邮件)等。

3.木马

木马其前缀是:Trojan,黑客病毒前缀名一般为Hack。木马的公有特性是通过网络或者系统漏洞进入用户的系统并隐藏,然后向外界泄露用户的信息;而黑客病毒则有一个可视的界面,能对用户的电脑进行远程控制。木马、黑客病毒往往是成对出现的,即木马病毒负责侵入用户的电脑,而黑客病毒则会通过该木马病毒来进行控制。现在这两种类型都越来越趋向于整合了。一般的木马如QQ消息尾巴木马Trojan.QQ3344,还有大家可能遇见比较多的针对网络游戏的木马病毒如Trojan.LMir.PSW.60。这里补充一点,名中有PSW或者什么PWD之类的一般都表示这个代码有盗取密码的功能。

4.脚本病毒

脚本病毒的前缀是:Script。脚本病毒的公有特性是使用脚本语言编写,通过网页进行的传播的病毒,如红色代码(Script.Redlof)。脚本病毒还有如下前缀:VBS、JS(表示编写的脚本语言),如欢乐时光(VBS.Happytime)、十四日(Js.Fortnight.c.s)等。

5.宏病毒

其实宏病毒是也是脚本病毒的一种,由于它的特殊性,因此在这里单独算成一类。宏病毒的前缀是:Macro,第二前缀是:Word、Word97、Excel、Excel97(也许还有别的)其中之一。该类病毒的公有特性是能感染OFFICE系列文档,然后通过OFFICE通用模板进行传播,如:著名的美丽莎(Macro.Melissa)。

6.后门

后门病毒的前缀是:Backdoor。该类病毒的公有特性是通过网络传播,给系统开后门,给用户电脑带来安全隐患。如IRC后门Backdoor.IRCBot。

7.病毒种植程序病毒

这类病毒的公有特性是运行时会从体内释放出一个或几个新的病毒到系统目录下,由释放出来的新病毒产生破坏。如:冰河播种者(Dropper.BingHe2.2C)、MSN射手(Dropper.Worm.Smibag)等。

8.破坏性程序病毒

破坏性程序病毒的前缀是:Harm。这类病毒的公有特性是本身具有好看的图标来诱惑用户点击,当用户点击这类病毒时,病毒便会直接对用户计算机产生破坏。如:格式化C盘(Harm.formatC.f)、杀手命令(Harm.Command.Killer)等。

9.玩笑病毒

玩笑病毒的前缀是:Joke,也称恶作剧病毒。这类病毒的公有特性是本身具有好看的图标来诱惑用户点击,当用户点击这类病毒时,病毒会做出各种破坏来吓唬用户,其实病毒并没有对用户电脑进行任何破坏。如:女鬼(Joke.Girlghost)病毒。

10.捆绑机病毒

捆绑机病毒的前缀是:Binder。这类病毒的公有特性是病毒作者会使用特定的捆绑程序将病毒与一些应用程序如QQ、IE捆绑起来,表面上看是一个正常的文件,当用户运行这些捆绑病毒时,会表面上运行这些应用程序,然后隐藏运行捆绑在一起的病毒,从而给用户造成危害。如:捆绑QQ(Binder.QQPass.QQBin)、系统杀手(Binder.killsys)等。

以上为比较常见的恶意代码前缀,有时候我们还会看到一些其它的,但比较少见,这里简单提一下。

DoS:会针对某台主机或者服务器进行DoS攻击;

Exploit:会自动通过溢出对方或者自己的系统漏洞来传播自身,或者它本身就是一个用于Hacking的溢出工具;

HackTool:黑客工具,也许本身并不破坏你的计算机,但是会被别人加以利用来用你做替身去破坏别人。

13.3恶意代码工作机理

恶意代码的行为表现各异,破坏程度千差万别,但基本作用机制大体相同,其整个作用过程分为六个部分:

(1)目标定位。为了实现快速的在网络传播自己,恶意代码通常都具有一定的发现新感染对象的能力。

邮件类恶意代码可以通过搜索本地系统中的电子邮件地址列表,然后给这些邮件地址发送携带附件的邮件。更复杂的恶意代码还可以利用网络新闻传输协议或者Google搜索引擎来收集电子邮件地址。只要发现类似“mailto:字符串”这样的模式串,就认定跟随其后的必然是电子邮件地址。

具备直接入侵目标系统的恶意代码则通过随机构造IP地址,甚至可以进一步利用端口扫描技术定位攻击目标攻击。

(2)感染传播。把自己传输到新的目标系统内部并进一步控制该系统是恶意代码非常重要的组成部分。有些恶意代码以电子邮件附件的形式发送出去,有些恶意代码则是利用移动介质进行传播,还有的则是利用目标系统的漏洞实施代码注入、溢出等攻击实现自我传播。

(3)隐蔽策略。为了不让系统发现恶意代码已经侵入系统,恶意代码可能会改名、删除源文件或者修改系统的安全策略来隐藏自己。

(4)远程控制实现维持或提升现有特权。恶意代码通过通信模块实现对恶意代码的远程控制,利用该接口,攻击者可以实现僵尸网络攻击多个目标,也可以利用该接口实现代码的更新,或者攻击者能够实时掌握自己的恶意代码感染了多少台计算机及其感染路径。

(5)潜伏破坏。恶意代码侵入系统后,等待一定的条件,并具有足够的权限时,就发作并进行破坏活动。恶意代码的本质具有破坏性,其目的是造成信息丢失、泄密,破坏系统完整性等。

(6)重复(1)~(5)对新的目标实施攻击。恶意代码的攻击流程如图13-2所示。

图13-2恶意代码工作模型

一段好的恶意代码,首先,必须具有良好隐蔽性、生存性,不能轻松被杀毒软件或者用户察觉。然后,必须具有良好的攻击性即自我传播能力。

为了实现上述目标,恶意代码通常会采用各种技术,包

括:

恶意代码自我保护技术;

恶意代码入侵技术;

恶意代码隐蔽技术。

13.3.1恶意代码自我保护技术

自我保护技术涉及众多研究内容,主要包括以下几个方面:

反跟踪技术;

加密技术;

模糊变换技术;

自动生产技术;

线程保护技术。

1.反跟踪技术

恶意代码的主要目的是快速传播,同时有要隐藏行踪避免被发现。反跟踪技术可以减少被发现的可能性,加密技术是恶意代码自身保护的重要机制。恶意代码采用反跟踪技术,可以提高自身的伪装能力和防破译能力,增加检测与清除恶意代码的难度。

目前常用的反跟踪技术有两类:反静态分析技术和反动态跟踪技术。

反静态分析技术也称为反反汇编(Antidisassembly)技术,其目的是要欺骗和干扰各种反汇编工具,增加反汇编分析难度和可读性,该技术主要包括三方面内容:

(1)花指令方法:花指令是一堆无用的汇编指令,对于程序而言,花指令的有无不影响程序的运行。汇编语言是机器指令的符号化,是底层的编程语言,在汇编时,每一条汇编语句都会根据CPU特定的指令符号表将汇编指令翻译成二进制代码。花指令方法就是在指令流中插入很多“数据垃圾”干扰反汇编软件的翻译工作,从而使得它错误地确定指令的起始位置,杜绝了先把程序代码列出来再慢慢分析的做法。下列代码段中的前三条汇编指令就是花指令。

(2)隐藏API:逆向分析人员通过API可以在极短时间内获取了大量的有关被分析程序的信息,从而使他们成功定位目标程序的关键代码段。所以隐藏对API

的调用可以有效地提高程序的抗分析能力。

例如下列程序隐藏了对MessageBoxA的函数调用,使得反汇编以后的代码不会看到

ds:

MessageBoxA(x,x,x,x)

这样的提示信息:

(3)对程序代码分块加密执行,也称为自修改代码(SelfModifingCode)。为了防止程序代码通过反汇编进行静态分析,程序代码以分块的密文形式装入内存,在执行时由解密程序进行译码,某一段代码执行完毕后立即清除,保证任何时刻分析者不可能从内存中得到完整的执行代码;SMC可以极好地抵抗解密者的静态分析,而且如果解密者不知道所使用的加密算法的话,会给代码分析制造更多的麻烦。

反动态跟踪技术的目的主要针对OD等调试跟踪程序,检测内存或者进程中是否有调试软件运行,进而让这些程序失效、或者直接失去响应、或者检测自身是否运行在调试器下。反动态跟踪技术主要包括以下几方面内容:

(1)禁止跟踪中断。针对调试分析工具运行系统的单步中断和断点中断服务程序,恶意代码通过修改中断服务程序的入口地址实现其反跟踪目的。“1565”病毒采用该方法将堆栈指针指向处于中断向量表中的INT0至INT3区域,阻止调试工具对其代码进行跟踪。

(2)封锁键盘输入和屏幕显示,破坏各种跟踪调试工具运行的必需环境。

(3)检测跟踪法。检测跟踪调试时和正常执行时的运行环境、中断入口和时间的差异,根据这些差异采取一定的措施,实现其反跟踪目的。例如,通过操作系统的API函数IsDebuggerPresentFlag()

来检测调试器是否激活;检测父进程是否为调试器等,从而决定恶意代码是否继续运行。

(4)其它反跟踪技术。如指令流队列法和逆指令流法等。

2.加密技术

加密技术是恶意代码自我保护的一种手段,加密技术和反跟踪技术的配合使用,使得分析者无法正常调试和阅读恶意代码,不知道恶意代码的工作原理,也无法抽取特征串。从加密的内容上划分,加密手段分为信息加密、数据加密和程序代码加密三种。

大多数恶意代码对程序体自身加密,另有少数恶意代码对被感染的文件加密。例如,“Cascade”是第一例采用加密技术的DOS环境下的恶意代码,它有稳定的解密器,可以解密内存中加密的程序体。“Mad”和“Zombie”是“Cascade”加密技术的延伸,使恶意代码加密技术走向32位的操作系统平台。此外,“中国炸弹”(Chinesebomb)和“幽灵病毒”也是这一类恶意代码。

3.模糊变换技术

利用模糊变换技术,恶意代码每感染一个客体对象时,潜入宿主程序的代码互不相同。同一种恶意代码具有多个不同样本,几乎没有稳定代码,采用基于特征的检测工具一般不能识别它们。随着这类恶意代码的增多,不但使得病毒检测和防御软件的编写变得更加困难,而且还会增加反病毒软件的误报率。目前,模糊变换技术主要分为5种:

(1)指令替换技术。模糊变换引擎(MutationEngine)对恶意代码的二进制代码进行反汇编,解码每一条指令,计算出指令长度,并对指令进行同义变换。例如,将指令XORREG,REG变换为SUBREG,REG;寄存器REG1和寄存器REG2进行互换;JMP指令和CALL指令进行变换等。

(2)指令压缩技术。模糊变换器检测恶意代码反汇编后的全部指令,对可进行压缩的一段指令进行同义压缩。压缩技术要改变病毒体代码的长度,需要对病毒体内的跳转指令进行重定位。例如指令MOVREG,12345668/ADDREG,86654321变换为指令MOVREG,99999999;指令MOVREG,12345668/PUSHREG变换为指令PUSH12345668等。

(3)指令扩展技术。扩展技术把每一条汇编指令进行同义扩展,所有压缩技术变换的指令都可以采用扩展技术实施逆变换。扩展技术变换的空间远比压缩技术大的多,有的指令可以有几十种甚至上百种的扩展变换。扩展技术同样要改变恶意代码的长度,需要对恶意代码中跳转指令进行重定位。

(4)伪指令技术。伪指令技术主要是对恶意代码程序体中插入无效指令,例如空指令;JMP下一指令和指令PUSHREG/MOVREG,12345668/POPREG等。

(5)重编译技术。采用重编译技术的恶意代码中携带恶意代码的源码,需要自带编译器或者操作系统提供编译器进行重新编译,这种技术既实现了变形的目的,也为跨平台的恶意代码出现打下了基础。

4.自动生产技术

恶意代码自动生产技术是针对人工分析技术的。病毒机和变异工具使对计算机病毒一无所知的用户,也能组合出算法不同、功能各异的计算机病毒。多态性发生器可将普通病毒编译成复杂多变的多态性病毒。

多态变换引擎可以使程序代码本身发生变化,并保持原有功能。保加利亚的“DarkAvenger”是较为著名的一个例子,这个变换引擎每产生一个恶意代码,其程序体都会发生变化,反恶意代码软件如果采用基于特征的扫描技术,根本无法检测和清除这种恶意代码。

5.线程保护技术

在Windows操作系统中引入了线程的概念,一个进程可以同时拥有多个并发线程。三线程技术就是指一个恶意代码进程同时开启了三个线程,其中一个为主线程,负责创建辅助线程和程序主要功能的实现。创建辅助线程包括两个线程,一个驻留在主进程体内,另一个通过创建远程线程驻留到其它正在运行的进程体内。这两个线程的功能就是监视其它进程或线程的运行情况,如果出现异常立即恢复。

驻留主进程体内的线程同时观察注册表和远程进程的情况。它实时查询注册表里相关键下可执行文件的键值,确保每次开机时都会运行我们的可执行文件。而另一个功能则是监视驻留在远程进程体内辅助线程的运行情况,如果该线程被关闭,立即通过创建远程线程将被关闭的线程驻留到特定的进程内。

驻留在远程进程体内的辅助线程则监视主进程的运行情况,如果主进程被停止,它会确认程序的可执行文件是否也被删除。如果系统目录下的可执行文件不存在,则用备份文件恢复可执行文件,然后再重新启动程序,确保主进程一直能运行。

13.3.2恶意代码入侵技术

1.代码注入技术

当前操作系统中都有系统服务和网络服务,它们都在系统启动时自动加载。进程注入技术就是将这些与服务相关的可执行代码作为载体,恶意代码程序将自身嵌入到这些可执行代码之中,实现自身隐藏和启动的目的。主要的实现方法有:将你的代码放入某个DLL,然后通过Windows钩子映射该DLL到远程进程;将你的代码放入某个DLL,然后通过CreateRemoteThread和LoadLibrary技术映射该DLL到远程进程;如果不写单独的DLL,可以直接将你的代码拷贝到远程进程—通过WriteProcessMemory—并用CreateRemoteThread启动它的执行。

2.端口复用技术

端口复用技术,系指重复利用系统网络打开的端口(如25、80、135和139等常用端口)传送数据,这样既可以欺骗防火墙,又可以少开新端口。

端口复用是在保证端口默认服务正常工作的条件下复用,具有很强的欺骗性。例如,特洛伊木马“Executor”利用80端口传递控制信息和数据,实现其远程控制的目的。

3.超级管理技术

一些恶意代码还具有攻击反恶意代码软件的能力。这些恶意代码采用超级管理技术对反恶意代码软件系统进行拒绝服务攻击,使反恶意代码软件无法正常运行。

例如,“广外女生”是一个国产的特洛伊木马,它采用超级管理技术对“金山毒霸”和“天网防火墙”进行拒绝服务攻击。

4.端口反向连接技术

防火墙对于外部网络进入内部网络的数据流有严格的访问控制策略,但对于从内网到外网的数据却疏于防范。端口反向连接技术,系指令恶意代码攻击的服务端(被控制端)主动连接客户端(控制端)。

国外的“Boinet”是最先实现这项技术的木马程序,它可以通过ICO、IRC、HTTP和反向主动连接这4种方式联系客户端。国内最早实现端口反向连接技术的恶意代码是“网络神偷”。“灰鸽子”则是这项技术的集大成者,它内置FTP、域名、服务端主动连接这3种服务端在线通知功能。

5.缓冲区溢出攻击技术

缓冲区溢出漏洞攻击占远程网络攻击的80%,这种攻击可以使一个匿名的网络用户有机会获得一台主机的部分或全部的控制权。恶意代码利用系统和网络服务的安全漏洞植入并且执行攻击代码,攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而获得被攻击主机的控制权。

缓冲区溢出攻击成为恶意代码从被动式传播转为主动式传播的主要途径。例如,“红色代码”利用IISServer上IndexingService的缓冲区溢出漏洞完成攻击、传播和破坏等恶意目的。“尼姆达蠕虫”利用IIS4.0/5.0DirectoryTraversal的弱点,以及红色代码II所留下的后门,完成其传播过程。

13.3.3恶意代码隐藏技术

隐藏包括本地隐藏和通信隐藏,其中本地隐藏主要有文件隐藏、进程隐藏、网络连接隐藏、内核模块隐藏、编译器隐藏等;网络隐藏主要包括通信内容隐藏和传输通道隐藏。

1.本地隐藏

本地隐蔽是指为了防止本地系统管理人员觉察而采取的隐蔽手段。本地系统管理人员通常使用“查看进程列表”,“查看目录”,“查看内核模块”,“查看系统网络连接状态”等管理命令来检测系统是否被植入了恶意代码。

(1)文件隐蔽。最简单的方法是定制文件名,使恶意代码的文件更名为系统的合法程序文件名,或者将恶意代码文件附加到合法程序文件中。

(2)进程隐蔽。恶意代码通过附着或替换系统进程,使恶意代码以合法服务的身份运行,这样可以很好地隐蔽恶意代码。可以通过修改进程列表程序,修改命令行参数使恶意代码进程的信息无法查询。也可以借助RootKit技术实现进程隐蔽。

(3)网络连接隐蔽。恶意代码可以借用现有服务的端口来实现网络连接隐蔽,如使用80(HTTP)端口,将自己的数据包设置特殊标识,通过标识识别连接信息,未标识的WWW服务网络包仍转交给原服务程序处理。使用隐蔽通道技术进行通信时可以隐蔽恶意代码自身的网络连接。

(4)编译器隐蔽。使用该方法可以实施原始分发攻击,恶意代码的植入者是编译器开发人员。

(5)

RootKit隐蔽。Windows操作系统中的Rootkit分为两类:用户模式下的Rootkit和内核模式下的Rootkit。

2.网络隐蔽

使用加密算法对所传输的内容进行加密能够隐蔽通信内容。隐蔽通信内容虽然可以保护通信内容,但无法隐蔽通信状态,因此传输信道的隐蔽也具有重要的意义。对传输信道的隐蔽主要采用隐蔽通道(CovertChannel)技术。

美国国防部可信操作系统评测标准对隐蔽通道进行了如下定义:隐蔽通道是允许进程以违反系统安全策略的方式传递信息的信道。

隐蔽通道有两种类型:存储隐蔽通道和时间隐蔽通道。存储隐蔽通道是一个进程能够直接或间接访问某存储空间,而该存储空间又能被另一个进程所访问,这两个进程之间所形成的通道称之为存储隐蔽通道。时间隐蔽通道是一个进程对系统性能产生的影响可以被另外一个进程观察到,并且可利用一个时间基准进行测量,这种信息传递通道称为时间隐蔽通道。

例如,进程号隐蔽通道可看作是存储隐蔽通道,发送进程是否占用了某进程号,接收进程可间接观察到。CPU使用的隐蔽通道可以看作是一个时间隐蔽通道。因为发送进程H对CPU的使用情况可以被进程L观察到,且可以利用时钟每隔一定的时间片进行测量。

13.3.4恶意代码防范

目前,恶意代码防范方法主要分为两方面:

基于主机的恶意代码防范方法

基于主机的恶意代码防范方法主要包括:基于特征的扫描技术、校验和、沙箱技术、安全操作系统对恶意代码的防范,等等。

基于网络的恶意代码防范方法。

1.基于特征的扫描技术

基于主机的恶意代码防范方法是目前检测恶意代码最常用的技术,主要源于模式匹配的思想。扫描程序工作之前,必须先建立恶意代码的特征文件,根据特征文件中的特征串,在扫描文件中进行匹配查找。用户通过更新特征文件更新扫描软件,查找最新的恶意代码版本。这种技术广泛地应用于目前的反病毒引擎中。

一般的计算机病毒本身存在其特有的一段或一些代码。这是因为病毒要表现和破坏,实现的代码是各病毒程序所不同的,有些要在屏幕显示一行信息,有些要完成复制、隐蔽以及争夺系统控制的动作,这些都需要特殊的代码。特征码检测法是检测已知病毒的最简单、开销最小的方法。它检测准确快速、可识别病毒的名称、误报警率低,并依据检测结果可做解毒处理。选定好的特征代码是病毒扫描程序的精华所在。

首先,在抽取病毒的特征代码时要注意它的特殊性,选出最具代表特性的,足以将该病毒区别于其它病毒和该病毒的其它变种的代码串。

其次,在不同的环境中,同一种病毒也有可能表现出不同的特征代码串。

再次,抽取的代码要有适当的长度,既要维持特征代码的唯一性,又要尽量使特征代码短一些,不至于有太大的空间与时间的开销。

一般情况下,代码串是由若干连续字节组成的串,串长度可变,串中可包含一个或者多个“模糊”字节。扫描软件遇到这种串时,只要除“模糊”字节之外的字串都能完好匹配,则也能判别出病毒。例如给定特征串:“E97C0010?37CB”,则“E97C00102737CB”和“E97C00109C37CB”都能被识别出来,又例如:“E97C?437CB”可以匹配“E97C0037CB”,“E97C001137CB”和“E97C00112237CB”。但不匹配“E97C001122334437CB”,因为7C和37之间的子串已超过4个字节。

一般这种检测软件由两部分组成:一部分是病毒特征代码库,含有经过特别选定的各种计算机病毒的代码串;另一部分是利用该代码库进行检测的扫描程序。检测程序打开被检测文件,在文件中搜索,比较文件中是否含有病毒数据库中的病毒特征代码。如果发现病毒特征代码,只要特征代码与病毒一一对应,便可以断定,被查文件中患有何种病毒,并提出警告。这种方法有时也称作扫描法或搜索法。

在病毒样本中抽取病毒特征代码可以说是一种分析型的白箱方法,主要缺陷有:

(1)对从未见过的新病毒,自然无法知道其特征代码,因而无法检测出新病毒;

(2)这种检测还是一种静态的检测,不能检查多态形病毒,不容易判定病毒运行后会产生怎样的特征信息,特别是有些病毒经过反复变换和加密等一系列反跟踪技术,为静态分析增加了难度;

(3)不能对付隐蔽性病毒。隐蔽性病毒能先于检测工具运行,将被查文件中的病毒代码剥去,使检测工具只能看到一个虚假的正常文件,被隐蔽性病毒所蒙骗。

(4)随着病毒种类的增多,逐一检查和搜索已知病毒的特征代码,费用开销大、在网络上运行效率低,影响此类工具的实时检测。

2.校验和

校验和是一种保护信息资源完整性的控制技术,例如Hash值和循环冗余码等。只要文件内部有一个比特发生了变化,校验和值就会改变。未被恶意代码感染的系统首先会生成检测数据,然后周期性地使用校验和法检测文件的改变情况。运用校验和法检查恶意代码有3种方法:

(1)在恶意代码检测软件中设置校验和法。对检测的对象文件计算其正常状态的校验和并将其写入被查文件中或检测工具中,而后进行比较。

(2)在应用程序中嵌入校验和法。将文件正常状态的校验和写入文件本身中,每当应用程序启动时,比较现行校验和与原始校验和,实现应用程序的自我检测功能。

(3)将校验和程序常驻内存。每当应用程序开始运行时,自动比较检查应用程序内部或别的文件中预留保存的校验和。

采用被监视文件的校验和来检测病毒,并不是最好的方法。这是因为:

(1)它不能识别病毒类,不能识别病毒名称。

(2)病毒感染并非文件内容改变的唯一原因,且文件内容的改变有可能是正常程序所需要的,即对文件内容的变化太敏感,不能区分正常程序引起的变动,而频繁报警。如已有软件版本更新、变更口令、修改运行参数,校验和法都会产生报警。

(3)使用校验和的方法对隐蔽性病毒也是无效的。因为,隐蔽性病毒进驻内存后,会自动剥去染毒程序中的病毒代码,使校验和法无效。

3.沙箱技术

沙箱技术指根据系统中每一个可执行程序的访问资源,以及系统赋予的权限建立应用程序的“沙箱”,限制恶意代码的运行。

沙箱方案采用了囚笼思想,也就是在真实操作系统中的一种虚拟子系统。一方面,通过让恶意代码在虚拟机中运行,来充分暴露其真实面目。另一方面,由于虚拟机是一个受限环境,恶意代码在其中的一切动作和修改,不会影响真实操作系统。因此,沙箱技术在恶意代码分析和系统安全中的应用日益广泛。

4.安全操作系统对恶意代码的防范

恶意代码成功入侵的重要一环是获得系统的控制权,使操作系统为它分配系统资源。无论哪种恶意代码,无论要达到何种恶意目的,都必须具有相应的权限。没有足够的权限,恶意代码不可能实现其预定的恶意目标,或者仅能够实现其部分恶意目标。

访问控制是操作系统内置的保护机制,类似强制访问控制策略可以减缓病毒的感染速度,但无法避免感染的发生。

5.类属解密

类属解密技术可以有效地检测多态病毒(Polymorphicvirus)。多态形病毒每次在感染一个新的程序之前都会对自身进行变异,以此达到隐藏自己的目的。

图13-3比较了是否采用变异技术的病毒结构。

因此,被感染了多态形病毒的可执行文件通常由以下几个部分组成:变异引擎、病毒体、原可执行文件。变异引擎产生各种各样的变异算法所对应的机器代码,这些变异代码完成对原病毒体代码指令的加密。

图13-3采用了字母+2替换(例如a

c,b

d等),加密后的病毒代码如7,8,9行所示。相应的解密代码在第6行。第1行是病毒的入口点(EentryPoint)指令。第2,3,4,5行是原可执行文件代码。

图13-3非变异和变异病毒

从多态形病毒的工作原理我们可以看出,虽然每次病毒在感染其它新的程序之前,都会产生一种新的加密算法和相应的解密算法,但是其病毒体始终都只有一种。所以类属解密技术就是给这种病毒提供一个虚拟的运行环境,让病毒自身的解密代码解出病毒体代码,然后对病毒体代码进行签名特征检测。

一个类属解密扫描器通常包括:

(1)

CPU仿真器。被扫描的可执行文件的运行环境,通常是一个软件仿真的虚拟机。可执行文件在仿真器中逐条执行指令,然后感染其中的文件。

(2)病毒签名扫描器。扫描解密出来的病毒体代码。

(3)仿真控制模块。控制代码的执行,确保病毒代码不会对实际的底层计算机造成损害。

由于恶意代码具有相当的复杂性和行为不确定性,恶意代码的防范需要多种技术综合应用,包括恶意代码监测与预警、恶意代码传播抑制、恶意代码漏洞自动修复、恶意代码阻断等。

基于网络的恶意代码防范方法包括:恶意代码检测防御和恶意代码预警。其中常见的恶意代码检测防御包括:

(1)基于GrIDS的恶意代码检测;

(2)基于HoneyPot的检测防御;

(3)基于CCDC的检测防御;

(4)数字免疫系统。

1.基于GrIDS的恶意代码检测

著名的GrIDS主要针对大规模网络攻击和自动化入侵设计的,它收集计算机和网络活动的数据以及它们之间的连接,在预先定义的模式库的驱动下,将这些数据构建成网络活动行为来表征网络活动结构上的因果关系。

它通过建立和分析节点间的行为图(ActivityGraph),通过与预定义的行为模式图进行匹配,检测恶意代码是否存在,是当前检测分布式恶意代码入侵有效的工具。

2.基于HoneyPot的检测防御

早期HoneyPot主要用于防范网络黑客攻击。ReVirt是能够检测网络攻击或网络异常行为的HoneyPot系统。

Spitzner首次运用HoneyPot防御恶意代码攻击。HoneyPot之间可以相互共享捕获的数据信息,采用NIDS的规则生成器产生恶意代码的匹配规则,当恶意代码根据一定的扫描策略扫描存在漏洞主机的地址空间时,HoneyPots可以捕获恶意代码扫描攻击的数据,然后采用特征匹配来判断是否有恶意代码攻击。

3.基于CCDC的检测防御

由于主动式传播恶意代码具有生物病毒特征,美国安全专家提议建立CCDC(TheCyberCentersforDiseaseControl)来对抗恶意代码攻击。

防范恶意代码的CCDC体系实现以下功能:(1)鉴别恶意代码的爆发期;(2)恶意代码样本特征分析;(3)恶意代码传染对抗;(4)恶意代码新的传染途径预测;(5)前摄性恶意代码对抗工具研究;(6)对抗未来恶意代码的威胁。CCDC能够实现对大规模恶意代码入侵的预警、防御和阻断。

但CCDC也存在一些问题:(1)CCDC是一个规模庞大的防范体系,要考虑体系运转的代价;(2)由于CCDC体系的开放性,CCDC自身的安全问题不容忽视;(3)在CCDC防范体系中,攻击者能够监测恶意代码攻击的全过程,深入理解CCDC防范恶意代码的工作机制,因此可能导致突破CCDC防范体系的恶意代码出现。

4.数字免疫系统

IBM为了应付日益众多的互联网威胁,对前面的软件模拟法进行了扩展,提出了一种通用的模拟和病毒检测系统,如图13-4所示。这个系统的目标就是提供快速的响应时间,使得病毒一被引入系统就能马上被识别出来。当一个新病毒进入一个组织时,免疫系统自动地捕获、分析它、增加检测和隔离物、删除它并将有关病毒信息传递给运行着其它反病毒免疫系统的主机,使得病毒在其它地方运行之前被检测出来。

整个数字免疫系统的工作流程如下:

(1)每台计算机上的监视程序使用启发式经验规则(寻找经常使用的代码片段),同时根据系统行为、程序的可疑变化或病毒家族特征码来判断病毒是否出现。监视程序把认为已经感染的程序的副本发送到组织里的管理机上。

(2)管理机把样本加密,然后发送到中心病毒分析机器。

(3)这台主机创建一个环境,安全运行已经感染的程序,同时进行病毒分析。为了实现这个目的所采用的技术包括仿真技术,即创建一个受保护的虚拟机器环境,在其中可以执行并分析受到怀疑的程序。然后这台病毒分析机开出一个用来识别、消除该病毒的处方。

(4)这个最终处方发送回相应的管理机。

(5)这台管理机器又把该处方发送给受到感染的客户主机。

(6)同时该处方也发送给组织中的其它客户主机

图13-4数字免疫系统

13.4恶意代码分析技术

恶意代码分析的主要目的是明确恶意代码的行为特性并提取特征码,为下一步的恶意代码检测和控制清除提供依据,因此,恶意代码分析是否可以快速有效地进行,是降低恶意代码危害的关键一步。目前的分析方法可以分为静态分析和动态分析两大类。

13.4.1静态分析技术

静态分析不实际运行恶意代码,通过对恶意代码的二进制文件进行分析,从而提取其特征码。这种特征码可直接被恶意程序扫描引擎用来进行恶意代码的检测。

静态分析的优点是,它可以检查恶意代码的所有可能的执行路径,得到的特征码在检测方面具有较高的准确率。静态分析存在的问题在于工程量较大,反汇编难度较高,并且反汇编后的可用信息较少,分析周期较长。同时多态(polymorphic)、变型、加壳等手段的采用使得静态分析变得更加困难,很难提取有效的特征码。

下面我们以实际的恶意代码为例来说明静态分析的一般过程。我们先把恶意程序样本放入虚拟机环境中,其中包含分析过程需要的各种工具。静态分析主要完成文件格式分析,是否进行加壳处理?样本是何种语言编写?以及是否有其它附加的数据等。

13.4.2文件类型分析

文件分析是恶意程序静态分析的第一步,通过相关工具显示被分析恶意程序文件的相关信息,例如,它是用什么语言写的,是否加壳等。常用的文件分析工具有TYP、Gtw或FileInfo。(所谓加壳就是利用特殊的算法,对EXE、DLL文件里的资源进行压缩、加密。类似WINZIP的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。恶意程序为了躲避各类杀毒软件的查杀,采用加壳手法减少被检概率。)

图13-5给出了FileInfo工具的分析结果。

图13-5FileInfo显示结果

在此例中,文件2.exe被分析出是用VC5.0编译的,Fport.exe是采用微软汇编语言编写的,procexp.exe文件类型是WinGUI,就是Windows图形用户界面程序(通常,FileInfo分析不出文件类型时就报此类型)。另外,此工具也可分析出程序GAMESE~1.EXE和FI.exe是经过软件加密处理的。

样本经过加壳的程序,需要对其进行查壳,确定程序的加壳类型,并通过脱壳工具或手段进行脱壳,分析出程序的编程语言。如果无法查出壳类型,则认为是一个未知的壳,可以结合动态脱壳进行分析。另外,通过PE文件的区段来确定是否有附加进去的数据。

下面我们对GAMESE~1.EXE恶意代码进行分析。首先用PEID工具侦查其文件格式及壳的型号,如图13-6所示。

图13-6PEID检查结果

接着进行脱壳操作,如图13-7所示。(在这里使用超级巡警的自动脱壳器,可以根据自己对工具的使用习惯进行选择自动脱壳工具或手工脱壳。)

图13-7PEID检查结果

目前,90%的恶意程序都是用运行时工具加壳处理过的。通过加壳或者用类似的包装器多层加密其代码来隐藏自己的意图。而且,加壳过得程序体积变小后可能传染性会更强,因为他们每次渗透攻击时需要通过网络传输的数据更少了。从攻击者的角度,压缩具有的另一个优势是,它也许能够削弱一些已经部署的防御措施的有效性,从而增加了成功攻击的几率。

最后侦察的结果是使用Dephi语言进行编码的,如图13-8所示。

图13-8编写语言检查

接着,我们对样本文件的属性进行查看分析。查看样本的数字签名,排除伪造签名的情况。对于持有那些大公司的数字签名,可以通过文件属性中的相关信息进行查看分析。另外查看文件的文件属性,可以对文件的是否正常、或已被修改的情况进一步的分析。例如,图13-9所示的恶意程序包含了许多该恶意代码编写人员的信息。

然后,我们通过静态反汇编工具(IDA等)对的恶意代码程序的PE文件进行反汇编。通过分析静态反汇编后的文件中所使用的字符串、API函数等信息,来判断此样本的基本功能和特点。通过查看PE文件的导入表来判断基本功能和特点等。图13-9文件属性分析

13.4.3字符串提取分析

我们对Nimda蠕虫进行字符串转储后得到的程序片断,如图13-10所示。

图13-10字符串提取分析

恶意代码中的字符串常量对迅速理解代码内部细节的某些方面极为有用。在图3-10中显示的字符串转储结果中,可以看到通过Web进行的漏洞利用以及利用网络命令(图中的netuse和tftp)传播了一个名字为Admin.dll的DLL文件。而且很明显,Admin.dll最可能被复制到c:\,d:\和e:\目录下。还可以看到嵌入在HTML文件中的JavaScript会加载一个名为readme.eml的文件,由此我们可断定readme.eml包含有编码过的恶意代码。

图13-11给出了另一个病毒文件的字符串信息。可以分析得到程序添加了用户名为new1的超级管理员,同时还扫描宿主上是否存在主流杀软(360tray.exe),对注册表的相关的映像劫持(图中第一行)等操作。图13-11字符串分析

通过静态分析调式,还可以进一步分析病毒的一些特征行为。样本中恶意程序释放后,程序执行文件为GameSetup-unpacked.exe,因此,需要对此恶意程序做壳的侦查及脱壳工作(略过)。利用IDAPro静态分析工具分析脱壳后的GameSetup-unpacked.exe样本,通过观察“Imports”窗口中的API函数,可以看到系统调过了一些网络行为的API函数,如InternetOpenUrlA、InternetOpenA、URLDownloadToFileA等函数,如图13-12所示。

图13-12病毒所调用的关键网络函数

结合反汇编代码分析,可以看出该恶意程序会关闭的杀毒软件有virusScan、nod32、SymanterAntiVirus、Duba、SystemSafetyMonitor、WrappedgiftKiller、游戏木马检测大师、超级巡警等等,如图13-13所示。

图13-13病毒所关闭的杀毒软件

13.5动态分析

静态分析技术一般无需在专用分析系统或者虚拟机上运行恶意代码。动态分析技术则主要使用黑盒测试法。动态分析需要实际运行恶意代码,一般是在受保护的虚拟环境中执行。在恶意代码执行期间分析其动态行为特性,如对注册表、文件系统、网络的访问情况。这些行为特性的分析可以有效的帮助分析人员认识和理解恶意代码的危害特性,为恶意代码的清除和检测提供有利的依据。

动态分析的不足在于每次分析,只能检测恶意代码的一条执行路径,有的恶意代码只有在特定的条件下(如指定的日期)才表现出恶意行为,称为多路径问题。另外,动态分析的结果一般不能直接用于恶意代码的检测。但是由于动态分析注重恶意代码运行过程中所表现出的行为特性,因此不受多态,加壳的影响,相对静态分析来说具有快速,直观的特点。

由于动态分析需要执行恶意代码,因此分析的是恶意代码的一条执行路径。因而动态分析对于条件触发的恶意代码,可能得到不同的分析结果。多路径问题属于动态分析方法自身的缺点,本文注重动态分析技术的研究,不对多路径进行讨论。

接下来,我们对样本的行为进行分析,分析它的本地感染行为,以及网络传播行为。本地行为分析过程需要使用文件监视工具、注册表监视工具来确定恶意代码对系统做了哪些修改。通常情况下样本会释放出病毒体,并把它拷贝到系统目录下,而且通过添加注册表到系统启动项、系统服务启动、注入系统进程中等等方式。另外通过网络抓包工具(SnifferPro、Wireshark等),分析其与哪个网站进行连接,打开哪个端口,下载哪些文件,执行哪些操作命令等等的过程。

最后,我们通过动态调试对恶意代码加载调试,进一步分析代码的操作。用动态调试器(OllyICE等工具)载入病毒后,在程序进程的各个可疑的地方下断点,根据代码来确定恶意代码的有害操作。当然最后还要形成相关的恶意代码分析报告,并对恶意代码进行命名规范,而且还需要对样本使用MD5进行完整性校验。

13.5.1注册表监视

通过注册表监视工具RegMon监视恶意程序运行时对注册表的操作行为;也可以用快照工具Regshot找出恶意程序运行后新建和修改的注册表项以及本地文件的释放行为。

在干净虚拟机中运行Regshot,点击快照A生成快照。之后在虚拟机中运行恶意程序样本,运行Regshot,点击快照B生成快照,获取恶意程序运行前后注册表的变化,如图13-14所示。

图13-14注册表信息

其中被修改的键值如图13-15所示。

图13-15注册表修改信息

从上图可以清楚地看到恶意程序对著名的映像劫持漏洞[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ImageFileExecutionOptions\ctfmon.exe]的修改。

13.5.2监控文件变动

ProcessMonitor是一个用于Windows系统的高级监视工具,可以显示实时文件系统、注册表和进程/线程活动。它结合了两个传统Sysinternals实用工具(Filemon和Regmon)的功能,并增加了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论