ARQ: Agentic CodeQL Query Refinement for C/C++ Vulnerability Detection
ARQは、合成されたプログラムとLLMからの実行に基づいたエビデンスを用いてC/C++のCodeQLクエリを自動的に洗練させ、ラベル付きデータセットを必要とせずに、真陽性検出を最大119.8%向上させ、公式リポジトリにおける長年の課題を解決するエージェンティックなフレームワークである。
原論文は CC0 1.0 (http://creativecommons.org/publicdomain/zero/1.0/) のもとパブリックドメインに提供されています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
私たちのコンピュータやスマートフォン、自動車を動かしているソフトウェアは、多くの場合、CやC++といった言語で構築されています。これらのツールは、プログラマーにマシンがメモリをどのように使用するかを精密に制御する力を与えますが、その同じ力が、ミスを犯しやすくさせています。プログラムのメモリ処理におけるわずかなミスが、攻撃者にシステムをクラッシュさせたり、データを盗み出したりするための隙を与えてしまうことがあります。これらのエラーが実害を及ぼす前に防ぐため、セキュリティの専門家は、コードを読み取り、危険なパターンを探し出す自動スキャナーを使用します。これらのスキャナーは、人間によって書かれた一連のルールに依存しており、そのルールは、どのような脆弱なコードがどのようなものかを正確に指示します。もしルールが厳しすぎれば、スキャナーは真の危険を見逃してしまいます。逆にルールが緩すぎれば、問題がない場所に対して警告を発してしまい、時間と信頼を浪費することになります。
長年、これらのルールを改善することは、遅い手作業の仕事でした。専門家はコードを読み、スキャナーがどこで失敗するかを推測し、手作業でルールを書き直さなければなりませんでした。このプロセスが困難なのは、ルールが完璧でなければならず、スキャンされるコードが膨大かつ複雑であるためです。ARQと呼ばれる新しいアプローチは、この作業のやり方を変えます。人間の直感だけに頼るのではなく、ARQは人工知能を使用して、これらのルールを自動的にテストし、修正します。それは単に推測するのではなく、作成したコードを実行して、そのルールが実際に機能するかどうかを確認します。AIがテストプログラムを生成し、それを実行し、その結果を用いてルールを改善するというループを構築することで、ARQは人間が長年見落としてきたエラーを見つけ出し、修正します。
ARQの背後にいる研究者たちは、シンプルかつ強力なアイデアからスタートしました。それは、「ルールとは、安全なコードと危険なコードを区別できる能力においてのみ価値がある」という考えです。彼らは、ある有名なセキュリティスキャナーから特定のルールを一つ取り出し、人工知能に、それと非常によく似た2つのプログラムを作成させました。一方のプログラムは安全になるように設計され、もう一方は危険になるように設計されました。そして、AIはスキャナーが両方にどのように反応するかを観察しました。もしスキャナーが安全なプログラムを危険だとフラグ立てしたならば、そのルールは緩すぎました。もしスキャナーが危険なプログラムを見逃したならば、そのルールは厳しすぎました。スキャナーの判定と、コードが実際に実行されたときに起きたこととの間のこの不一致が、AIがルールを修正するために必要とする証拠となりました。
AIが単に推測しているのではないことを確実にするために、システムは「サニタイザ」と呼ばれる特別なツールを使用しました。このツールは、プログラムが実行されている間、高精度なセンサーのように振る舞います。もしプログラムが、すでに解放されたメモリを使用するといった不安全な動作を行おうとした場合、サニタイザはプログラムを停止させ、即座にエラーを報告します。これにより、研究者たちは「正解(グラウンド・トゥルース)」を得ることができました。彼らは、スキャナーの判定とサニタイザのレポートを比較することができました。もしスキャナーがプログラムを安全だと言ったにもかかわらず、サニタイザがクラッシュを検出した場合、研究者たちはスキャナーが間違いを犯したことを知りました。そして、AIはこの確認された間違いを利用してルールを書き換え、より賢いものへと進化させたのです。
このプロセスは連続的なループの中で行われました。AIは新しい一対のテストプログラムを生成し、実行し、結果を確認し、再びルールを洗練させます。極めて重要なのは、ルールが変更されるたびに、システムが以前のすべての例に対して再テストを行い、修正によって既に機能していたものが壊れていないかを確認することです。これにより、AIが過剰に修正を行い、古い問題を解決する過程で新しい問題を生み出すことを防ぎました。チームは、この手法を、実世界のソフトウェアで使用されている12種類の異なるセキュリティルールに対してテストしました。彼らはこれらのルールを、セキュリティツールをテストするために設計された2つの大規模なコードコレクションに対して実行しました。その結果、AIによって洗練されたルールは、人間が書いた元のルールよりも大幅に多くの真の脆弱性を発見したことが示されました。場合によっては、検出された脅威の数が2倍以上に増加しましたが、誤検知の割合は極めて低く、98パーセント以上の精度を維持しました。
この研究の影響は、テストデータにとどまりませんでした。研究者たちは、精緻化されたルールを、インターネットの多くを支えているデータ圧縮や画像表示のための広く使われている実用的なソフトウェアライブラリに適用しました。改良されたルールは、これらのライブラリの中に何年も隠れ続けていた2つのバグを明らかにしました。さらに、システムは、公開されているソフトウェアリポジトリ上で報告されていたものの、27ヶ月間も未解決のまま残っていた3つの特定の問題を正常に解決しました。これらの問題は、人間による専門家の調査でも2年以上も行き詰まっていたものですが、自動化されたシステムは、検出ルールを体系的にテストし調整することによって解決したのです。
このアプローチは、私たちのデジタル・インフラストラクチャの安全性を維持するための新しい方法を示唆しています。人間が欠陥を見つけて手動で修正を書くのを待つのではなく、システムは自らのルールを実際の実行に対して継続的にテストできるようになります。この手法は、ラベル付けされたエラーの膨大なデータベースや、長年の履歴データを必要としません。単に、コードを実行してその結果を確認する能力さえあればよいのです。プログラムが紙の上でどのように見えるかではなく、プログラムが実際にどのように振る舞うかという現実の中に人工知能を根付かせることで、研究者たちは、ソフトウェアの進化に合わせてセキュリティスキャナーを鋭敏かつ効果的に保ち続けることができるツールを作り上げました。この成果は、人工知能が具体的な実行コードからの証拠と組み合わされたとき、長年人間の努力を拒んできた複雑なエンジニアリングの問題を解決できることを証明しています。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。