导语:思科Talos团队发布了PyREBox,一个用Python脚本编写的逆向分析沙箱的开源工具。其实,这个工具一开始只是Talos 为改进恶意软件监控流程而进行优化项目的其中一个小的部分,PyREBox是一种基于QEMU的通用工具框架。

360截图165307158910393.jpg

在2017年7月,思科Talos团队发布了PyREBox,一个用Python脚本编写的逆向分析沙箱的开源工具。其实,这个工具一开始只是Talos 为改进恶意软件监控流程而进行优化项目的其中一个小的部分,PyREBox是一种基于QEMU的通用工具框架。

PyREBox允许分析人员在虚拟环境中运行整个操作系统(模拟器),并在运行时检查和修改其内存和寄存器。对QEMU进行略微修改后,PyREBox就允许用户对某些恶意行为进行测试,例如指令执行或内存读写。

在此基础上,PyREBox利用虚拟机内省技术来消除语义鸿沟,即理解操作系统的抽象概念,如进程、线程或库。你可以在该篇博文中找到该框架及其功能的更详细的原始描述。

在过去的几个月里,Talos团队的研究人员收到了来自各种技术社区对PyREBox的积极反馈,并修正了其中的漏洞。除此之外,研究人员还添加了用户建议的一些比较好的分析功能。更重要的是,研究者们还增加了对GNU/Linux guest虚拟机的支持,并实现了一个代理程序(程序运行在模拟guest端),它允许主机和guest之间进行文件传输,并在guest端按需执行要分析的恶意样本。

由于PyREBox工具非常地受欢迎,所以今天Talos团队的研究人员又发布一组用于帮助恶意软件分析的PyREBox脚本——恶意软件监视器。这些脚本自动执行不同的任务,例如代码覆盖率分析、API跟踪、内存监控和进程内存转储。

这个新的工具集还包括IDAPython脚本,IDAPython是IDA的一个功能强大的扩展特性,对外提供了大量的IDA API调用。另外,还能在使用python脚本语言的过程中获得能力提升,这些脚本帮助分析人员将程序执行中提取的信息进行可视化分析。所有这些工具都可以通过JSON配置文件进行配置,并有助于自动执行样品执行和分析。

这些脚本第一次发布,是在阿姆斯特丹举行的“黑客大会”中,有关commsec-track的讨论话题中出现的。

对代码覆盖率的分析

在逆向分析过程中,理解二进制代码中执行的代码路径对分析人员非常有用。虽然静态分析提供了一个相当完整的代码视图,但我们通常无法预先知道某段代码是否会执行。

对代码路径的分析常常需要对复杂计算和异常路径的条件作出提前预判,为了克服这个复杂的提前预判,逆向分析会将静态分析与动态分析工具(如沙箱或调试器)混合使用。理解代码路径是否被执行,需要逆向分析师通过指令跟踪样本指令,或者设置断点让样本运行,等以便在执行过程中的某个时间点发现其中一个断点。

跟踪样本指令的方法可能是缓慢的,而设置断点让样本运行的方法可能需要多次尝试,有时甚至要让样本自由运行,即不触及任何断点,且让系统完全受到感染。这就要求分析人员通常需要恢复干净的设备快照(machine snapshot)并重新启动分析过程。

在这样的情况下,掌握代码覆盖率的信息对于更好地理解哪些指令已经被执行,是非常有用的。此时,恶意软件监视器中的代码覆盖率模块会自动跟踪仿真器转换块的执行情况。

为了简单起见,我们可以将转换块定义为基本块,尽管QEMU在将指令分为转换块和基本块时有着不同的定义标准。

在任何情况下,代码覆盖率模块都会生成两个不同的输出文件:一个二进制跟踪文件和一个文本摘要。分析人员可以将二进制跟踪导入到IDA中,以便对模拟器中已执行的代码块进行标记。这样,用户可以检查执行过程中要采用哪些代码路径进行分析。

此图所示,就是一个IDA图,在该图中,被执行的代码块用橙色进行了标记,而非执行的基本块仍然是白色的。

第二个文件则提供了对已执行内存区域的粗粒度总结,此外,当执行从一个虚拟地址描述符(VAD)区域跳转到另一个虚拟地址描述符区域时,就会显示执行转换。VAD是Windows使用的内部结构,它以树的形式记录给定虚拟地址空间中保留的不同内存区域。

进程的主模块,导入的DLL,堆栈,堆以及其他分配的内存区域都在此树中表示为独立的VAD区域。因此,该日志允许用户找到跟踪中的点,这些跟踪的点会执行跳转到主模块或DLL之外的内存缓冲区,这些行为通常都是在某些运行时进行加壳时所出现的特征。

日志还包括每次转换后在每个VAD区域执行的第一条指令的地址,这有助于在某些情况下识别解压缩二进制文件的原始入口点(OEP)。

此图就是覆盖文本日志文件的一个片段,显示了VAD区域之间的几个转换。

API跟踪

恶意软件监控的第二个组件可以帮助分析人员通过跟踪函数调用普通的Windows DLL来理解样本的行为。Windows API)。恶意监控程序的API跟踪完全是在guest系统之外完成的,而大多数其他API跟踪框架和沙箱还使用的是使用传统的API挂钩,这就需要修改进程内存并引入潜在的可检测的构件。

API跟踪器模块只提供特定的指令(例如call /jmp),并检测其中一个控制流指令何时跳转到任何Windows API函数的第一个字节。

API跟踪器可以在两种模式下运行——精简模式和完整模式。如果启用了精简模式,它只会记录API函数调用,但是它不会检查函数调用的参数,而完整模式则会在每次发生API函数调用时检查堆栈和寄存器。

完整模式会利用包含有关API参数数量、名称和数据类型信息的数据库。该模块能够删除指针和嵌套结构。

完整模式下生产生成的分析信息可以写在文本文件中,也可以保存在二进制文件中,然后在IDA中加载,以便将文本信息可视化。一旦这些信息被导入到IDA中,就有两种方法来可视化它——一个是具有搜索功能的专用选项卡;一个是针对每个跟踪呼叫显示的上下文菜单。

此图就是在IDA中显示的一个专用选项卡,该选项卡允许检查函数调用及其输入和输出参数,此图就是API调用跟踪的文本日志片段。

内存监控

第三个新组件就是内存监视器,在执行样本期间,该组件会跟踪不同的内存相关事件,包括:

· 进程的创建;

· 远程进程内存读写;

· 内存共享(共享内存区域);

· 文件读写;

· 文件映射到内存中;

· 内存分配;

· 内存访问权限的更改;

分析人员可以根据监控的事件来了解样本的内存相关行为,重点关注这些缓冲区的解压缩、过程创建和过程注入。该模块还可以监视文件删除事件,也就是说,当分析中的样本将二进制文件写入到磁盘并执行它时。

与内存行为相关的信息最后会被压缩成两份报告,第一个报告包含所有与上述类别相关的事件,而第二个报告则只会对所收集到的信息进行简单摘要,这些信息包括:

· 开始和注入过程;

· 由这些进程加载的模块/ DLL;

· 每个进程的VAD区域,包括heuristics(是指在入侵检测中使用AI思想),那些包含潜在注入代码、异常权限以及访问权限的更改;

· 内存映射(映射文件和内存共享);

· 内存注入;

· 文件操作;

摘要信息可以有助于分析人员对恶意软件引导程序的快速理解,许多恶意软件家族都包含必须部署在系统内存中的组件。作为部署组件的一部分,恶意软件经常将有效载荷注入一个或多个系统进程中,并创建其他进程或将部署组删除。

而PyREBox的内存监视器组件能够在部署阶段向分析人员提供包含该样本的内存相关行为的原始信息。

内存自动转储

恶意软件监视器的最后一个组件是一个可配置的内存转储程序,可以转储进程内存,包括主模块、加载的DLL以及其他内存区域(如堆、栈和分配的缓冲区)。转储内存的时间则必须分析人员进行选择,并在主JSON配置文件中配置。可配置的选项包括:

· 在进程退出时转储内存;

· 在调用某个API函数时转储内存;

· 在执行某个地址时转储内存;

为了在样本完全解压缩的情况下转储内存,分析人员需要了解样本操作的方式。但是,其他的恶意软件监控模块应该能够帮助用户识别出要转储进程内存的位置。

一旦内存转储和有关进程的内存区域的相关信息被创建,我们就可以在IDA中手动加载经过转储的片段,并对正在进行的进程进行静态分析。

总结

这些新发布的恶意软件监控组件对于收集样本执行信息,以及增加从传统的沙箱和调试器中提取数据非常有用。

总之,PyREBox是一种功能强大、且非常容易上手的工具,每个分析人员都可以根据自己的分析环境创建适合自己的分析脚本。

源链接

Hacking more

...