ソフトウェアセキュリティにおける最も厄介な問題のひとつ、つまり自動コードスキャナに「本当に」問題のあるバグだけを正しく検出させることに対処するために、ARQ と呼ばれる新しい研究フレームワークが登場した。Chunyi Wang によるこの研究は 2026 年 8 月に arXiv で公開されており、C/C++ コードの欠陥検出に広く使われているCodeQL による脆弱性検出を対象としている。そして、現在の検出クエリは、開発者が想定しているほど信頼できるものではないことを示している。
Summary
主なポイント
- ARQ は、ラベル付きデータセットや脆弱性特化テンプレートを使わずに、合成プログラムから得られる実行証拠を用いて、CodeQL の C/C++ クエリを自動的に洗練する。
- 3 つの商用 LLM(GPT-5.4、Claude-Sonnet-4.6、Gemini-3.5-flash)でテストを行い、12 個の公式 CodeQL クエリを洗練した。
- 洗練されたクエリは、精度を 98.0%以上に保ったまま、真陽性検出数を最大 119.8% まで増加させた。
- ARQ は、公式 CodeQL リポジトリで最長 27 か月間も未解決だった 3 件の GitHub Issue を解決した。
- 洗練されたクエリは、実環境で使われている libpng と zlib のライブラリにおいて、これまで知られていなかった 2 件のバグを新たに発見した。
C/C++ の脆弱性検出における現行 CodeQL クエリの限界
静的解析ツールは、ソフトウェアセキュリティのワークフローにおいて標準的な存在となっており、CodeQL は C/C++ コードベースのスキャンに最も広く採用されているツールのひとつである。これらのツールは、既知の脆弱なコードパターンを検出クエリとして符号化し、そのパターンをプログラムのソースコードに照合することで動作する。このアプローチは理論上は明快に聞こえるが、実際にはさまざまな摩擦を伴う。
既存クエリにおける偽陽性と偽陰性の多さ
既存の CodeQL クエリは依然として偽陽性を生み出し、安全なコードを誤って脆弱と判定してしまう一方で、本物のセキュリティ欠陥を見逃す偽陰性も発生させている。どちらの結果にもコストが伴う。偽陽性は、存在しないバグを追いかけることで開発者の時間を浪費させ、偽陰性は実際の脆弱性が本番環境に紛れ込むことを許してしまう。まさにこのギャップを埋めるために ARQ は設計されており、なぜCodeQL による脆弱性検出が「解決済み」ではなく、今なお活発な研究分野であり続けているのかを説明している。
ARQ フレームワーク:実行に基づく自動クエリ洗練
ARQ はエージェント型のフレームワークであり、手作業でラベル付けされた例や手作りのテンプレートに頼るのではなく、合成プログラムから取得した実行証拠に基づいて C/C++ の CodeQL クエリを自動的に改善する。この違いは重要である。というのも、従来の多くの洗練手法は、作成コストが高く、維持にも時間がかかる精選データセットやコミット履歴に依存していたからだ。
合成プログラムの実行を通じたクエリの弱点特定メカニズム
ARQ の中核となる洞察はシンプルだが強力である。すなわち、合成プログラムの実行結果がクエリの予測と食い違うとき、そのプログラムはクエリの弱点を露呈するというものだ。プログラムが実際には脆弱であるにもかかわらずクエリが沈黙している場合、それは偽陰性を示す。逆に、プログラムが実際には安全なのにクエリがフラグを立てた場合、それは偽陽性を示す。これにより ARQ は、外部のラベリングを必要とせずにクエリ品質を評価するための自己生成された「真実の基準」を内蔵していることになる。
ラベル付きデータや脆弱性特化テンプレートを用いない LLM ベースの反復的洗練ループ
一度弱点が露呈すると、ARQ はその実行結果の不一致を証拠として用い、LLM ベースの反復ループを回してクエリを修正する。これこそが、従来手法と一線を画すARQ によるクエリ洗練の要となる部分である。ラベル付きデータセットへの依存もなければ、コミット履歴のマイニングも不要であり、システムに脆弱性特化のテンプレートが組み込まれているわけでもない。洗練プロセスは自己完結しており、合成コードにおける予測と観測された挙動のミスマッチだけによって駆動される。
CodeQL クエリに対する ARQ 洗練の評価とインパクト
どんな洗練フレームワークであれ、その実用的な試金石は「本当に検出結果を改善できるかどうか」であり、ARQ の結果は大きな差をもってそれを示唆している。研究者たちは 12 個の公式 CodeQL クエリを洗練し、2 つの既存 C/C++ 脆弱性データセットを用いて改善度をベンチマークした。これにより、結果は既存のC/C++ 静的解析研究における意味のある基準に結びつけられている。
GPT-5.4、Claude-Sonnet-4.6、Gemini-3.5-flash を用いた洗練結果
ARQ は GPT-5.4、Claude-Sonnet-4.6、Gemini-3.5-flash という 3 つの商用大規模言語モデルでテストされた。各モデルは反復的洗練ループを独立して駆動し、研究者たちは同一タスクに対する異なる LLM の性能を比較できるようにした。このマルチモデル設計により、得られた改善が特定モデル固有の癖ではなく、ARQ の手法そのものに起因するという確信が強まっている。
Juliet v1.3 および FormAI v2 ベンチマークデータセットにおける性能向上
ARQ によって洗練された CodeQL クエリと元のクエリは、脆弱性検出ツールの評価において認知されている 2 つのベンチマークデータセット、Juliet v1.3 と FormAI v2 上で比較された。洗練されたクエリは真陽性検出数を大幅に増加させ、その増加幅は最大で119.8%に達した一方で、精度は一貫して 98.0%以上を維持した。この組み合わせは注目に値する。検出基準を緩めれば真陽性を増やすこと自体は比較的容易だが、その場合は通常、偽陽性が増えて精度が低下してしまう。ARQ の結果はその逆のパターンを示しており、このフレームワークが単に「網を広げている」のではなく、「網そのものを鋭くしている」ことを意味している。
長期未解決の GitHub Issue の解消と libpng・zlib における新規バグの発見
ベンチマーク上の数値を超えて、ARQ は具体的な実世界の修正ももたらした。このフレームワークは、公式 CodeQL クエリリポジトリにおいて最長 27 か月もの間未解決だった 3 件の GitHub Issue を解決した。さらに、洗練されたクエリは、実世界で広く利用されている 2 つのライブラリ libpng と zlib において、これまで発見されていなかった 2 件のバグを露呈させた。これは重要なシグナルである。つまり、これは単にリーダーボード上の数値を改善するだけの学術的な演習ではなく、数え切れないほど多くのアプリケーションが依存しているソフトウェアに潜んでいた、実際の未知のセキュリティ欠陥をあぶり出したツールだということだ。
ソフトウェアセキュリティにとっての意義
この成果の影響は CodeQL 自体を超えて広がる。偽陽性と偽陰性は、特定のツールに限らず静的解析分野全体における慢性的な問題であり、ラベル付きデータや手作りテンプレートを必要とせずに両者を同時に減らせる手法は、将来のLLM 駆動型クエリ改善ツールの設計に影響を与える可能性がある。C/C++ コードベースのセキュリティ確保を自動スキャンに依存している組織にとって、真陽性検出を高めつつ精度を98%以上に維持できるフレームワークは、偽警報に費やされるエンジニアリング工数の削減と、見逃される実際の脆弱性の減少につながり得る。
libpng と zlib における新規バグの発見は、もうひとつ重要な点を浮き彫りにしている。すなわち、成熟しており、長年にわたって精査されてきたオープンソースライブラリであっても、なお未検出の欠陥を抱えている可能性があり、既存ツールでは見つけられなかった問題を、より洗練された検出クエリが発見し得るということだ。
FAQ
ARQ は C/C++ の脆弱性検出においてどのような問題を解決しようとしているのですか?
ARQ は、合成プログラムから得られる実行証拠を用いて CodeQL クエリを自動的に洗練することで、既存クエリにおける偽陽性と偽陰性の問題に対処する。
ARQ はどのようにして CodeQL クエリの弱点を特定するのですか?
ARQ は、合成プログラムの実行結果がクエリの判定と食い違うたびにクエリの弱点を検出する。この不一致は、偽陽性または偽陰性のいずれかを示すシグナルとなる。
ARQ において大規模言語モデルはどのような役割を果たしますか?
ARQ は、ラベル付きデータや脆弱性特化テンプレートを必要とせず、実行結果からのフィードバックに基づいてクエリを修正する LLM ベースの反復的洗練ループを用いる。
CodeQL クエリの洗練において、ARQ はどのような具体的改善を示しましたか?
ARQ によって洗練された CodeQL クエリは、真陽性検出を最大119.8%増加させつつ、精度を少なくとも 98.0% に維持し、長期未解決だった 3 件の GitHub Issue を解決し、実世界のライブラリにおける 2 件の新たなバグを発見した。
{“@context”:”https://schema.org”,”@type”:”FAQPage”,”mainEntity”:[{“@type”:”Question”,”name”:”ARQ は C/C++ の脆弱性検出においてどのような問題を解決しようとしているのですか?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”ARQ は、合成プログラムから得られる実行証拠を用いて CodeQL クエリを自動的に洗練することで、既存クエリにおける偽陽性と偽陰性の問題に対処する。”}},{“@type”:”Question”,”name”:”ARQ はどのようにして CodeQL クエリの弱点を特定するのですか?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”ARQ は、合成プログラムの実行結果がクエリの判定と食い違うたびにクエリの弱点を検出する。この不一致は、偽陽性または偽陰性のいずれかを示すシグナルとなる。”}},{“@type”:”Question”,”name”:”ARQ において大規模言語モデルはどのような役割を果たしますか?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”ARQ は、ラベル付きデータや脆弱性特化テンプレートを必要とせず、実行結果からのフィードバックに基づいてクエリを修正する LLM ベースの反復的洗練ループを用いる。”}},{“@type”:”Question”,”name”:”CodeQL クエリの洗練において、ARQ はどのような具体的改善を示しましたか?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”ARQ によって洗練された CodeQL クエリは、真陽性検出を最大 119.8% 増加させつつ、精度を少なくとも 98.0% に維持し、長期未解決だった 3 件の GitHub Issue を解決し、実世界のライブラリにおける 2 件の新たなバグを発見した。”}}]}
本記事は人工知能の支援を受けて作成され、編集チームによるレビューを経ています。

