Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
2022/09/07 Let’s Go Talk #3 TOC Goで学ぶ Fuzzing
Slide 2
Slide 2 text
- TOC - コネヒト株式会社 - バックエンドエンジニア - 主にPHP - Go は趣味で勉強中 自己紹介
Slide 3
Slide 3 text
- 入力されうるテストケースを大量に入力し、挙動を確認するテスト手法 - 意図しないデータが入力されたときに、挙動を調べることで不具合・脆弱 性の確認を行う - 想定外のデータを`ファズ`というらしい - テストをする立場だと、自分に都合のいいテストデータを選びがちである が、バイアスのかからないテストデータを利用できる Fuzzingってなに?
Slide 4
Slide 4 text
- 元々 go-fuzz というツールがあったが、Go 1.18 から標準で機能として追 加された - go-fuzz は今まで334個のバグを見つけている(すごい!) - 既存のツールよりも簡単に、ユニットテストと同じように書けることを目指し た - ref. Design Draft: First Class Fuzzing Go 1.18 で追加されたFuzzing
Slide 5
Slide 5 text
実際のコード例 - seed corpus と呼ばれる 「種になるデータ」を入れる。未 指定もできるがパターンがわ かっているなら指定した方が信 頼できそう。 - テスト部分はユニットテストと 同様にはできない場合がある (=入力を予測できない)。元 に戻せるテストだったり、エ ラーが起きたかどうかで確認 する。
Slide 6
Slide 6 text
ユニットテストと比較
Slide 7
Slide 7 text
go-fuzz を使うと - func Fuzz(data []byte) int でテストデータ生成したり - `$ go-fuzz-build` したり - `$ go-fuzz` したり と特有の処理、コマンドがあるっぽい
Slide 8
Slide 8 text
実際に実行すると - IDE だと GUI 上で -fuzz フ ラグをつけられて便利 - execs: 入力数。大量に実行 されていることがわかる - interesting: コードカバレッ ジが変化するような入力値。数 の増加は時間と共に鈍化。 実行
Slide 9
Slide 9 text
実際に実行すると - 失敗したテストケースは別 ファイルと記録される - 次回テストするときのテスト データとして用いられる - これも個別実行できるので デバッグに便利!
Slide 10
Slide 10 text
- Go 標準の Fuzzing は既存のユニットテストっぽく書けるので学習コスト が小さそう - 自身のバイアスに囚われない、信頼できるテストケースを見つけられそう - Design Draft: First Class Fuzzing で思想を知るのは面白いので、他 のも見てみたい まとめ
Slide 11
Slide 11 text
- Design Draft: First Class Fuzzing - Go1.18から追加されたFuzzingとは - フューチャー技術ブログ - Go Fuzzingによるファジングテスト/ランダムテスト - 絶対に落とせない!友人の結婚式の余興用アプリケーションをエラーゼロ で突破した - M3 Tech Blog 参考