ローカル動作AIのコード生成、偽パッケージ名が攻撃で73%出現

a white abstract background with hexagonal shapes AI

AIにコードを書かせると、実際には存在しないPythonパッケージ名を出力してしまうことがあります。攻撃者はこの「幻の名前」を先回りしてPyPIに登録し、悪意あるコードを送り込む手口を仕掛けられます。新しい研究チームは、ローカルで動くコード生成AIを対象にこの危険性を検証し、検知の仕組みを提案しました。テストでは狙われた場面でハルシネーション率が最大73%まで跳ね上がったといいます。自分のPC上でAIツールを動かす開発者ほど、他人事ではありません。

背景と文脈

AIにコードを書かせる際、モデルが実在しないライブラリ名を作り出してしまう現象は以前から知られていました。これはLLM(Large Language Model、大規模言語モデル)が学習データにない組み合わせを「もっともらしく」埋めてしまう性質によるものです。海外ではこの隙を突く攻撃手法を、AIの粗製生成(slop)と乗っ取り(squatting)を掛けて「スロップスクワッティング」と呼びます。似た綴りの偽サイトに誘導する従来のタイポスクワッティング攻撃のAI版と言える存在です。

攻撃の仕組みは単純です。AIが繰り返し同じ架空のパッケージ名を提案する傾向を突き止め、攻撃者がその名前を先にPyPI(Pythonのパッケージを配布する公式リポジトリ)に登録しておきます。開発者がAIの提案をそのまま「pip install」すれば、悪意あるコードが自分の環境に入り込みます。

今回とくに注目されたのが「ローカルで動くコード生成AI」です。クラウドの大規模モデルと違い、手元のPCで動かす軽量モデルは推論能力に制約があり、幻の名前を生みやすい傾向があります。プライバシーやコストの理由でローカルAIを選ぶ開発者は増えており、この層への影響が見過ごされてきました。研究チームは、論文Names Can Hurt: Spotting Slopsquatting Risks Caused by Package Name Hallucinations in Local Coding LLMsで、通常のコーディング依頼だけでなく攻撃者が意図的に仕向けるプロンプトまで踏み込んで検証した点で、従来の調査と一線を画しています。

技術/ビジネス面

turned on MacBook showing code
Photo by Kerde Severin on Unsplash

研究チームが提案したのは、生成したコードを実行する前に幻のパッケージを見抜く二段構えの検知システムです。まず決定的な層でPyPIに実在するかどうかを機械的に照合します。次に、パッケージのメタデータから抽出した10個の特徴量をランダムフォレスト(複数の判定木を組み合わせて精度を高める機械学習の手法)で分類し、名前は存在していても粗悪な模造品でないかを判定します。

さらに「調整モジュール」が、「import cv2」と「pip install opencv-python」のようにインポート名とインストール名が食い違うケースも解決します。判定で怪しいと出た場合は、生成時の温度パラメータ(出力のランダム性を左右する設定値)を段階的に上げながら再試行し、それでも解決しなければより高性能な別モデルに処理を委ねる仕組みも備えています。

300件の厳選したプロンプトで検証した結果、幻覚を含まないコード生成を76%のケースで達成しました。同一モデル内の再試行だけで失敗の約25%を回復でき、別モデルへの切り替えでさらに16.5ポイント上乗せできています。通常のコーディング依頼でのハルシネーション率は0〜10%程度にとどまる一方、攻撃者が狙い澄ましたプロンプトでは40〜73%まで急上昇しました。興味深いのは、検知された「幻のパッケージ」の半数が実際にはPyPIにすでに登録済みだった点です。「pil」や「faiss」「tabula」「haystack」のように、有名ライブラリと紛らわしい低品質な模造パッケージがすでに出回っており、名前の紛らわしさそのものが攻撃の温床になっていると分かります。

これからどうなるか

この研究が示すのは、AIの提案を無条件で信じて「pip install」を叩く習慣そのものにリスクがあるという事実です。研究チームの実験では、防御用の指示を組み込んだ弱いモデルでも直接的な攻撃プロンプトの6割を自力で拒否できており、モデル側の安全対策も一定の効果を発揮しています。とはいえ検知システムを併用しない限り、残り4割は素通りしてしまう計算です。

実装者の視点で見ると、既存のCI/CD(コードの検証と配布を自動化する仕組み)パイプラインに、生成コードのパッケージ名をPyPIと照合するチェックを1段挟むだけでも、被害の芽を摘める可能性があります。ローカルLLMを使ったコーディング支援を業務に取り入れているチームは、依存関係を自動追加する前に人の目を通す運用ルールを見直す価値がありそうです。ユーザー調査では24人中21人がこの検知の仕組みの採用に前向きな姿勢を示しており(満足度平均4.4/5)、実務への組み込みを見据えた開発が進むと見られます。

まとめ

AIが実在しないパッケージ名を作り出す「ハルシネーション」は、攻撃者に狙われると発生率が最大73%まで跳ね上がる危険な穴です。PyPI照合と機械学習を組み合わせた二段検知で76%を防げることが示された一方、対策なしでは開発者が知らぬ間に悪意あるコードを取り込むリスクが残ります。AIコーディング支援を使うなら、依存関係の自動追加を一度立ち止まって確認する習慣が欠かせません。

参考リンク

アイキャッチ画像: Photo by Solen Feyissa on Unsplash

タイトルとURLをコピーしました