npmのサプライチェーン攻撃から考えた、情報収集の大切さ

npmのサプライチェーン攻撃から考えた、情報収集の大切さ

先日、SNSでnpmのサプライチェーン攻撃のニュースを見かけました。前回のUI・UX見直しの記事でも少し触れたんですが、今日はそのときに考えたことをもう少しちゃんと書いておこうと思います。

何が起きたのか

内容は物騒でした。今回話題になっていたのは、keyvなど複数の著名なnpmパッケージが乗っ取られて、悪意のあるコードが仕込まれたというものでした。仕組みとしては、パッケージのインストール時に自動実行される「preinstallフック」を悪用して、AWSやGitHub、npm、SSH、Vaultなどの認証情報を盗み出し、さらに盗んだ権限を使って別のパッケージにも感染を広げていく、いわゆるワーム型の攻撃だったそうです。npmのエコシステムは依存関係がとても深いので、自分では直接インストールした覚えがないパッケージが、実は依存の奥の方に潜んでいることも珍しくありません。

まず自分の環境を確認した

確認は必須でした。ニュースを見てすぐに思ったのは「このプロジェクト、大丈夫かな」でした。Cat’s HandはWordPressのオリジナルテーマで動いていて、SCSSのビルドもnpm経由ではなくDart Sassを直接使う構成なので、そもそもpackage.jsonすら存在しません。とはいえ「たぶん平気」で終わらせず、念のためClaudeにMac全体を洗い出してもらうことにしました。nodenvやnvm配下、グローバルのnode_modulesまで一通り検索してもらいましたが、該当パッケージはどこにも見つからず、そもそもこのプロジェクトにはnpmの依存関係自体が存在しないことを確認できました。結果としては「影響なし」だったんですが、確認するまでは正直ちょっとひやっとしました。

不幸中の幸いでした。普段npmを使わないシンプルな構成にしていること自体が、結果的にこの手の攻撃の影響範囲を狭くしていたのは幸運でした。ただ、それは「調べなくていい理由」にはならないなとも思っていて、構成がシンプルだからこそ確認もすぐ終わる、くらいに捉えておくのがちょうどいい気がしています。

「関係ない」で済ませないこと

後手に回りかけました。今回の件で自分なりに反省したのは、ニュースを見た瞬間に「うちはWordPressだから関係ないか」と流しかけたことです。実際には少し立ち止まって調べるまで、本当に関係ないかどうかは分からなかったはずなんですよね。個人でサイトを運営していると、セキュリティのニュースに触れる機会自体は増えても、自分ごととして手を動かして確認するところまではなかなかいかないというか、つい後回しにしがちだなと感じました。

特に今回のような「ワーム型」の攻撃は、一度侵入されると盗んだ認証情報を使って別のパッケージにも自動で感染を広げていく仕組みだったそうで、被害に気づくのが遅れるほど影響範囲が広がっていくタイプの怖さがあります。だからこそ、ニュースを見た初動の早さがそのまま被害の大きさに直結するんだろうなと感じました。

冷や汗ものです。幸い今回は実害がなかったんですが、これがもし依存関係のあるプロジェクトだったら、と考えると背筋が伸びる思いです。

情報収集そのものについて考えたこと

教訓はシンプルです。今回の一件で改めて思ったのは、情報収集は「知って終わり」ではなく「自分の状況に当てはめて確認するところまでがセット」だということです。ニュースを眺めているだけだと、なんとなく世の中の出来事として消費して終わってしまいがちですが、一度「これって自分のプロジェクトはどうだっけ」と手を止めて確認する癖をつけておくと、見落としに気づけるタイミングがぐっと増える気がします。

思わぬ副産物です。実際、今回の確認作業がきっかけになって、前回の記事で書いたサイトのUI・UX見直しにもつながりました。セキュリティの話とUIの話は分野としては全然違うんですが、「気になったことをそのままにせず、実際に確認する」という姿勢は共通していたなと思います。

これから意識したいこと

備えは日々の積み重ねです。個人でサイトを運営していると、情報のキャッチアップも確認作業も、結局は自分次第になります。今回みたいな大きめのニュースが流れてきたときは、面倒でも一度手を止めて「自分の環境ではどうか」を確認する時間を取ろうと思います。今使っている技術スタックを普段からざっくり把握しておくことも、こういうときの確認を早くするコツだなと感じました。

具体的には、今回やったことを次のときのための簡単な手順として残しておこうと思います。

  • ニュースに出てきた具体的なパッケージ名・攻撃対象を確認する
  • 自分のプロジェクトがそもそもその技術スタックを使っているかを確認する
  • 使っている場合は、該当パッケージが依存関係に含まれていないかを検索する
  • 影響がなくても「なかった」という結果を一言メモしておく

地味だけど効きます。大げさな体制を作るというより、このくらいの小さいチェックリストを頭の片隅に置いておくだけでも、次に似たニュースを見たときの動き出しがだいぶ早くなりそうです。

まとめ

動いてみてよかったです。今回はnpmのサプライチェーン攻撃のニュースをきっかけに、情報収集と自分ごと化について考えた話でした。幸いこのサイト自体への影響はなかったんですが、「関係ないだろう」で済ませず、実際に確認するところまでやってよかったなと思います。技術のニュースは日々いろいろ流れてきますが、気になったものは都度、自分の環境に当てはめて考える習慣を続けていきたいです。

参考: Flatt Security Blogによる本件の解説記事

この記事の内容を、YouTube Shortsでも紹介しています

この記事を書いた人

Web制作歴10年近く。WordPressのテーマカスタマイズやコーディングを中心に、副業・本業ともにweb制作に携わっています。このブログでは、実際に手を動かして分かったことを書いています。

Cat's Handをフォローする

この記事が参考になったら、応援クリックをお願いします

タイトルとURLをコピーしました