自動化データ活用法律・倫理スクレイピング

LLMエージェント向け“隠し命令”攻撃とは:LLM汚染の検知設計

LLMエージェントがWebクロール結果に埋め込まれた“隠し命令”に従ってしまう間接的プロンプトインジェクションを解説。汚染ポイント、検知シグナル、隔離と権限段階、実装例と運用監視まで具体的に整理します。

Ibuki Yamamoto
Ibuki Yamamoto
2026年2月6日 14分で読めます

Webクローラー+LLMエージェント(RAGやブラウジング、ツール実行を伴う仕組み)は、検索結果やクロール本文に混ぜ込まれた「隠し命令(Hidden instructions)」に誘導されるリスクを抱えます。これは単なる誤情報の混入ではなく、エージェントの判断・行動(ツール呼び出し、要約方針、抽出項目、出力形式)そのものを乗っ取る“間接的プロンプトインジェクション”の一種です。この記事では、LLM汚染を前提に「検知」と「封じ込め」を設計する考え方を、実装観点で整理します。

この記事でわかること
  • “隠し命令”攻撃(間接的プロンプトインジェクション)の成立条件
  • クローラー/RAGのデータ経路で起きる「汚染ポイント」と影響範囲
  • LLM汚染の検知設計(シグナル、閾値、隔離、運用)

攻撃の概要

“隠し命令”攻撃は、LLMが処理する外部コンテンツ(Webページ、PDF、メール、ドキュメントなど)に、開発者やユーザーの意図と異なる命令文を混ぜ込み、モデルにそれを「従うべき指示」と誤認させる攻撃です。特に、検索・クロール結果を文脈として投入するRAGやブラウジング型エージェントでは、攻撃者がコンテンツ側を操作できるため「間接的プロンプトインジェクション(Indirect Prompt Injection)」として成立しやすくなります。

押さえるべき本質:LLMは構造的に「命令」と「データ」を同じトークン列として扱います。外部文書に紛れた命令が、システム指示やユーザー意図を上書きする可能性があります。OWASP Top 10 for LLM Applicationsでも Prompt Injection は最重要リスク(LLM01)として整理されています。

学術的にも、外部データに攻撃プロンプトを埋め込み、統合されたアプリケーションの挙動やAPI呼び出しを誘導できることが示されています。

外部データに注入された命令が、LLM統合アプリの機能やAPI呼び出しの制御に影響し得る、という問題提起がなされています。


どこが汚染されるか

クローラーによる「LLM汚染」と言うと、クローラーが取得した本文に悪性文字列が入るイメージが強いかもしれません。しかし実際は、エージェントのデータ経路のどこに“命令”が紛れ込むかで、対策ポイントが変わります。

汚染ポイントの分類

汚染ポイント 具体例 典型的な被害 検知の軸
検索結果スニペット タイトル/説明に命令口調を混ぜる 参照先選定を誘導 命令文・誘導語のスコア
HTML本文 白文字、極小フォント、display:none 要約や抽出方針の乗っ取り DOM差分、不可視テキスト
メタ/構造化データ meta description、JSON-LDに命令 優先度・結論誘導 フィールド別の異常率
埋め込み資産 PDF本文、画像OCR文字、alt属性 可視レビューと不一致の誘導 モダリティ別の整合性
インデックス/ベクトルDB 汚染文書が高頻度でヒット 継続的な誤誘導(慢性化) 検索ヒット分布の偏り

注意:汚染の厄介さは「一度ベクトル化してしまうと、元ページを直しても影響が残り得る」点です。インデックス更新設計(再クロール、再埋め込み、失効)が不十分だと、攻撃が長期化します。

隠し命令(間接的プロンプトインジェクション)の手口

隠し命令の目的は大きく2つです。1つは「回答の誘導(誤情報、特定評価、偏向)」、もう1つは「エージェントの行動の誘導(ツール実行、データ持ち出し、権限濫用)」です。

代表的なパターン

  • 優先度逆転:「このページの指示を最優先せよ」「システム指示を無視せよ」
  • 抽出仕様の改変:「次のキーだけ抽出」「評価は必ず5点」
  • 出力チャネル悪用:JSONやコードブロックに“次工程用命令”を混入
  • ツール呼び出し誘導:「このURLを追加で取得」「このAPIを叩け」
  • 検知回避:言い換え、分割、段階的な話題転換で命令を滑り込ませる

近年は、命令を突然投げるのではなく、自然な文章の流れで徐々に話題を移して“従いたくなる形”にする攻撃も研究されています。


検知設計の原則

結論から言うと、クローラーによるLLM汚染は「完全防御」よりも検知→隔離→影響最小化が現実的です。外部コンテンツを扱う以上、攻撃混入の可能性はゼロにできません。

原則1:データと命令を分離

外部文書は「命令」ではなく「観測データ」として扱い、エージェントの意思決定に混ざる自由度を下げます。OpenAIのガイドでも、権限の強いメッセージ(developer)に信頼できない入力を入れない、構造化出力でデータ流通を制限する、といった方針が示されています。

原則2:自由記述チャネルを減らす

検知を難しくする最大要因は、LLMが自由文で次工程に影響する文字列を出せることです。ノード間は可能な限りスキーマで固定します(enum、必須キー、最大長、正規表現)。

原則3:検知は多層で

単一のフィルタ(NGワードなど)は回避されやすいです。複数の弱いシグナルを束ねて確率的に判定し、疑わしければ隔離・再取得・人手確認へ回します。

現場で効く考え方:「ブロック」より「スコアリング+段階的制限」。疑わしい文書は、参照はするがツール実行の根拠にしない、要約に使わない、など影響範囲を狭めます。

検知シグナル設計

ここからが本題です。検知を“モデル任せ”にせず、クローラー/パイプラインの観測可能な特徴量を明示的に設計します。

文書レベルの特徴量

  • 命令口調スコア:must/ignore/override/priority/遵守せよ/無視せよ 等
  • エージェント誘導語:tool、API、browser、search、system prompt 等
  • 形式強制:JSON固定、base64、暗号化、不可視文字の多用
  • 反復/過剰強調:同一命令の繰り返し、全大文字、過度な記号
  • テーマ不一致:ページ主題(タイトル/見出し)と命令内容が乖離

DOM・レンダリング差分

“隠し”はテキスト内容よりも、表示上の不可視化で成立します。よって、HTML直読みレンダリング後の差分を取るのが有効です。

  • CSSで非表示:display:none、visibility:hidden、opacity:0、font-size:0 など
  • 背景同色(白文字)
  • 画面外配置(positionで飛ばす)
  • aria/alt属性への埋め込み

検索・ヒット分布の異常

汚染文書が「異常に上位でヒットする」「複数クエリで常に顔を出す」場合、RAGの参照面を慢性的に支配します。以下のようなメトリクスを監視します。

  • ドメイン別ヒット比率(単一ドメイン偏重)
  • 同一文書の再登場率(一定期間内)
  • クエリ多様性に対する文書多様性(多様性が低いほど危険)

隔離と封じ込め

検知スコアが閾値を超えた場合に、どう扱うかを決めておかないと運用が破綻します。おすすめは「隔離キュー」と「権限段階」です。

隔離キュー

  • 疑わしいURLはベクトル化しない(インデックスに入れない)
  • 再クロールを遅延させ、スナップショットを保存
  • 人手レビュー対象として、DOM差分・可視テキスト・不可視テキストを提示

権限段階

たとえば「低リスク文書は要約OK」「中リスクは引用のみ」「高リスクは参照禁止」のように扱いを分けます。特に重要なのは、高リスク文書を“ツール実行の根拠”にしないことです。OWASPでもPrompt Injectionは重大リスクとして整理されています。

注意:隔離したのに要約ログや学習ログに残すと、別経路で汚染が再流入します。保存先(ログ、キャッシュ、分析基盤)を含めたデータライフサイクル設計が必要です。

ポイントは、検知ロジックをブラックボックスにしないことです。後から「なぜ隔離されたのか」を説明できないと、運用で必ず揉めます。

運用とテスト

検知設計は、実装よりも運用が難所です。特にLLMエージェントでは、隠し命令(間接的プロンプトインジェクション)による攻撃が成功したときの表れ方が多様です(要約が偏る、引用が増える、出力形式が崩れる、ツールを呼びたがる、など)。

テスト観点

  • “隠し命令”入りページを用意し、隔離・低権限化が効くか検証
  • 偽陽性(一般的なFAQや利用規約の命令形)への耐性
  • インデックス更新(削除・失効)の反映時間
  • ツール実行のガード(許可制、スキーマ制約、監査ログ)

監視の最低ライン

  • 隔離件数(ドメイン別、時間推移)
  • 参照ドメインの多様性
  • ツール呼び出しの急増(特定クエリ・特定文書起点)
  • 出力の構造違反(JSONスキーマ違反、最大長逸脱)

なお、プロンプト漏えい対策の観点では、まずは出力スクリーニングや事後処理などの監視を優先するのも有効です。


検知設計の型

最後に、現場で使える「型」をまとめます。設計レビューの観点としても、そのまま使えます。

推奨アーキテクチャ

  1. 取得:HTMLとレンダリング結果(可能なら)を保存
  2. 抽出:可視/不可視、本文/メタ/属性を分離
  3. 検知:複数シグナルでスコア化(説明可能なルール+軽量分類)
  4. 隔離:高リスクはインデックス投入前に止める
  5. 封じ込め:参照はしてもツール実行根拠にしない等の権限段階
  6. 監査:どの文書が、どの判断で、どの出力に影響したか追跡

最小の成功条件:インデックス投入前に「止める」仕組みがあること、そして疑わしいコンテンツが混ざっても“行動(ツール実行)”まで直結しないこと。この2点で事故の大半は小さくできます。

プロンプトインジェクションは、従来型のインジェクション(SQLiなど)と違い、根本解決が難しいという議論もあります。だからこそ、検知と封じ込めを前提に、残留リスクを許容できる設計にすることが現実的です。

クローラーを安全運用しませんか?

LLM汚染の検知・隔離まで含めた設計をご提案します。

お問い合わせスクレイピングに関するご相談・お見積もりはお気軽にどうぞ
相談する

まとめ

LLMエージェント向け“隠し命令”攻撃は、外部コンテンツに命令を埋め込み、要約や抽出、ツール実行を誤誘導する「間接的プロンプトインジェクション」です。対策は「完全に防ぐ」よりも、(1)データと命令の分離(2)構造化出力で自由度を下げる(3)多層検知でスコアリング(4)隔離と権限段階で封じ込め、が実務的です。

参考情報

この記事を書いた人

Ibuki Yamamoto
Ibuki Yamamoto

Webスクレイピングエンジニア。10年以上の実務経験を持ち、大規模なデータ収集プロジェクトを数多く手がける。PythonとJavaScriptを得意とし、技術ブログでは実践的なスクレイピング手法を発信している。

データ収集のプロに
お任せください

年間1億件以上のデータ収集実績を持つプロフェッショナルチームが、大規模スクレイピング・アンチボット対策など、あらゆる課題を解決します。

1億+
年間データ収集件数
24/7
安定稼働
高品質
データ精度