[翻译] 使用S2E分析基于触发器的恶意软件
使用S2E分析基于触发器的恶意软件
介绍
这篇博客是上个月我在 瑞士联邦理工学院 的可信系统实验室做的一项工作,当时我正在用S2E分析恶意软件。尽管没有特别出彩的地方,但我希望这篇文章可以帮到那些想要用符号执行/S2E来分析恶意软件行为的人。
恶意软件分析不同之处在哪?
我之前发了2篇文章,一篇是关于 CTF challenge 的,另一篇是分析 文件解析器的。这些程序有两个共通之处:
- 它们都是Linux ELF 可执行文件;
- 程序输入由用户指定 — 通过 STDIN 标准输入或者从磁盘上的文件读入。
相对来说,大多数软件:
- 针对Windows 平台(尽管有些 报告 显示Android 恶意软件的数量正在上升,但恶意软件作者的主要目标还是Windows;
- 没有一个良好定义的输入源。输入可能来源于命令行参数,但是不太常见。更可能的一些输入来源是注册表键值、网络数据等等。
由于这些原因,在S2E中分析恶意软件不太容易将命令行参数符号化,或者向程序输入符号文件。这篇文章会探索我们基于S2E开发的恶意软件分析工具,后面会有两个”研究实例“。像往常一样,如果你希望自己研究一下的话,可以在 Github上找到所有的代码。
在S2E中分析 Windows 软件
直到现在,我们只用 S2E 分析过 Linux 程序。幸运的是,S2E也支持 Windows 程序的分析,所以两者的区别在哪呢?
- 使用
image_build命令编译Windows客户镜像的时候,需要提前准备好镜像,S2E 支持的所有版本的Windows 镜像 (列在 这里) 都可以从 MSDN上下到。如果需要的话,可以添加对其他版本的支持。在这篇文章中,我们选用的是 Windows 7 专业版 32-位。 - 在 Windows 上,没有
s2e.so的 dll 版本。因此,我们需要换种方式来将符号化的数据注入到恶意软件中。我们可以写个 S2E 插件来实现,但有点复杂。相反,我们 通过 hook Windows API 来注入DLL,并且插入符号化的数据。
Hook Windows API
有许多不同的技术可以实现 hook Windows API,我们会使用现有的办法而非再去发明一种新的。当我刚开始这项工作时,我想重用Cuckoo Sandbox的 Monitor 来 实现对API 的hook(它就是为了分析恶意软件而设计的)。然而,后来我们决定用 EasyHook 的办法,主要是因为它在开始阶段需要更少的工作。
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
