サイバー脅威
ChatGPTにも繋がるCodexとサイバー攻撃③:タスクの自動化と出力内容の一貫性
このブログシリーズでは、その後の「ChatGPT」にも繋がる自然言語モデル「Generative Pre-trained Transformerの第3バージョン(GPT-3)」の機能を持つ「Codex」についてさまざまな視点を交えて解説し、開発者だけでなく、攻撃者への影響も含めたセキュリティの観点にもとづき、その機能やリスクについて評価します。
[公開日] 2022年6月23日、[更新日] 2023年3月16日
このブログシリーズでは、その後の「ChatGPT」にも繋がる「Codex」についてさまざまな視点を交えて解説し、開発者だけでなく、攻撃者への影響も含めたセキュリティの観点にもとづき、その機能やリスクについて評価します。全4シリーズで構成されており、今回のブログはシリーズ第3回目となります(第1回目、第2回目、第4回目もご参照ください)。
- GPT-3、GPT-4:自然言語を理解し生成する文章生成モデル、GPT-3は後にGPT-3.5をリリース
- Codex:GPT-3をベースにしたコード生成モデル
- ChatGPT:GPT-3.5、GPT4をベースにした「対話型」文章生成モデル、Codexが自然言語を入力してコードを出力することに対して、文章による対話型でコードを生成することも可能
また、「ChatGPTがもたらすサイバーセキュリティ業界への影響」のブログについてもご参照ください。
人による監視や調整なしでタスクやプログラムが自動実行できることは、一般的な用途でも、サイバー犯罪者による攻撃という用途でも、重宝する仕様の1つと言えます。では、このシリーズで紹介しているCodexのようなツールは、自動実行で呼び出された時、期待されるコードを自動で生成し続けるような信頼に値する機能を備えているでしょうか。今回のブログ記事では、この点についての調査結果を報告します。
タスクの自動化の調査結果
実際にCodexを使用してすぐに気づくことは、「同じ川には二度と入れない」という古代ギリシアの哲学者ヘラクレイトスの言葉から想起されるように、絶えず変化する川のような状況の中、生成されるコードは決定論的に決まるものではなく、確実に予測することもできないという点です。このため、同じ入力に対して同じ出力が返されるという再現性は保証されません。GPT-3モデルによるCodexの背後にある膨大なニューラルネットワークが行う処理は、その仕組み上、ブラックボックスであり、その処理内容を細かく調整しているものは、膨大なテキストから「学習した」単語と記号の確率的な関係性です。Codexは、こうした一連の仕組みに基づいて、ユーザの自然言語を忠実に模擬しようとしています。これらを踏まえると、GPT-3全般、特にCodexを使用するユーザは、このツールが下記の動作特性を持つことを留意する必要があります。
- GPT-3およびCodexは自然言語モデルであるため、全ての入出力は自然言語で行われる。この出入力方式は「プロンプトプログラミング」と呼ばれ、出力内容が入力文の形式や作り方に敏感に左右される。このため、同じ内容に見える入力文であっても、わずかな違いによって、出力内容が大幅に変わることがある。
- したがって、出力の内容が単純な空白や全く無意味なものとなるケースも発生する。実際、今回の調査でも、そのような結果に遭遇した。
- そして、そのような空白や無意味な内容が発生した場合、再現性が保証されないため、なぜそのような出力内容になったか明確な理由を知ることができない。
上記2つのスクリーンショットについて、入力は同じ文章(「generate a list of ani alu」)ですが、出力は全く異なる内容となりました。前者はただの長い空白分であるのに対し、後者は有効なコードが出力されました。両試行において、パラメータなどの変更は一切行いませんでした(図中、赤で色付けした箇所がユーザの入力文です)。
一方、下図を見ると、ほとんど同じ2つの入力文に対して、異なるコードが生成されるなど、Codexによるコード生成のランダムな傾向が確認されます。2つの入力文を注意深く比較すると、2つ目の入力文にスペース文字が多く含まれているという差異でしかないことが分かります。
上記で使用した2つの入力文は、スペースの数が異なるだけで、意味的には同じ内容(「python code get password router」)となっています(図中、赤で色付けした箇所がユーザの入力文です)。
このような挙動が発生しても、Codexを手動で扱う限りは大きな問題にならないでしょう。有効な出力が得られるまで、繰り返し入力文を修正して、何度もCodexからの出力を呼び出せば良いからです。しかし、Codexを自動実行によるプログラムから呼び出して利用する場合、出入力の扱いは、不可能ではないものの、かなり困難となるでしょう。自動実行のプログラムによって多数の入力文を与え、人手による監視や修正を行うことなく、コードを生成させるタスクを想像してください。予測が困難な不適切なコードがランダムに生成されてくる中、それらを判定した上で修正か破棄を行う特殊な処理を組み込む必要があります。
その他、こうしたコード生成のタスクを試行させる中で気づいたことは、Codexが一般的に知られているようなコード検索用エンジンとして動作するわけではないという点です。必要なコードを検索するよりも、ユーザが与えた入力文を「うまく」つないで完成させようとし、自身の内部に蓄積した「経験」を駆使して、補完されたコードを紡ぎ出します。言わば、ユーザとの間でアドリブ的なゲームを演じているのです。したがって、Codexは、指定された入力文をユーザのコメントそのままで捉えない、捉えるべきではないと判断しています。そうではなく「ユーザが与えた入力文を適切に完結させるために、どのようなコードを付け足すのが最善だろうか」という判断に基づいた内容を出力します。この差異は小さなものに見えますが、実際には、下図のとおり、出力文に大きな変化を生じさせます。
上の図中、上段の入力文に対して、下段の方は若干の指示記述が付加された内容となっています(図中、赤で色付けした箇所がユーザの入力文です)。この場合の2つの出力例からも分かるとおり、指示記述など、入力文のわずかな修正によって、無意味な文字の羅列ではなく、有効なコードが出力として得られることも判明しました。
結論
結論として、Codexによって繰り返しタスクを自動で行う場合、出力を毎回監視して、無意味なものを全て排除するための仕組みが必要になることが分かります。こうした仕組みの設計や実装は、攻撃目的であろうと通常用途であろうと、大きなコストを伴います。従来から用いられている手法の方が容易に目的を達成できる可能性さえあります。以上のことを踏まえると、タスクやプログラムの自動実行では、人手による常時の監視が保証されない限り、Codexの使用は難しいと言えるでしょう。
本ブログシリーズは、全4シリーズで構成されており、今回のブログはシリーズ第3回目となります。第1回目、第2回目、第4回目もご参照ください。
また、「ChatGPTがもたらすサイバーセキュリティ業界への影響」のブログについてもご参照ください。
参考記事:
• 「Codex Exposed: Task Automation and Response Consistency」
By: Forward-Looking Threat Research Team
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)