N
NextTech Insights
RAGのデータ汚染(poisoning)対策チェックリスト|取り込み・検索・権限を監査する(2026)
airagsecurityllm

RAGのデータ汚染(poisoning)対策チェックリスト|取り込み・検索・権限を監査する(2026)

5 min read

RAGのデータ汚染は「プロンプト」ではなく「取り込みパイプライン」で防ぐ。取り込み元、検証と隔離、doc_idの証跡、ツール権限を30分で点検する実務チェックリスト。

目次

RAGをデータ汚染(poisoning)から守るには?(開発を遅くしない実務手順)

結論(Conclusion)

RAGが事故るのは「信頼できないコンテンツ」が“信頼できる知識”として入ってしまうとき。 対策は3つの段階で考える。

  1. 取り込み(ingestion):何が知識ベースに入るか
  2. 検索(retrieval):何が引っ張られるか
  3. 応答(response):引っ張った内容で何をしてよいか

最小で効く30分チェックはこれ。

  • 取り込み元と権限を絞る
  • 最低限の検証と隔離(quarantine)を入れる
  • doc_idと検索判断の証跡をログに残す
  • 危険なツールはデフォルトでOFF

背景(Explanation)

RAGのデータ汚染とは、攻撃者(またはミス)が悪い情報をコーパスに混ぜ、検索で引っ張らせること。

起きる実害はだいたいこれ。

  • 指示の上書き(「前のルールを無視しろ」)
  • 偽の社内手順/ポリシーの注入
  • 悪意リンクや資格情報の混入
  • ツール悪用の誘導(export、API呼び出しなど)

重要なのは、

  • 悪い知識はプロンプトでは直らない
  • パイプラインと証跡で管理する

実務手順(Practical Guide)

手順1:取り込み元を分類する(10分)

1つのRAG機能について、文書の取り込み元を列挙する。

  • ファイルアップロード
  • ヘルプセンター/社内Wiki
  • チケット/CRMノート
  • Webクローラ
  • 共有ドライブ

各ソースにラベルを付ける。

  • trusted(社内、アクセス制御あり)
  • semi-trusted(パートナー管理)
  • untrusted(ユーザーアップロード、公開Web)

ルール:

  • untrustedは隔離と強い検証が前提

手順2:誰が知識を書けるかを絞る(5分)

汚染の入口は「書き込み権限」。 最低限これ。

  • read と write を分ける
  • 新しいソース追加は明示承認
  • 公開の書き込み経路はデフォルト無効

「誰がdocを追加できるか」が答えられないなら危ない。

手順3:検証と隔離(quarantine)を入れる(10分)

完璧なスキャンは要らない。 まずは標準化できるゲートを置く。

検証例:

  • 拡張子allowlist
  • サイズ/ページ数上限
  • Active content(HTML/JS)の除去
  • 露骨なインジェクション文言検知(ヒューリスティック)

隔離ルール:

  • untrusted由来の新規/更新docはレビュー完了まで本番indexに入れない

手順4:あとで説明できる証跡を残す(5分)

RAG事故で最低限必要なログ。

  • request_id / trace_id
  • retrieved_doc_ids(本文ではなくID)
  • chunk_ids(またはoffset)
  • source type(trusted/untrusted)
  • top-kのスコア
  • 実行されたツール呼び出し(名前のみ)

「なぜそう答えた?」をdoc_idで説明できる状態にする。

落とし穴(Pitfalls)

  • ユーザーがアップしたdocを即ライブindexに入れる
  • クローラでドメイン制限なし
  • 文書の来歴が追えない(doc_idやsourceメタ無し)
  • retrievalをセキュリティ対象に入れていない
  • retrieved contentの指示でツールが動く

チェックリスト(Checklist)

  • [ ] このRAG機能の取り込み元をすべて列挙できる
  • [ ] 各ソースを trusted/semi-trusted/untrusted に分類した
  • [ ] untrustedは隔離してからindex投入する
  • [ ] 取り込み時に拡張子/サイズ上限を検証している
  • [ ] write権限はreadから分離されている
  • [ ] 新規ソース追加は明示承認
  • [ ] クローラはドメインallowlistを使う
  • [ ] doc_idと来歴(provenance)メタデータがある
  • [ ] retrievalログにdoc_idとスコアが残る(本文は残さない)
  • [ ] 危険ツールはデフォルトOFF
  • [ ] ツール権限はルート単位で制御されている
  • [ ] 10分以内にdoc_idで説明できる

FAQ

1) 「悪意ある指示は無視しろ」とsystem promptに書けば十分?

役には立つが不十分。汚染された知識は“事実”として混ざる。パイプライン制御が本命。

2) untrusted取り込みは全部禁止すべき?

必ずしも禁止ではない。隔離と来歴管理があるなら扱える。

3) 最速の改善は?

untrusted docを隔離し、retrieved_doc_idsを全リクエストでログに残す。制御と証跡が揃う。

免責

一般的なセキュリティ注意喚起です。

人気記事

  1. 1Permit2とは何か?Approveが変わった理由と安全な使い方(チェックリスト)
  2. 2署名(Sign)画面の読み方|Approve/Permit/NFT全権限を30秒で判別するチェックリスト
  3. 3仕様→実装に落とすプロンプトテンプレ(AI開発)|AIに“迷わせない”仕様の書き方
  4. 4EVMのトークン承認(Approve)を見直す方法|Revokeの手順と判断基準(チェックリスト)
  5. 5曖昧な依頼を要件定義に変換する質問リスト(AI開発)|AIに実装させる前に聞くべきこと

関連記事