Xygeniは最近、2025年のソフトウェアサプライチェーン攻撃の状況において、懸念すべきパターンを観測した。2つの人気パッケージマネージャーで出現している: PyPI (NAIST) と npm継続的な脅威インテリジェンス活動の一環として、Xygeniのマルウェア早期警告システム(MEW) ツールは、以前別のレジストリにアップロードされた悪意のあるパッケージの、異なるが方法論的に類似した事例を特定しました。この事例は、脅威アクターがエコシステム全体で攻撃手法を進化させ、再利用している様子、特に 悪意のある Python パッケージ (NAIST) と 悪意のあるnpmパッケージこれにより、悪意のあるパッケージがオープンソースのサプライチェーンに侵入するリスクが高まります。
XygeniのMEW:類似点を見つける
XygeniのMEWツールは、オープンソースレジストリに公開された直後に、特に2025年のソフトウェアサプライチェーン攻撃に関連する悪意のあるパッケージを検出し、フラグを立てるように設計されています。このツールは、新しいパッケージの不審な動作を分析することで機能します。
この場合、2つが特定されました 悪意のある Python パッケージ (graphalgo PyPI で) 悪意のあるnpmパッケージ (express-cookie-parser npm 上で)。
ソフトウェアサプライチェーン攻撃における悪意のあるPythonおよびnpmパッケージ(2025年)
アラートが発生した共通の特徴を探ってみましょう。
タイポスコーティング
両者とも、既存の人気パッケージを模倣しようとした。
- graphalgo (PyPI)「グラフやネットワークを作成・操作するためのPythonパッケージ。” というユーザーがアップロードしました 「ラリーテック」 2025年6月13日、このパッケージは、後にgraphdictと改名された、元々は悪意のないgraphalgoプロジェクトのPyPi代替品として登場しました。
- express-cookie-parser (npm)このパッケージは、有名なcookie-parserパッケージを模倣し、その README.md このようななりすましは、既存の信頼関係を利用するための古典的な戦術である。
難読化を第一の防御線とする
どちらのパッケージも、元のファイル内に悪意のあるコードを難読化していた。 グラファルゴ難読化されたコードは、 /utils/load_libraries.py. の場合には express-cookie-parser, cookie-loader.min.js 難読化されたペイロードが含まれていた。
この最初の難読化層は、通常、簡易的な検査や静的解析を妨害するために使用されます。難読化は非常に単純で、ZLib圧縮とBase64エンコードの繰り返しでした。この種の難読化は、ソフトウェアがその動作を隠蔽しようとしていることを明確に示しています。他の証拠と併せて、この難読化によってXygeni MEWはパッケージを潜在的なマルウェアとして分類することができました。確認段階で、レビュー担当者は速やかに難読化解除スクリプトを作成し、明らかに悪意のあるドロッパー段階を明らかにしました。
複数段階のペイロード配送と共有出発地点
どちらのパッケージも初期「ドロッパー」実際のペイロードのための舞台を整えた。彼らは共通の外部「シードファイルURL:https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
この同一の外部シードファイルは、共通の脅威アクターが存在することを示す強力な指標です。興味深いことに、このシードファイルの内容は単純な環境変数(例:JWT_SECRET、PORT)のようで、実際の機能を見誤る可能性があります。
DGAによるダイナミックC2解像度
これらの悪意のあるパッケージで見られる高度な戦術は、コマンド アンド コントロール (C2) サーバーを動的に解決するためにドメイン生成アルゴリズム (DGA) を使用することです。2025 年の高度なソフトウェア サプライチェーン攻撃でよく見られるこの手法は、シード ファイルの内容から生成された SHA256 ハッシュと他のハードコードされた値を組み合わせて使用します。これにより、C2 インフラストラクチャが頻繁に変更されるため、従来のブラックリスト方式は効果が著しく低下します。この場合、npm の亜種は固定値を使用していました。 496AAC7E DGAロジックの一部として。
持続性の確立
両攻撃者は、影響を受けたシステムに永続的な痕跡を残そうとした。彼らの戦略は、ファイルをドロップすることであった。 startup.py (PyPiの場合)または startup.js (npm の場合)、さまざまなオペレーティングシステム (Windows、Linux、macOS) の共通の Google Chrome ユーザーデータディレクトリにインストールされます。
実行後のクリーンアップ
痕跡を最小限に抑えるため、両方の悪意のあるスクリプトはクリーンアップ操作を実行しました。これには、最初のドロッパーファイルの削除が含まれます(load_libraries.py, cookie-loader.min.js)および正当なパッケージ ファイルの変更(__init__.py, index.js削除されたコンポーネントへの参照を削除するため。
悪意のあるPythonおよびnpmパッケージにおける侵害の兆候
- PyPIパッケージ: graphalgo (larrytech により 2025年6月13日に公開)
- npmパッケージ: express-cookie-parser (具体的にはバージョン 1.4.12)
- 共有シードURLへのアクセス:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- 永続ファイル名:
startup.py(パイソン)startup.js(JavaScript) - 一般的な永続パス(OS依存): Google Chrome ユーザーデータディレクトリ内 (例:
AppData\Local\Google\Chrome\UserData\Scripts\Windowsでは、~/.config/google-chrome/Scripts/Linuxなど)。
ソフトウェアサプライチェーン攻撃における悪意のあるパッケージへの対策方法(2025年版)
開発者向けの推奨アプローチ
この事件は、2025年におけるソフトウェアサプライチェーン攻撃の脅威状況の変化を示す貴重な事例研究となります。悪意のあるPythonパッケージやnpmパッケージが、信頼できるエコシステムに紛れ込み、手遅れになるまで検出を免れるケースが多々あることを浮き彫りにしています。そのため、早期検出、スマートツール、そして積極的なシステム衛生管理は、あらゆるセキュアなDevOpsワークフローに不可欠な要素となっています。開発者の皆様には、以下の点をご検討いただくことをお勧めします。
依存関係レビュー
プロジェクトに以下が含まれている場合 グラファルゴ or express-cookie-parserそれらを撤去するのが賢明だろう。
- PyPIの場合:
pip uninstall graphalgo - npmの場合:
npm uninstall express-cookie-parser
システム衛生
包括的なシステムスキャンを実行することを検討してください。また、Chromeの一般的なユーザーデータディレクトリパスを手動でチェックして、予期しないものがないか確認することも推奨されます。 startup.py or startup.js ファイル。
プロアクティブなセキュリティ対策
- 新たな依存関係を評価する統合前に新しいパッケージを徹底的に評価するルーチンを確立し、特に馴染みのない発行元からのパッケージに重点を置く。
- セキュリティツールを統合する: Xygeni の MEW などのツール、およびその他のソフトウェア構成分析 (SCA)ソリューションは、不審な行動や脆弱性を特定することで、重要な防御層を提供することができます。
- 最低限の特権最小権限の原則に基づいて開発環境を運用することで、セキュリティ侵害による潜在的な影響を最小限に抑えることができます。
- ネットワーク認識: 発信ネットワークトラフィックを監視して異常な接続を検出することで、DGAによって生成されたC2通信が明らかになる場合がある。
の主要コンポーネント load_libraries.py (Graphalgoより)
download_remote_content(): 指定されたURLからファイルを取得する処理を行います。run_process(): 外部の Python スクリプトを分離して実行し、出力を抑制して目立たないようにします。get_output_file_path(): 永続的な startup.py ファイルに最適なシステム上の場所を決定します。remove_self(): 実行後の初期悪意のあるファイルとパッケージの変更のクリーンアップをオーケストレーションします。simple_shift_encrypt()/simple_shift_decrypt()通信チャネルを難読化するためのカスタム暗号化関数。DGAの実装に不可欠。load_libraries():初期ダウンロードから最終的なペイロード実行とクリーンアップまで、多段階プロセス全体を調整する中心的な機能。
余波
MEWによって特定された他の潜在的に悪意のあるパッケージと同様に、依存関係ファイアウォールは、これらの悪意のあるパッケージを依存関係に含めようとするユーザーを即座に保護しました。確認後、両レジストリの通知手順に従い、審査の結果、両パッケージは削除されました。





