ソフトウェア開発を揺るがす「Typosquatting(タイポスクワッティング)」とパッケージ中毒
【背景と概要】
現代のソフトウェア開発において、外部のライブラリ(オープンソースソフトウェア:OSS)をコマンド一行でインストールできるパッケージ管理システム(JavaScriptの `npm`、Pythonの `PyPI`、Rustの `crates.io` 等)は開発の効率化に不可欠です。
しかし、開発者がコマンド入力時や設定ファイル(`package.json` 等)記述時に起こす「ちょっとした打ち間違い(タイポ)」を狙い、悪質コードを含んだ偽パッケージを公開しておく攻撃手法「Typosquatting(タイポスクワッティング)」が深刻な開発リスクとなっています。
【Typosquattingの具体的な攻撃手口】
人間のタイポ(タイピングミス)の癖を分析して罠が仕掛けられます。
- 有名パッケージと一文字違いの悪質パッケージの公開
例えば、人気の高い正規パッケージ「`requests`」に対して、打ち間違いやすい「`reqeusts`」「`request-s`」「`requests2`」といった名前で悪質なパッケージを公開リポジトリへ登録しておきます。
- インストールの瞬間に悪質スクリプトが自動実行
開発者がうっかり間違えた名前でインストールコマンド(例: `pip install reqeusts`)を実行すると、パッケージのインストール処理(`setup.py` や `postinstall` フック)に仕込まれていた悪意あるコードが開発者のPC上で即座に実行されます。
- 開発環境からの環境変数・シークレット強奪
実行された悪質コードは、開発者のPC内部にあるAWSアクセスキー、GitHubトークン、SSH秘密鍵、ブラウザのCookieなどを読み取り、即座に攻撃者のC2サーバーへ送信します。
【サプライチェーンへの被害拡大】
タイポした開発者個人のPCが侵害されるだけでなく、もしその悪質なパッケージが含まれたまま自社のソフトウェア製品がビルド・出荷された場合、自社の顧客全体へマルウェアが拡散する巨大なソフトウェアサプライチェーン事故へと発展します。
【開発組織におけるTyposquatting防止策】
開発者の注意力だけに頼らず、ツールによる機械的な事前検証を導入します。
- プライベートパッケージ・リポジトリ(プロキシ)の導入
開発者がインターネット上のパブリックリポジトリ(npm等)から直接パッケージをダウンロードするのを禁止し、社内の検証済み内部プロキシ(ArtifactoryやSonatype Nexus等)を経由してのみ取得できる環境を整えます。
- SCA(ソフトウェア構成分析)ツールによる不審パッケージの検出
SCAツール(Socket、Snyk等)を導入し、新たにインストールされようとしているパッケージの「公開日(公開されて間もないか)」「ダウンロード数の極端な少なさ」「インストール時の不審なネットワーク通信」を検知して事前ブロックします。
- ロックファイル(`package-lock.json` 等)の定着とコードレビュー
依存ライブラリの正確なハッシュ値とパッケージ名を固定するロックファイルをコミット対象とし、不審な新規パッケージが依存関係に追加されていないかをコードレビュー時にチェックします。