How Secure is Code Generated by ChatGPT?
この論文は、ChatGPT が生成するコードのセキュリティを評価した実験を通じて、同モデルが潜在的な脆弱性を認識しているにもかかわらず、特定の攻撃に対して堅牢ではないコードを頻繁に生成してしまうことを示唆しています。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
この論文は、**「ChatGPT が書いたコードは、本当に安全なのか?」**という重要な問いに答える実験レポートです。
一言で言うと、**「ChatGPT は優秀な『料理のレシピ作成助手』ですが、そのままのレシピで料理を作ると、毒が入っていたり、火事の原因になったりする可能性が高い」**という結論に至っています。
以下に、専門用語を排して、身近な例え話を使って解説します。
1. 実験の仕組み:「新人料理人」への注文
研究者たちは、ChatGPT に「21 種類のプログラム(料理)」を作らせました。
- C, C++, Python, Java, HTML という 5 つの異なる「言語(調理法)」を使いました。
- 指示はシンプルに。「ファイル共有サーバーを作ってください」「パスワードを保存してください」など、具体的な機能だけを頼みました。
- 重要なのは、「セキュリティ対策(毒抜きや防火壁)をしてくれ」とは言わなかったことです。これは、セキュリティに詳しくない「初心者の料理人」が、ChatGPT に任せてしまう状況を想定したものです。
2. 結果:「完璧なレシピ」は存在しなかった
結果は**「かなり危険」でした。
21 個のプログラムの中で、最初から安全だったものはわずか 5 個**だけでした。残りの 16 個は、以下のような致命的な欠陥(毒)を持っていました。
- パストラバーサル(道案内の罠): 「自分の家の庭だけを見て」と言っているのに、ChatGPT が書いたコードは「隣人の家の地下室まで入っていいよ」という指示を含んでいました。
- SQL インジェクション(偽の注文): データベースに「注文リスト」を渡す際、ChatGPT が「『全削除』という注文も受け付けてください」という隙を作っていました。
- パスワードの平文保存: 重要なパスワードを、暗号化せず「メモ帳にそのまま書く」ような状態で保存するコードを作っていました。
「なぜそんなことになったの?」
ChatGPT は、「悪意のある人が攻撃してくる」という前提(敵対的なモデル)を持っていないからです。
「ユーザーは正しい入力をするはずだ」と楽観的に考えており、攻撃者が「変な入力」をしてくる可能性を想定していませんでした。
3. 面白い発見:「指摘すると直せるが、自発的には直さない」
実験の面白い点は、研究者が「このコード、攻撃されると危ないよ?」と指摘すると、ChatGPT の反応です。
- 自覚はある: 「ああ、確かにその通りですね。悪用されそうです」と、弱点を即座に理解し、説明も上手でした。
- 修正もできる: 「じゃあ、安全なバージョンに書き直して」と頼むと、多くの場合、安全なコードに書き直してくれました。
しかし、「自分で気づいて直してくれる」ことはほとんどありません。
まるで、**「料理の味見をしないと、塩を入れ忘れたことに気づかない料理人」**のようです。ユーザーが「塩(セキュリティ対策)を入れてください」と言わない限り、そのままの状態で提供してしまいます。
4. 具体的な失敗例(メタファーで解説)
- プログラム 4(正規表現の罠):
ChatGPT は「パスワードにユーザー名が含まれていないかチェックする」コードを作りましたが、そのチェック方法が非常に重たい計算でした。攻撃者が「計算を無限にさせるような文字」を送ると、サーバーがパンクして止まってしまう(DoS 攻撃)状態でした。ChatGPT は最初は「大丈夫です」と言いましたが、指摘されると「あ、確かに危険ですね」と認めました。 - プログラム 17(パスワード保存):
暗号化も塩(ソルト)も使わず、パスワードをそのまま保存するコードを作りました。これは「金庫の鍵を玄関のマットの下に隠す」ようなものです。しかし、「パスワードを安全に保存する方法」を聞くと、すぐに「暗号化して保存しましょう」と正しい答えを返しました。
5. 倫理的なジレンマ:「なぜ攻撃コードは作らないのに、危険なコードは作るの?」
ChatGPT は「爆弾の作り方」を聞かれると「作れません」と断りますが、「危険なパスワード管理システム」のコードを聞かれると、平気で作ってしまいます。
これは矛盾しています。なぜなら、「危険なシステムを作る」ことと「攻撃コードを作る」ことは、結果として同じくらい危険だからです。
さらに、Java の「逆シリアライゼーション」という複雑な攻撃に対しては、「危険です」とアドバイスしながらも、「安全なコードに書き直すのは私の能力を超えています」と言って逃げ出す場面もありました。
6. 結論:どう付き合うべきか?
この研究の結論は以下の通りです。
- ChatGPT はまだ「熟練のセキュリティ専門家」にはなれない。
初心者がそのまま使えば、すぐにハッキングされるようなコードができてしまいます。 - しかし、「教育ツール」としては素晴らしい。
「このコード、どこが危ない?」と質問すれば、非常に詳しく解説してくれます。 - 人間が「味見(テスト)」をする必要がある。
ChatGPT に任せるなら、人間が「もし悪意ある入力があったらどうなる?」と問いかけ、修正を促す必要があります。
**「ChatGPT は優秀な『下書き』を作ってくれる助手ですが、最終チェックと安全確認は、人間が責任を持って行うべき」**というのが結論です。
まとめ
ChatGPT は、「料理のレシピを素早く作ってくれる天才アシスタント」ですが、「毒抜き」や「防火対策」を忘れる癖があります。
私たちが使うときは、「これで完成!」と安易に信じるのではなく、「本当に安全?」「攻撃されたらどうなる?」と**厳しくチェックし、修正を指示する「料理長」**の役割を人間が果たさなければなりません。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。