サプライチェーン
スロップスクワッティングとは?
スロップスクワッティング(slopsquatting)とは、AIコーディングアシスタントが作り出したパッケージ名を登録する攻撃です。モデルが存在しないパッケージを提案すると、攻撃者はその名前でマルウェアを公開でき、次にその提案に従った開発者やエージェントがそれをインストールしてしまいます。いわば、タイプミスのないタイポスクワッティングです。
更新日
名前の由来
この用語はタイポスクワッティングをもじったもので、「slop」は低品質なAI出力を意味します。2025年に、Python Software FoundationのSecurity Developer-in-ResidenceであるSeth Larson氏が名付けたとされています。
パッケージのハルシネーションが起こる仕組み
言語モデルは、もっともらしく見えるものを書きます。よくある処理のためのライブラリのような、もっともらしい名前は、実在する名前と同じくらいありそうに見えることがあります。そのためモデルは、誰も公開したことのないパッケージのimport文やインストールコマンドを書いてしまうことがあります。
USENIX Security 2025で発表された研究では、広く使われている16のモデルを576,000件のコードサンプルで検証しました。ハルシネーションによるパッケージの割合は、商用モデルで少なくとも5.2%、オープンソースモデルで21.7%にのぼり、作り出された固有の名前は205,474件に達しました。研究者たちは、この問題を持続的かつ体系的なものだと説明しています。
スロップスクワッティング攻撃の流れ
- 名前を集める。攻撃者はモデルによくあるコーディングの質問をし、存在しないパッケージを書き留めます。
- 公開する。それらの名前をnpmやPyPIに登録し、ペイロードを隠した、実際に動作するパッケージを置きます。
- 待つ。開発者が提案をそのまま貼り付けるか、コーディングエージェントが自らインストールを実行します。
- 実行させる。インストールスクリプトが開発者のマシンやCI上で実行され、トークンやシークレットにアクセスします。
スロップスクワッティングとタイポスクワッティングの違い
| タイポスクワッティング | スロップスクワッティング | |
|---|---|---|
| 誤りの発生源 | 人が名前を打ち間違える | モデルが名前を作り出す |
| 名前 | 実在するパッケージに似ている | もっともらしいが、実在するパッケージがない |
| インストールする主体 | 開発者 | 開発者、または名前を人が確認しないエージェント |
| 検出が難しい理由 | 類似名チェックで人気のある名前と比較できる | 比較対象となる人気の名前が存在しない場合がある |
コーディングエージェントでリスクが高まる理由
チャットアシスタントであれば、実行前に人が提案を読みます。コーディングエージェントは、コードを書き、依存関係を追加し、インストールを実行するまでを一度に行えます。多くの不審な名前を見抜いてきた人によるチェックがなくなり、インストールはエージェントが動作する場所で、多くの場合は開発者の認証情報を使って、あるいはCIの中で実行されます。全体像については、AI支援開発のセキュリティをご覧ください。
スロップスクワッティングへの対策
- インストール前に確認する。提案されたパッケージが実在し、実際のリポジトリと履歴があることを確認します。先週作られたばかりのパッケージは疑ってかかるべきです。
- ロックファイルの変更をレビューする。コードを書いたのが人であれツールであれ、新しい依存関係はプルリクエストで見えるようにすべきです。ロックファイルが記録する内容もご覧ください。
- エージェントの権限を制限する。エージェントがパッケージをインストールする前に承認を必須にし、本番環境の認証情報を持たないサンドボックスでエージェントを実行します。
- 新しいパッケージの採用を遅らせる。公開から数日以内のパッケージを禁止するルールが有効です。
- ビルドが許す範囲でインストールスクリプトを無効化する。
- ビルドからの外向き通信を制限する。攻撃者に到達できないパッケージは、シークレットをどこにも送信できません。GitHub Actionsのエグレスポリシーもご覧ください。
新しいスロップスクワッティングパッケージにはアドバイザリがないため、SCAスキャンやnpm auditでは報告されません。対策の一覧については、ソフトウェアサプライチェーンセキュリティのベストプラクティスをご覧ください。
CRACIが被害を抑える方法
CRACIは新しい悪意のあるパッケージを検出しないため、その確認には他のツールをご利用ください。CRACIが行うのは、そうしたパッケージがビルドに到達したときの被害を抑えることです。GitHub Actionsのランナーとして、ビルドに不要な接続をブロックするエグレスポリシーを適用するため、誰も見たことのない攻撃に対しても保護が働きます。また、各ジョブが取得したすべてのパッケージを記録するため、不正なパッケージが判明した時点で、どのビルドがそれを取り込んだかを確認できます。
スロップスクワッティング:よくあるご質問
スロップスクワッティングとは何ですか?
AIコーディングアシスタントが作り出したパッケージ名を何者かが登録し、その提案に従った人が攻撃者のコードをインストールしてしまうようにする攻撃です。
スロップスクワッティングという言葉は誰が作ったのですか?
2025年に、Python Software FoundationのSecurity Developer-in-ResidenceであるSeth Larson氏が名付けたとされています。
ハルシネーションによるパッケージとは何ですか?
実際には存在しないにもかかわらず、AIモデルが提案するパッケージ名です。研究では、生成されたコードサンプルのかなりの割合でこの現象が確認されています。
スロップスクワッティングはタイポスクワッティングとどう違うのですか?
タイポスクワッティングは、人が実在するパッケージ名を打ち間違えることを利用します。スロップスクワッティングは、モデルが一度も存在しなかった名前を作り出すことを利用するため、比較対象となる実在のパッケージがありません。
スロップスクワッティングはどう防げばよいですか?
提案されたパッケージが実在することを確認し、新しい依存関係をプルリクエストでレビューし、エージェントが何かをインストールする前に承認を必須にし、ビルドからの外向き通信を制限します。