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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
TOC
September 07, 2022
Programming
310
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで学ぶ Fuzzing
Let's Go Talk #3 で LT 登壇した際の資料
https://connehito.connpass.com/event/257000/
TOC
September 07, 2022
More Decks by TOC
See All by TOC
仮説→実験→検証→学び... プロダクト開発を前に進めるためにMobius Outcome Deliveryを学び 実践していること
toc0522
3
4k
ファシリテーションLT ~良いファシリテーションをするために~
toc0522
0
550
もっと快適に! デプロイフロー改善への道!
toc0522
0
930
Go で Golden File Test
toc0522
1
1.3k
Other Decks in Programming
See All in Programming
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
850
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
150
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3k
AIが無かった頃の素敵な出会いの話
codmoninc
1
210
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
340
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
AIエージェントで 変わるAndroid開発環境
takahirom
2
710
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
110
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
240
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
530
5分で問診!Composer セキュリティ健康診断
codmoninc
0
580
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.7k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
350
Designing for humans not robots
tammielis
254
26k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
The agentic SEO stack - context over prompts
schlessera
0
850
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
810
Product Roadmaps are Hard
iamctodd
55
12k
Side Projects
sachag
455
43k
The SEO Collaboration Effect
kristinabergwall1
1
510
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
620
Six Lessons from altMBA
skipperchong
29
4.3k
Designing for Performance
lara
611
70k
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 参考