GitHub Security Lab、C/C++向け自律型ファジングのFuzzing Taskflowを公開
AI-powered fuzzing with the GitHub Security Lab Taskflow Agent
GitHub Security LabのAntonio Moralesは、C/C++プロジェクト向けの自律型ファジングパイプラインFuzzing Taskflowを公開した。GitHubリポジトリを指定するだけで、ハーネス作成、AFL++の実行、カバレッジ分析、クラッシュのトリアージ、脆弱性レポート作成までをLLMエージェントが行う。ソースコードはオープンソースである。
実行方法は、seclab-taskflows-fuzzingのリポジトリでCodespaceを起動し、`./scripts/fuzzing/run_fuzzing.sh tukaani-project/xz` のようにowner/repo形式で対象を渡すだけである。エージェントはAFLのインストール、リポジトリのクローン、重要な関数の特定、ファズターゲットの作成まで自動で進める。このタスクフローはafl-fuzzやclang、LLMが選んだビルドコマンドをコンテナなしでホスト上で直接実行するため、プロンプトインジェクションのリスクを考慮し、使い捨ての環境で昇格権限なしに動かすよう注意している。デフォルトのモデルはClaude Sonnet 5で、内部テストをすべて通過したためだという。設定ファイルで変更できる。
構成はシェルドライバ、ステージごとのタスクフローYAML、AFL実行やハーネスのコンパイルなどを担うMCPツール群の3層である。判断はLLMエージェント、実行はMCPツールが担うという責務の分離が設計の要で、状態はすべてSQLiteデータベースに保存される。各ハーネスはファジング用の.aflバイナリとカバレッジ用の.covバイナリの2種類でビルドされる。
中核はカバレッジのフィードバックループである。エージェントは各反復でAFLを実行し、キューを再生してカバレッジレポートを得て、未到達の分岐に応じてシードの追加、ハーネスの修正、辞書の自動拡張、あるいはスキップを選ぶ。実行時間は30秒から960秒まで反復ごとに倍増し、連続2回の反復で行カバレッジの伸びが閾値(デフォルト1%)を下回ると打ち切る。
構造を意識した入力生成として、JSONやXMLなど形式別の辞書とカスタムミューテータ、ソースコードから文字列や数値定数を抽出する辞書、カバレッジに応じて育つAFL辞書、コーパスのスプライス演算子の4つの仕組みを備える。コーパスは反復やキャンペーンをまたいで保持され、afl-cminでサイズが抑えられる。
クラッシュはafl-tminで最小化され、ASanのスタックトレースとスタックトップのハッシュで重複排除される。エージェントは公開APIまで呼び出し連鎖をたどり、vulnerabilityやharness_bugなどの判定を付けたmarkdownレポートを書き、修正差分とリグレッションテスト案も添える。ただしパッチは「review required」扱いで、判定は人間が確認する出発点として扱うべきだと著者は述べている。進行状況はポート8765のライブHTMLダッシュボードで確認できる。
出典: GitHub Blog: AI & ML · github.blog