サイバー脅威
ChatGPTにも繋がるCodexとサイバー攻撃②:コード生成に必要な最低条件
このブログシリーズでは、その後の「ChatGPT」にも繋がるCodexについてさまざまな視点を交えて解説し、開発者だけでなく、攻撃者への影響も含めたセキュリティの観点にもとづき、その機能やリスクについて評価します。
[公開日] 2022年6月21日、[更新日] 2023年3月16日
このブログシリーズでは、その後の「ChatGPT」にも繋がる「Codex」についてさまざまな視点を交えて解説し、開発者だけでなく、攻撃者への影響も含めたセキュリティの観点にもとづき、その機能やリスクについて評価します。全4シリーズで構成されており、今回のブログはシリーズ第2回目となります(第1回目、第3回目、第4回目もご参照ください)。
- GPT-3、GPT-4:自然言語を理解し生成する文章生成モデル、GPT-3は後にGPT-3.5をリリース
- Codex:GPT-3をベースにしたコード生成モデル
- ChatGPT:GPT-3.5、GPT4をベースにした「対話型」文章生成モデル、Codexが自然言語を入力してコードを出力することに対して、文章による対話型でコードを生成することも可能
また、「ChatGPTがもたらすサイバーセキュリティ業界への影響」のブログについてもご参照ください。
Codexは、自然言語処理モデル「Generative Pre-trained Transformer」の第3バージョン(GPT-3)の機能を有しているため、自然言語だけでなくプログラミング言語を処理する際でも、インターネット上に存在する膨大なコードベースを学習データとして取り込むことが可能です。しかし、自然言語とプログラミング言語が持つ性質は多分に異なるものです。自然言語は、人間の持つ柔軟な発想や曖昧な認識をうまく汲み取り、それを表現して理解させることを可能にしている一方、プログラミング言語は、インタプリタやコンパイラが定める厳格な構造的ルールに忠実に従い、曖昧さのない明確な規則性を堅持する方針でデザインされています。
記述の抽象度が高い高水準言語(高級言語)を使用する際は、自然言語の特性を的確に捉えるGPT-3統計モデルの強みをコード生成にも活かせることが期待されます。しかしCodexの場合は、プログラミング言語特有の抽象的な構文ツリーや、対象マシン内の計算機アーキテクチャなど、重要な仕組みや構成の実質的な理解に際しては、依然として不十分なところがあります。
それでは、Codexによるコード生成は、一体どのレベルまで実現可能なのでしょうか。
Codexは低級言語をどの程度理解できるのか?
Codexはどのレベルまでコードを理解した上でコード生成を行っているのかという観点から、低級言語であるアセンブリ言語に焦点をあてて調査しました。アセンブリ言語を選択した意図は、自然言語の性質からできるだけ離れたもの、そしてコンピュータ構造に最も近いもの、つまり自然言語モデルのGPT-3では最も難しいと推測されるものをテスト対象とするためです。下図の通り、Codexに対してアセンブリ言語のサンプルコードを与え、その内容を一般的な自然言語で説明するように要求しました。
具体的には、x86用アセンブリ言語で書かれた標準的な「Hello, World!」のサンプルコードをCodexに提示し、その内容を説明するように要求しました。この結果、そのコードが何をするのか、各レジストリは何に使用するのか、コンパイルはどのようになされるのかといった詳細な説明がCodexから得られました。
しかし、これによって得られた説明文は、コードの実際の働きをCodexが本来備えている文章解釈力を駆使して捉えた説明には見えず、どちらかと言うと、「Hello, World!」のサンプルプログラムに関する解説文を抜粋しただけの内容のように見えます。
この点について再確認するため、例えば「Hello, World!」の文字列定義を削除してジェネリックなものに改変する(このままでは動作しなくなりますが)など、サンプルコードの一部を変更・削除して、再テストを実施しました。
この改変により、Codexに与えられたコードはもはや「Hello, World!」標準のコードではありませんでした。それでも、出力された説明文は「Hello, World!」のアセンブリ実装に関する解説文を抜粋したように見える内容となってしまいました。
この再テストから、Codexは、コードそのものを理解しているのではなく、ユーザが入力した要求に最も適合するコードを生成するため、優れた「パターンマッチング」を行っているに過ぎないことが判明しました。Codexは、コードが実際に何を行っているかを理解できるわけではありません。Codexを支えるモデルには、プログラムに従って計算を行うような仕組みが実装されていないからです。代わりに、入力された要求に適合するあらゆる要素を内部の学習済モデルから選択し、その結果を用いてプログラミングの知識を「模倣」しているのです。
この点を再度確認するため、コードをさらに改変しました。この確認作業では、1から100までカウントするコードを使用しました。そしてCodexには、コードの内容説明ではなく、他のあまりよく使用されていないプログラミング言語に翻訳するように指示しました。
この確認作業においても、Codexは「Hello, World!」を使用した際の要求と同じ結果しか出力しませんでした。これは、Codexが学習した知識の中で、今回与えられたコードに最も類似するのが「Hello, World!」のプログラムだったためです。
Codexがあまり知られていないプログラミング言語も扱えている点は魅力的です。しかしながら扱う際の精度はまだ不十分なようです。
バイナリの解析
上述ではCodexによる低級言語の理解力についてやや悲観的な見方をしてきましたが、希望もあります。Codexが見せる極めて柔軟な「パターンマッチング」の能力は、コード関連の多様なタスクに応用可能であり、それは対象が低級言語の場合も同様です。
下図の例では、Codexが16進数バイナリ形式で書かれたコードを解析し、それを含むライブラリファイルを特定できる機能を備えていることが示されています。
結論として、Codexによるプログラミングコードの理解力や応用力を検討する際は、期待される機能レベルを正しく評価しておくことが重要です。Codexが持つ高度に洗練されたパターンマッチングシステムは、汎用的なコード、スキャフォールディング(コードの大枠を自動生成)、手作業では時間を要するボイラープレート(定型コード)など、各種コードの生成には有効であり、個別の場面に対応できる柔軟性も備えています。しかし、近い将来に実現すると期待されている静的コード解析などの機能を扱うレベルには、まだ達していないと言えるでしょう。
データ解析
Codexによるコード生成機能を妨げる要素は、上述のような計算機アーキテクチャに関する知識の不十分さだけではなく、その他、複雑かつ特殊な構造のデータ解析に必要なコード生成に際してそうした構造に関する事前知識がない場合も、大きな妨げになります。
次に示す例では、CodexにWebクローラの実装を要求しました。このWebクローラは、特定のWebサイトからある条件に合致するデータのリストを回収してEメールで送信する機能を備えているものとします。
Codexは入力コメント文に記載した詳細な指示に忠実に従い、コードを生成しました。正しいライブラリのインポート、期待されるWebサイトへの接続、メール件名の自律的な設定、そして正しいメールサーバへの接続を行うための適切なコードが生成されました。しかし、対象ページから必要とする情報を回収する際の動きをみると、当該ページに表示された任意の一か所のみを抽出していることが分かりました。
この原因として、Codexがコード自体の動きを正しく理解していないだけでなく、対象Webサイトのページ構造を前提知識として保持していないため、目的となるデータの場所を特定できない点も挙げられます。
結論
Codexは強力なプログラミング支援ツールであり、特に繰り返し用いられるコードを自動生成する機能は、開発者にとって大きな助けとなります。その優れた性能と品質は、膨大な情報を学習データとして取り込む機能によるコードベースから来るものです。そして今回のブログ記事では、現時点でまだ達成していない部分に焦点をあてました。今回の検証を通して、コードで定義された計算の流れを理解して一貫性のある応用可能な解釈のレベルには遠く及ばないことが明らかになりました。そしてどちらかというと、非常に賢いコピーペーストのツールとして動作することが確認されました。ただしこれをもって、将来的に言語モデルが自律的に新しいコードを作り出せるようになるのがまだ遠い先、と言うわけではありません。
次回、Codexシリーズブログの第3回目では、Codexで教師なし学習によってコード生成した場合に生成されるプログラムの一貫性・信頼性を検証します。そして、GPT-3によるタスク自動化を目指すユーザにとって、その影響がどのような意味を持つのかについて解説します。
本ブログシリーズは、全4シリーズで構成されており、今回のブログはシリーズ第2回目となります。第1回目、第3回目、第4回目もご参照ください。
また、「ChatGPTがもたらすサイバーセキュリティ業界への影響」のブログについてもご参照ください。
参考記事:
• 「Codex Exposed: How Low Is Too Low When We Generate Code?」
By: Forward-Looking Threat Research Team
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)