LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

Facebook X Instagram
サービス・製品 | 

生成AIシステムのセキュリティ対策とは?代表的な攻撃とリスクのポイント

近年、生成AIを組み込んだWebサービスが増えています。これらは、従来個別のプログラムとして実装されていた問い合わせ対応やデータ分析などの処理の一部に生成AIを活用するものです。ユーザーが自然言語で入力した内容を解釈しその内容に応じて回答を生成したり、処理を実行したりします。本記事ではこのようなAIエージェントの使い方を「生成AIシステム」と定義します。

生成AIシステムは利便性の向上や業務効率化につながる一方で、ユーザーの入力をきっかけに本来出力すべきでない情報が漏えいしたり、想定外の処理が実行されたりするリスクもあります。生成AIシステムを安全に開発・運用するには、従来のWebアプリケーションとは異なる生成AI特有のリスクを把握しておく必要があります。

本記事では、生成AIシステムを安全に活用するために知っておきたい代表的なリスクと、それらを低減するためのセキュア設計について解説します。自社のシステムで診断やセキュリティレビューを実施する際は従来の観点に加え、生成AIを利活用した機能に特有のリスクを考慮した設計ができているかを見直すきっかけにしてください。

従来のWebアプリケーションと生成AIシステムの違い

従来のWebアプリケーションと生成AIシステムでは、ユーザー入力の解釈や処理方法、出力の生成方法に違いがあります。そのため、セキュリティ上のリスクや脆弱性が発生する仕組みも異なります。従来の脆弱性診断で確認している項目だけでは、生成AI特有のリスクを見落とす可能性があるため、両者の違いを理解しておくことが重要です。

主な違いは、下の表の通りです。

従来のWebアプリケーション 生成AIシステム
入力 定義済みのパラメータ・構造化データ 自然言語
処理 サーバのプログラムで処理
プログラム外の処理はエラー
自然言語ベースで解釈される
与えられた文脈の前後から実行するタスクを決定
出力 プログラムで決められた出力 生成AIによって動的に生成された応答

従来のWebアプリケーションでは、ユーザー入力は定義済みパラメータや構造化データが入力値となり、サーバのプログラムによって処理されます。入力を固定的なルールで処理するため、サーバ側で想定された形式の入力でない場合、エラーとして扱われ正常に処理されないことが一般的です。一方で、生成AIシステムではユーザー入力は自然言語として解釈されます。入力文章の文法上の間違いや、誤字があったとしても前後の文脈から意図をくみ取って、回答の生成やタスクの実行が行われます。生成AIは、想定外の入力でも解釈によって命令として実行される恐れがあります。

また、出力の扱いにも注意が必要です。Webアプリケーションの出力はサーバプログラムの動作結果であり、決められた形式で出力されますが、生成AIシステムの出力は生成AIによって動的に生成されるものであるため、ユーザーの指示によって出力結果や出力形式が変化します。生成AIの出力結果をプログラムのパラメータとして受け渡すシステムの場合、想定とは異なる形式で出力されることで脆弱性につながる恐れがあるのです。

生成AIシステムにおけるセキュリティリスク

ここでは、生成AIシステムにおいてどのようなセキュリティリスクが存在するのかを紹介します。

情報漏えいにつながる3つの要素

生成AIシステムでは、複数の機能が組み合わさることで重大なセキュリティリスクである情報漏えいにつながる可能性があります。それは、「信頼できないコンテンツの入力」、「機密データへのアクセスが可能」、「外部へデータの送信経路が存在」の3つの要素が同時に存在する場合に、重大な情報漏えいにつながるという考え方です。

WebフレームワークDjangoの共同開発者であり、「プロンプトインジェクション」という呼び名を広めたことで知られるSimon Willison氏は、この要素を「Lethal Trifecta(破滅の3要素)※」としています。

※ The lethal trifecta for AI agents: private data, untrusted content, and external communication

破滅の3要素 内容と具体例
信頼できないコンテンツの入力 過去の会話履歴、アップロードしたファイル、外部のWebページを参照可能
機密データへのアクセスが可能 生成AIやエージェントがプライベートなドキュメント、データベース、メールなどの機密情報にアクセス可能
外部へデータの送信経路が存在 HTMLやMarkdownの画像タグ、HTTP通信機能、社内チャットのリンクプレビュー機能、メール送信、フォーラム投稿機能などで、機密情報を外部へ送信可能
情報漏えいにつながる3つの要素
図1

信頼できないコンテンツの入力

LLM(大規模言語モデル)は、コンテキストウィンドウに格納された情報から次のトークンを導出します。コンテキストウィンドウは、システムプロンプトやユーザープロンプトだけでなく、アップロードファイルや外部から取得した情報など、さまざまなコンテンツによって構成されています。

プロンプトインジェクションの問題は、LLMがコンテキストウィンドウを参照した際に、信頼できないコンテンツからの指示を命令として解釈してしまうことです。そのため、コンテキストウィンドウを構成する要素で、ユーザーが操作可能で内容の安全性を保証できない要素が、生成AIに対して命令が注入可能な箇所になります。図2のように、命令を注入できる箇所は多岐にわたります。

チャットボットの場合、チャットの入力内容だけでなく、アップロードファイルの中身やチャットの会話履歴に命令が注入できる可能性があります。また、外部サイトの情報を参照可能なシステムの場合は、外部サイトの参照を行わせた際に、該当のサイトに記載されている内容が生成AIの入力に含まれてしまい、その内容が命令として解釈される恐れがあります。

コンテキストウィンドウに格納された情報に信頼できないコンテンツからの指示を命令として解釈される
図2

機密データへのアクセスが可能

AIエージェントが機密情報にアクセス可能な場合、情報漏えいにつながる恐れがあります。明示的に機密データへのアクセス権限を付与していなくても、ツールの実装や連携設定の不備により、LLMから機密情報が参照可能になっている場合があります。

例えば、AIエージェントがメール、社内ナレッジ、データベースなどにアクセスできる構成では、不適切な指示に従ってしまうことで、AIエージェント経由で機密データを取得される可能性があります。また、一般公開されている情報のみを扱う生成AIでも、システムプロンプトやAPIの認証情報など、外部に公開すべきでない内部情報が漏えいしないか注意する必要があります。

機密データへのアクセスが可能
図3

外部へデータの送信経路が存在

生成AIシステムがメール送信や外部サーバへのAPI通信、Webhookなど、外部へデータを送信できる機能を持つ場合、機密データが外部へ送信されるリスクがあります。攻撃者が生成AIに命令を注入し、機密データを取得させたうえで、外部への送信経路が存在している場合情報漏えいにつながる可能性があります。特に、生成AIによるツール呼び出しを十分に検証せずに実行する構成では、メール送信や外部APIへの通信を通じて機密データが外部へ送信される恐れがあります。

代表的なセキュリティリスク

生成AIのセキュリティリスクは悪意のある指示によって意図しない回答を生成するものだけではありません。機密情報の漏えいやアプリケーションの脆弱性、想定外のAPI利用によるコスト増大など、システムの実装や運用にも影響します。ここでは、代表的な攻撃手法とリスクを紹介します。

プロンプトインジェクション

プロンプトインジェクションはユーザーが意図的に悪意のある指示を入力することで生成AIに意図しない命令を実行させる攻撃です。この攻撃の原因は、システムプロンプトとユーザープロンプトが同じコンテキスト内で結合されて解釈されることです。また、RAGで参照する文書やWebページに前もって指示を書き込んでおき、それを生成AIに読み込ませることで命令を注入する間接プロンプトインジェクションと呼ばれる手法も存在します。こうした攻撃は、情報漏えいやAIエージェントの想定外の動作につながる恐れがあります。

ジェイルブレイク

ジェイルブレイクはLLMに設定された安全制御や管理者が設定した制限を回避し、本来は拒否されるはずの出力を引き出そうとする攻撃です。本来備わっている制限を回避し、有害な情報や不適切なコンテンツが生成されるとサービスの信頼失墜につながるリスクがあります。

プロンプトインジェクションと関連した問題ですが、問題の発生メカニズムに違いがあります。プロンプトインジェクションは、開発者が定義した信頼された文字列とユーザー入力などの信頼されていない文字列が同じコンテキストとして解釈されることで、生成AIのふるまいや出力が意図しない形へ変更される問題です。一方で、ジェイルブレイクはモデル自体に備わった安全設計を回避することを目的とした攻撃です。

プロンプトリーク

プロンプトリークは生成AIシステムに設定されているシステムプロンプトが漏えいする問題です。システムプロンプトには、AIの役割や応答方針、処理手順など、システムの設計に関わる情報が含まれる場合があります。これらが漏えいすると内部情報の開示につながるほか、競合他社にサービスの設計や独自のノウハウを知られることになり、類似サービスの開発に利用される恐れもあります。

不適切な出力処理

生成AIの出力を十分に検証せずWebアプリケーションの画面表示や後続処理にそのまま利用すると、クロスサイトスクリプティングやSQLインジェクションのような脆弱性を引き起こすことがあります。例えば生成AIが出力した文字列をHTML文書としてレンダリングする機能があった場合、悪意のあるスクリプトが実行される可能性があります。

生成AIの出力は必ずしも安全な形式や内容であるとは限りません。出力を利用する処理に応じて適切なエスケープや入力検証を行うとともに、SQLの実行にはプレースホルダを用いたパラメータ化クエリを採用するなど、アプリケーション側で脆弱性を防ぐ設計が求められます。

DoS(過剰なリソース消費)

DoS攻撃は生成AIの計算資源コストを過剰に消費させる攻撃です。短時間に長文の入力を大量送信することや生成AIに大量に再帰的な処理をさせることで、システムに過大な負荷をかけます。一般的なWebアプリケーションに対するDoS攻撃では、サーバ負荷によるサービス停止などが問題になります。生成AIに対するDoS攻撃では、これに加えてAPIの大量利用による高額な従量課金の請求が発生する恐れがあります。

安全な生成AIの利用に向けた対策

生成AIシステム、特にAIエージェントの安全性を高めるには「Lethal Trifecta(破滅の3要素)」が同時に成立する構成を可能な限り避けることが重要です。

  • 信頼できないコンテンツの入力
  • 機密情報へのアクセスが可能
  • 外部へのデータの送信経路が存在

これらが組み合わさるとメール、Webページ、文書、チケット、添付ファイルなどに含まれた悪意ある指示によりAIエージェントが機密情報を取得し外部へ送信したり、想定外の操作を実行したりする恐れがあります。このような構成を完全に避けることが難しい場合は、AIエージェントが参照できる情報、処理できるコンテンツ、利用できるツールおよび通信先を必要最小限に制限します。

最終出力を生成AIに任せることが重大なリスクとなる場合はさらに、入力・出力の検査や人による確認・承認を補助的な対策として組み合わせます。ただし、これらのチェックだけに依存するのではなく、悪意ある指示が処理された場合であっても、情報漏えいや重要な操作につながりにくい権限・構成とすることが重要です。

生成AIシステムが扱う権限を最小限に抑える

生成AIシステムが、先に説明した「Lethal Trifecta(破滅の3要素)」を満たす場合、情報漏えいのリスクが高まります。

リスクを抑えるにはこれら3つの要素が同時に成立する構成を可能な限り避けることが基本です。3つの要素のいずれも排除することが難しい場合は、それぞれについてAIエージェントが参照できる情報や利用できる機能を必要最小限に抑えることを検討する必要があります。例えば、次のような対策が考えられます。

  • 信頼できないWebコンテンツ、メール、添付ファイルなどへのアクセスを制限
  • AIエージェントが参照できる機密情報を、業務上必要な範囲に限定
  • メール送信やAPI呼び出しなど、外部へのデータ送信や外部システムに影響を与える機能を必要最小限に制限
  • 1つのAIエージェントに様々な機能を実装するのではなく、単一機能のノード集合として実装し権限範囲を制御
  • 外部送信、データ更新、権限変更など影響の大きい処理については、生成AIの出力をそのまま確定・実行せず、必要に応じて人間による最終確認・承認を介在させる

入力と出力の両方を検証する

プロンプトインジェクションやジェイルブレイクのような攻撃の対策は生成AIへの入力と、生成AIが出力した結果の両方を検証します。

入力側で特定文字列のブラックリストでチェックするだけでは、攻撃者による表現の言い換えや他言語での入力に対応しきれない場合があります。そのため入力内容を検証し、攻撃的な指示や不適切な入力を検出するモデルを活用する方法が考えられます。ただし、このような検出モデルによる判定にも限界があるため、最終出力としての内容を評価する考え方が大切です。

そのため生成AIから出力された結果に対しても検証が必要です。機密データや不適切なコンテンツが含まれていないかを評価し、問題がある場合は利用者への提示や後続処理を制限する評価機能を設計に加える必要があります。特に、生成AIの出力を最終結果として画面に出す箇所、生成したプログラムコードを実行する箇所などは、安全な出力であるかの評価が必要です。

なお、「機密情報を出力しないでください」といった禁止事項をシステムプロンプトに設定する対策もありますが、それだけでは不十分です。プロンプトインジェクションによって悪意のある指示が追加されることで設定された制約が迂回される可能性があるためです。システムプロンプトによる禁止事項は補助的な対策と位置づけ、権限管理や入出力の検証など、アプリケーション側の制御を組み合わせる設計が重要です。

入力と出力の両方を検証する
図4

おわりに

生成AIが組み込まれたWebアプリケーションは、業務の効率化やサービスの利便性向上に役立つ一方で、生成AIシステム特有の情報漏えい経路など、新たなセキュリティリスクが生まれました。生成AIシステムを外部に公開するうえでどのようなリスクが存在するのか理解し、セキュア設計の知識をアップデートすることが重要です。

また、生成AIシステムにリスクがないか調査する場合、ユーザーからの入力値が従来のWebアプリケーションとは異なった方法で処理されるため、別観点での診断が必要になってきます。一般的なWebアプリケーションの脆弱性診断に加え、プロンプトインジェクションや情報漏えいにつながる経路の有無など、生成AIシステム特有の観点からも安全性を確認することが重要です。

ラックでは生成AIシステムへの脆弱性診断サービスを提供しています。生成AIシステムの公開や運用に向けてセキュリティ上の懸念がある場合は、お気軽にお問い合わせください。

プロフィール

田代 雅哉

田代 雅哉
Webアプリケーション診断を中心として生成AI活用システム リスク診断にも取り組んでいます。
両分野の知識を活かした、関連するセキュリティトピックについて発信していきます!

この記事は役に立ちましたか?

はい いいえ

関連記事

LAC WATCH

関連記事をご紹介します

  • AIによる情報漏えいはなぜ起こる?すぐにできる対策と安全な使い方を紹介

    AIによる情報漏えいはなぜ起こる?すぐにできる対策と安全な使い方を紹介

  • Box AIの制限はなぜ必要か?RAGとLLMで理解する生成AIの仕組みと設計

    Box AIの制限はなぜ必要か?RAGとLLMで理解する生成AIの仕組みと設計

  • 「情報セキュリティ10大脅威 2026」から学ぶ、最新の脅威と対策ソリューション

    「情報セキュリティ10大脅威 2026」から学ぶ、最新の脅威と対策ソリューション

page top