AIエージェントを使用したstbライブラリの堅牢化
本記事では、AIエージェント(LLMベース)を使用してstbライブラリのセキュリティ脆弱性を発見、検証、修正する方法を紹介します。著者は、発見(Web検索、ファジング、静的解析)、検証(自動テストによるバグの確認)、修正の3段階のプロセスを設計しました。複数のstbライブラリで134件の潜在的なバグが見つかり、そのうち115件が実際の脆弱性として確認され修正され、ほとんどのケースでパフォーマンスへの影響は無視できる程度でした。
stbは、画像、フォント、オーディオなどの様々なタスクに使用される単一ヘッダーのCライブラリのコレクションです。しかし、これらのライブラリにはセキュリティ問題が多く、その多くが迅速に対処されていないため、信頼できない入力を処理する環境には適していません。
一方、ここ数ヶ月の間、特にAnthropicによるClaude Mythosとその後の短命だったClaude Mythos 5の導入以降、セキュリティ研究におけるLLMの利用について多くの議論が行われています。
著者はMythosにアクセスできませんが、現在利用可能なLLMはセキュリティ研究と堅牢化に有用であると信じており、ここではそれらを使用してstbライブラリを堅牢化します。
エージェントフロー
いくつかの実験の後、著者はセキュリティ脆弱性を発見して修正できるエージェント設定を考案しました。このフローの主な利点は、バグを修正する前に検証することで、発見されたバグが実際のセキュリティ問題であり、誤検出ではないことを保証することです。
このフローは3つの異なるフェーズを経ます:
- 発見: エージェントが潜在的なセキュリティ問題を検索し、BUGS.mdに文書化します。発見には3つの手法があります:Web検索(既知のバグや脆弱性の調査)、ファジング(悪意ある入力のテスト)、静的解析(ソースコードの読解と怪しい部分のフラグ付け)。
- 検証: LLMは幻覚を起こしやすく、存在しない脆弱性を報告することがあるため、自動テスト(単体テストまたはE2Eテスト)を実装してバグとパッチの両方を検証します。
- 修正: 検証後、最小限の変更でバグを修正し、テストを再実行して修正を確認します。
結果
著者はOpencode、Codex、GitHub Copilot、Hermesを含む複数のAIエージェントとモデルをテストしました。驚くべきことに、Opencodeの無料モデルを含むすべてが印象的な結果を示しました。
現時点で、stbで見つかり修正されたバグの数は以下の通りです:
| ライブラリ | 発見バグ総数 | Web検索 | ファジング | 静的解析 | 有効バグ | | --- | --- | --- | --- | --- | --- | | stb_c_lexer.h | 12 | 7 | 2 | 3 | 12 | | stb_easy_font.h | 5 | 0 | 1 | 4 | 5 | | stb_hexwave.h | 12 | 5 | 4 | 3 | 12 | | stb_image.h | 30 | 21 | 5 | 4 | 21 | | stb_image_resize2.h | 17 | 13 | 1 | 3 | 13 | | stb_image_write.h | 9 | 4 | 2 | 3 | 7 | | stb_truetype.h | 36 | 13 | 15 | 8 | 34 | | stb_vorbis.c | 13 | 8 | 2 | 3 | 11 | | 合計 | 134 | 59 | 34 | 41 | 115 |
パフォーマンスへの影響
修正のパフォーマンス影響を測定するためにベンチマークを実施しました。stb_truetype.hを除き、これらのライブラリのパフォーマンス低下はごくわずかでした。
- stb_image.h:PNGデコード512x512 RGBが1.930msから1.894ms(-1.9%)、HDRデコード512x512 RGBが2.259msから2.438ms(+7.9%)など。
- stb_truetype.h:一部の操作で顕著な低下が見られました。128pxビットマップレンダリングが0.880msから1.162ms(+32.0%)、48pxアトラスパッキングが0.343msから0.429ms(+25.1%)など。
- stb_image_resize2.h:変化はごくわずかで、±2%以内。
- stb_image_write.h:ほとんどのエンコード操作で±3%以内の変化、HDRエンコード1024x1024 RGBが+8.2%。
全体として、AIエージェントによる自動セキュリティ強化手法はstbライブラリにおいて顕著な成果を上げ、多くの実際の脆弱性を発見し、ごくわずかなパフォーマンスコストで修正しました。