动态分析就是在运行恶意代码之后进行检查的过程。动态分析技术是恶意代码分析的第二步,一般在静态分析技术进入一个死胡同的时候进行,比如恶意代码进行了混淆,或者分析师已经穷尽了可用的动态分析技术。动态分析包括在恶意代码运行时刻进行监控,以及在恶意代码运行之后来检查系统情况。
与静态分析不同,动态分析能够让你观察到恶意代码的真实功能,一个行为存在于二进制程序中,并不意味着它就会被执行。动态分析也是一种识别恶意代码功能的有效方法。例如,你要分析的恶意代码是键盘记录程序,动态分析能让你在系统上找到键盘记录程序的日志文件,发现它的各种记录,追踪它将信息发送到那儿了。
虽然动态分析技术非常将达,但它们还是应该在静态分析的基础上进行,因为动态分析可能会让你的网络和系统处于危险之中。动态分析技术也具有它们的局限性,一个恶意代码在执行时,不是所有到吗都会执行到。例如,一个需要参数的命令行恶意代码里,每个参数都会执行不同的程序功能,如果你不知道所有命令行选项,你就不能动态分析出所有程序功能。
1. 沙箱:简单但粗糙的方法
沙箱是一种在安全环境里运行不信任程序的安全机制,不用担心伤害到“真正的”系统。沙箱包括一个虚拟环境,通过某种方式模拟网络服务,以确保被测试的软件或恶意代码能正常执行。
1.1 使用恶意代码沙箱
许多恶意代码的上线,诸如Norman、GFI沙箱、Anubia、Joe沙箱、ThreadExpert、BitBlaze和Comodo恶意代码分析,等等,都提供免费恶意代码的服务。其中,Norman沙箱、GFI沙箱是最受欢迎的。目前最流行的开源沙箱是Cuckoo沙箱,比较流行的在线沙箱包括Hybrid Analysis、YOMI、Any Run等。
大多数沙箱运作的方式是类似的,所以我们集中分析一个经典案例,图1展示了如何通过Any Run沙箱自动化分析一个程序所产生的PDF报告。恶意代码报告包含关于恶意代码的各种细节,比如一般信息、行为信息、静态信息、系统信息、网络信息等。