恶意代码的检测与分析
-
可以根据观察到的恶意行为和特征推断样本所属的分类,也可以根据样本可能具有的行为特征,从而选择更具针对性的分析方法和工具。
-
将恶意代码按照功能来区分可以分为病毒、蠕虫、木马、后门、僵尸程序、下载器、Rootkit、恐吓软件、勒索软件等。
-
计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码。其明确目的是自我复制,主要功能是破坏软件、硬件和数据。
-
蠕虫是一种通过网络传播的恶性病毒,它具有病毒的一些共性,某种程度上可视为病毒的子类。蠕虫可以自动完成复制过程,并且不依赖于寄生的宿主文件,可独自传播。
-
木马是指那些表面上是有用的软件,实际目的却是危害计算机安全并破坏计算机的程序。
-
后门是为攻击者提供不需要授权或采用攻击者预置的授权就可访问受害者系统的程序,通常也用于远程访问并控制受害者系统。
-
僵尸程序,是一种可以为攻击者提供控制受害者系统的功能,所有僵尸程序会相互连接组成僵尸网络,并接受控制者发送的控制命令,执行相同的操作。
-
恶意代码的准确分类是困难的,不同类型恶意代码的划分标准也是模糊的,一个恶意代码可能跨越多个类别,不同的安全机构对同一个恶意代码的归类也可能不一致。
-
按照恶意代码文件是否可以直接执行来区分,可以分为可执行的代码文件、非可执行多的数据文件。
-
对于直接可执行的恶意代码,可以通过静态扫描、虚拟执行等方式进行分析;对于有条件可执行的恶意代码,需要首先识别其代码类型,构造需要的执行条件,如安装配置相应的运行环境,再进行动态分析,也可以通过各种中间语言解释器进行虚拟执行;而对于非可执行的数据文件,如文本文件、图片、音视频等多媒体文件等,可以根据文件类型和结构静态分析文件是否有异常,也可以根据文件类型构造相应的动态分析环境对样本文件进行分析,检测其中是否包含恶意代码。
-
也可以将恶意代码分为不依赖于软件漏洞的恶意代码和依赖软件漏洞的恶意代码。
-
在分析依赖软件漏洞的恶意代码时,需要猜测恶意代码利用的软件漏洞,并构造相应的软件漏洞利用环境,因此常常需要进行多次的迭代分析。
-
分析恶意代码的目的是为了分析恶意代码的攻击过程、功能作用,评估恶意代码造成的破坏和影响,提取恶意代码检测的特征,修补恶意代码利用的漏洞,防范类似安全事件的再次发生。
-
“是不是”主要是确定一个可以代码是不是恶意代码。需要通过静态分析代码逻辑、动态观察代码行为等方式,根据可以代码是否有漏洞利用、是否包括后门等属性,对是不是恶意代码的问题作出客观判断。
-
“做什么”主要是确定恶意代码具有什么功能。从一个恶意代码的功能能够推断出该恶意代码的攻击目的,从而有效评估攻击的影响和造成的破坏,以便采取相应的恶意代码清除、受害系统恢复以及网络攻击防范措施。
-
“谁干的”主要确定恶意代码的来源以及其背后的攻击者,也就是攻击溯源问题。
-
“如何做的”主要是分析恶意代码的攻击方式及其技术原理。对于一个新型的恶意代码,弄清楚其攻击途径和攻击方式,确定其是通过电子邮件投递还是通过网页挂马感染,对于发现现有安全防御系统的弱点,完善和改进网络安全防御系统具有重要意义。
-
典型的恶意代码分析流程:用成熟工具进行快速的静态属性分析,识别已经有分析结果的样本,避免重复分析。在完成可疑样本的静态属性分析之后,可以进一步开展静态代码分析,对样本文件代码进行初步的反汇编分析,识别其中混淆代码,大致了解代码结构和执行流程。根据静态属性分析的结果和样本文件类型,结合样本文件来源等信息,为动态分析准备合适的分析环境,然后选取合适的分析方法和工具,执行恶意代码进行动态分析,观察恶意代码的行为和功能。最后,再根据静态分析和动态分析的结果,对恶意代码的攻击过程、功能特点、实现机理等关键点进行深入分析。