Chromium Chronicle #9:ClusterFuzz

第 9 集:Adrian Taylor in Mountain View(2019 年 12 月)
上一集

您可能会发现,您需要修复由 Google Cloud 团队发现的高优先级安全 bug, ClusterFuzz。Google 优惠是什么?你应该认真看待这些错误吗?如何 需要帮助?

模糊测试流程图

ClusterFuzz 将输入源提供给 Chrome 并监测崩溃。部分匹配 Chrome 版本启用了额外的检查功能,例如 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:其严重级别启发式算法可信任,因为 基于现实世界的可利用性:即使是 单字节溢出会导致由 。

资源