--------------------------------~
| -- 描述 -- |
--------------------------------~
Melkor - 一款 ELF 文件格式模糊测试器
Melkor 是 J. R. R. 托尔金中土世界传说故事集中的虚构角色,是第一位黑暗魔君,也是索伦(Sauron)的主人。他在《指环王》中被简要提及,并以以下事迹闻名:
"... 在维拉(Valar)攻击他之前,梅尔寇(Melkor)俘获了一批精灵(ELVES),他折磨并腐化他们,培育出了第一批半兽人(Orcs)。" (http://en.wikipedia.org/wiki/Morgoth)
"... 梅尔寇比以往任何时候都更加狡猾,内心充满更多恶意。看到精灵们的幸福,想起自己正是因为他们的缘故才被推翻,梅尔寇最渴望的就是腐化他们。" (http://lotr.wikia.com/wiki/Melkor)
"半兽人(Orcs)……自梅尔寇用被腐化、折磨和残害的精灵培育出他们的那一天起,情况便是如此。这些精灵可能还被强迫与黑暗势力统治下的其他非自然可憎之物交配。" (http://lotr.wikia.com/wiki/Orcs)
为了向他的名字致敬,这段代码会获取一个 ELF 文件,将其破坏,并按照你的需要生成尽可能多的“半兽人”(畸形 ELF 文件)。
Melkor 是一款混合型模糊测试器(基于变异和基于生成)。它会对给定的 ELF 样本中的现有数据进行变异,以生成“半兽人”(畸形 ELF 文件)。然而,它并不会随机更改数值(盲目模糊测试),而是通过使用模糊测试规则(知识库)以半有效值对特定元数据进行模糊测试。Melkor 使用 C 语言编写,是一款非常直观且易于使用的模糊测试器,用于发现 ELF 解析器中的功能性(及安全性)缺陷。
模糊测试规则的设计参考了以下输入:
你可以在 docs/ 目录中找到详细的模糊测试规则以及其他一些示意图。
--------------------------------~
| -- 环境要求 -- |
--------------------------------~
--------------------------------~
| -- 编译与使用 -- |
--------------------------------~
编译过程非常简单,只需输入: $make
它会生成 'melkor' 文件(即模糊测试器本身),并在 templates/ 文件夹内生成一些其他 ELF 文件,包括正常的 ELF 文件,例如普通 ELF 可执行文件、一些共享库、静态 ELF(独立可执行文件)以及其他一些文件。
运行 melkor 后,将显示一个选项列表,你会发现它非常直观且易于使用。你只需提供一个用作模板的 ELF 文件名,可以是 templates/ 目录中的任意一个。
根据你要测试的软件类型,你需要选择要对哪些元数据进行模糊测试。例如,如果你想测试操作系统加载器,你可能只想对程序头表(-P)和/或动态节(-D)进行模糊测试。另一方面,也许你想对节头表和 ELF 头进行模糊测试,以测试某个杀毒引擎或调试器。对可重定位文件(.o)或共享库(.so)中的符号表(-s)和/或重定位表(-R)进行模糊测试,以测试编译器和/或链接器。字符串表也可以进行模糊测试(-Z)。具体想把一个 ELF 破坏到何种程度,由你自己决定 }:-)
一旦“半兽人”在 orcs_*/ 目录中生成,就可以借助 test_fuzzed.sh 对它们进行测试。你可以简单地指定包含要运行的“半兽人”的文件夹名称(用于操作系统加载器测试),也可以添加一个额外参数,指定要对 orcs 文件夹中的每个畸形 ELF 测试哪个程序(及其参数)。该脚本可以选择对某些环境变量进行模糊测试(这些变量同样被定义为模糊测试规则)。运行脚本后,使用 #dmesg 查看日志可能有助于识别哪个程序/库崩溃以及崩溃发生在何处。不带参数运行脚本时会显示一些示例。
如果你想在 Windows 环境下自动测试畸形 ELF 文件(“半兽人”),随附了一个批处理脚本(win_test_fuzzed.bat),其功能与 *NIX 版脚本几乎相同。
祝模糊测试愉快!
--------------------------------~
| -- 目录 -- |
--------------------------------~
docs/ 包含相关文档,如详细的模糊测试规则列表以及 ELF 元数据依赖关系列表。
templates/ 包含一些与 melkor 同时编译的 ELF 文件,可用于为 melkor 提供输入: foo.c -> foo.o(ELF 目标文件)-> foo(ELF 可执行文件) foo.c -> foo_static(ELF 静态可执行文件) libfoo.c -> libfoo.so(ELF 共享对象) 以及其他一些文件。输入 "$make templ" 可详细查看 生成了哪些其他 ELF 模板。
orcs_*/ 将包含模糊测试过程后生成的畸形 ELF 文件(基于 给定的模板文件)。
src/ Melkor 源代码。
--------------------------------~
| -- 缺陷 -- |
--------------------------------~
请阅读 BUGS.txt
--------------------------------~
| -- 联系方式 -- |
--------------------------------~
姓名: Alejandro Hernandez H. [nitr0us] Twitter: http://twitter.com/nitr0usmx 邮箱: nitrousenador [at] gmail [dot] com 网站: http://www.brainoverflow.org 博客: http://chatsubo-labs.blogspot.com
--------------------------------~
| -- 纪念 -- |
--------------------------------~
本项目谨此纪念我最好的朋友之一 Aaron Alba。
--------------------------------~
| -- 许可证 -- |
--------------------------------~
Melkor - 一款 ELF 文件格式模糊测试器 版权所有(C)2014 Alejandro Hernandez H. (nitr0us)
本程序为自由软件:你可以根据自由软件基金会发布的 GNU 通用公共许可证的条款,重新分发和/或修改它,可以是许可证第 3 版,或(由你选择)任何更高版本。
本程序的分发基于其“有用”的希望,但不提供任何担保;甚至不提供适销性或特定用途适用性的默示担保。详情请参阅 GNU 通用公共许可证。
你应该已经随本程序收到一份 GNU 通用公共许可证的副本。如果没有,请参阅 http://www.gnu.org/licenses/。