【ITニュース解説】Your response to the Shai-Hulud supply chain attack
2025年09月21日に「Dev.to」が公開したITニュース「Your response to the Shai-Hulud supply chain attack」について初心者にもわかりやすく解説しています。
ITニュース概要
npmパッケージのサプライチェーン攻撃「Shai-Hulud」で、機密情報が窃取され他パッケージへ感染する危険がある。予防にはMFA設定や依存関係の確認、専用スクリプトでの脆弱性チェックが重要だ。万一感染したら、GitHubやnpm関連の機密情報を再発行し、悪性ファイルを削除するなど早急な対応が求められる。
ITニュース解説
最近、ソフトウェア開発の世界で広く使われている「npmパッケージ」というプログラム部品を狙った大規模なサイバー攻撃が発生した。この攻撃は「Shai-Hulud(シャイ・ハルード)」という名前で知られており、プログラム開発において非常に重要な「サプライチェーン」の一部を狙うことで、多くの開発者に影響を及ぼす可能性を秘めている。システムエンジニアを目指す皆さんにとって、このような攻撃の仕組みと対策を理解することは、安全なソフトウェア開発を行う上で不可欠な知識となる。
このShai-Hulud攻撃は、開発者が日常的に利用するnpmパッケージの中に、こっそりと悪意のあるプログラム(ワーム)を仕込む手口を使う。開発者が問題のあるパッケージを自分のプロジェクトにインストールすると、そのワームがすぐに活動を開始する。具体的には、パソコンやサーバーの環境をスキャンし、開発にとって非常に重要な秘密情報を探し出すのだ。例えば、npmの設定ファイルである「.npmrc」ファイル、システムに設定された環境変数、そしてGitHubの個人アクセストークン(PATs)や、Amazon Web Services (AWS) や Google Cloud Platform (GCP)、Microsoft AzureといったクラウドサービスにアクセスするためのAPIキーなどが標的となる。
これらの盗み取られた重要な情報は、攻撃者が管理するサーバーに勝手に送信されてしまう。さらに恐ろしいことに、このマルウェアは被害者のGitHubアカウントに「Shai-Hulud」という名前の公開リポジトリを勝手に作成し、盗んだ情報をそこに隠す。これだけではない。この攻撃は、被害者のnpmアカウントにアクセスするための認証情報(npmトークン)を悪用し、その開発者が管理している他のnpmパッケージにまで感染を広げ、悪意のある更新を公開することで、非常に速く自動的に拡散していく性質を持っている。
このようなサプライチェーン攻撃から身を守るためには、いくつかの基本的な対策が重要となる。まず、npmパッケージをインストールする前には、プロジェクトで使われている全ての依存関係、つまり「package.json」や「package-lock.json」というファイルに記述されているパッケージが本当に安全なものか、慎重に確認する習慣をつけるべきだ。これは、自分の開発環境だけでなく、プログラムを自動でテストしたり公開したりする「CI/CDパイプライン」と呼ばれる仕組みの中でも同様に実施する必要がある。また、GitHubやnpmのアカウントには、「多要素認証(MFA)」を必ず設定し、パスワードだけでなくスマートフォンに送られるコードなど、複数の方法で本人確認を行うことで、アカウントの乗っ取りを防ぐことが非常に重要となる。もし自分のGitHubリポジトリに「Shai-Hulud」という名前のリポジトリや、公開されてはならないトークンが見つかった場合は、既に侵害されている可能性が高い。
この攻撃への対策として、特定の悪意のあるnpmパッケージを検知するためのツールも開発されている。「npmSafeCheck」というスクリプトは、既知の悪意のあるnpmパッケージのリスト(JSON形式のファイルで提供される)と照合し、インストールしようとしているパッケージが安全かどうか、または既に危険なパッケージがインストールされていないかをチェックできる。このスクリプトは、パッケージをインストールする前や、既存のプロジェクトの安全性を確認するために実行できる。例えば、パッケージをインストールする際には「npm ci --ignore-scripts」というコマンドを使うことで、インストール後に自動で実行される可能性のある危険なスクリプトを停止させることができる。
もし既にShai-Hulud攻撃の影響を受けている、またはその疑いがある場合は、速やかに以下の手順で対応する必要がある。まず、悪意のあるバージョンが含まれている可能性のある「node_modules」ディレクトリと「package-lock.json」や「yarn.lock」といったロックファイルを削除する。次に、npmのキャッシュを「npm cache clean --force」で完全にクリアする。新しいパッケージをインストールする前には、「npm install --dry-run --ignore-scripts」というコマンドを使って、実際に何がインストールされるのかを事前に確認すると良いだろう。そして、安全性が確認されたパッケージのみを「npm install --ignore-scripts <安全なパッケージ名>@<安全なバージョン>」という形で再インストールする。この際、「npm audit fix」や「npm upgrade」といった、裏で自動的にパッケージをインストールする可能性のあるコマンドは避けるべきだ。
将来の安全なインストールのために、「package-lock.json」で既知の安全なバージョンに固定し、常に「npm ci --ignore-scripts」を使用するように心がける。また、自分のGitHubアカウントに「Shai-Hulud」という名前のリポジトリ、ワークフロー、またはブランチがないか、あるいは「bundle.js」のハッシュ値が異常であったり、不審なネットワーク通信やプログラム実行の痕跡がないかを徹底的に確認し、もし発見した場合は直ちに削除する必要がある。これには、悪意のあるワークフローファイルを削除したり、疑わしいブランチを削除したりする作業が含まれる。
さらに、影響を受けたnpmパッケージがインストールされた可能性のある環境、例えばプログラムの自動ビルドを行うサーバー(CI/CDエージェント)や開発者のパソコンなどを監査し、不正なプログラムの公開や認証情報の窃取が行われていないか確認する。もしこれらの環境にnpmパッケージを公開するための認証情報が存在していた場合、そのnpmトークンやその他の公開された秘密情報はすぐに無効化し、新しいものに交換(ローテーション)する必要がある。GitHubとnpmアカウントでの多要素認証の有効化は、改めて強調しておく。クラウドサービスを利用している場合は、クラウドインフラストンの侵害がないかも監査し、ネットワークログを監視して、不審な活動やnpmパッケージの不審な公開・変更イベントがないか継続的にチェックすることも大切だ。そして、パッケージの出所(provenance)を確認する機能も活用し、信頼できるソースから提供されているかを確認することも重要である。
このShai-Hulud攻撃は、ソフトウェア開発におけるセキュリティの重要性を改めて教えてくれる事例だ。システムエンジニアを目指す皆さんにとって、このような最新のサイバー攻撃の知識と対策を身につけることは、将来のキャリアにおいて非常に役立つはずだ。常に最新の情報を収集し、セキュリティ意識を高く持って開発に臨むことが、安全なシステムを構築するための第一歩となる。