TL;DR

GPT-4oとLLaMA 3.1-8Bで424件のセキュリティ敏感なPythonタスクを5種類のプロンプトで生成し、BanditとCodeQLで分析。構造化プロンプトは拒否率を大幅に減らす(GPT-4o: 338→37-52件)が、セキュリティ強化プロンプトは脆弱性の総数を一貫して減らさない。むしろ高深刻度(20.8%→13.6%)が低深刻度(32%→43.5%)に再分配される「リスクの移動」が観察された。また、厳格なプロンプトは要求された不安全な処理を静かに削除・書き換える「意味的ドリフト」を引き起こす。プロンプトはコンプライアンス向上には有効だが、セキュリティ対策の代替にはならない。

解説

AMI HAPPY

ねえ智也くん、このブログのタイトル、『プロンプト構造は脆弱性を減らさず「移動」させる』ってすごく気になるんだけど、どういうこと?

TOMOYA NEUTRAL

ああ、これはLLMにコードを生成させるときのプロンプトの書き方によって、セキュリティ上の問題がどう変わるかを調べた研究だよ。

AMI SURPRISED

へえ、プロンプトってただの指示でしょ?そんなに影響あるの?

TOMOYA NEUTRAL

あるんだよ。この研究ではGPT-4oとLLaMA 3.1-8Bを使って、424件のセキュリティ敏感なPythonタスクを5種類のプロンプトで生成して、BanditとCodeQLで解析してる。

AMI HAPPY

5種類も?どんなプロンプトを使ったの?

TOMOYA NEUTRAL

基本のプロンプトに加えて、構造化したり、セキュリティを強化する指示を追加したり、いろいろだよ。特に構造化プロンプトは、拒否率を大幅に減らす効果があったんだ。

AMI NEUTRAL

拒否率って、モデルが「できません」って言う回数のこと?

TOMOYA NEUTRAL

そう。GPT-4oでは拒否が338件から37〜52件に減ったんだ。つまり、構造化するとモデルがより多くのタスクを実行するようになる。

AMI HAPPY

それはすごいね!でも、セキュリティはどうなの?

TOMOYA NEUTRAL

ここが重要なポイントで、セキュリティ強化プロンプトは脆弱性の総数を一貫して減らさなかったんだ。

AMI SURPRISED

え、じゃあ何が変わるの?

TOMOYA NEUTRAL

深刻度の高い脆弱性が減って(20.8%→13.6%)、代わりに低深刻度の脆弱性が増えた(32%→43.5%)んだ。つまり、リスクが「移動」しただけってわけ。

AMI NEUTRAL

なるほど、高リスクを低リスクに変えただけで、根本的には解決してないってことか。

TOMOYA NEUTRAL

そう。さらに、厳格なプロンプトを使うと、要求された不安全な処理をモデルが静かに削除したり書き換えたりする「意味的ドリフト」も起きるんだ。

AMI SURPRISED

静かに?それは怖いね。ユーザーが意図した動作と違うコードが生成されるってこと?

TOMOYA NEUTRAL

そう。プロンプトが厳しいと、モデルが「これは危険だからやめておこう」と勝手に判断して、別のコードを返すことがある。

AMI NEUTRAL

それって、プロンプトはコンプライアンス向上には役立つけど、セキュリティ対策の代わりにはならないってこと?

TOMOYA NEUTRAL

まさにその通り。この研究の結論もそれだよ。プロンプトはあくまで指示の出し方の問題で、実際のコードの安全性を保証するものじゃない。

AMI HAPPY

でも、この研究の限界って何かあるの?

TOMOYA NEUTRAL

うーん、使ったモデルがGPT-4oとLLaMA 3.1-8Bの2つだけだし、タスクもPythonに限定されてる。他の言語やモデルだと結果が変わるかもしれない。

AMI NEUTRAL

あと、BanditとCodeQLって静的解析ツールだよね?動的な挙動までは見てないんじゃない?

TOMOYA NEUTRAL

そう、そこも限界だね。実際に実行したときのセキュリティリスクは別途検証が必要だ。

AMI HAPPY

なるほどね。でも、プロンプトでリスクが移動するって面白い発見だね。まるで風水で悪い気を移動させてるみたい。

TOMOYA NEUTRAL

はは、確かに。でも風水と違って、コードのセキュリティは移動させても消えないからね。