生成AIが自律的にテストを生成、実行しバグや脆弱性を発見してくれる「Spark」、Code Intelligenceが正式リリース
ドイツのCode Intelligence社は、生成AIが人間の介在なしに自律的にソフトウェアテストを生成し実行することで、対象となるソフトウェアのバグや脆弱性などを発見してくれるAIテストエージェント「Spark」の正式リリースを発表しました。
Meet Spark, an AI Test Agent That Autonomously Uncovers Vulnerabilities!!#AI #AITESTAGENT #CIFUZZ #SPARK #TESTING #SECURITY #SOFTWAREhttps://t.co/wr6CBydIA6 pic.twitter.com/RApYEHsXAH
— Code Intelligence (@CI_Fuzz) January 30, 2025
Sparkが自律的に生成し実行するのは「ホワイトボックスファズテスト」(White box Fuzz Test)と呼ばれるテストです。
ファズテストもしくはファジングとは、検査対象のソフトウェアに「Fuzz」と呼ばれる問題を引き起こしそうなデータを大量に送り込み、その応答や挙動を監視することで脆弱性を検出する検査手法です。
参考:Google、脆弱性検出のためのファジング(Fuzzing)を機械的に実行する「OSS-Fuzz」、ベータ公開
このファズテストを対象となるソフトウェアのコードなどの内容を把握した上で行うことを「ホワイトボックスファズテスト」、ソフトウェアの内容が分からないままFuzzを送り込んでテストすることを「ブラックボックスファズテスト」と呼びます。
ホワイトボックスファズテストはバグや脆弱性を発見する手法として有効であることが知られていますが、ソースコードなどを把握した上で多数のテストケースやFuzzデータの作成を行う手間が大きいことが課題です。
今回正式リリースされたSparkは、生成AIがソースコードを解析して攻撃対象となるAPIや関数などの境界面の選択とFuzzの生成を行い、それを送り込むためのテストコードを生成、実行し、結果をまとめてバグや脆弱性を報告してくれる、というものになります。
Sparkが自律的に行うテストの内容
Sparkは起動すると次のようなステップで自律的にソフトウェアテストを行うと説明されています。
1:テスト対象の特定
コードを解析し、ファジング対象となる関数やAPIを次の4つのメトリクス「関数が到達できる行数の多さなどのカバレッジ範囲」「ポインタのデリファレンス(dereference)や生のポインタ操作などメモリ破壊につながるようなリスクの高い動作」「memcpy、strcpy、memset のような潜在的に安全でない関数の呼び出し」「コードの複雑度」をスコアリングすることで特定します。
2:ファズテストの作成
ターゲットとなる関数やAPIのテストに必要な正しいコンテキストを抽出するための静的コード解析および大規模言語モデル(LLM)を活用したファズテストの作成と最適化。
3: 生成されたテストの実行と検証
テストを実行し、正しくビルドされたかどうか、高いコードカバレッジが達成されたかどうかを確認します。
4:発見されたバグを報告
発見されたバグや脆弱性にフラグを立て、問題が発生したコードの正確な行、スタックトレース、根本原因の分析を支援するためにバグの引き金となった入力値などの詳細情報を報告します。
下記は同社が公開したSparkのデモ動画から、実行後の画面キャプチャです。1行目でカバレッジ75%と引数を設定してSparkを実行すると、Sparkはそれに従ってテストを作成し、実行結果として深刻度(SEVERITY)9.0と4.0の2つのバグを報告しています。