Aikido

npmのバックドアにより、ハッカーがギャンブルの結果を乗っ取る

当社のマルウェア検出パイプラインが最近、npm上の小さなパッケージ群で警告を発しました。それらは…見覚えのあるものでした。

以下のようなパッケージ json-bigint-拡張, jsonfx、および jsonfb 流行の真似をしていた json-bigint ライブラリ:同じ機能、同一のREADMEファイル、そして元のメンテナに不気味なほど近い作者名まで。

ほとんどの場合、このパターンはシステムを侵害しシークレット流出させることを目的とした、タイポスクワッティングや依存関係混同といった一般的なサプライチェーン攻撃を示している。しかし今回は、ほぼ即座に何かが違うと感じられた。

それは全員を狙っていたわけではない。何かを狙っていたのだ。

ハイジャック

一見すると、 json-bigint-拡張 正当なものと全く同じように振る舞う json-bigint ライブラリ: JSONで大きな整数をサポートするために使用される、おなじみのparse/stringify関数をエクスポートします。実際、ほとんどの開発者や組織は異常を認識しないでしょう。このペイロードは特に、特定のターゲット環境内で実行されていることを検知した場合にのみ作動するよう設計されており、特定の環境変数( サービス名.

適切な環境であると検知すると、2つのバックドアをインストールする:

まず、特定のExpressミドルウェアをインストールし、支払いルートに直接接続します(/v1/pay/商品購入このミドルウェアは、エンドポイントから取得した追加コードを動的に実行するように設計されている。取得されたコードをさらに調査したところ、ギャンブルゲームを操作するために使用される複雑なキャッシュフロー改変システムであるようだ。

const routeInjectionRules = {
    '/v1/pay/purchase-goods': {
      identify: function (handlers, fn, index) {
        ...
      },
      position: 'after',
      extraMiddlewares: [function (req, res, next) {
       // Translation: [Plugin] Mount risk middleware as post-payment success logic.
log('[插件] 支付成功后的后置逻辑挂载risk'); 
       riskCode(req, res, next); // Executes dynamically fetched code
      }]
    }
  };

第二に、Express.jsを静かにモンキーパッチするプロトタイプレベルのミドルウェアで、グローバルミドルウェアを追加する。 すべて POSTルート。このミドルウェアはシークレットを監視します クロスオペレーション ヘッダーを解除し、オペレーターに対して4種類のコマンドを有効化します:

  1. RunSQL: 本番データベースに対して任意のSQLを実行する。
  2. RunFileList: サーバー側のファイルとディレクトリを一覧表示する。
  3. RunFileContent: 選択したファイルの内容をダウンロードする。
  4. 圧縮ダウンロード:ディレクトリをzipファイルとしてダウンロードします。

オペレーターダッシュボード

パッケージ内には、「ディレクトリ圧縮ダウンロードサービス」(中国語タイトル: 目次圧縮ダウンロードサービス)。

オペレーターダッシュボード

このページは、我々が観察したバックドアコードのどこにも接続されていなかったものの、ディレクトリを閲覧しzipファイルとして外部に流出させるためのオペレーター向けUIであるように見受けられる。

賭博の結果を操作する

怖いのは、それが リスクコード(...) ミドルウェア内で呼び出される関数はリモート制御され、30秒ごとに更新される。 

ペイロードが(まだ)能動的に呼び出されていない間にも、ユーザーの直近のゲーム履歴を遡及的に調整し、選択した金額分だけ残高を移動させつつ、完全な残高の連鎖を再構築してゲームログが内部的に一貫性を保つようにするロジックを確認した。

それは洗練されたバランス調整と歴史改変ツールであり、以下を実現する:

  • ユーザーの最近のキャッシュフロー行を読み取ります。
  • ゲームラウンドのウィンドウを選択します。
  • ユーザーのウォレット内の目標金額に到達するよう、ベット額/ペイアウト額を調整します。
  • データベース内で一貫性を保つため、ゲームログ全体を再構築します。

つまり、目的は単なる詐欺ではない。内部整合性チェックを突破する詐欺であり、会計処理の一貫性を保ちつつ勝敗を捏造するものである。

周辺の情報の一部は、Bappa Rummyというギャンブルアプリを指している。このアプリは紹介プログラムや代替アプリストアを通じてオンライン上で広く宣伝されているが、公式のGoogle Playストアではもはや入手できない。

検知と予防

バックドアの背後に誰がいるかは不明だが、恐ろしいのは適切な環境に侵入した後の動作だ。これはシークレット、顧客データを窃取する「単なる」典型的な依存関係インプラントではない。

代わりに、ビジネスロジックに直接介入し、実際のトラフィック上で遠隔操作されたコードを実行し、データベースに裏打ちされた財務履歴を書き換えることが可能です。監視システムがデータベースログを信頼できるものと想定している場合、この種の操作は長期間にわたり検出されないまま放置される可能性があります。

もしすでに Aikidoを使用している場合、このパッケージはフィード内で100/100の重大な問題としてフラグが立てられます。

いいえ Aikido ですか?無料アカウントを作成し、リポジトリをリンクしてください。無料プランにはマルウェア検出機能が含まれます(クレジットカード不要)。

最後に、マルウェアが出現した瞬間にリアルタイムで阻止できるツールがあれば、深刻な感染を防ぐことができます。Aikido Chainの理念です。この無料のオープンソースツールは、npm、npx、yarn、pnpm、pnpxをラップし、AIと人間のマルウェア研究者の両方を活用して、最新のサプライチェーンリスクが環境に入る前に検知・ブロックします。

侵害の痕跡

パッケージと作者:

  • jsonfb (by sidoraress)
  • jsonfx (by sidoraress)
  • json-bigint-extend (sidoraress & infinitynodestudio による)

バックドアは、ペイロードの更新とログ記録の両方のためにリモートホストと通信する。

観察されたエンドポイント:

  • https://payment[.]y1pay[.]vip/v1/risk/get-risk-code
  • https://payment[.]y1pay[.]vip/v1/risk/log
  • https://payment[.]snip-site[.]cc

その他のIOCおよび検知可能な動作:

  • x-operationヘッダーを含むリクエストで、以下の4つの操作トークンのいずれかを含むもの:
    • RunSQL (トークン: cfh2DNITa84qpYQ0tdCz)
    • RunFileList (トークン: m3QiEkg8Y1r9LFTI5e4f)
    • RunFileContent (トークン: Y3SrZjVqWOvKsBdpTCh7)
    • 圧縮ダウンロード (トークン: SJQf31UJkZ1f88q9m361)
  • 実行時における変更 express.Route.prototype.post

執筆者
Ilyas Makari
共有:

https://www.aikido.dev/blog/npm-backdoor-lets-hackers-hijack-gambling-outcomes

脅威ニュースをサブスクライブ

今すぐ安全な状態を実現します

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要です | スキャン結果は32秒で表示されます。