人気のオープンソース脆弱性スキャナー「Trivy」を標的としたサプライチェーン攻撃が、新たな段階へと進化していることが明らかになりました。この攻撃では、「CanisterWorm」と名付けられた自己増殖型のマルウェアが、少なくとも47のnpmパッケージに感染を広げています。特に注目すべきは、このワームがInternet Computerブロックチェーン上のスマートコントラクトである「ICP Canister」をコマンド&コントロール(C2)サーバーのデッドドロップリゾルバーとして悪用している点です。これは、ICP CanisterがC2通信に利用された初の公に文書化された事例であり、ソフトウェアサプライチェーンにおける新たな脅威の出現を示唆しています。開発者やCI/CDパイプラインを利用する組織は、この巧妙な攻撃手法とその影響について深く理解し、適切な対策を講じる必要があります。
Trivyサプライチェーン攻撃の深化とCanisterWormの脅威
今回の攻撃は、Trivyスキャナーの正規リリースを装った悪意あるパッケージ(trivy、trivy-action、setup-trivy)が公開され、認証情報窃取を試みた初期の攻撃に続くものです。この初期攻撃の背後には、「TeamPCP」と呼ばれるクラウドに焦点を当てたサイバー犯罪グループの関与が疑われています。そして今回、その続報として、新たに発見された自己増殖型ワームが「CanisterWorm」と名付けられました。この名称は、マルウェアがInternet Computerブロックチェーン上の改ざん防止型スマートコントラクトである「ICP Canister」をデッドドロップリゾルバーとして利用していることに由来します。
CanisterWormは、以下のnpmパッケージ群に感染を広げていることが確認されています。
- @EmilGroupスコープ内の28パッケージ
- @opengovスコープ内の16パッケージ
- @teale.io/eslint-config
- @airtm/uuid-base32
- @pypestream/floating-ui-dom
これらのパッケージをインストールした開発環境やCI/CDパイプラインは、意図せずワームの感染源となる危険性があります。この攻撃は、単なる認証情報窃取に留まらず、オープンソースエコシステム全体に連鎖的な影響を及ぼす可能性を秘めています。

分散型ICP Canisterを悪用したC2通信の巧妙な手口
CanisterWormの最も特徴的な点は、C2サーバーの情報を取得するためにICP Canisterを悪用していることです。ICP Canisterとは、分散型クラウドプラットフォームであるInternet Computerブロックチェーン上で動作する、改ざん防止機能を持つスマートコントラクトを指します。通常、C2サーバーは特定のIPアドレスやドメインに紐付けられますが、ICP Canisterは分散型であるため、従来のテイクダウン(停止)措置が非常に困難になります。
感染チェーンの詳細と永続化メカニズム
感染チェーンは、npmパッケージのインストール時に実行されるpostinstallフックから始まります。このフックはローダーを実行し、それがPython製のバックドアをシステムにドロップします。このバックドアが、ICP Canisterを「デッドドロップリゾルバー」として利用し、次の段階のペイロードをダウンロードするためのURLを取得します。デッドドロップリゾルバーとは、攻撃者が直接C2サーバーと通信するのではなく、中間地点に情報を置いておき、マルウェアがそこから情報を取得する手法です。
永続化のため、バックドアはsystemdユーザーサービスとして自身を登録します。このサービスは、PostgreSQLの監視ツール「pgmon」を装うことで、システム管理者による発見を回避しようとします。さらに、Restart=alwaysディレクティブが設定されているため、何らかの理由でバックドアが終了しても、5秒後に自動的に再起動される仕組みになっています。
C2通信と「キルスイッチ」の戦略
バックドアは、約50分ごとに偽装されたブラウザのUser-Agentを使用してICP Canisterにアクセスし、プレーンテキスト形式でC2のURLを取得します。取得したURLは解析され、次の実行可能ファイルがダウンロード・実行されます。興味深いのは、取得したURLがyoutube[.]comを含む場合、スクリプトがそのURLをスキップする点です。これは、攻撃者がワームを「休眠状態」にするための「キルスイッチ」として機能します。
攻撃者はICP Canister内のURLをいつでも変更でき、youtube[.]comのリンクに切り替えることでワームを無効化し、実際のバイナリへのリンクに切り替えることでワームを「武装」させることができます。これにより、攻撃者は感染したすべてのホストに新しいバイナリをプッシュすることが可能となり、マルウェアの更新や制御を容易に行えます。このyoutube[.]comベースのキルスイッチは、以前にTrivyのトロイの木馬化されたバイナリ(バージョン0.69.4)でも確認されており、同じICP Canisterを利用していたことが指摘されています。
現時点では、C2から返されるURLは「リックロール」のYouTube動画ですが、The Hacker Newsの調査によると、ICP Canisterはget_latest_link、http_request、update_linkの3つのメソッドをサポートしており、攻撃者はいつでも実際のペイロードを提供するように動作を変更できる状態にあります。
自己増殖機能への進化とnpmトークンの危険性
CanisterWormの脅威は、その自己増殖機能によってさらに深刻化しています。初期の段階では、感染したnpmパッケージには「deploy.js」というファイルが含まれており、攻撃者が盗んだnpmトークンを使って手動で実行することで、アクセス可能な他のパッケージに悪意のあるペイロードを拡散させていました。これは、攻撃者が能動的に感染拡大を操作する必要がある段階でした。
npm認証トークンを狙う新たな変異体
しかし、@teale.io/eslint-configのバージョン1.8.11および1.8.12で検出されたCanisterWormの新たな変異体は、手動介入なしに自己増殖する能力を獲得しています。この新バージョンでは、deploy.jsのような独立したスクリプトではなく、パッケージのindex.jsファイル内にfindNpmTokens()という関数が組み込まれています。この関数は、postinstallフェーズ中に実行され、被害者のマシンからnpm認証トークンを収集します。
バックドアが永続化された後、このpostinstallスクリプトは開発者の環境から利用可能なすべてのnpmトークンを探索し、それらのトークンを使ってdeploy.jsを完全に分離されたバックグラウンドプロセスとして起動します。これにより、ワームは自動的に他のnpmパッケージに悪意のあるバージョンをプッシュし、感染を連鎖的に拡大させることが可能になります。攻撃者は、マルウェアを組み込む前に、ICPバックドアのペイロードをダミーのテスト文字列(「hello123」)に一時的に置き換えて、攻撃チェーン全体が意図通りに機能するかどうかをテストしていたと報じられています。
この進化は、攻撃が「侵害されたアカウントがマルウェアを公開する」段階から、「マルウェアがさらに多くのアカウントを侵害し、自らを公開する」段階へと移行したことを意味します。つまり、このパッケージをインストールし、npmトークンがアクセス可能なすべての開発者やCI/CDパイプラインが、意図せずワームの伝播媒介となってしまうのです。彼らのパッケージが感染し、そのダウンストリームユーザーがそれらをインストールし、もしそのユーザーがトークンを持っていれば、このサイクルが繰り返されます。

開発者とソフトウェアサプライチェーンへの深刻な影響と対策
今回のCanisterWormによる攻撃は、ソフトウェア開発エコシステム全体に広がるサプライチェーン攻撃の深刻な脅威を浮き彫りにしています。特に、npmのような広く利用されるパッケージマネージャーを介した感染は、その影響範囲が非常に広大になる可能性があります。
誰がこの攻撃の影響を受けるのか?
- Trivy関連パッケージや感染したnpmパッケージを直接・間接的に利用する開発者: 悪意のあるコードが自身のプロジェクトに組み込まれるリスクがあります。
- CI/CDパイプラインでこれらのパッケージをビルド・デプロイする組織: 開発環境だけでなく、本番環境へのマルウェア混入の危険性があります。
- npm認証トークンを開発環境やCI環境に保持しているユーザー: トークンが窃取され、自身の管理する他のパッケージが汚染される可能性があります。
ソフトウェアサプライチェーン攻撃の連鎖的リスク
この種の攻撃は、信頼されたコンポーネントが攻撃の起点となるため、発見が困難であり、一度感染が始まると連鎖的に広がる特性を持っています。オープンソースエコシステムは、その利便性と柔軟性から広く利用されていますが、同時に悪意のあるアクターにとって魅力的な標的となり得ます。今回の事例は、分散型技術が悪用される新たなトレンドを示しており、従来のセキュリティ対策だけでは不十分である可能性を指摘しています。
開発者が取るべき具体的な対策
このような高度なサプライチェーン攻撃から身を守るためには、多層的なセキュリティ対策が不可欠です。以下に、開発者や組織が考慮すべき具体的な対策を挙げます。
- npm認証トークンの厳格な管理と最小権限の原則: トークンは必要最小限の権限のみを与え、使用しないときは無効化または削除する。環境変数や設定ファイルに平文で保存せず、安全なシークレット管理ツールを利用する。
- パッケージのインストール前の徹底した検証: 信頼できるソースからのパッケージのみを使用し、インストール前にハッシュチェックやデジタル署名検証を行う。不審なパッケージやバージョンアップには細心の注意を払う。
- 依存関係スキャナーの利用と、そのスキャナー自体のセキュリティ確保: Trivyのような脆弱性スキャナーを継続的に利用し、プロジェクトの依存関係に既知の脆弱性がないかチェックする。ただし、そのスキャナー自体が攻撃の標的となる可能性も考慮し、常に最新の状態に保ち、信頼できるソースから入手する。
- CI/CDパイプラインにおけるセキュリティ強化: ビルド環境の分離、コンテナイメージの署名と検証、最小限の権限での実行、セキュリティスキャンの自動化などを導入する。
- 異常なネットワーク通信の監視: 開発環境やCI/CD環境からの不審な外部通信(特にC2サーバーへのアクセスパターン)を監視し、異常を検知した場合は速やかに調査する。
- 定期的なセキュリティ監査と脆弱性診断: コードベース、依存関係、インフラストラクチャに対して定期的なセキュリティ監査と脆弱性診断を実施し、潜在的なリスクを特定・対処する。
まとめ:進化するサプライチェーン攻撃への警戒
Trivyサプライチェーン攻撃の進化と、自己増殖型ワーム「CanisterWorm」によるnpmパッケージの汚染は、サイバーセキュリティの脅威が常に変化し、巧妙化している現実を改めて示しています。特に、ICP Canisterのような分散型技術を悪用したC2通信は、従来の防御メカニズムを迂回する新たな手法として、今後のサイバー攻撃のトレンドとなる可能性を秘めています。
ソフトウェアサプライチェーン全体のセキュリティを強化することは、もはや選択肢ではなく必須の課題です。開発者、オープンソースコミュニティ、そして企業は、常に最新の脅威情報を収集し、多角的な視点からセキュリティ対策を講じる必要があります。認証情報の厳格な管理、依存関係の徹底的な検証、そして継続的なセキュリティ監視を通じて、進化するサイバー攻撃から自身のプロジェクトとユーザーを守ることが求められます。
情報元:The Hacker News

