恶意代码的分析与检测技术的研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
恶意代码的分析与检测技术的研究
摘要:随着网络技术的飞速发展,恶意代码严重威胁着计算机及网络安全。
病毒、蠕虫等恶意代码不断变种,快速传播,信息安全受到了巨大的挑战,恶意代码分析及检测问题成为当前网络研究工作的重点。
本文在分析恶意软件相关理论基础上,探讨了恶意代码分析技术和分析工具相关问题。
关键词:恶意代码病毒分析检测
恶意代码(Malicious Code)是一种违背目标系统安全策略的程序代码,通过各种手段造成目标机器信息泄密、资源滥用、破坏系统的完整性及可用性。
随着互联网普及,恶意代码也迅速蔓延。
从2009年中国“5.19全国断网事件”到“百度被黑事件”,2010年上半年CNCERT 共接收4780次网络安全事件报告(不包括扫描和垃圾邮件类事件),与2009年上半年相比增长105%。
其中,恶意代码、漏洞和网页仿冒事件报告次数居前三位,所占比例分别为:57.57%、25.96%和15.48%。
恶意代码的快速发展、广泛传播,对计算机信息系统的保密性、可用性和完整性造成了极大的威胁。
在当前恶意代码破坏加剧紧迫情况下,探讨如何高效、准确的分析恶意代码,最大程度消除网络安全威胁,是当今安全领域研究的重点和热点。
1 恶意软件及相关概念
恶意软件、恶意代码、恶意内容通常被统称为恶意软件。
恶意代
码是指有能力破坏程序代码或数据的可用性和完整性,或者系统的保密性的程序代码(如木马、病毒、蠕虫和陷阱门等)。
恶意软件的类型很多,可以从行为上将其分成病毒、蠕虫和木马三大类。
病毒:计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据、影响计算机使用,并且能够自我复制的一组计算机指令或程序代码。
是能进行自我复制的代码,并需要人工交互传播的代码。
病毒一般不能作为独立可执行文件存在,它常在其它可执行文件运行时自行启动,通过可移动存储器,电子邮件或共享目录进行传播。
如CIH引导区病毒、宏病毒和脚本病毒等。
蠕虫:是一段能进行自我复制、可独立自动运行的恶意代码,它不需要人机交互,通过嵌入正常程序和系统中的漏洞传播到其它网络,造成最严重的破坏,难以防范和检测。
如网页蠕虫利用IFrame漏洞和MIME 漏洞进行传播,又如MORRIS蠕虫等等。
恶意移动代码:以脚本、小型应用程序和控制器的形式存在于网页上,当用户访问某个Web站点时,通过自动从服务器上下载移动代码进行传播。
后门:是一个允许攻击者绕过系统正常的安全控制,不需要有效的验证,并且可能没有日记记录便可进入系统获得系统访问权限的程序。
木马:木马全称特洛伊木马(Trojan Horse),就是将有害的恶意行为
伪装成有益无害的软件潜伏于计算机中,以收集敏感信息为主要目的。
木马是微软和熊猫实验室检测出来的最多的恶意软件的类型。
木马的工作原理如图1所示。
Rootkit:是一个可以修改现有的操作系统的软件,它可以使攻击者在计算机上实现一直保持访问状态,或者隐藏自身身份。
2 恶意代码分析方法
恶意代码分析方法主要分为静态分析和动态分析两大类,如图2所示。
静态分析不受特定运行环境的限制,在不运行病毒程序的情况下,详细分析病毒内部结构和功能,分析效率高,但具有较大的局限性。
2.1 静态分析
静态分析是指对可执行恶意代码的文件利用PE结构、编译器原理等技术进行分析,要分析过程中不需要执行恶意代码。
静态分析包括分析字符串、查看脚本、二进制分析、反汇编以及可能的反向编译等。
反编译技术和特征码分析比较常用。
反汇编是指将C语言、C++等高级语言编写的程序可执行文件反编译还原成汇编语言或其他高级语言。
利用反汇编技术将恶意病毒代码转化成高级语言后,能较为清晰地看出恶意代码的内部结构,了解其系统调用,从而提高代码分析效率。
常见的反编译工具有Giampiero Caprino提供的逆向工程编译器(REC)、JreversePro和HomeBrew Decompiler等。
特征码作为该病毒唯一标识的一小段二进制代码,可以作为查毒程序辨认病毒的依据。
特征码的描述取决于人的主观因素,对于具有反跟踪技术和变形、解码技术的病毒,获取特征码的变得极为复杂。
特征码查病毒由于误报率高,而杀病毒技术又导致了反病毒软件的技术迟滞,因此在国际上很难得到广域性支持。
2.2 动态分析
动态分析则与静态分析方法相反,是在恶意代码执行的情况下,通过工具进行内存等分析的一种信息分析方式。
动态分析法又可根据是否分析代码语义分为动态跟踪法和环境比较法。
动态跟踪法是利用Debug等程序调试工具一步一步地单步执行恶意代码,然后根据其代码特征对其进行动态跟踪分析。
常用的动态分析工具是SOFTICE或TRW2000有效地进行动态跟踪分析。
在分析时首先对恶意代码进行粗跟踪,再对关键部分进行细跟踪。
环境比较法是指让恶意代码在专门的实验机或虚拟机上运行,然后通过比较恶意代码运行前后主机的各种状态信息的变化来分析恶意代码的功能。
针对计算机病毒,软件仿真扫描技术提供了一种多态变形技术,是通过仿真CPU执行,在虚拟机下伪执行病毒程序,能让病毒在执行期间暴露其破坏性。
图2为恶意代码在多种虚拟机下仿真执行
调试分析是指分析人员利用调试器跟踪软件的运行,寻求破解的途径。
可以将之分为内核态调试器和用户态调试器两类。
常用的方法一种是利用API Hook挂钩某些系统函数。
API Hook可分为用户态
API Hook和核心态API Hook。
SoftICE、Win Dbg、WDEB386和i386KD等等都是在硬件与操作系统之间针对系统核心或驱动进行调试的。
OllyDbg等是在操作系统和用户态程序之间针对用户态程序进行调试。
3.3 恶意代码行为分析
恶意代码行为分析就是从代码的功能和行为特征上检测该代码是否具有恶意性的技术。
恶意代码在操作系统中的行为表现是和正常程序的API和参数调用序列有所区别的,可以从程序的行为特征方面来判别代码是否具有恶意性。
大多数微处理器都支持用户(User/Normal)和内核(Kernel/Privileged)两种模式。
内核模式主要执行操作系统组件和关键系统组件,一般用户模式的程序只能访问私有地址空间和执行非特权等级的指令。
恶意代码攻击行为归纳为入侵系统、维持或提升现有权限、隐蔽、潜伏和破坏等几种。
4 恶意代码检测方法
恶意代码检测技术最流行的主要有特征码扫描技术、虚拟机检测技术和完整性检测技术。
4.1 特征码扫描
特征码扫描是检测已知恶意代码的最主要方法。
在新恶意代码出现后,通过动态调试或静态反汇编,从代码中提取独一无二的程序指令
片断建立恶意代码的特征库文件。
在扫描程序工作后根据特征文件中的特征字符串,进行与待检测文件的扫描匹配。
通过更新特征文件以更新最新的恶意代码特征字符串。
(如图3)
4.2 完整性检测
完整性检测是一种针对文件感染型恶意代码的检测技术。
如果新文件未感染恶意代码,通过CRC32和MD5等算法算出文件的HASH 值,放入安全的数据库。
检测时再次计算被检测文件的HASH值,与数据库中原有的值比较判断原文件是否被修改过,可能含有恶意代码。
完整性检测技术的优点是能够有效检测恶意代码对于文件的修改。
可以在恶意代码检测软件中设置校验和法,也可以将校验和法常驻内存。
4.3 虚拟机检测
虚拟机检测主要针对使用了代码变形技术的恶意代码进行检测,目前已得到广泛应用。
多态病毒采用等价指令替换,指令重排序等技术实现样本执行体的多样性。
虚拟机技术就是让恶意代码在虚拟的环境中执行解密工作。
当恶意软件使用代码段加密(加壳)等变形技术时,如果通过普通的特征码扫描,将很难检测。
通过虚拟机检测技术将从文件入口点处逐条取指令执行,直到加密段指令执行完成,之后即可进行特征检测。
虚拟机技术最早用于反病毒虚拟机。
其原理如图4所示。
4.4 手动恶意代码检测
针对恶意代码手动检测,可以利用蜜罐等工具搜集恶意代码,以用作手工分析。
如/可以提供恶意代码可执行文件以及源代码的下载。
手工分析的工具主要有:autorun.exe、filemon、regmon、chkrootkit、diskmon、icesword、portmon、procexp等。
将手工分析的结果进行整理,可以概括出恶意代码的高频行为。
其中,恶意代码的文件行为有写入、重命名、修改、删除等。
如病毒中华吸血鬼可以写入kav32.exe,wsock32.dll、pig.vbs至windows\tasks目录下。
恶意代码开始运行后,可能有关闭其他进程、创建新进程等进程的行为,还有读取、修改注册表的行为,自动链接到指定的网址,还会使用加载dll的方式实现进程隐藏,遍历进程行为、调用卸载程序、Hook行为、窗口行为等等都是恶意代码的常见表现。
参考文献
[1] 何申,张四海,王煦法,等.网络脚本病毒的统计分析方法[J].计算机学报,2006,29(6).
[2] 安天实验室.安天实验室信息安全威胁综合报告[R].哈尔滨:安天实验室,2011.
[3] 张仁斌,李钢,侯整风.计算机病毒与反病毒技术[M].清华大学出版社,2006,6,12.
[4] 任飞,章炜,张爱华.网页木马攻防实战[M].电子工业出版社,2009(5).
[5] 杨云江.计算机网络安全实用技术[M].清华大学出版社,2007.。