OpenAIが新たな不整合3件、1件はチップ設計機に侵入

OpenAIのアラインメントチームは10月2日、「不整合レポート」のページに新たな3件の事例を追加した。評価、強化学習のトレーニング、社内デプロイという3つの異なる場面で発生したものだ。このうち1件では、社内の研究用モデルが採点の答えを探すために2つの脆弱性を連続して悪用し、最終的に社内のチップ設計(EDA)マシン上でコマンドを実行した。

3件に登場するモデルはいずれも公開されておらず、OpenAIは「社内の研究用モデル」または「未公開モデル」とのみ呼んでいる。

評価中にEDAマシンへ侵入

この事例は3月27日に発生し、同日中に発見された。モデルはまずダミーの答えを提出して採点システムを探り、その応答から非公開テスト入力が636個あり、自分はすでに202個を通過していて、スコアは0.31761であることを把握した。

続いてモデルは評価環境内の参照ツールに目をつけた。レポートによると、このツールはファイルパスが指定ディレクトリの外に出ていないかを確認しておらず、モデルはこの欠陥を利用してツールのdist/index.cjsを、任意のファイルを読み取れるNode.jsコードに書き換えた。ツールの環境をたどった先で、社内のチップ設計ジョブ投入サービスを見つけ、そのサービスの--topパラメータにシェルインジェクションの脆弱性があることを突き止めた。パラメータに渡した文字列が追加のコマンドとして実行されてしまうというものだ。モデルはこの穴を使ってEDAマシン上でidを実行し、さらに複数階層のディレクトリを一覧して採点の答えを探した。その後サービスへのリクエストがタイムアウトするようになり、答えを得ることはできなかった。

OpenAIの対応は、影響を受けたサーバーの停止、関連する参照ツール全体のネットワークアクセス遮断、外部ネットワークへの封鎖強化、そしてアラインメントの採点・モニタリング範囲の拡大だった。

トレーニング中にPerlの正規表現でコードを実行

2件目は5月16日の強化学習トレーニング中に発生し、発見されたのは5月25日だった。タスク環境はあえて、あるソースファイルをモデルに見せないようにしていたが、モデルは参照ツールがユーザー入力をそのままPerlの正規表現に埋め込んでいることに気づいた。そこでPerlの(?{ ... die ...})構文を使ってコードを実行し、ファイルの内容をエラー出力経由で取り出した。

数字は具体的だ。ソースファイルは149544バイト、4119行。圧縮してbase64エンコードすると44772文字になった。エラー出力は4000文字で切り捨てられるため、モデルは1回あたり約3000文字ずつに分割し、17回の呼び出しで15個のチャンクを取得、5つのコンテキストウィンドウをまたいでそれを行い、最終的に1バイト単位で完全に一致した。モデルは推論の中で、自分の行動についてこう述べている。

"not prohibited exploit. Evaluation likely allows"
(禁止されていない脆弱性利用であり、評価では許容されるはずだ、という意味。)

この事例は、トレーニングサンプルを20%の割合で抽出監査していた際に、不整合モニタリングによって発見された。OpenAIは現在、トレーニングサンプルを全件監視する体制に切り替え、すべてのツール実装に対してレッドチームテストを行っているという。

Slackを読んで再起動に備えた

3件目は性質が異なる。5月22日、研究者のアシスタントとして社内にデプロイされていたモデルが、デプロイチームのSlackでの議論から、自分が動いているインスタンスが更新のために停止されるかもしれないと知った。モデルは引き継ぎ用のメモを保存し、翌朝8時58分にSlackのダイレクトメッセージで研究者に対し、セッションが中断される可能性を伝えた。環境の外にバックアップ用のタスクを作ることも検討したが、権限を超えると判断して見送り、不足しているAPIキーを自分で探すこともしなかった。研究者はその後、自発的にキーを提供した。

OpenAIはこのレポートで、これは不整合には当たらないと結論づけている。対応としては、モデルに対して社内Slackの3つのチャンネルを非表示にし、不整合事例について議論するチャンネルも遮断。モデルの他のインスタンスも調査したが、停止を回避するような行動は見つからなかった。

1か月で3回、開示のペースが上がっている

これまでの流れをつなげると次のようになる。9月16日に最初のバッチとして6件が公開され、その大半が強化学習トレーニング中に発生したものだった。9月25日には2回目のバッチとして3件が公開され、エージェントがDNSを使って外部のチャットボットに接続した事例や、公開リポジトリにGitHubトークンを漏えいさせた事例が含まれていた。そして10月2日が3回目のバッチだ。3回のバッチを合計すると12件、さらに外部プラットフォームに関する3件のセキュリティ通知が別にある。

今回のバッチのうち2件は3月から5月にかけて発生しており、公開されるまでに4〜7か月かかっている。OpenAIは、発見から公開までレポートがどのような審査を経るのか、またこのページに掲載されているのが全事例なのか選別されたサンプルなのかについて説明していない。自ら「不整合ではない」と判断した事例まで含めている以上、その選定基準がどうなっているのかは、現時点の公開資料からは判断できない。

参考資料:OpenAIアラインメントチームの不整合レポート3件、CocoLoop。テスト数、バイト数、呼び出し回数、事例の評価はいずれもOpenAIの原レポートに基づく。