はじめに
Rustの公式パッケージレジストリであるCrates.ioで、開発者のシステムから仮想通貨の秘密鍵やその他の機密情報を窃取する悪意のあるRustパッケージが2つ発見されました。これらのパッケージは合計で約8,500回ダウンロードされており、セキュリティ研究者によって報告された後、プラットフォームから削除されました。
攻撃の詳細
問題のパッケージは「faster_log」と「async_println」と名付けられ、5月25日にCrates.ioに公開されました。それぞれ7,200回と1,200回ダウンロードされていました。これらはJavaScriptのnpmやPythonのPyPIに相当するRustのパッケージ配布プラットフォームです。
コードセキュリティ企業Socketの研究者がこれらの悪意のあるクレートを発見し、Crates.ioに報告しました。Crates.ioは9月24日に両パッケージを削除し、公開アカウント「rustguruman」と「dumbnbased」を停止しました。
手口と標的
Socket社の報告によると、これらのクレートは正規の「fast_log」クレートを偽装しており、そのREADMEファイルやリポジトリのメタデータをコピーし、疑いを減らすために実際のプロジェクトのロギング機能も保持していました。
攻撃者は、ログファイルパッキング機能を利用して機密情報をスキャンしました。悪意のあるクレートに隠されたペイロードは、実行時に被害者の環境とプロジェクトのソースファイルをスキャンし、以下の3種類の項目を探しました:
- Ethereumの秘密鍵に似た16進数文字列
- Solanaの鍵/アドレスに似たBase58文字列
- 鍵やシードを隠している可能性のある角括弧で囲まれたバイト配列
コードが一致するものを発見すると、ファイルパスと行番号とともにバンドルし、ハードコードされたCloudflare WorkerのURLアドレス(mainnet[.]solana-rpc-pool[.]workers[.]dev
)にデータを流出させました。Socket社は、このエンドポイントがテスト中に稼働しており、POSTリクエストを受け付けていたことを確認しています。これは公式のSolana RPCエンドポイントではありません。
影響と対策
Crates.ioは、これらの悪意のあるクレートにはプラットフォーム上で依存するダウンストリームクレートがなく、また、停止された2つのパブリッシャーが他のプロジェクトを提出していなかったため、攻撃はすでに収束していると発表しました。
しかし、これらのクレートをダウンロードした開発者は、システムクリーンアップを実行し、デジタル資産を新しいウォレットに移動して盗難を防ぐ必要があります。
Rustクレートをダウンロードする前に、開発者は以下の点に注意してパブリッシャーの評判を確認することが重要です。また、悪意のあるパッケージを自動的にフェッチしないように、ビルド手順を再確認することも防御策となります。