検索
ニュース

Google、OSS向けファジングサービス「OSS-Fuzz」をLLMで改善コードカバレッジの向上に成功

Googleは、同社の大規模言語モデルを利用して、オープンソースソフトウェア向けファジングサービス「OSS-Fuzz」の対象プロジェクトのコードカバレッジを高めることに成功した。

Share
Tweet
LINE
Hatena

 Googleは2023年8月16日(米国時間)、同社の大規模言語モデル(LLM)を利用して、オープンソースソフトウェア(OSS)向けファジングサービス「OSS-Fuzz」の対象プロジェクトのコードカバレッジ(網羅率)を高めることに成功したと発表した。

 ファジングは、ソースコードを直接解析するのではなく、極端に長い文字列や不正な形式の値など、さまざまな入力データを与えてコードを実行し、予期せぬ動作やクラッシュを意図的に引き起こすテスト手法を指す。

 OSS-Fuzzは、オープンソースプロジェクト向けにファジングツール(ファザー)を実行し、検出されたバグを非公開で開発者に知らせる無償サービスだ。2016年から運営されており、現在では1000以上のオープンソースプロジェクトを継続的なファジングでサポートしている。

 これまでに1万件以上のセキュリティ脆弱(ぜいじゃく)性を発見し、修正を検証してきたが、Googleは、コードカバレッジを拡大することで、OSS-Fuzzは、さらに多くのバグを発見できる可能性があると考えている。OSS-Fuzzは、オープンソースプロジェクトのコードを平均して約30%しかカバーしていないからだ。最近の研究は、この割合を高める最も効果的な方法は、プロジェクトごとにファズターゲットを追加することであると示唆している。

 オープンソースプロジェクトがOSS-Fuzzのサポート対象に加わる際、メンテナーは、プロジェクトをOSS-Fuzzのインフラに統合し、ファズターゲットを追加する。ファズターゲットは、対象となるコードをテストするためにランダムな入力を使用する関数を指す。ファズターゲットの作成は、単体テストの作成に似た、プロジェクト固有の手動プロセスだ。

 メンテナーにとって、こうした作業に時間や労力を費やすことは初期投資だが、その見返りとして、ファジングによる継続的なセキュリティメリットが得られる。だが、ファズターゲットの包括的なセットを書くことは、ボランティアであることが多いメンテナーにとって多大な負担になる。

 そこでGoogleは、「LLMがメンテナーのためにファズターゲットを作成できたら、どうなるか」と考えた。

LLMによるファズターゲットの作成実験

 Googleは、OSS-FuzzをLLMに接続し、LLMにファズターゲットを作成させる実験を行い、結果を評価する評価フレームワークを構築した。これらの手順は次のようになる。

  1. OSS-Fuzzの「Fuzz Introspector」ツールが、サンプルプロジェクトのコードのうち、ファジングされていない可能性の高い部分を特定し、そのコードを評価フレームワークに渡す
  2. 評価フレームワークは、LLMが新しいファズターゲットの生成に使用するプロンプトを作成する。プロンプトにはプロジェクト固有の情報が含まれる
  3. 評価フレームワークは、LLMが生成したファズターゲットを受け取り、その新しいターゲットを実行する
  4. 評価フレームワークは実行を観察し、コードカバレッジの変化をチェックする
  5. ファズターゲットがコンパイルに失敗した場合、評価フレームワークは、コンパイルエラーに対処した修正版のファズターゲットをLLMに生成させる

この実験は、対象コードの特定からコードカバレッジの変化の評価まで、完全に自動化されたプロセスだ(提供:Google)

 Googleによると、最初は、評価フレームワークが作成したプロンプトからLLMが生成したコードは、コンパイルされなかった。だが、複数のサンプルプロジェクトでプロンプトエンジニアリングを数回繰り返し、新しいファズターゲットを試した結果、プロジェクトによってコードカバレッジが1.5〜31ポイント向上した。例えば、tinyxml2プロジェクトでは、行カバレッジが38%から69%に上昇した。

 tinyxml2の実験結果を手作業で再現するには、少なくとも1日分の作業が必要になると、Googleは述べている。これは、全てのOSS-Fuzzプロジェクトを手作業でカバーするには、数年の作業が必要になることを意味するとしている。tinyxml2などの有望な結果を踏まえ、Googleは、この実験に使用した仕組みを本番環境に実装し、他のOSS-Fuzzプロジェクトでも、同様の自動コードカバレッジを実現したいと考えている。

 さらにGoogleは、OpenSSLプロジェクトではGoogleのLLMが、「CVE-2022-3602」を再発見するファズターゲットを自動的に生成したと報告している。「これは新しい脆弱性ではないが、コードカバレッジの拡大に伴い、ファジングで現在見逃されている脆弱性がより多く発見されることを示唆している」と説明している。

 Googleは、この実験のプロンプトと出力の例および詳しい実験レポートをWebで公開している。

完全に自動化されたファジングへ

 Googleは今後数カ月以内に、研究者が独自の自動ファズターゲット生成をテストできるように、評価フレームワークをオープンソース化すると表明している。また、モデルの微調整、プロンプトエンジニアリング、インフラの改善を通じて、ファズターゲット生成のためのLLMの使用を最適化し続ける計画だ。

 長期的には、LLMによるファズターゲット生成をOSS-Fuzzの機能として完全に統合し、OSS-Fuzzプロジェクトの新しいターゲットを継続的に生成して、手作業によるターゲット作成を不要にすることなどを目指すとしている。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る