サマリ
本記事はOWASP Top 10 for LLM Applicationsを図を用いてなるべく超わかりやすく図解してみたものとなります。
出典
本記事では必要に応じてOWASP Top 10 for LLM Applicationsまたはその日本語訳から一部を引用しています。
はじめに
LLMを用いた生成AIアプリケーションについてTechな観点でのセキュリティを考える上で非常に参考になるナレッジが「OWASP Top 10 for LLM Applications」です。OWASPといえば「OWASP Top 10」というWebアプリケーションの10のセキュリティ上の脆弱性がまとめられたものが有名ですが、 今回扱うのはfor LLM Applicationsとあるように大規模言語モデル(Large Language Model:LLM)を用いたアプリケーションに特化した10の脆弱性が整理されているものです。OWASP Japanさんにて日本語に翻訳されたものがありますので、日本語で理解されたい方は日本語版をご確認下さい。
実際に原文または翻訳を見て頂けるとわかりますが、10の脆弱性について次の4つポイントでわかりやすく整理されています。これらが具体的な事例や技術的な内容を含んで整理されていることから、とても活用し易いナレッジになっています。
- 脅威の概要
- 一般的なリスクのサンプル
- 予防・緩和戦略
- 攻撃シナリオのサンプル
原文を見ていただくと代表的なアーキテクチャに対してどのコンポーネント、あるいはどのインタラクションに脆弱性があるかマッピングされたものがありますが、まだ日本語版の翻訳には反映されていないようです。また10の脆弱性のそれぞれの説明には図表が無く、一部理解に苦労される内容が含まれているのではと思っております。
OWASPの各脅威に移る前に、LLMアプリケーション(以後生成AIアプリと呼びます)の正常な挙動について振り返ってみます。
基本的な挙動
- 正常な利用者は生成AIアプリのUI上でプロンプトを入力します
- 生成AIアプリはモデルにプロンプトを入力しその応答を得ます
- 生成AIアプリはモデルから受け取った応答を利用者に応答します
追加の考慮点
- モデルが持っていない最新のデータや固有のデータを利用できるようにするため、1と2の間に外部データを利用できるように生成AIアプリを構成するかもしれません(RAGとか検索拡張生成と呼ばれています)
- モデルをユースケースに特化して拡張できるよう、モデル自体をトレーニングするか、あるいはファインチューニングすることがあるかもしれません
- 生成AIの活用が進んでいる場合、生成AIアプリ利用者に代わってバックエンドのシステムに対して何かしらの特権操作を実施できるよう構成するかもしれません(メールの送付、データベースへのアクセスなど)
これを踏まえてOWASPの各脆弱性について見てみましょう。
LLM01:プロンプト・インジェクション
まず1つ目の脆弱性はプロンプトインジェクションです。1つ目に出てきていることから最も一般的かつリスクの高いものであると理解して良いと思います。プロンプトインジェクションというと生成AIアプリケーションのインタラクティブなUIに悪意あるプロンプトを入力して攻撃することを思い浮かべると思います。これを「直接的なプロンプトインジェクション」と呼びます。一方この脅威で興味深い点は、これとは別に「間接的なプロンプトインジェクション」も存在することを示しています。間接的なプロンプトインジェクションがどのような脆弱性であるのか、直接的なプロンプトインジェクションと合わせて説明します。
直接的なプロンプトインジェクション
これはイメージしやすいと思います。攻撃者は生成AIアプリに悪意あるプロンプトを入力することで、本来意図しない応答を生成AIアプリから得ようとしたり、バックエンドのシステムに対して不正アクセスや不正操作を試みる攻撃です。
間接的なプロンプトインジェクション
間接的なプロンプトインジェクションのシナリオは直接的なものと比べて少し複雑です。
例えば攻撃者は生成AIアプリが利用する外部データに対する何かしらの操作権限を持っていると仮定します。あるいは生成AIアプリはパブリックなデータソースを利用しているとします。攻撃者は悪意あるプロンプトを含んだデータをアップロードします(例えばバックエンドのデータベースにアクセスするとか、〇〇さんは優秀だという回答を返すなど)。この悪意あるプロンプトは生成AIアプリが読み取れる形式であれば良く、人間が可読である必要はないというのがポイントです(一見正常なファイルにプロンプトが埋め込まれる可能性があるということです)。
利用者または攻撃者が生成AIアプリを利用した際に、生成AIアプリが悪意あるプロンプトを含むデータを参照することで、生成AIアプリがモデルに悪意あるプロンプトを入力してしまうのが、間接的なプロンプトインジェクションのポイントです。結果悪意ある応答を利用者に返したり(〇〇さんは優秀だ)、攻撃者がバックエンドのシステムにアクセスするなどの影響が生じます。
予防・緩和戦略
OWASPによるとプロンプトインジェクションの脆弱性は、命令と外部データを分離しないLLMの性質に起因していること、LLM は自然言語を使うので、両方の入力フォームをユーザが提供したものと見なされるという性質のため、確実な防止策はないとされています。OWASPで紹介されている緩和策を図示すると次のようになります。
- アクセス制御・最小権限:当たり前の対策ではあると思いますが、生成AIアプリと各種システムとのアクセス制御、生成AIアプリが持つ権限を最小化するなどの対策です
- Human in the loop:特権操作を行う際には人間による判断プロセスを追加する予防策です
- 外部コンテンツの分離:モデルへの入力を行う際に、利用者が入力したものと外部データから取得したコンテキストを分離して入力する、ということを指しているものと思います
- 信頼境界の確立:生成AIアプリやモデルを信頼されないユーザとして扱い、各コンポーネント間の信頼境界を確立することで保護します
これらの緩和策を見ると、間接的なプロンプトインジェクションは特に防ぐのが難しい攻撃のように見受けられます。外部データへのアクセス制御や意図しないデータを参照しない設計をするなど、特に間接的なプロンプトインジェクションを意識した取り組みが必要であると考えられます。