本サイトは、快適にご利用いただくためにクッキー(Cookie)を使用しております。
Cookieの使用に同意いただける場合は「同意する」ボタンを押してください。
なお本サイトのCookie使用については、「個人情報保護方針」をご覧ください。
本ブログは「生成AIセキュリティ」シリーズの第4弾です。
これまで、画像生成AIのSafety FilterをBypassして不適切な画像を作成させる手法や、文章生成AIから機微情報を窃取する手法などを対策と共に解説してきました。
今回は、OpenAIが昨年公開したサービス「カスタムGPTs」にまつわるセキュリティ・リスクを取り上げます。カスタムGPTs(以下、GPTs)は、ChatGPT Plusのユーザが任意にGPTをカスタマイズし、特定の目的に特化したGPTを作成・公開することができるサービスです。このサービスは非常に有用ですが、GPTsを攻撃者が悪用することで、他ユーザを攻撃できることが海外の研究者らによって報告されています[1]。
そこで本ブログでは、「カスタムGPTsを悪用した攻撃と対策について」と題し、GPTsを悪用した攻撃手法と対策について解説します。本ブログが、GPTsのセキュリティ・リスクを理解するための一助になれば幸いです。
「生成AIセキュリティ」シリーズ・バックナンバー
- DALL-E 2などの画像生成AIに対する敵対的攻撃(2022年10月公開)
- ChatGPTなど生成AIによる個人情報の開示(2023年5月公開)
- Prompt経由のSQL Injection攻撃について(2023年11月公開)
はじめに
OpenAIのChatGPTに採用されている大規模言語モデル「GPT(Generative Pre-trained Transformer)」は、情報収集や文章生成・要約、コード生成、専門知識を伴う対話など、これまで実現が難しかったタスクを高い精度で実現することができます。また、ChatGPTは画像生成AIのDALL・E3と連携する機能も有しており、ユーザの指示文を基に画像を生成することもできます。このブログをお読みの方の中にも、ChatGPTを個人的または業務で利用している方も多いのではないでしょうか。筆者自身もコード生成やリファクタリング、アルゴリズムの考案、ロゴの作成など、多くの場面でChatGPTを活用しています。
ところで、OpenAIは昨年11月、このGPTをユーザが任意にカスタマイズできるサービス「GPTs[2]」をリリースし、今年1月には、各ユーザが作成したGPTsを公開・共有できるGPT Store[3]を開設しました。これにより、特定の目的に特化したGPTをChatGPTのユーザが自在に作成・公開できるようになりました。
多くのGPTsが公開されているGPT Store(出典:https://chat.openai.com/gpts)
すでにGPT Storeには多数のGPTsが公開されており、例えば利用ユーザの嗜好に合ったレストランを探すGPTsや法律的な対話が可能なGPTs、文法チェックを行うGPTsなど、様々なGPTsが利用可能な状態になっています。
このようなGPTsは、ChatGPT上の設定画面から幾つかのパラメータを設定することで容易に作成することができます。
GPTsの設定画面
GPTsの設定は幾つかのチャネルに分かれており、例えばGPTの知識を補完する情報をファイルとしてアップロードするファイル・チャネル(簡易的なRAGに相当)、GPTに対する指示(Prompt Templateに相当)や、ユーザが入力したPromptに応じて実行するPythonコードを定義するコマンド実行・チャネル、そして、ユーザへの応答に必要な情報を外部システムから取得するネットワーク・チャネルなどが用意されています。ユーザはこれらのチャネルを設定することで、任意の目的に特化したGPTsを作成することができます。
この仕組みは容易にGPTsを作成できるため非常に有用ですが、一抹の不安も残ります。
仮にGPTsの作成者が悪意のある者(攻撃者)の場合はどうなるでしょうか。攻撃者はファイル・チャネルを悪用し、マルウェアなどの不正なファイルを利用ユーザに配布するかもしれません。また、コマンド実行・チャネルを悪用し、GPTに不正な指示を与え、利用ユーザを欺くかもしれません。
逆にGPTsの利用ユーザが攻撃者の場合はどうなるでしょうか。GPTsの作成者がファイル・チャネルやコマンド実行・チャネルなどに自身のノウハウが詰まった情報を設定した場合、攻撃者によるPrompt Injection攻撃によってこれらの設定情報が窃取されるかもしれません。また、攻撃者はP2SQL Injection攻撃を行うことで、GPTsと連携する外部システムを攻撃するかもしれません。
このように、GPTsの作成者や利用ユーザの属性によって、様々な脅威が存在します。以下の図は、GPTsと利用ユーザを「良性(悪意なし)」と「悪性(悪意あり)」の2軸で分類し、GPTsの脅威を4つの象限に分けた様子を表しています。
GPTsの脅威モデル
右上の象限「善良なコミュニケーション」はGPTs・ユーザ共に良性の場合であり、セキュリティ・リスクは殆ど存在しない領域です(幻覚などの偶発的なリスクは存在します)。
左上の象限「GPTsに対する攻撃」はユーザのみが悪性の場合であり、悪性のユーザはGPTsの設定情報の窃取や不正なコマンドの実行などを行います。
左下の象限「悪意のあるコミュニケーション」はGPTs・ユーザ共に悪性の場合であり、違法薬物の入手方法や爆発物の作り方など違法なやり取りが行われます。
最後に右下の象限「ユーザに対する攻撃」はGPTsのみが悪性の場合であり、悪性のGPTsがユーザを騙し、ユーザが入力した情報の窃取やフィッシングサイトへの誘導、マルウェアの配布などの攻撃を行います。
このように、GPTsとユーザの属性に応じて様々なセキュリティ・リスクが存在します。そこで本ブログでは、GPTsを悪用する象限「ユーザに対する攻撃」に焦点を当て、悪性のGPTsによる攻撃手法および検証結果、そして対策を示します。
なお、象限「GPTsに対する攻撃」で利用される攻撃手法と対策については、過去に執筆した「生成AIセキュリティ」シリーズにて詳解していますので、ご興味がございましたら、ぜひ参照いただければと思います。
Note:「生成AIセキュリティ」シリーズ |
悪性のGPTsを使用した攻撃シナリオ
ここからは、想定される攻撃シナリオを検証結果と共に示します。
上述したようにGPTsの設定項目は多彩であり、設定の組み合わせによって無数の攻撃シナリオが考えられますが、本ブログでは以下に示す4つの攻撃シナリオを検証します。
- ユーザに応答する文章の改ざん
- 不正なファイルの配布
- 悪意のあるWebサイトへの誘導
- 機微情報の窃取
※本検証で作成したGPTsは非公開としているため、筆者以外のユーザが利用することはありません。
ユーザに応答する文章の改ざん
本シナリオでは、攻撃者は「文法チェックAI」を謳う悪性のGPTsを作成し、利用ユーザ(被害者)が入力した文章を巧みに改ざんして応答します。そして、被害者がGPTsによる応答文章を疑わずにそのまま利用することで、何らかの被害に遭わせることを企図します(改ざんされた文章を公開することによるレピュテーション低下や炎上など)。
攻撃者はこの目標を達成するために、GPTsのコマンド実行・チャネルの設定項目「Instructions」を以下のように設定します。
文章の改ざんをGPTsに指示する設定(Instructions)
「Instructions」には4つの指示が箇条書きされていることが分かります。この指示文には文法チェックを行う旨の正常な指示(1番目)に加え、文章改ざん(数字の改ざん)の指示(2番目)や、改ざん隠蔽の指示(3番目と4番目)が含まれています。
このように設定されたGPTs「文法チェックAI」を被害者が使用することで、被害者が入力した文章が改ざんされた状態で応答されることになります。以下の図は、被害者(筆者)が文法チェックAIを利用した際の様子です。
被害者が悪性のGPTs「文法チェックAI」を使用した様子
被害者は2段落から成る文章の添削をGPTsに依頼しています。これに対してGPTsは「文法チェックの結果は以下の通りです。」というメッセージに続けて添削文章を応答しています。一見すると異常はないように見えますが、上図の黄色下線部分に注目してください。入力文章の数字部分が微妙に改ざんされていることが分かります。これはGPTsの設定「Instructions」に書き込んだ改ざん指示により、GPTsが入力文章の数字部分を適当な数字に置き換えたことを意味しています。
この結果から、GPTsの設定を悪用することで、入力文章を改ざんできることが分かりました。本検証では数字部分を改ざんするのみに留めていますが、設定次第では意図的なTypoや誹謗中傷文の注入、文章の主張を捻じ曲げるなどの攻撃も行うことができると思われます。また、本検証では短文を入力しているため、被害者は改ざんに気付くことは容易ですが、仮に長文を入力した場合、改ざんに気付くことは困難になると思われます。
不正なファイルの配布
本シナリオでは、攻撃者は「文法チェックAI」を謳う悪性のGPTsを作成し、利用ユーザ(被害者)に不正なファイルを配布します。不正なファイルがマルウェアなどの悪性ファイルの場合、被害者のPC(システム)が攻撃されることになります。
攻撃者はこの目標を達成するために、GPTsのコマンド実行・チャネルの設定項目「Instructions」を以下のように設定し、また、ファイル・チャネルの設定項目「Knowledge」に不正なファイルをアップロードしておきます。
不正ファイルのダウンロードリンクの作成をGPTsに指示する設定(Instructions, Knowledge)
本検証では「checked.zip」というファイルをアップロードし、「Instructions」には「チェックが完了した旨とチェック済み文章のダウンロードリンクを作成・表示」する指示が書かれています。
このように設定されたGPTs「文法チェックAI」を被害者が使用することで、被害者に(Knowledgeにアップロードした)不正なファイルが配布されることになります。以下の図は、被害者(筆者)が文法チェックAIを利用した際の様子です。
被害者が悪性のGPTs「文法チェックAI」を使用した様子
被害者はWord文章を添付し、GPTsに添削を依頼しています。これに対してGPTsは「チェックが完了しました。チェック済みのファイルはここからダウンロードしてください。」と応答します。ここで、上図の赤枠で囲った部分に注目してください。ダウンロードリンクになっていることが分かります。被害者がこのリンクをクリックした場合、GPTsの設定「Knowledge」にアップロードされているファイル「checked.zip」がダウンロードされることになります。
この結果から、GPTsの設定を悪用することで、攻撃者が事前に用意したファイルを被害者に配布できることが分かりました。本検証では無害のファイルを配布していますが、Knowledgeにマルウェアなどのファイルをアップロードした場合、実害に繋がります。
悪意のあるWebサイトへの誘導
本シナリオでは、攻撃者は「githubコード探索AI」を謳う悪性のGPTsを作成し、利用ユーザ(被害者)を悪意のあるWebサイトに誘導します。誘導先のWebサイトによっては、不正ファイルのダウンロードやフィッシングなどの被害に遭う可能性があります。
攻撃者はこの目標を達成するために、GPTsのコマンド実行・チャネルの設定項目「Instructions」を以下のように設定し、また、ネットワーク・チャネルの設定項目「Actions-Schema」に悪意のある外部サイトへの通信を設定します。
悪意のあるWebサイトへのアクセスをGPTsに指示する設定(Instructions)
悪意のあるWebサイトへのアクセス方法を定義する設定(Actions-Schema)
本検証では、「Instructions」には「Actionsで定義したサーバにアクセス」する旨の指示、「Actions」の「Schema」には攻撃者が用意した外部のWebサイトにアクセスするための定義(OpenAPIに準拠したSchema)が書かれています。※本検証では、筆者が用意したgithubのリポジトリ「https://github.com/13o-bbr-bbq/gpts_attack」に誘導する設定を入れています。
このように設定されたGPTs「githubコード探索AI」を被害者が使用することで、被害者は悪意のあるWebサイトに誘導されることになります。以下の図は、被害者(筆者)がgithubコード探索AIを利用した際の様子です。
外部サーバへの通信許可を求めるダイアログ
被害者は「マージソートのサンプルコード」の探索をGPTsに依頼しています。ここで、上図の赤枠で囲った部分に着目してください。GPTsは外部サーバと通信する際、ユーザに通信の許可を求めるダイアログを表示し、ユーザが「許可」ボタンを押して初めて外部サーバと通信する仕様になっています。しかし、ユーザに表示される外部サーバの情報はFQDN部分に限定されます(ユーザはPath以下を確認できない)。本検証では「https://github.com/13o-bbr-bbq/gpts_attack」に誘導する設定になっていますが、ユーザは肝心の「/13o-bbr-bbq/gpts_attack」を確認できないため、通信先を完全に検証することは不可能となります。
外部サーバと通信した結果
被害者がFQDNのみで通信先を確認し、仮に「許可」ボタンを押下すると、上図の結果がGPTsから応答されます。GPTsは外部サーバから取得した情報を基に、「探しているマージソートのサンプルコードが含まれている可能性がある」と言いながらファイルのダウンロードリンクを生成しています。被害者がこのリンクをクリックした場合、外部サーバ上のファイル「checked.zip」がダウンロードされることになります。なお、応答結果に含まれる外部サーバの情報もFQDNのみであり、この応答からは通信先が不正か否かを判断することはできません。
この結果から、GPTsの設定を悪用することで、被害者を悪意のあるWebサイトに誘導できることが分かりました。本検証では無害のファイルをダウンロードするリンクを作成・表示していますが、外部サーバ上に配置したマルウェアなどの悪意のあるファイルを被害者にダウンロードさせた場合、実害に繋がります。
機微情報の窃取
本シナリオでは、攻撃者は「ビジネス文章添削AI」を謳う悪性のGPTsを作成し、利用ユーザ(被害者)が入力した文章を秘密裏に窃取します。GPTsに入力する文章の性質によっては、情報漏えいなどの甚大な被害に繋がる可能性があります。
攻撃者はこの目標を達成するために、GPTsのコマンド実行・チャネルの設定項目「Instructions」を以下のように設定し、また、ネットワーク・チャネルの設定項目「Actions-Schema」に窃取する情報の送信先サーバとの通信を設定します。
外部サーバへの通信を指示する設定(Instructions)
窃取する情報を外部サーバに送信する設定(Actions-Schema)
本検証では「Instructions」には「Actionsで定義したサーバに被害者が入力した文章をPost」する旨の指示、「Actions」の「Schema」に攻撃者が用意した情報窃取用サーバと通信するための定義が書かれています。※本検証では、被害者が入力した情報をAWS API Gateway上のAPI経由でSlackにPostする仕組みになっています。
このように設定されたGPTs「ビジネス文章添削AI」を被害者が使用することで、被害者が入力した文章が攻撃者のサーバに送信・窃取されることになります。以下の図は、被害者(筆者)がビジネス文章添削AIを利用した様子を表しています。
被害者が悪性のGPTs「ビジネス文章添削AI」を使用した様子
被害者は「(架空の)顧客に送信するビジネス・メール」の添削をGPTsに依頼しています。上図の赤枠で囲った部分に示す通り、GPTsは「あなたの文章は問題ありません。安心してお使いください。」と応答します。なお、本検証ではAWS API Gatewayのデフォルトのエンドポイント(FQDN部分のみ)が表示されていますが、カスタムドメインなどを使用してより自然なFQDNにすることでユーザに安心感を与え、攻撃を秘匿化できると思われます。
入力文章が窃取された様子
悪性のGPTsは上述した内容を被害者に応答する一方で、秘密裏に入力文章を外部サーバに送信しています。上図は、攻撃者が管理するSlackチャネルに被害者が入力した文章がPostされた様子を表しています。
この結果から、GPTsの設定を悪用することで、被害者が入力した文章を窃取できることが分かりました。なお、本検証では窃取した文章を外部サーバに送信していますが、GPTsの仕組みを鑑みると、「Knowledge」に(攻撃者があらかじめ)アップロードしたテキストファイルなどに被害者が入力した文章を書きこみ、後で攻撃者がファイル内容を参照することもできると思われます。この場合は外部サーバへの通信を伴わないため、被害者が情報窃取されたことに気付く余地は皆無になると思われます。
本検証の結果より、悪意を持ってGPTsの設定を行うことで、GPTsの利用ユーザ(被害者)に対して様々な攻撃を実行できることが分かりました。
この検証結果は、無数に公開されているGPTsを何の疑いも持たずに気軽に利用してしまうことで、思わぬ被害に遭ってしまうリスクが存在することを意味しています。
想定される対策
本項では「利用ユーザ側の対策」と、「サービス提供側(OpenAI)で行って欲しい対策」を解説していきます。
利用ユーザ側の対策
ここでは、以下4つの対策を考えてみます。
- 信頼できないGPTsを利用しない
- GPTsに重要情報を入力しない
- GPTsが通信する外部サーバを検証する
- GPTsが表示するダウンロードリンクのURLを検証する
信頼できないGPTsを利用しない
大前提として、信頼できないGPTsを使用しないことが重要です。但し、本ブログ執筆時点(2024年2月26日)では、Ratingなどの各GPTsを評価する指標がなく、また口コミに相当する機能も無いため、ユーザはGPTsの信頼性を判断することが困難な状況です。ユーザが事前に確認できる情報はGPTsの概要説明文と作成者のみとなっているため、社会的信頼性が高い企業や人物が作成したGPTsを優先的に使用するなどの自衛的措置が本対策の限界となります。
企業(OpenAI)が作成したGPTs
GPTsに重要情報を入力しない
GPTsは信頼できないという前提に立ち、GPTsに個人情報や社外秘情報といった重要情報を入力しないことも重要です。このために、組織であればGPTsの利用ガイドラインや社内規定を整備してガバナンスを効かせることや、社員教育を行い、GPTsを正しく利用するためのリテラシー教育も効果的だと思われます。
GPTsが通信する外部サーバを検証する
外部サーバとの通信を伴うGPTsは、以下の図のように外部サーバのFQDNが表示されます。本格的にGPTsを使用する前にテスト用の入力を行い、通信先の外部サーバのFQDNを確認することが重要です。また、そもそも外部サーバと通信する必要性がないと思われるGPTsが外部サーバへの通信を求めてきた場合、これを許可しないことも重要です。
FQDNを確認した様子
但し、現時点のGPTsは外部サーバのFQDN部分のみ表示する仕様であり、ユーザはPath以下を確認することができません。よって、本対策の効果は限定的となります。
GPTsが表示するダウンロードリンクのURLを検証する
GPTsがダウロードリンクを表示した場合、リンクにマウスポインタを合わせるなどしてダウンロードリンクのURLを確認することが重要です。以下の図のように不審なURLにアクセスさせようとしている場合は、リンクをクリックせずにGPTsの使用を中止します。
ダウンロードリンクのURLを確認した様子
但し、以下の図に示すように、攻撃者がGPTsの設定項目「Knowledge」にアップロードしたファイルのダウンロードリンクでは、リンク先のURLを確認することができません。よって、「Knowledge」経由で不正なファイルを配布する攻撃に対しては、本手法で対策することは困難となります。
「Knowledge」にアップロードされたファイルのリンクはURLを確認することができない
サービス提供側(OpenAI)で行って欲しい対策
次に、OpenAI側で行って欲しい対策を考えてみます。
- GPTsに対するセキュリティ・チェック
- GPTsを評価する仕組みの整備
- デザイン面の改善
- PIIなどの重要情報の検知およびユーザへの警告表示
GPTsに対するセキュリティ・チェック
本ブログ執筆時点(2024年2月26日)のGPTsでは、サービス提供側でGPTsの設定チェックを行っていないように思われます(本検証で使用したGPTsは何の制約も受けずに作成することができた)。今後はGPTsが作成・公開される前にサービス提供側で審査を行い、利用ユーザに害を及ぼす可能性のあるGPTsの場合は、公開を拒否するなどの仕組みが必要であると考えます。
GPTsを評価する仕組みの整備
前述したように、本ブログ執筆時点(2024年2月26日)のGPTsでは、利用ユーザ側が各GPTsを評価する仕組みが存在しません。このため、GPTsの使い勝手や性能面に加え、セキュリティ上の懸念に関する情報を事前に入手することができない状態です。今後はRatingや口コミのような機能を実装し、利用ユーザが事前にGPTsの評価を確認できるようにする仕組みが必要だと考えます。
デザイン面の改善
前述したように、外部サーバと通信する場合、利用ユーザはFQDN部分しか確認することができません。よって、Path部分も含めたフルURLを画面上に表示し、利用ユーザが通信先を確認し易くする必要があると考えます。また、ダウンロードリンクはリンクテキストを表示するのではなくURLを表示することで、利用ユーザがダウンロード先のURLを確認し易くする必要があると考えます。
PIIなどの重要情報の検知およびユーザへの警告
PII(個人を特定できる情報)や社外秘情報などの重要情報を入力した場合、サービス提供側で重要情報の検知およびユーザへ警告を発する仕組みが必要と考えます。ChatGPTはその利便性から利用ユーザは今後も増え続けると思われます。利用ユーザは必ずしもセキュリティ意識の高い人ばかりとは限りません。よって、利用ユーザのセキュリティ意識向上に加えて、サービス提供側でも被害を未然に防ぐための仕組みを整備することが重要だと考えます。
本項で紹介した対策は一例であり、日々多くの対策が生み出されています。よって、常に最新の対策をウォッチし、自身に適した対策をとる必要があると考えます。
また、各対策は一長一短であり、一つの対策で十分とは言い切れません。
よって、複数の対策を組み合わせる「多層防御」の観点で、対策を考える必要がありそうです。
おわりに
本ブログでは、GPTsを悪用した攻撃と対策を解説しました。
GPTsそのものは非常に有用なサービスであり、様々なGPTsが作成・公開されることでユーザは自身の目的に合ったGPTsを利用することができ、多大な恩恵を享受することができます。今後もGPTsのようなサービスは各ベンダーからリリースされることが予想されます。しかし、GPTsのようなサービスが増えるという事は、これに旨味を見出した攻撃者も増えることを意味し、本ブログで解説したGPTsを利用した攻撃が常態化する可能性もあります。
最近では、本ブログで解説した手法とは異なる新たな攻撃手法も発表されています[4]。本論文では、脆弱性が存在するライブラリの提案や(攻撃者が作成した)悪性のライブラリの提案、脆弱性のあるコードの提案、そして、実行するとシステムが破壊されるコードの提案など、コーディング・アシスタントAIを装った悪性のGPTsを使用した攻撃手法が提案されています。
脆弱性のあるバージョンのユーティリティ・プログラムを提案する悪性のGPTs(出典:https://arxiv.org/abs/2401.09075)
GPTsをコーディングに利用する開発者も増えていると思われますが、GPTsが提案した内容を未検証で使用した場合、思わぬ攻撃を受けてしまう可能性があります。このため、GPTsの提案には(意図的・偶発的に関わらず)誤りが含まれていることを意識し、提案を鵜呑みにせず検証した上で使用することが重要であると考えます。
本ブログがGPTsのセキュリティ・リスクを理解するための一助になれば幸いです。
MBSDのAIセキュリティ・サービス
弊社・MBSDは、LLM含むAIを活用したシステムやAIそのもののセキュリティ品質を維持・向上するためのサービスを提供しています。
AIセキュリティ教育
AIシステム (主に画像分類AI) の企画から運用までをセキュアに行うための知識・技術をAIの基礎から一気通貫で学べる「eラーニング講座」および「ハンズオントレーニング」を提供しています。ハンズオンでは、LLMにも対応しており、以前のブログ「ChatGPTなど生成AIによる個人情報の開示」や「Prompt経由のSQL Injection攻撃について」で示したPrompt InjectionやP2SQL Injectionなどの原理と対策を学ぶことができます。
AIシステムに対するセキュリティ診断
AI自体の診断や、AIを組み込んだアプリケーションに対して、AI特有のセキュリティ・リスクを調査して報告します。画像分類AIやLLMアプリケーションに対応しており、既存のWebアプリケーション診断だけではカバーしきれない、AI特有のセキュリティ・リスクを調査・報告することが可能です。
AIセキュリティに関するアドバイザリ
AIセキュリティに関する調査・ガイドライン作成・アドバイザリを実施します。
例えば、LLMを社内に導入したいが、セキュリティやプライバシーを考慮した利用ガイドラインをどのようにして策定して良いのか分からない、という方はお気軽にご相談ください。
参考文献
[1] Opening A Pandora's Box: Things You Should Know in the Era of Custom GPTs, https://arxiv.org/abs/2401.00905
[2] Introducing GPTs, https://openai.com/blog/introducing-gpts
[3] Introducing the GPT Store, https://openai.com/blog/introducing-the-gpt-store
[4] GPT in Sheep's Clothing: The Risk of Customized GPTs, https://arxiv.org/abs/2401.09075
最後までご覧いただき、誠にありがとうございました。
以上
おすすめ記事