タイポスクワッティングとは? - 名前が酷似した悪意あるパッケージ
タイポスクワッティングとは、人気のあるパッケージ(またはドメイン)とほぼ同一の名前でパッケージを登録し、たった一度の打ち間違いで代わりに攻撃者のコードがインストールされるようにする手口です。
人気のあるパッケージは何百万回もインストールされ、人々は名前を打ち間違えます。タイポスクワッティングはそれを武器にします。攻撃者は requsts や lodahs といったパッケージを公開し、一定割合の開発者が本物の名前を打ち間違えることに賭けます。偽物は、本物らしく見せるのに十分なことをしつつ、悪意あるコードを実行します。
命名のトリック
- 文字の入れ替えや脱落(
expressに対するexpres)。 - 似た文字の置き換え(
lを1にする)。 - 句読点の追加や削除(
python-dateutilvspython_dateutil)。 - もっともらしいが誤ったスコープやサフィックス。
偽物が行うこと
タイポスクワットは通常、本物のパッケージを再エクスポートして動作しているように見せかけつつ、そのインストールスクリプトが密かに secret を流出させたりバックドアを仕込んだりします。被害者は、コードが依然として動くため、まったく気づかないかもしれません。
なぜ CI が増幅させるのか
依存関係リストの打ち間違いはコミットされ、その後 CI の実行ごとにインストールされ、1 つのミスがすべての build とすべての開発者にわたって増幅します。しかも CI 環境は、盗む価値のある最も貴重な secret を保持しています。
タイポスクワットを避ける
パッケージ名を入力するのではなく公式ドキュメントからコピーし、lockfile で正確なバージョンを固定し、名前を既知の悪意リストと照合する依存関係スキャンを実行しましょう。新しく追加されたすべての依存関係をコードレビューで確認すれば、ほとんどの偽物を捕捉できます。
すり抜けてしまったとき
封じ込めが重要です。スコープが限定され短命な認証情報とエグレスフィルタリングを備えた、分離されたエフェメラル runner にインストールされたタイポスクワットは、盗む価値のあるものをほとんど見つけられず、永続化もできません。被害は 1 つの使い捨て job に限定されます。
重要なポイント
- タイポスクワッティングは、開発者の打ち間違いを狙って似た名前のパッケージを公開する。
- 偽物は本物のパッケージを模倣しつつ、悪意あるコードを実行する。
- 固定された lockfile、スキャン、丁寧なレビューが偽物を build から締め出す。