第 9 集:作者:Adrian Taylor 在山景城(2019 年 12 月)
上一集
您可能会发现,系统要求您修复 ClusterFuzz 发现的高优先级安全 bug。Google 优惠是什么?你们应该严肃对待这些漏洞吗?您需要什么帮助?
ClusterFuzz 将输入馈送到 Chrome 并监视崩溃情况。其中一些 Chrome build 启用了额外的检查功能,例如 AddressSanitizer,它可以查找内存安全错误。
ClusterFuzz 会根据崩溃位置分配组件,并根据崩溃类型以及崩溃是否发生在沙盒化进程中的方式来分配严重级别。例如,“释放后使用堆”的严重级别为“高”,除非是在浏览器进程内进行的,在这种情况下,此用例至关重要(没有沙盒来限制影响!):
class Foo {
Widget* widget;
};
void Foo::Bar() {
delete widget;
...
widget->Activate(); // Bad in the renderer process, worse in the
// browser process. Obviously, real bugs are
// more subtle. Usually.
ClusterFuzz 会根据模糊测试工具或外部提交的 bug 生成输入。一些模糊测试工具由 libFuzzer 提供支持,它可以改进输入以提高代码覆盖率。有些能理解转换成 protobufs
的输入语言的语法。ClusterFuzz 发现崩溃问题后,会尝试最小化输入测试用例,甚至使用二等分法找出违规的提交内容。发现很多...
您可以提供帮助:
- 难以理解对象生命周期和整数溢出。
- 添加新的模糊测试工具,尤其是在您处理不可信的数据或 IPC 时(请参阅下面的链接,代码通常少于 20 行)。
- 修复了 ClusterFuzz 报告的 bug:其严重级别启发式算法可信任,因为它们基于真实的利用性:即使单字节溢出也会导致攻击者执行任意代码。
资源
- Chromium 中的模糊测试:如何针对新的数据格式向 ClusterFuzz 添加新的模糊测试工具,或者仅仅因为您希望获得找到超棒漏洞的功劳。
- Chrome 模糊测试工具计划更新和操作方法:模糊测试工具也由外部贡献者编写。听听他们的经验,以及上手的难易程度。