一种基于虚拟硬件环境的恶意代码自动分析方法及系统
技术领域
[0001] 本发明属于网络安全技术领域,尤其涉及一种恶意代码分析的方法及系统。
背景技术
[0002] 随着社会的不断发展和进步,计算机在社会各个领域的应用越来越广泛。由于软件漏洞的广泛存在和用户安全意识的不足,恶意代码的传播速度越来越快,感染范围不断扩大,造成的破坏日益严重,传统的安全防护手段由于受分析效率限制,响应周期难以缩短,响应速度已经逐渐不能适应这种新情况。因此,提高恶意代码分析速度和分析效率显得十分必要。
[0003] 现有的恶意代码分析方法主要依赖于传统的软件分析和调试工具,主要包括静态反编译,动态跟踪调试和人工分析。
[0004] 利用静态反编译技术分析恶意代码,主要是利用静态反编译工具如IDA Pro,对恶意代码的二进制文件进行静态分析,反编译出汇编指令,通过分析指令的执行流程,检查其中包含的各种操作。这种方式的主要缺陷是,无法反编译自修改代码、动态生成代码、加壳代码,同时难以消除花指令,代码混淆等技术造成的影响,极大的影响了分析效率和有效性。
[0005] 利用动态跟踪调试技术分析恶意代码可以在一定程度上解决静态反编译无法解决的问题。借助软件和硬件提供的调试功能,SoftICE,OllyDbg等工具可以动态跟踪恶意代码的运行过程,观察恶意代码运行过程中的各种行为。动态跟踪调试通常还借助VMWare,Virtual PC等操作系统虚拟工具实现。这种方式的主要问题在于,调试器与恶意代码运行在同一个操作系统平台上,依赖于平台自身提供的调试功能,从而使得恶意代码可以检测到调试器的存在。并且,由于操作系统虚拟工具都存在明显的特征,也很容易被恶意代码检测到,恶意代码往往通过反跟踪,反调试,虚拟机检测技术,阻止对自身的调试,退出运行甚至隐藏特定行为等,造成动态跟踪分析难以有效开展。
[0006] 利用辅助工具进行人工分析,主要指通过观察恶意代码对文件系统,网络,进程线程等运行环境资源的访问操作,推断恶意代码的行为特征。由于恶意代码的行为往往依赖于外部环境,使得这种方式难以全面覆盖恶意代码可能的所有行为。同时,这种分析方法自身特性也决定了其分析能力存在跟动态跟踪类似的同一平台竞争问题,大量的人工操作也极大地限制了其分析效率。在恶意代码数量不断膨胀的今天,人工分析的缺陷更加明显。
发明内容
[0007] 本发明提供一种基于虚拟硬件环境的恶意代码自动分析方法及系统。通过在虚拟硬件环境之上构建恶意代码所需的运行环境,并通过操纵和控制虚拟CPU指令和各种虚拟硬件的访问操作,收集恶意代码各种操作信息,控制恶意代码的运行过程。由于数据采集通过虚拟硬件实现,恶意代码无法感知自身是否运行在虚拟环境中,也无法分辨自身是否被跟踪,从而实现对恶意代码完全透明的分析。
[0008] 为实现以上目的,本发明的构思是:分析人员通过用户控制模块配置分析环境和分析目标的参数,启动硬件虚拟模块,加载恶意代码运行所需的操作系统镜像,启动该操作系统,并运行待分析的恶意代码。数据采集模块根据分析目标,拦截特定的虚拟CPU指令,收集并记录相关的访问数据,并可根据需要,更改恶意代码指令的执行流程。数据采集模块还拦截各种虚拟硬件的访问操作,收集并记录相关操作的数据,并根据需要提供特定的输入数据。数据分析模块综合数据采集模块收集的各种数据,通过用户控制模块实时显示最新的恶意代码运行信息,并在分析过程终止后,关联分析所有的搜集到的数据,自动输出分析结果。
[0009] 基于以上构思,本发明的技术方案为:
[0010] 一种基于虚拟硬件环境的恶意代码自动分析方法,包括步骤:
[0011] 1)搭建恶意代码运行环境,包括根据恶意代码运行环境的要求,虚拟所需的硬件设备,准备相关的操作系统镜像;
[0012] 2)配置分析环境和分析参数,包括恶意代码运行所需的操作系统镜像所在位置,虚拟硬件的各种参数,如虚拟内存大小,虚拟系统时间等,以及需要收集的恶意代码运行数据和需要监控的恶意代码操作,如网络收发数据,文件读写操作等;
[0013] 3)完成各种虚拟设备的初始化后,加载恶意代码运行所需的操作系统镜像,启动该操作系统,同时拦截加载操作,并将所有支持拦截的系统调用操作转换为虚拟系统对应的系统调用的指令起始地址;
[0014] 4)运行待分析的恶意代码,虚拟CPU执行任何指令之前,判断即将执行的指令是否为转换过来的指令起始地址,当匹配时,则暂停虚拟系统的运行,记录当前匹配操作,并收集该操作相关的数据,如网络数据发送操作的内容,文件创建操作的文件名等信息,然后再恢复虚拟系统的运行;同时,对于读取操作,还可根据需要提供特定的输入数据,改变恶意代码的执行流程;
[0015] 5)分析所有的收集到的数据,动态显示虚拟系统状态信息和恶意代码运行信息,恶意代码退出,分析自动终止;用户终止恶意代码的运行过程,提取某一时刻虚拟内存中的恶意代码的二进制代码,关联分析搜集到的所有数据,输出分析结果。
[0016] 一种基于虚拟硬件环境的恶意代码自动分析系统,其特征在于,包括一硬件虚拟模块,一数据采集模块,一数据分析模块和一用户控制模块,硬件虚拟模块和数据采集模块通过网络连接与数据分析模块和用户控制模块进行通讯和数据交互,其中:
[0017] 硬件虚拟模块虚拟实现物理计算机所需的硬件设备,加载恶意代码运行所需的操作系统镜像;
[0018] 数据采集模块拦截各种虚拟系统调用和虚拟硬件的访问操作,收集并记录相关操作的数据;
[0019] 数据分析模块关联分析所有的搜集到的数据;
[0020] 用户控制模块配置分析环境和分析目标的参数,动态显示虚拟系统状态信息和恶意代码运行信息。
[0021] 根据恶意代码运行所需操作系统的不同,可以包含多个不同的数据采集模块,如图2所示。
[0022] 本发明的配置信息,可以XML结构化方式组织并存储。
[0023] 进一步配置信息的分析环境信息可包括:虚拟软盘镜像文件,虚拟硬盘镜像文件,虚拟CDROM镜像文件,启动顺序,虚拟内存大小,虚拟CPU数量,虚拟时间,虚拟键盘类型,虚拟USB设备,虚拟网卡MAC地址,虚拟网络端口到物理主机端口的重定向。
[0024] 进一步配置信息的分析参数信息可包括:要监控的系统调用名称,参数和返回值的结构,以及可选的待分析的恶意代码文件名。
[0025] 本发明的硬件虚拟模块和数据采集模块,与数据分析模块和用户控制模块可以运行在不同的体系结构和操作系统上,可以通过网络通信实现交互。
[0026] 本发明的优点在于,整个分析过程对恶意代码完全透明,恶意代码无法识别是否运行在虚拟环境中还是真实环境中,也无法察觉指令执行过程是否被监控,从而能够观察到真实环境中的恶意代码的所有可能行为。并且,由于监控操作在指令在虚拟CPU上执行前展开,监控不会受到恶意代码中花指令,代码动态生成等各种保护技术的干扰。此外,由于能够控制所有虚拟硬件,本发明还能够在恶意代码运行过程中,从虚拟内存中转储当前正在执行的恶意代码的二进制代码用于静态分析,从而解决代码加壳,自修改等动态行为造成的静态分析的困难。
附图说明
[0027] 图1为本发明的系统工作过程流程图
[0028] 图2为本发明的系统组成与模块间详细关系示意图
具体实施方式
[0029] 下面结合附图和具体实施方式对本发明作进一步详细描述:
[0030] 分析人员搭建恶意代码运行环境,配置分析环境和分析目标等参数,启动硬件虚拟模块,加载并启动恶意代码运行所需的操作系统镜像,并运行待分析的恶意代码。数据采集模块根据分析目标,拦截特定的虚拟CPU指令和虚拟硬件的访问操作,收集并记录相关的访问数据。数据分析模块综合数据采集模块收集的各种数据,通过用户控制模块实时显示恶意代码运行信息,并在分析过程终止后,关联分析所有的搜集到的数据,输出分析结果。
[0031] 参考附图1,下面给出详细过程。
[0032] 第一步:搭建恶意代码运行环境
[0033] 利用硬件虚拟模块,虚拟实现物理计算机所需的CPU,内存,硬盘等核心部件以及CDROM,网卡,软驱,USB设备等外设。由于本发明的硬件虚拟模块上运行的虚拟系统,其所有硬盘数据以虚拟系统镜像文件的形式存在。根据恶意代码针对的运行平台和操作系统要求,利用已有的虚拟系统镜像文件,或是运行硬件虚拟模块,安装相应的操作系统,制作新的虚拟系统镜像文件。如x86平台上的Windows系统上的恶意代码,则可以通过硬件虚拟模块的虚拟光驱,利用光盘安装操作系统,制作Windows系统镜像文件。
[0034] 第二步:配置分析环境和分析目标参数
[0035] 进一步配置信息的分析环境信息可包括:虚拟软盘镜像文件,虚拟硬盘镜像文件,虚拟CDROM镜像文件,启动顺序,虚拟内存大小,虚拟CPU数量,虚拟时间,虚拟键盘类型,虚拟USB设备,虚拟网卡MAC地址,虚拟网络端口到物理主机端口的重定向。
[0036] 进一步配置信息的分析参数信息可包括:要监控的系统调用名称,参数和返回值的结构,以及可选的待分析的恶意代码文件名。
[0037] 本发明的参数配置通过XML形式存储的配置文件,以及用户控制模块的图形用户界面完成。
[0038] XML配置文件包含数据采集模块支持拦截和监控的操作,各个操作对应的参数和结果的数据结构和含义。如对Windows系统,配置文件的主要内容包括数据采集模块支持监控的进程线程操作,网络操作,注册表操作,文件系统操作和系统服务操作API,形式如下:
[0039]
[0040] 0103
[0041] NtTerminateProcess
[0042] false
[0043] process
[0044]
[0045]
[0046] NTSYSAPI
[0047] NTSTATUS
[0048] NTAPI
[0049] NtTerminateProcess(
[0050] IN HANDLE ProcessHandle OPTIONAL,
[0051] IN NTSTATUS ExitStatus
[0052] )
[0053]
[0054]
[0055] 在内核模式下结束一个进程。
[0056] NTSTATUS,零表示成功,其他值表示失败。[0057]
[0058] ProcessHandle,HANDLE,OPTIONAL,进程的句柄
[0059] ExitStatus,NTSTATUS,进程退出的状态
[0060]
[0061]
[0062] [0063] 对于变动性较大的其他参数,通过用户控制模块的图形用户界面完成(也可以用命令行),具体包括硬件虚拟模块参数,数据分析模块参数和用户控制模块参数。
[0064] 硬件虚拟模块参数包括:虚拟硬盘对应的虚拟系统镜像文件路径及名称,虚拟内存大小,虚拟系统时间设置,虚拟网卡MAC地址,虚拟光驱对应的虚拟光盘文件路径及名称等。
[0065] 数据分析模块参数包括:分析历史数据保存控制,分析结果输出形式选择等。
[0066] 用户控制模块参数包括:虚拟系统实时运行状态信息显示控制,分析日志记录和操作监控项目选择等。
[0067] 第三步:运行虚拟系统,分析恶意代码
[0068] 完成相关配置后,用户启动硬件虚拟模块,硬件虚拟模块完成相关的初始化之后,自动加载指定的虚拟系统镜像文件,之后开始操作系统的正常启动过程。当系统启动完成后,对于非包含在虚拟系统里的恶意代码,还需要运行恶意代码可执行文件样本。
[0069] 在虚拟系统启动的同时,数据采集模块拦截操作系统内核模块的加载过程,并将所有支持拦截的内核系统调用操作转换为虚拟系统对应的系统调用的指令起始地址。并且,在恶意代码启动和运行过程中,数据采集模块还拦截操作系统的动态链接库加载操作,将恶意代码运行所需的所有动态链接库中,数据采集模块支持拦截的系统调用操作也转换为虚拟系统对应的系统调用的指令起始地址。数据采集模块指示虚拟CPU在执行指令之前,比较和判断即将执行的指令是否在监控范围之内。当指令满足监控条件时(就是指上面的拦截操作转换过来的系统调用的指令起始地址,在当前执行的指令的地址等于这些要监控的指令地址时),数据采集模块指示虚拟CPU暂停,从而暂停虚拟系统的运行,提取并保存相关的数据之后再恢复虚拟系统的运行。
[0070] 例如针对Windows系统,监控恶意代码的NtTerminateProcess操作,则每当虚拟CPU执行下一条指令之前,判断当前CR3是否与恶意代码的CR3相同,EIP是否与NtTerminateProcess指令起始地址相等,从而决定是否中断当前执行流程。当满足条件时,数据采集模块指示虚拟CPU暂停,将返回地址对应的指令加入指令监控列表,并根据NtTerminateProcess声明的参数个数和结构,从虚拟系统运行栈中获取参数ProcessHandle和ExitStatus的值,然后指示虚拟CPU恢复。当虚拟系统从NtTerminateProcess系统调用中返回时,由于当前CR3与恶意代码的CR3相同,EIP与先前保存的返回地址对应的指令相等,数据采集模块再次指示虚拟CPU暂停,从指令监控列表中删除原先保存的返回地址对应的指令,并从虚拟系统运行栈中获取NtTerminateProcess的返回值,最后再指示虚拟CPU恢复运行。通过这种方式,实现了不利用任何操作系统和硬件调试功能的同时,完成对一个完整的系统调用的截获以及所有参数以及返回值的收集。
[0071] 对于获取数据的系统调用,如获取系统时间,操作系统信息的系统调用,数据采集模块还可以根据配置的指示,通过修改调用堆栈并填充相关数据,同时更改EIP等相关寄存器控制虚拟系统执行流程,为恶意代码提供执行所需的输入数据。
[0072] 第四步:数据关联分析
[0073] 数据分析模块接收并存储数据采集模块收集到的数据,并通过用户控制模块实时显示最新的虚拟系统状态和恶意代码运行信息。动态显示的虚拟系统状态信息,主要包括虚拟系统内部正运行的进程的详细信息,具体包括:进程名称,进程ID,可执行文件名,当前调度状态,进程环境信息,内存使用平均值,内存使用峰值。动态显的示恶意代码运行信息,包括恶意代码的进程详细信息,具体包括:进程名称,进程ID,可执行文件名,当前调度状态,进程环境信息,内存使用平均值,内存使用峰值。恶意代码的线程详细信息,具体包括:线程ID,线程环境信息,函数地址,线程是否已经结束,线程是否将被删除。恶意代码加载的模块的详细信息,具体包括:模块的文件名,所在进程,模块是否被隐藏,模块在内存中的加载地址,模块的大小。恶意代码的系统调用信息,具体包括:系统调用发生的时间,执行系统调用的进程名字,执行系统调用的进程标识符,系统调用类型,系统调用名,系统调用结果,系统调用参数内容,系统调用的安全级别,以及其他能够提供额外帮助的系统调用信息。
[0074] 当恶意代码退出,分析自动终止,或是用户手动终止分析过程时,数据分析模块通过时序关系,控制依赖关系,数据依赖关系,逻辑依赖关系对各种数据进行综合分析,根据模块间的加载调用关系,不同进程间的父子关系,进程的线程创建终止关系,输入数据的传播关系,不同系统调用的先后关系,在所有关联数据之间创建超链接。
[0075] 如根据进程ID,CR3和进程间父子关系,数据分析模块中的分析引擎可以标识出所有恶意代码启动的进程,终止的进程以及恶意代码打开过的进程。再如,通过不同进程对同一个目标数据的访问操作之间的时序关系,可以识别出目标数据的传播依赖路径。
[0076] 数据分析模块完成分析后,输出自动分析结果。用户可以很容易地通过各种数据项目之间的超链接,找到并分析恶意代码不同行为之间的关系,从而了解恶意代码的真实行为和实现机制。
[0077] 对于专业人士,如果需要对恶意代码某以运行状态进行进一步的进行分析,还可以在第三步分析过程中,通过用户控制模块,转储虚拟内存中该时刻的恶意代码内存镜像。
对于加壳代码,自修改代码以及动态产生代码,该功能能够帮助用户获取恶意代码的静态化快照,从而可利用传统的静态分析工具进行分析,从而全面分析恶意代码可能的行为。
[0078] 尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。