Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goで学ぶ Fuzzing
Search
TOC
September 07, 2022
Programming
0
250
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
2.7k
ファシリテーションLT ~良いファシリテーションをするために~
toc0522
0
320
もっと快適に! デプロイフロー改善への道!
toc0522
0
720
Go で Golden File Test
toc0522
1
830
Other Decks in Programming
See All in Programming
N.E.X.T LEVEL
pluu
2
210
Vapor Revolution
kazupon
2
2.3k
PipeCDの歩き方
kuro_kurorrr
3
130
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.9k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
0
2.8k
Remix on Hono on Cloudflare Workers
yusukebe
1
380
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
360
Develop iOS apps with Neovim / vimconf_2024
uhooi
1
120
Modular Monolith Monorepo ~シンプルさを保ちながらmonorepoのメリットを最大化する~
yuisakamoto
10
3.6k
DevTools extensions で 独自の DevTool を開発する | FlutterKaigi 2024
kokiyoshida
0
280
Reckoner における Datadog Browser Test の活用事例 / Datadog Browser Test at Reckoner
nomadblacky
0
180
layerx_20241129.pdf
kyoheig3
1
170
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
470
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Become a Pro
speakerdeck
PRO
25
5k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
[RailsConf 2023] Rails as a piece of cake
palkan
52
5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
17k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
400
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Thoughts on Productivity
jonyablonski
67
4.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
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 参考