注:ファイル名はimgRead.cからdvcp.cに変更されました。動画をご覧の場合はimgRead.cと表示されますが、GitHubリポジトリではdvcp.cとなっていますので、正しいファイル名を使用してください。
私のYouTubeチャンネル: https://www.youtube.com/user/MrHardik05/featured?view_as=subscriber
これは何ですか?
これは、一般的な種類の脆弱性を説明するために私がコーディングしたシンプルなCプログラムです。例:
このCプログラムには上記のすべての脆弱性を含む脆弱なコードが含まれており、AFL、libafl、libfuzzer、hongfuzz、winafl、jackalopeなど、お好みの任意のファザーでファジングできます。
コンパイル方法
コマンドプロンプトで「make」と入力するだけです。Makefileが同梱されています。
AFL用の入力を生成する方法は?
以下のようにサンプル入力ファイルを作成するだけで、残りはAFLが処理します:
echo "IMG" >input/1.txt
AFLは自動的に新しいテストケースを生成し、上記の脆弱性のほとんどを発見します。それがAFLの素晴らしいところです :)
AFLを使ってファジングするには?
1. まず、次のコマンドを使用してこのプログラムをコンパイルします:
afl-gcc -g -fsanitize=address dvcp.c -o dvcp
2. 次のコマンドを実行します:
afl-fuzz -i input -o output -m none -- ./dvcp @@
honggfuzzを使ってファジングする方法
1. まず、次のコマンドを使用してこのプログラムをコンパイルします:
hfuzz-gcc -g -fsanitize=address dvcp.c -o dvcp
2. 次のコマンドを実行します:
hongfuzz -i input -- ./dvcp ___FILE___
libfuzzerを使ってファジングする方法
Cコードを修正する必要があります。更新されたコードはここから入手できます: https://github.com/hardik05/Damn_Vulnerable_C_Program/blob/master/dvcp_libfuzzer.c
1. 次のコマンドを使用してプログラムをコンパイルします:
clang -fsanitize=fuzzer,address,undefined -g dvcp_libfuzzer.c -o dvcp_libfuzzer
2. ファジングするには次のコマンドを実行します:
./dvcp_libfuzzer
ビデオチュートリアルはこちらでご覧いただけます:
完全なファジングプレイリスト:
https://www.youtube.com/watch?v=r7ucv2kN4j4&list=PLHGgqcJIME5kYhOSdJjvtVS4b4_OXDqM-
個別のビデオは以下のとおりです:
Linux
LibAFL
[libAFLを使ったファジング]libAFLをシステムにインストールする方法と、さまざまなコンポーネントとは? -> https://www.youtube.com/watch?v=ztGfxbvcrms
[libAFLを使ったファジング]libAFL ForkServerの紹介、libAFL forkserverファザーの実行。 -> https://www.youtube.com/watch?v=Ed1anYoGTyA
[libAFLを使ったファジング]libAFL forkserverファザーでDamn Vulnerable C Programをファジングする -> https://www.youtube.com/watch?v=ad_4zroiS_g
[libAFLを使ったファジング] libAFL forkserverファザーで共有メモリモードを使用する -> https://www.youtube.com/watch?v=GXD_qkISyfY
AFL++
[AFLplusplusを使ったファジング] AFLPlusplusのインストールとシンプルなCプログラムのファジング -> https://www.youtube.com/watch?v=9wRVo0kYSlc
[AFLplusplusを使ったファジング] Linux上でソースコードのないバイナリを永続モードでファジングする方法 -> https://www.youtube.com/watch?v=LGPJdEO02p4
AFL
[AFLを使ったファジング] UbuntuにAFLをインストールする方法 -> https://www.youtube.com/watch?v=r7ucv2kN4j4
[AFLを使ったファジング] AFLでシンプルなCプログラムをファジングする -> https://www.youtube.com/watch?v=NiGC1jxFx78&t=66s
[AFLを使ったファジング] AFLでさまざまな種類の脆弱性を見つける -> https://www.youtube.com/watch?v=m1RkShHzx_8&t=151s
[AFLを使ったファジング] crashwalkでクラッシュをトリアージし、GDBで根本原因を見つける -> https://www.youtube.com/watch?v=5R2gPkCXZkM
[AFLを使ったファジング] QemuモードでAFLを使用してソースコードのないバイナリをファジングする。 -> https://www.youtube.com/watch?v=np3sLLFQs6I
Honggfuzz
[honggfuzzを使ったファジング] HongFuzzでシンプルなCプログラムをファジングする -> https://www.youtube.com/watch?v=6OBXJtEe-d8
[honggfuzzを使ったファジング] Hongfuzz、checksec(pwntools)、ASAN -> https://www.youtube.com/watch?v=Lr8pLQRTHac
Libfuzzer
[libfuzzerを使ったファジング] LibFuzzerを使ってシンプルなCプログラムをファジングする方法 -> https://www.youtube.com/watch?v=hFva8kJQwnc&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp
[libfuzzer,AFLを使ったファジング] AFLを使ってlibfuzzerハーネスプログラムをファジングする方法 -> https://www.youtube.com/watch?v=HfEqm3TrfwM&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp&index=2
OpenSSLの脆弱性CVE-2022-3602およびCVE-2022-3786を再現し、libfuzzerを使用する方法 -> https://www.youtube.com/watch?v=vhTuXph1dtY
Radamsa
[Radamsaを使ったファジング] RadamsaでシンプルなCプログラムをファジングする -> https://youtu.be/1FRsXVNpynQ
Windows
WinAFL
[WinAFLを使ったファジング] WinAFLでシンプルなCプログラムをファジングする -> https://www.youtube.com/watch?v=Va_Wtxf3DMc
[WinAFLを使ったファジング] ファジング関数とは何か、すべてが正常に動作していることを確認するにはどうすればよいか? -> https://www.youtube.com/watch?v=HLORLsNnPzo
winaflでファジングするためのハーネスがもっと必要です
もちろん、こちらを確認してください -> https://github.com/hardik05/winafl-harness
winaflのデフォルトとは異なるミューテーターなど、何か違うものを試してみたいのですが。
はい、これを試すことができます -> https://github.com/hardik05/winafl-powermopt
作成次第、さらにアップロードされます。
GoogleのOSS-Fuzz
OSS-Fuzzの仕組み: オープンソースプロジェクトのためのファズテストガイド -> https://www.youtube.com/watch?v=OBxCDsJ-0aM
なぜこれを作成したのですか?
初心者にも経験者にも、さまざまな種類の脆弱性を理解するには多くの時間がかかります。私自身もこの問題に直面し、学んだことを共有することにしました。
何か学ぶことがあれば、お礼のメッセージを送ってください。それだけが必要です。また、何かを改善または修正したい場合は、PRを歓迎します!
作者は?
Twitter: https://twitter.com/hardik05
メール: TwitterでDMしてください :)
Web: http://hardik05.wordpress.com
フィードバック?
提案やコメントはいつでも歓迎します。問題を見つけた場合や修正、新機能がある場合は、プルリクエストを送ってください。