Fuzzing and Mozilla: 2016

模糊测试与Mozilla:2016

模糊測試與Mozilla:2016

ファジングと Mozilla:2016

Fuzzing and Mozilla: 2016

模糊测试与Mozilla:2016

模糊測試與Mozilla:2016

ファジングと Mozilla:2016

Agenda

大纲

大綱

アジェンダ

  • What is fuzzing?
    什么是模糊测试?
    什麼是模糊測試?
    ファジングとは?
  • Why is fuzzing successful?
    为什么模糊测试会成功?
    為什麼模糊測試會成功?
    ファジングが成功したのはなぜか?
  • Tips for effective fuzzing
    能够得到有效模糊测试的方法?
    能夠得到有效模糊測試的方法?
    効果的なファジング

Fuzzing

模糊测试

模糊測試

ファジング

xkcd compiling

Quote

引用句

引用句

Quote

the people writing and running fuzzers are by far the most effective QA people at Mozilla.

在 Mozilla,使用模糊测试是最有效使用 QA(确保品质) 人力的方式。

在 Mozilla,使用模糊測試是最有效使用 QA(確保品質) 人力的方式。

ファザーを書いて実行する人たちは、Mozilla で圧倒的に最強な QA (品質保証)の人だ。

What is fuzzing?

什么是模糊测试?

什麼是模糊測試?

ファジングとは?

  • Give random input to software
    包含随机性的输入输进软件
    包含隨機性的輸入輸進軟體
    ランダムな入力をソフトウェアに与える
  • May find easy-to-detect problems
    有可能会找到容易侦测的问题
    有可能會找到容易偵測的問題
    検出しやすい問題を見つけられる
    • Crashes
      崩溃
      當機
      クラッシュ
    • Assertion failures
      Assertion failures
      Assertion failures
      アサーション違反
  • These can manifest in the real-world
    问题有时会在现实生活中出现
    問題有時會在現實生活中出現
    問題は実世界でも起こりうる

Dynamic analysis tools

动态分析工具

動態分析工具

動的解析ツール

  1. Address Sanitizer (ASan)
  2. Thread Sanitizer (TSan)
  3. Leak Sanitizer (LSan)
  4. Valgrind
  5. and Undefined Behaviour Sanitizer (UBSan), etc.

Mozilla Platform Fuzzing team

Mozilla 平台模糊测试组

Mozilla 平台模糊測試組

Mozilla プラットフォーム ファジングチーム

Map of fuzzing team

List of fuzzing tools

模糊测试工具目录

模糊測試工具目錄

ファジングツール一覧

List of fuzzing tools (cont'd)

模糊测试工具目录(续)

模糊測試工具目錄(續)

ファンジングツール一覧(続き)

Why is fuzzing successful?

为什么模糊测试会成功?

為什麼模糊測試會成功?

ファジングが成功したのはなぜか?

  • Bug counts
    Bug 数量
    Bug 數量
    バグの数
    • 6,450 - jsfunfuzz & DOMFuzz
    • >12% sec-critical
      >12% sec-critical
      >12% sec-critical
      >12% sec-critical
  • Bug bounty programs
    Bug 的赏金计划
    Bug 的賞金計畫
    バグ報奨金プログラム
    • Mozilla
      • A use-after-free can possibly be worth US$3,000 - US$5,000
        发现一个 use-after-free 有可能获得 US$3,000 - US$5,000
        發現一個 use-after-free 有可能獲得 US$3,000 - US$5,000
        解放済みメモリ使用のバグは3000ドル〜5000ドルの価値
    • Google

Why is fuzzing successful? (cont'd)

为什么模糊测试会成功?(续)

為什麼模糊測試會成功?(續)

ファジングが成功したのはなぜか(続き)?

Quote

引用句

引用句

Quote

From this day on forward, I shall never write a JIT (compiler) again without Jesse.

此后,若没有 Jesse 帮忙,我不会再多写一个 JIT (编译器)。

此後,若沒有 Jesse 幫忙,我不會再多寫一個 JIT (編譯器)。

もう Jesse なしに JIT (コンパイラ) は書かないよ。

Possible focus areas for sec bugs

Security bugs 可能出现的重要位置

Security bugs 可能出現的重要位置

セキュリティバグのフォーカス領域

  • Modules that:
    模组:
    模組:
    こういうモジュール:
    • Are written in a unsafe language
      用不安全的电脑语言来撰写
      用不安全的電腦語言來撰寫
      安全ではない言語で書かれたもの
    • Are less sandboxed
      没在沙盒 (sandbox) 里分割好
      沒在沙盒 (sandbox) 裡分割好
      サンドボックスが甘いもの
    • Parse attacker-controlled input
      分析入侵者能控制的输入
      分析入侵者能控制的輸入
      アタッカーが制御する入力をパースするもの
    • Implement security boundaries
      实行保护边界
      實行保護邊界
      セキュリティバウンダリを実装するもの
    • Maintain critical invariants
      维持不变的重要条件
      維持不變的重要條件
      不変条件を管理するもの
    • Other security researchers are working on
      其他电脑专家正在研究的地方
      其他電腦專家正在研究的地方
      他のセキュリティ研究者が関わっているもの

Good starting points for fuzzing

可以从哪里开始进行模糊测试

可以從哪裡開始進行模糊測試

ファジングをはじめやすいところ

  • Isolated modules
    隔离的模组
    隔離的模組
    隔離モジュール
  • Can be tested on Firefox Desktop
    可以在 Firefox Desktop 测试
    可以在 Firefox Desktop 測試
    デスクトップ版 Firefox でテスト可能なもの

Typical issues a large project faces

大型项目通常会遇到的问题

大型專案通常會遇到的問題

大きなプロジェクトが直面する典型的な問題

  • Bugs
    Bugs
    Bugs
    バグ
  • Tests
    测试案例
    測試案例
    テスト
  • Manpower
    人力
    人力
    マンパワー
  • Resistance
    抵抗性
    抵抗性
    抵抗
  • Hard to find serious bugs
    很难找到严重的 bug
    很難找到嚴重的 bug
    重大なバグを見つけづらい

Case study: JavaScript team

案例分析:JavaScript 组

案例分析:JavaScript 組

ケーススタディ:JavaScript チーム

  • Too many fuzzbugs → resistance
    太多模糊测试找到的 bug → 抵抗性
    太多模糊測試找到的 bug → 抵抗性
    大量のファズバグ → 抵抗
  • Value
    价值
    價值
    価値
  • Fuzzing team → QA
    模糊测试组 → QA
    模糊測試組 → QA
    ファジングチーム → QA
  • Took time to realize
    需要时间实现
    需要時間實現
    理解に時間がかかった

Case study: JavaScript team (cont'd)

案例分析:JavaScript 组(续)

案例分析:JavaScript 組(續)

ケーススタディ:JavaScript チーム(続き)

  • Fuzzbug reports nowadays are:
    现在状况:
    現在狀況:
    現在のファズバグレポート:
    • Concise
      简洁
      簡潔
      簡潔
    • Popular
      受欢迎
      受歡迎
      歓迎されてる
    • Sometimes duplicates of real-world bugs
      有时是现实生活缺陷的翻版
      有時是現實世界缺陷的翻版
      時には実世界のバグと重複
    • Devs sometimes wait for fuzzbugs
      有时工程师会等待模糊测试的报告
      有時工程師會等待模糊測試的報告
      開発者がファズバグを待つことも

Quote

引用句

引用句

Quote

Fuzzing is an effective way to find corner cases overlooked when creating a patch and a test for it. A comprehensive fuzz bug report can also provide more information on how to fix it.

Fuzzing is an effective way to find corner cases overlooked when creating a patch and a test for it. A comprehensive fuzz bug report can also provide more information on how to fix it.

Fuzzing is an effective way to find corner cases overlooked when creating a patch and a test for it. A comprehensive fuzz bug report can also provide more information on how to fix it.

Fuzzing はパッチおよびそのテストの作成時に見落とされたのコーナーケースを見つけ出す効率的な方法です。 総合的な fuzz バグのレポートはバグを修正するための更なる情報も与えてくれます。

Working as a team

一起合作

一起合作

チームとして作業したこと

  • Fix fuzzbugs
    修补模糊测试找到的 bug
    修補模糊測試找到的 bug
    ファズバグの修正
  • Tests land on mozilla-central
    将测试案例输入 mozilla-central
    將測試案例輸入 mozilla-central
    mozilla-central への land をテスト
  • More starting points for fuzzing
    增加变异型测试数量
    增加變異型測試數量
    ファジングの導入を増やす

Devs code to help find more bugs

工程师帮忙写找 bug 的代码

工程師幫忙寫找 bug 的代碼

開発者のコードがバグ検出を助ける

  • Add assertions & testing functions
    增加 assertions 和测试程序的数量
    增加 assertions 和測試程式的數量
    アサーションとテスト関数を追加
  • Test components in isolation
    独立测试组件
    獨立測試組件
    コンポーネントのアイソレーションテスト
  • Dynamic analysis tool support
    支援动态分析工具
    支援動態分析工具
    動的解析ツールのサポート
    • ASan
    • TSan
    • Valgrind

Results

成效

成效

結果

  • Security bugs → higher-priority
    安全漏洞 → higher-priority-
    安全漏洞 → higher-priority
    セキュリティバグ → higher-priority
  • Fuzzblockers → higher-priority
    模糊测试严重 bug 问题 (Fuzzblockers) → higher-priority
    模糊測試嚴重 bug 問題 (Fuzzblockers) → higher-priority
    Fuzzblockers → higher-priority
  • Fuzzbugs → generally lower-priority
    模糊测试找到的 bug (Fuzzbugs) → lower-priority
    模糊測試找到的 bug (Fuzzbugs) → lower-priority
    ファズバグ → 基本的に lower-priority
  • The more we discover, the less others find
    内部找到越多,外部找到越少
    內部找到越多,外部找到越少
    内部で発見する数が多くなるにつれ、外部での発見が減少
  • More bugs discovered, as we scale
    延展得多,就能找到越多 bugs
    發展越廣,就能找到越多 bugs
    スケールするにつれて多くのバグが見つかった

Potential pitfalls

潜在的困难

潛在的困難

はまりうる落とし穴

  • Automation frameworks
    自动化工具
    自動化工具
    自動化フレームワーク
  • Devices not powerful enough
    手机不够强大
    手機不夠強大
    スペックが充分ではないデバイス

Factors for success

成功因素

成功因素

成功の秘訣

  • Patches land on the trunk (master) first
    修补程序先输入 trunk (master)
    Patches land on the trunk (master) first
    パッチが trunk (master) に最初に land すること
  • Backout when regressions occur
    将不好的补丁退出来
    將不好的 patch 退出來
    リグレッションが起きたらバックアウトすること
  • Fuzzblockers are fixed
    修理模糊测试严重的 bug
    修理模糊測試嚴重的 bug
    Fuzzblocker が修正されること
  • Tests are rarely disabled
    测试案例很少被关闭
    測試案例很少被關閉
    テストがほとんど無効にされないこと

Suggested automation building blocks

建议自动化的组件

建議自動化的組件

自動化のために

  • Input creation (the fuzzer)
    制造输入(模糊测试程序)
    製造輸入(模糊測試程式)
    入力の生成(ファザー)
  • Instrumentation
    仪表工具
    Instrumentation
    計測ツール
  • Monitoring
    监测
    監測
    モニタリング
  • Log bucketing
    记录铲装
    Log bucketing
    ログバケット
  • Testcase reduction
    Testcase reduction
    Testcase reduction
    テストケースの削減
  • Bisection
    二分法结果
    二分法結果
    Bisection

Mozilla fuzzing presentations

Mozilla 模糊测试演讲目录

Mozilla 模糊測試演講目錄

Mozilla のファジング関連トーク

Mozilla Security GitHub projects

Mozilla Security GitHub projects

Mozilla Security GitHub projects

Mozilla Security GitHub projects

  • funfuzz (Gary Kwong & Jesse Ruderman)
    • jsfunfuzz & DOMFuzz harness
      jsfunfuzz & DOMFuzz 工具
      jsfunfuzz & DOMFuzz 工具
      jsfunfuzz & DOMFuzz ハーネス
  • FuzzManager (Christian Holler)
    • Fuzzing management tools collection
      模糊测试工具管理集
      模糊測試工具管理集
      ファジング管理ツール集
  • Laniakea (Christoph Diehl)
    • Tool to manage EC2 instances at AWS
      在 AWS 管理 EC2 的实例工具
      在 AWS 管理 EC2 的實例工具
      AWS の EC2 インスタンス管理ツール

  • MozillaSecurity @ GitHub

Q&A

问与答

問與答

Q&A

Conclusion

结论

結論

まとめ

Thanks

谢谢大家

謝謝大家

Thanks

Red panda (Firefox)