Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goで学ぶ Fuzzing
Search
TOC
September 07, 2022
Programming
0
300
Goで学ぶ Fuzzing
Let's Go Talk #3 で LT 登壇した際の資料
https://connehito.connpass.com/event/257000/
TOC
September 07, 2022
Tweet
Share
More Decks by TOC
See All by TOC
仮説→実験→検証→学び... プロダクト開発を前に進めるためにMobius Outcome Deliveryを学び 実践していること
toc0522
3
3.7k
ファシリテーションLT ~良いファシリテーションをするために~
toc0522
0
500
もっと快適に! デプロイフロー改善への道!
toc0522
0
870
Go で Golden File Test
toc0522
1
1.2k
Other Decks in Programming
See All in Programming
Graviton と Nitro と私
maroon1st
0
150
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
開発に寄りそう自動テストの実現
goyoki
2
1.6k
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
4.6k
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
240
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
140
ThorVG Viewer In VS Code
nors
0
460
Patterns of Patterns
denyspoltorak
0
390
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
マスタデータ問題、マイクロサービスでどう解くか
kts
0
160
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
280
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
0
160
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
3
35k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
94
End of SEO as We Know It (SMX Advanced Version)
ipullrank
2
3.8k
Navigating Team Friction
lara
191
16k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
54
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
71
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
GitHub's CSS Performance
jonrohan
1032
470k
The Pragmatic Product Professional
lauravandoore
37
7.1k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Transcript
2022/09/07 Let’s Go Talk #3 TOC Goで学ぶ Fuzzing
- TOC - コネヒト株式会社 - バックエンドエンジニア - 主にPHP - Go
は趣味で勉強中 自己紹介
- 入力されうるテストケースを大量に入力し、挙動を確認するテスト手法 - 意図しないデータが入力されたときに、挙動を調べることで不具合・脆弱 性の確認を行う - 想定外のデータを`ファズ`というらしい - テストをする立場だと、自分に都合のいいテストデータを選びがちである が、バイアスのかからないテストデータを利用できる
Fuzzingってなに?
- 元々 go-fuzz というツールがあったが、Go 1.18 から標準で機能として追 加された - go-fuzz は今まで334個のバグを見つけている(すごい!)
- 既存のツールよりも簡単に、ユニットテストと同じように書けることを目指し た - ref. Design Draft: First Class Fuzzing Go 1.18 で追加されたFuzzing
実際のコード例 - seed corpus と呼ばれる 「種になるデータ」を入れる。未 指定もできるがパターンがわ かっているなら指定した方が信 頼できそう。 -
テスト部分はユニットテストと 同様にはできない場合がある (=入力を予測できない)。元 に戻せるテストだったり、エ ラーが起きたかどうかで確認 する。
ユニットテストと比較
go-fuzz を使うと - func Fuzz(data []byte) int でテストデータ生成したり - `$
go-fuzz-build` したり - `$ go-fuzz` したり と特有の処理、コマンドがあるっぽい
実際に実行すると - IDE だと GUI 上で -fuzz フ ラグをつけられて便利 -
execs: 入力数。大量に実行 されていることがわかる - interesting: コードカバレッ ジが変化するような入力値。数 の増加は時間と共に鈍化。 実行
実際に実行すると - 失敗したテストケースは別 ファイルと記録される - 次回テストするときのテスト データとして用いられる - これも個別実行できるので デバッグに便利!
- Go 標準の Fuzzing は既存のユニットテストっぽく書けるので学習コスト が小さそう - 自身のバイアスに囚われない、信頼できるテストケースを見つけられそう - Design
Draft: First Class Fuzzing で思想を知るのは面白いので、他 のも見てみたい まとめ
- Design Draft: First Class Fuzzing - Go1.18から追加されたFuzzingとは - フューチャー技術ブログ
- Go Fuzzingによるファジングテスト/ランダムテスト - 絶対に落とせない!友人の結婚式の余興用アプリケーションをエラーゼロ で突破した - M3 Tech Blog 参考