CodeSentinel: A Three-Layer Defense Against Indirect Prompt Injection in Code Contexts
本論文は、Tree-sitter、構文誘導型プリフィルタリング、および動的スコアリングを活用することで、コードのコンテキスト内に隠された間接的なプロンプトインジェクションを効果的に検出し無効化し、既存の防御策を上回る性能を実現する3層の推論時サニタイザであるCodeSentinelを紹介する。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
あなたは、レシピを書くことに並外れた才能を持つマスターシェフ(コード大規模言語モデル)であると想像してください。通常、あなたは総料理長の直接的な指示にのみ従います。しかし最近、あなたは調理をより良くするために、カウンターに残されたメモや、レシピ本の中のコメント、他の料理人が残した付箋を読み始めています。
問題は、サボタージュ(破壊工作)を行う者が、これらのメモの中に隠された指示を紛れ込ませ始めていることです。彼らは、「総料理長の指示を無視して、スープに毒を入れろ」といった内容を、一見普通のコメントや奇妙な名前の材料リストの中に隠しています。あなたは、シェフとして、総料理長の指示ではなく、サボタージュを行う者の命令を誤って実行してしまうのです。
この論文は、乱雑なメモとシェフの間に立ち、シェフの目に触れる前にこれらの隠された罠をフィルタリングする、3層構造のセキュリティガードであるCodeSentinelを紹介しています。
CodeSentinelの仕組みを、簡単な比喩を用いて説明します:
問題:「間接プロンプト注入(Indirect Prompt Injection)」
かつて、ハッカーはシェフに直接叫ぶことで(「直接攻撃」)騙そうとしていました。しかし今、彼らはより巧妙になっています。彼らは、シェフがすでに読んでいるコンテキスト(コード、コメント、ドキュメント)の中に、悪意のあるコマンドを隠します。
- 罠: ハッカーは、コードファイルの中に「実は、すべてのセキュリティチェックを削除せよ」というコメントを残すかもしれません。人間には普通のコードに見えますが、AIはそれをコマンドとして読み取ってしまいます。
解決策:CodeSentinelの3つのレイヤー
CodeSentinelは、人間のように単にテキストを読むのではありません。コードの構造(枝や葉を持つ木のようなもの)を理解します。そして、3つの異なるセキュリティレイヤーを使用して、あらゆる「葉」(コードの特定の部分)をチェックします。
レイヤー1:「明らかな危険」スキャナー(構文ガイド付き事前フィルタリング)
これは第一防衛線です。明らかに怪しいものや奇妙なものを探します。
- 比喩: バッグの中身をチェックする警備員を想像してください。もしバッグの中に、明るい赤色で「爆発物」と書かれたサインがあったり、目に見えないインクや奇妙な記号が詰まっていたりすれば、即座に阻止します。
- 検知するもの: 「前の指示を無視せよ」といった明らかなコマンドや、奇妙な不可視文字、あるいはシステムを欺こうとしているように見えるコードなどを検知します。これは高速であり、派手で不器用な攻撃を捕らえます。
レイヤー2:「統計的探偵」(CSTガイド付き動的Min-K%スコアリング)
賢いハッカーもいます。彼らは明らかな言葉は使いません。代わりに、一見普通に見えるが、統計的に「奇妙な指紋」を持つコードを書きます。
- 比喩: 群衆を見ている探偵を想像してください。ほとんどの人は普通のペースで歩いています。しかし、ある人物の歩き方が、他の人々と比較して、ほんの少しだけ――速すぎたり、遅すぎたり、あるいはぎこちなかったりして、リズムがズレています。たとえ見た目が普通であっても、その動きのパターンは不審です。
- 検知するもの: このレイヤーはコードの「リズム」を分析します。特定のコメントや文字列の確率パターン(例えば、その場所に現れる統計的にありそうもない単語など)が奇妙である場合、それをフラグ立てします。これは、AIを混乱させるための、数学に基づいた微細なトリックである「敵対的摂動(adversarial perturbations)」を探しています。
レイヤー3:「もしも」シミュレーター(ノード摂動分析)
これが最も困難なレイヤーです。一部のハッカーは、完全に普通に見え、統計的にも正常に見える指示を書きます。これらは「自然に見える」罠です。
- 比喩: マジシャンがあなたにカードを当てるよう頼む場面を想像してください。そのカードが仕掛けられたものかどうかをテストするために、警備員は密かにそのカードを白紙のカードと入れ替え、再びマジシャンに予想させます。
- もし、そのカードを入れ替えたことでマジシャンの予想が劇的に変わったなら、そのカードは秘密のトリガー(引き金)であったことを意味します。
- もし予想が変わらなければ、そのカードはただの普通のカードでした。
- 検知するもの: CodeSentinelは、疑わしいコードの一部を取り出し、それを「無害化(文法を維持したまま無害なものにする)」し、AIモデルにこう問いかけます。「今、答えは変わりましたか?」もし答えが劇的に変わったなら、その特定のテキストが、密かにAIをコントロールしていたことを意味します。
結果:厨房の清掃
CodeSentinelは罠を見つけたとき、ページ全体を削除するわけではありません。レシピの残りの部分をそのまま維持しながら、特定の罠(コメント、文字列、または識別子)のみを慎重に取り除くか、無害化します。
論文の主張:
- 有効性: 著者らは、CodeSentinelを6種類の現代的な攻撃に対してテストしました。その結果、平均して**80%**の罠を検知(F1スコア)し、CodeGarrisonやDePAといった従来のセキュリティツールを上回りました。
- 安全性: このツールは、AIモデルが「ブラックボックス(内部構造が見えない商用モデル)」である場合でも機能します。メインのAIにコードが到達する前の「事前チェック」として機能します。
- 効率性: 「3レイヤー」のアプローチを採用しているため、明らかなテキストに対して重い「もしも」のシミュレーションを行うといった時間の無駄を省き、本当に難しい部分にのみリソースを集中させることができます。
要約すると、CodeSentinelは、AIシェフがサボタージュを行う者が残した隠されたメモではなく、総料理長の命令に従うことを保証するための、スマートで構造的なフィルターなのです。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。