生成AIにPDFを読み込ませる運用が増える一方で、PDF内部に埋め込まれた「見えない指示文」によってAIの出力が誘導・攪乱される事例が確認されています。これはインダイレクト型プロンプトインジェクション(Indirect Prompt Injection)と呼ばれ、AIに直接指示するのではなく、AIが参照する外部データに指示を埋め込む攻撃です。OWASPの「LLMアプリケーション向けTop 10(2023/2024)」でも、最上位リスク(LLM01: Prompt Injection)として位置づけられています。本記事では、これらの攻撃を防ぐための技術的対策を考察します。
- 要旨(TL;DR)
- 背景:LLM×ドキュメント活用の普及と新しい攻撃面
- 参考事例:教育目的の“AI検出トラップ”
- なぜ防ぎにくいのか:LLM特性 × PDF仕様の“噛み合わせ”
- 攻撃パターンの整理
- 技術的深掘り:PDF の“命令”はどこに潜むのか
- PDFの“安全性”事前検査・解析(プリフライト)手順:qpdf、mutool、exiftoolの三点セット
- 抽出パイプラインの脅威モデリング
- サニタイズとガードレール:防御を重ねる
- 標準フレーム:OWASP LLM Top 10 (2025) と整合
- ゼロトラストPDFとその重要性
- 技術者のための運用チェックリスト
- まとめ
要旨(TL;DR)
PDFは静的な閲覧用ファイルではなく、レイヤー(OCG)、アクション(/OpenAction、/AA、/JS、/URI)、メタデータ(XMP)など高機能な構造を持っています。
LLMがPDFを要約・抽出する際、不可視テキストやメタデータ内の命令を「ユーザ指示」と誤認して従うことで、インダイレクト型プロンプトインジェクションが成立します。
OWASPは2025年版Top 10で LLM01: Prompt Injection を最重要リスクに位置付けています。
実運用では、プリフライト(qpdf、mutool、exiftool)→サニタイズ→RAG前フィルタ→モデル側ガードレールの多層防御が必須です。
背景:LLM×ドキュメント活用の普及と新しい攻撃面
要約や情報抽出をLLMに任せるワークフローが一般化する中、攻撃者は外部データ(PDF、HTML、メール等)側に命令を埋め込むことで、モデルの出力や行動を乗っ取ります。
これは「インダイレクト型プロンプトインジェクション」として体系化され、企業環境での影響(データ流出、誤誘導、不正アクション)が懸念されています。
Microsoftもエンタープライズ防御の観点から、防御インテントを公開しています。
参考事例:教育目的の“AI検出トラップ”
講義用PDFに背景色と同色の不可視テキストで「無関係な課題」を仕込み、学生がAIに読み込ませると“そちらに従う”という挙動を可視化する試みが話題になりました。
倫理議論は別として、外部データ内の命令がLLMに適用されるという性質を直感的に示す例です。
類似の手法は悪用されると、誤要約、偽情報の注入、意図しない情報の強制出力に直結します。
なぜ防ぎにくいのか:LLM特性 × PDF仕様の“噛み合わせ”
LLMの設計特性
LLMは入力全体をコンテキストとして扱い、ユーザ指示と本文の区別を原理的に完璧には行えません。
OWASPも「人間に不可視でもモデルに効果がある」形態を強調しています。PDFの高機能構造
ISO 32000-1に準拠するPDFは、OCG(レイヤー)で表示可否を制御し、/OpenAction、/AA、/JS、/URIで動作連鎖、XMPでRDF/XMLメタデータを内包します。不可視・非表示・注釈・代替テキストなど“人目に触れにくい容れ物”が多いのが特徴です。
攻撃パターンの整理
不可視テキストや余白への命令挿入
背景と同色、低アルファ、OCG非表示のテキストに「○○を出力せよ」などを格納し、抽出時に本文化します。アクション機構の悪用(/OpenAction、/AA、/JS、/URI)
開封、クリック、ページ遷移などのイベントに連鎖する命令や外部参照を仕込みます。XMPメタデータへの埋め込み
RDF/XML内のカスタムプロパティに命令文を置き、抽出器が本文と合流させる誤設計を狙います。
技術的深掘り:PDF の“命令”はどこに潜むのか
Optional Content(OCG)
/OCProperties、OCG、OCConfigで表示制御します。印刷時のみ可視など条件表示も可能なため、RAGで拾われる“見えない文章”の温床になります。アクションとJavaScript
/OpenActionや/AAは開封時動作を持ちます。/JSでJavaScriptを実行し、/URIで外部へ誘導するなど、“動くPDF”の側面は解析で必須チェックです。XMP(Extensible Metadata Platform)
dc:、xmp:、pdf:、pdfaid:などのスキーマで文書記述します。全文抽出の設計だと命令文が本文へ混入し得ます。
PDFの“安全性”事前検査・解析(プリフライト)手順:qpdf、mutool、exiftoolの三点セット
抽出前に必ず自動で回すことを推奨します(CI/CDゲート化)。
## 1) 構造を可読化(オブジェクトストリーム解除、QDF化) qpdf --qdf --object-streams=disable in.pdf out.qdf.pdf ## 2) アクションとJSの列挙(開封時、追加アクション、URI、JS) mutool show in.pdf js mutool show in.pdf grep | grep -E '/OpenAction|/AA|/URI|/JS' ## 3) XMPやInfo辞書を含むメタデータの総覧 exiftool -a -G -s in.pdf
狙い:
不可視テキストの塊、OCG非表示レイヤー中の長文、/OpenAction、/AA、/JS、過剰なXMPを機械的に検知し、次段の脅威モデリングでリスク評価を行い、その後サニタイズへ進めます。
抽出パイプラインの脅威モデリング
LLMを用いたドキュメント処理パイプラインの一般的な流れ
(A) 取込 → (B) パース/OCR → (C) 正規化 → (D) チャンク化 → (E) ベクタ格納 → (F) RAG参照
に対して次のリスクがあります。
→ 各段に対策を散らす“多層防御”が不可欠です。
サニタイズとガードレール:防御を重ねる
- 入力サニタイズ
- RAG前フィルタ(Spotlighting等の分離)
- モデル側の方針
標準フレーム:OWASP LLM Top 10 (2025) と整合
OWASPはLLM01:2025 Prompt Injectionを最重要に位置付け、普遍性、容易性、検出困難、高インパクトを指摘しています。
RAGや微調整だけでは不十分で、防御は多層が前提です。
方針・チェックリスト・例示がまとまっているため、社内規程の引用元として有用です。
ゼロトラストPDFとその重要性
ゼロトラストPDFとは、PDFを「信頼しない」前提で扱い、常に検証・サニタイズを行う運用モデルです。 PDFは静的な文書に見えて、不可視テキスト、JavaScript、外部リンク、メタデータなど攻撃面を多く含みます。 そのため、LLMやRAGの利用時に間接型プロンプトインジェクションやそれによる情報漏洩を防ぐため、PDFにもゼロトラストの考え方が不可欠です。
技術者のための運用チェックリスト
- プリフライトを必須化:qpdf、mutool、exiftoolをCIジョブで常時実行します。
- サニタイズ規約:/OpenAction、/AA、/JS、/URI削除、OCG平坦化、XMPホワイトリストを適用します。
- コンテキスト分離:RAG前にSpotlighting等で未信頼断片をマーキングします。
- モデル方針の契約化:外部命令無視、出力拘束、根拠必須、HITLを適用します。
- 可観測性:LLM入出力を監査ログ化し、Prompt Injection兆候を検知します。