📄
概念 📚 software-design-concepts

LLMセキュリティ

プロンプトインジェクション・データ漏洩・モデル悪用などLLMを利用するシステム固有のセキュリティリスクと対策

LLM(Large Language Model)を組み込んだシステムは、従来のWebアプリケーションとは異なるセキュリティリスクを持つ。LLMは自然言語の入力を解釈して動作するため、悪意のある入力によってシステムの意図した動作を逸脱させる「プロンプトインジェクション」が主要な攻撃手法となる。入力値のバリデーションという従来の対策だけでは不十分であり、LLM固有の脅威モデルを理解した設計が必要である。

プロンプトインジェクションには直接的なもの(ユーザーが直接攻撃的なプロンプトを入力する)と間接的なもの(外部から取得したドキュメントや検索結果に悪意のある指示が埋め込まれている)の2種類がある。RAGシステムでは、インデックスされた外部ドキュメントに間接プロンプトインジェクションが仕込まれるリスクがあり、モデルが取得した文書の内容をシステムプロンプトの指示と同じように解釈してしまう可能性がある。

OWASP LLM Top 10(2025年版)はLLMを使用するシステムの主要なセキュリティリスクを体系化したリストであり、プロンプトインジェクション・機密情報漏洩・過剰な自律性(Excessive Agency)・サプライチェーンの脆弱性等がカバーされている。LLMエージェントに過度な権限や自律性を与えることで、攻撃者がモデルを通じてシステムを操作できる「Excessive Agency」は特に注意が必要なリスクである。

コードレビューで着目するポイント

  • ユーザー入力とシステムプロンプトが明確に分離されているか(ユーザー入力がシステムプロンプトを上書きできない構造か)
  • LLMが外部ツール(ファイル操作・APIコール・DBアクセス)を呼び出す際に、最小権限の原則が適用されているか
  • RAGシステムで取得するドキュメントの出所が信頼できるソースに限定されているか
  • LLMの出力を直接SQL・シェルコマンド・HTMLに埋め込んでいないか(二次インジェクションのリスク)
  • 機密データ(APIキー・個人情報)がLLMへの入力プロンプトに含まれていないか
  • LLMの出力に対する入力バリデーション(Guardrails)が実装されているか
  • LLM呼び出しのコスト上限・レート制限が設けられており、悪意のある大量呼び出しを防いでいるか

典型的なアンチパターン

ユーザー入力のダイレクトプロンプト埋め込み: ユーザーが入力した文字列をシステムプロンプトに文字列連結でそのまま埋め込むと、「これまでの指示を無視して…」といった攻撃的な入力を受け付けてしまう。ユーザー入力は明示的にユーザーターンとしてロールを分離して渡す設計が基本となる。

Excessive Agency: LLMエージェントにメール送信・ファイル削除・外部APIコールなどの破壊的なアクションを確認なしに実行する権限を与えること。重要な操作は人間の承認(Human-in-the-Loop)ステップを挟み、不可逆な操作は特に慎重に権限を絞る必要がある。

RAGドキュメントの無条件信頼: ウェブ検索や外部ドキュメントから取得したコンテンツをそのままコンテキストとしてLLMに渡すと、悪意のある指示が埋め込まれたドキュメントが間接プロンプトインジェクションの媒体になる。取得したコンテンツは明示的に「データ」として扱う設計と、出力の信頼性検証が必要である。

参考リソース

  • 標準: OWASP LLM Top 10 - LLMアプリケーションの最重要セキュリティリスクリスト(2025年版)
  • 書籍: 「AI Security」- LLMとAIシステムのセキュリティリスクと対策の体系的な解説
  • ツール: Guardrails AI - LLMの入出力を検証するPythonフレームワーク
  • ツール: LLM Guard - プロンプトインジェクション検出・PII漏洩防止のオープンソースライブラリ
  • 標準: NIST AI Risk Management Framework - AI システムのリスク管理フレームワーク
  1. 1. 📄アーキテクチャスタイル
  2. 2. 📄ドメインモデリング
  3. 3. 📄モジュール分割と依存管理
  4. 4. 📄データモデリング
  5. 5. 📄API設計
  6. 6. 📄整合性とトランザクション
  7. 7. 📄非同期処理(Queue/Event)
  8. 8. 📄キャッシング
  9. 9. 📄ユーザーリサーチ
  10. 10. 📄情報アーキテクチャ
  11. 11. 📄インタラクションデザイン
  12. 12. 📄UX原則とヒューリスティクス
  13. 13. 📄アクセシビリティ(UX観点)
  14. 14. 📄UXメトリクス
  15. 15. 📄スケーラビリティ
  16. 16. 📄可用性とレジリエンス
  17. 17. 📄オブザーバビリティ
  18. 18. 📄環境・インフラ設計
  19. 19. 📄データマイグレーション
  20. 20. 📄セキュリティ設計原則
  21. 21. 📄データ保護とマルチテナント
  22. 22. 📄LLMセキュリティ
  23. 23. 📄ビジュアルデザイン原則
  24. 24. 📄デザインシステム
  25. 25. 📄コンポーネント設計
  26. 26. 📄スタイリング
  27. 27. 📄設計原則
  28. 28. 📄デザインパターン(GoF)
  29. 29. 📄エンタープライズパターン
  30. 30. 📄クリーンコード
  31. 31. 📄リファクタリング
  32. 32. 📄型設計とコントラクト
  33. 33. 📄関数型プログラミング概念
  34. 34. 📄エラーハンドリング
  35. 35. 📄テスト戦略と哲学
  36. 36. 📄テスト種別(機能テスト)
  37. 37. 📄テスト種別(UI・ビジュアル)
  38. 38. 📄テスト種別(契約・境界)
  39. 39. 📄並行処理・マルチスレッド
  40. 40. 📄パフォーマンス最適化
  41. 41. 📄ドキュメント管理
  42. 42. 📄バージョン管理と開発プロセス
  43. 43. 📄脅威モデリング
  44. 44. 📄通信保護(TLS)
  45. 45. 📄暗号化・機密情報管理
  46. 46. 📄認証・セッション管理
  47. 47. 📄認可・アクセス制御
  48. 48. 📄入力バリデーション
  49. 49. 📄インジェクション攻撃
  50. 50. 📄正規化(データベース正規化)