クリプトマイナーに関する分析:クリプトマイナーの正体
エグゼクティブサマリー
これは、『クリプトマイナーに関する分析』という 3 部構成のブログシリーズの第 2 部です。第 1 部では、一般的な暗号資産(仮想通貨)とそのさまざまな特性を示し、脅威アクターにとってその一部が他よりも魅力的である理由について説明しました。
今回は、クリプトマイナーのさまざまなサンプルについて詳しく分析し、内部の構成と仕組みへの理解を深めます。悪性のアクティビティにとって都合が良いことが確認された 2 つのコイン、Monero と Zephyr をマイニングしているクリプトマイナーに焦点を当てます。このブログ記事では、以下について説明します。
ブロックチェーンネットワークを使用して、潜在的なクリプトマイナーマルウェアから疑わしいマイニング通信を特定する
長期的にアクティブで永続的な状態を保持するために、さまざまなトポロジーを使用する 4 つのケーススタディの例
数千人もの被害者を出し、1 時間あたり 5.50 米ドルをもたらした、長期的かつ永続的なキャンペーンの興味深い事例
1 つのキャンペーンで複数のコインを使用する攻撃者
ネットワークアクティビティによる検知とブロックチェーンネットワークとの相互参照
コンセンサスアルゴリズムのフィンガープリンティングと並行して、プロセスのメモリー分析を活用した検知
また、セキュリティチームが資産を保護できるように支援するために、このブログ記事のケーススタディからのセキュリティ侵害インジケーター(IOC)のリストも掲載されています。
この記事の締めくくりでは、ASIC 耐性アルゴリズムの概念に基づく検知技術と、クリプトマイニング操作の検知技術について考察します。この検知は、マイニングの基礎に焦点を当てており、ネットワークレベルまたはオペレーティングシステムレベルに適用できます。悪意のある暗号マイニングキャンペーンを停止した方法については、このシリーズの第 3 部をご覧ください。
Monero ネットワークの分析
Monero ネットワークは Levin プロトコルを使用して構築されており、ネットワークノードを介したピアツーピア(P2P)通信を実装しています。このプロトコルを使用して、新しいトランザクションや新しいブロックなどのブロックチェーンの操作を分散します。また、ピアノードの公開によってネットワークを分散型の手法で自立させ、コンセンサスアルゴリズムを通じて攻撃を排除することもできます。
例として Monero を使用していますが、暗号資産(仮想通貨)のほとんどでブロックチェーンのネットワーク検知が可能です。これは、ブロックチェーンネットワークの分散性によるもので、詳細は以前のブログでご確認いただけます。
ネットワーク検知
Monero ネットワークは、個人貢献者による分散型 P2P ネットワークであり、私たち自身も容易に接続することができます。Monero ネットワークをマッピングすることで、信頼性の高い IOC(ノード IP アドレスなど)を取得し、他よりも接続性が高いノードハブの潜在的なアクティビティを特定することができます。
この情報を使用して、マイニング操作を検知および調査することができます。また、ネットワークに脆弱性がないか、ブロックチェーン攻撃にさらされていないかを評価することもできます。図 1 は、Monero のマイニングネットワークを視覚的に表現したもので、ヒートマップには地理的領域ごとのノードの密度が示されています。世界中どこでもアクセス可能なノードには、赤色のドットを付けました。
ネットワークは分散ピアノードで構成されているため、クリプトマイナーは、マップに記載されている世界中の約 3 万台のサーバーのいずれかと直接または間接的に対話する必要があります。このマップは、クリプトマイナーのサンプルハンティングと、ブロックチェーンへの直接ネットワーク接続の検知に非常に役立つことがわかりました(GitHub リポジトリーで、ブロックチェーンクロールやマップ生成のソースコードなど、詳細情報をご覧いただけます)。
ネットワークに対するクリプトマイナーの相互参照
Monero ネットワークをマッピングすることで得られたさまざまな指標を使用して、ブロックチェーンネットワークとやり取りするサンプルを特定することができます。たとえば、VirusTotal Livehunt を使用すると、既知のノードアドレスを含むファイルを識別できます。これにより、アクティブなクリプトマイナーキャンペーンを検知できます(図 2)。
他のセキュリティ同様、万能なハンティング手法というわけではありません。このアプローチのみを使用すると、サーバーが専用のブロックチェーンノードでない場合にフォールス・ポジティブ(誤検知)を引き起こす可能性があります。また、マップが検知していないノードもあるため、可視性の欠如が発生する可能性もあります。ただし、この手法を他の指標と組み合わせると、真陽性検知率が向上します。
このマップには、パブリックアクセスが可能なノードと最近アクセス可能になったノードが含まれています。一部のノードは、Monero ノード以外の用途でも使用され、たとえば、Python の PyPi リポジトリーのミラーやその他のサービスとして機能しています。図 3 は、複数のサービスを提供するサーバーの例であり、ハンティングプロセスで混乱を引き起こすことがあります。これらのサーバーを分析から排除し、潜在的なフォールス・ポジティブ(誤検知)の可能性を低減しました。
脅威ハンティングにおいて、関連性のないサンプルを特定することは、関連性のあるサンプルの特定と同様に重要です。ネットワーク分析と相互参照アプローチを組み合わせることで、ボットネットを介してオーケストレートされたクリプトマイナーやマイニング活動全体を明らかにすることができます。ハードコードされたウォレットアドレスの照合など、追加の静的分析手法を組み込むことで、最も関連性の高い悪性のサンプルに効率的に焦点を当てることができます。
クリプトマイナーのサンプルの分析
クリプトマイニングの性質上、ノイズが多いため、「肉眼」でも簡単に操作を検知できます。警告を受けた IT プロフェッショナルは、高度なアンチマルウェアツールがなくても、クリプトマイナーが生成した異常を検知できます。技術系以外の人でも、マシンのベースラインパフォーマンスを認識し、パフォーマンスが低下した場合は、専門家に分析してもらうことで根本原因を簡単に特定できるでしょう。このため、多くのクリプトマイナーではマルウェアを分析や検知から保護するのではなく、標的を絞らない大量感染の戦略を実行します。
次のケーススタディでは、当社が実際に特定したクリプトマイナーのサンプルをいくつか取り上げ、その動作やふるまいに関して最も興味深い内容について調べます。2 つの主要な要因を基にして、以下のケーススタディを選択しました。(1)このシリーズの最初のブログ記事で説明した関連コイン、および(2)それらが利用するマイニングトポロジー。
ケーススタディ #1:永続的で大規模なキャンペーン
この研究の一環として、さまざまなクリプトマイナーサンプルを分析しましたが、そのうちの 1 つは 6 年間にわたるキャンペーンでした。長期的な活動によく見られるように、組織的な運用またはサードパーティのクリプトマイナーを展開するマルウェア配信サービスのようです。
このサンプルの分析によって、複数のプロキシがあって、その累積ハッシュレートが 5.6 Mh/s であることが分かりました。これは侵害されたマシン数千台に相当します(図 4)。大規模で永続的な攻撃であり、ハッシュレートが安定しているため、おそらくほとんどの被害者がマルウェアを検知できておらず、マルウェアは妨げられることなく継続的に実行されます。このような攻撃は、攻撃者にとって非常に有利なキャンペーンです。
このキャンペーンは、少なくとも 2018 年 6 月以降活動を続けており、ロシアと中国の脅威アクターによる共同の取り組みである可能性を示す指標(例:サンプルで使用されている言語)が含まれています。この理論は、コマンド & コントロール(C2)サーバーの分析もサポートされていましたが、この記事の公開日時点では完全には確認されていません。
執筆時点では、攻撃者は少なくとも 1,702 XMR を蓄積し、これは現在の為替レートで約 28 万米ドルに相当します。この 1 つのキャンペーンから、6 年間にわたって年間平均で約 47,000 米ドルを得ていることになります。
このキャンペーンにリンクされているほとんどのサンプルでは、初期ローダーおよびダウンローダーとして、被害者のオペレーティングシステムに対応するスクリプト言語を使用します。ルーティングや紛らわしいネットワーク接続に大きく依存しており、悪性ファイルを C2 サーバーから分離しようとした場合に発生する可能性があります。
キャンペーンサンプルを分析した結果、これが PowerShell を使用し、loader と呼ばれる実行可能ファイルを r77 ルートキットを使用してステルス方式でデプロイしていることがわかりました。複雑なドロッパーを分析しなくても、このクリプトマイナーには複数のバージョンがあることが確認できます。
一部のバージョンでは、クリプトマイナー自体にマイニング設定を保持する config.json ファイルが含まれています。他のサンプルでは、OracleLoader スクリプトがクリプトマイナーをドロップし、構成をセットアップします。このマルウェアには、セキュリティ侵害が発生した場合にボットネットを回復できる更新メカニズムもあります(表 1)。
特性 |
値 |
備考 |
|---|---|---|
マルウェア名 |
Oracle Loader |
|
現在のバージョン |
1.1.72.0 |
<5.133.65.53>/Oracle/ver$77_loader.exe.txt |
関連コンポーネント |
|
表 1:Oracle Loader の特性
このマルウェアはポート 999 でもリッスンし、XMRig の HTTP API 機能を公開します。これにより、攻撃者は被害者のマイナーにアクセスし、マイニングプロセスを監視できます。被害者のマシンがインターネットに直接接続されていて、ネットワークアドレス変換(NAT)ルーターや外部ファイアウォールの背後にない場合、理論的には Shodan のようなネットワーク監視サービスを使用して被害者を見つけることができます。図 5 は、潜在的な被害者を検知するために使用される Shodan クエリーの結果を示しています。
XMRig ワーカーモニター Web アプリを使用して、被害者のマイナーを監視し、CPU モデルやハッシュレートなどの情報の開示が可能です。このインターフェースでは情報のクエリーのみが可能であり、アクティビティは確認できますが、マイナーの操作や停止は行うことができません(図 6)。
マイニングプールのダッシュボードで見ることができるように、ハッシュレートが安定しているので、被害者は世界中にいると考えられます。そうでなければ、タイムゾーンのアクティブ時間に基づいてハッシュレートが上下すると想定されるからです。もう 1 つの説明として、攻撃者がサーバーを標的にしており、他のクリプトマイナーのキャンペーンのように消費者を標的にしていないことが考えられます。
ケーススタディ #2:Zephyr クリプトマイナーで使用されたパブリック・プール・トポロジー
ケーススタディ #1 のように、長期的なキャンペーンを展開して多額の利益を得ている意欲的で巧妙な攻撃者もいますが、こうした攻撃者が脅威の大部分を占めているわけではありません。最も一般的なのは、パブリックプールを使用するクリプトマイナーです。これらのクリプトマイナーには、難読化や分析回避技術などの高度な機能は含まれていません。プレーンテキストのウォレットアドレスを使用して直接プールに接触するのが典型的な手口です。また、一般的には影響力や利益が小さい傾向にあります。
暗号通貨市場では、マイニング収益性やコイン価値などさまざまな要因に基づいて、攻撃者は複数の選択肢を持つことになります。暗号マイニングには本質的に金銭的な側面があるにもかかわらず、通貨のマイニングの収益性は、多くの攻撃者にとって最も重要な考慮事項ではないようです。Zephyr コインは Monero よりも収益性が低く、脅威アクターの間でよく使われます。暗号市場の価格変動は、攻撃者と合法的な暗号資産購入者が同様に考慮すべき重要な要因です。それは、ある暗号通貨が別の暗号通貨よりも攻撃者を引き付ける長期的価値をもつ可能性があると考えられます。
当社が確認した最大の Zephyr キャンペーンでは、アクティブな被害者が 1,400 以上、総ハッシュレートが 800 Kh/s、総利益が 906.3 ZEPH(現在の 2,528 米ドルに相当)でした。
ボットネットのハッシュレートを時間軸で分析すると、攻撃者が特定の地域を標的としたタイミングを把握できます。その例の 1 つを、直接接続型のマルウェアと組み合わせたプロキシを使用することが確認された、別のキャンペーンに見ることができます。これは、ロシア語話者のユーザーをターゲットにしていると思われます(図 7)。
定期的に変化が見られる場合、被害者のほとんどがサーバーではなく人間のユーザーであることを示している可能性があります。これは、個人用マシンは定期的にオフになる可能性が高いためです。ハッシュレートの頻度を分析すると、周期が 24 時間であることがわかります。また、低い部分が夜間であると仮定すると、被害者の大部分が住んでいるタイムゾーンを特定できます(図 8)。
時間間隔のみでは被害者の位置を確実に特定することはできませんが、私たちの理論は Hashvault プールの IP ジオロケーション検索機能によって裏付けられました。これをマルウェア分析や、Fortnite、Roblox の Solara Executor など、ゲームに関連するマルウェア配信名と組み合わせることで、より確実な推測にたどり着くことができます。つまり、マルウェアは、プレイヤーに見つけられやすいようにチートエンジンを装っているのです。ソーシャルメディアやメッセージングアプリケーション、たとえば Telegram や Discord などを通じても広がったと考えられます。
ケーススタディ #3:マイニング・プロキシ・トポロジーを使用したクリプトマイナー
Monero ネットワークマップを使用して 25,000 ノードを超える情報を収集しましたが、直接到達できるのはわずか 10% でした。逆に、ネットワークに接続されていない既知のクリプトマイナーの除外にも、このマップを使用しました。2022 年 4 月からアクティブであったキャンペーンは、この方法で発見したものです。
図 9 は、マルウェアの攻撃ベクトルを示しています。XMRig-proxy のようなマイニングプロキシを使用し、クラックされた Internet Download Manager(IDM)などの海賊版ソフトウェアを通じてクリプトマイナーを配布します。
キャンペーン・マルウェア・サンプル間で、攻撃フローは類似しています。通常、crackingcity.com からのドライブバイダウンロードで開始し、これがペイロードチェーンを設定します。次に、最後の段階で、custompool.xyz でホストされているプロキシに接続する dllhost.exe というクリプトマイナーを導入します。攻撃者は、回避手法として、環境変数を使用して文字列を引数とし、子プロセス(主にバッチファイル)に渡します。これは、埋め込みアーカイブを復号化し、Defender 除外リストを操作した後でスクリプトまたはファイルを実行することによって機能します。
攻撃者は、VirusTotal で最初に検知されてからわずか 3 日後の 2022 年 4 月 29 日に、custompool.xyz という名前でプロキシドメインを登録しています。最初のサンプルは Vscan.exe という名前で、2 つのバッチファイルを使用する自己解凍型アーカイブです。まず main.bat が、環境変数に隠されたパスワードを使用して、2 段階目のバッチファイル Vs.bat を解凍します。デバッガを使用して非表示の情報を抽出するには次の 2 つの方法があります。「l3」という名前の環境変数にアクセスしてブレークする方法(図 10)か、環境変数を変更するたびにブレークする方法です。
パスワード un#912345678@rar を使用して、別の C2 ドメイン crackingcity.com に接続する第 2 段階目のローダーを解凍できます。最終段階では、マルウェアは dllhost.exe(基本的には、custompool.xyz プールに設定が組み込まれた修正済み XMRig クライアント)を実行しますが、それはこの時点では直接 IP です(図 11)。
ここで、サーバーのタイプについて質問があります。プライベートプールですか?マイニングプロキシでしょうか?それともプライベートプールと同じと見なされる何らかの種類のカスタムノードでしょうか。これらの質問に回答するには、サーバーからいくつかの識別子を抽出する方法が必要です。専用ノードを介した単独マイニングでは、マイナーがデーモンモード(RPC 要求が HTTP 経由で送信される)で動作する必要がありますが、この構成には存在しないため、明らかに当てはまりません。
JSON 構造はシリアライゼーション間で保持されるため、XMRig-proxy がサポートするさまざまなストラタムメソッドを送信して、サーバーから応答を取得することができます。サーバーからの応答がキーと値の順序と一致する場合は、サーバーが XMRig-proxy を使用しているか、これに基づいていることを強く示している可能性があります。
XMRig は、3 つの Stratum プロトコルメソッドをサポートしています。
- Login:マイニングワーカーが最初に起動するリクエスト。通常はログインとしてウォレットが含まれています
- Keepalived:単に接続を維持します
- Submit:有効な共有が見つかったときに結果を送信します
無効なメソッドが要求されると、XMRig-proxy はエラーで応答します(図 12)。プールなどの他のサービスでは不正リクエスト時にエラーを出力せず無視するため、これがサーバータイプを示している可能性があります。これらの要素を組み合わせると、XMRig-Proxy に関する結論に至ります。
送信メソッドを XMRig プロキシから明示的なエラーを返す 3 つのケースに分割しました(表 2)。
難易度の低い共有とは、マイナーが予想されたターゲットよりも低い値を持つハッシュを送信することです。
無効なノンスとは、NiceHash 設計による範囲外のノンスの結果です。
最も難易度の高いハッシュとは、あらゆるジョブのターゲットを満たすと思われる特別に作成されたハッシュのことです。この場合、XMRig プロキシの難易度の検証をバイパスしてプールに直接送信し、これによってプールエラーが返されます。
リクエスト |
XMRig-proxy |
MoneroOcean |
HashVault |
Nanopool |
SupportXMR |
C3Pool |
ログイン |
(ベースライン) |
✕ |
✕ |
✕ |
✕ |
✕ |
Keepalived |
(ベースライン) |
≈ |
✅ |
≈ |
✕ |
≈ |
不明 |
(ベースライン) |
✕ |
✕ |
✕ |
✕ |
✕ |
送信:低難易度 |
(ベースライン) |
✕ |
✕ |
✕ |
✕ |
✕ |
送信:無効なノンス |
(ベースライン) |
NA:ブロック対象の IP |
✕ |
✕ |
✕ |
✕ |
送信 — 最大難易度 |
プール応答メッセージを繰り返します |
NA:ブロック対象の IP |
✅ |
✕ |
✅ |
✅ |
表 2:Stratum プロトコルリクエストの XMRig-proxy とさまざまなパブリックプール間での比較。✅ はベースラインと同じことを示し、✕ は異なるデータ、≈ は順序が異なる同じデータを示す
XMRig-proxy と一般的に使用されるプールを区別できるだけでなく、プール自体を区別することもできます。この情報は、リバースプロキシなどの他のネットワークコンポーネントを経由してプールにルーティングする場合に便利です。この場合、最高の難易度でマイニング結果を送信すると、プロキシではなくバックエンドプールからエラーが発生します。この情報を活用することで、攻撃者が Nanopool を使用していることがわかりますが、ウォレットアドレスが不明なため、このキャンペーンの被害者数や利益を評価することはできません。
ケーススタディ #4:Stratum プロキシトポロジーを使用した隠されたブロックチェーン通信
Stratum プロトコルプロキシは、ウォレットアドレスを変更せずに別のサーバーに直接 Stratum プロトコル要求を転送することで、ネットワークレベルで動作します。これにより、各マイナーの作業がそれぞれのウォレットに記録されます。Stratum プロキシの実装は、基本的なトランスポート層ネットワークプロキシまたはプロトコルを理解して処理する特殊なアプリケーションプロキシを使用して実現できます。
このトポロジーを使用して、Stratum プロキシを介してパブリックプールに接続するアクティブなキャンペーンを発見しました。ネットワークレベルのリバースプロキシであるかどうか、または Stratum プロトコル自体を傍受してアプリケーションプロキシとして動作するかどうかは特定できませんでした。いずれの場合も、Stratum メッセージをリダイレクトしてバックエンドプールまたはノードを非表示にします。指定されたウォレットに対応する公開プールをスキャンした結果、MoneroOcean 公開プールと接続していることが分かりました。
キャンペーンは少なくとも 4 か月間はアクティブで、その総利益は 1.158 XMR(約 180 米ドル)です。これ自体では、キャンペーンは大成功とは言えませんが、脅威アクターによる取り組みが行われていることは明らかであり、キャンペーン全体の開発を含む、より大規模な計画の可能性(インフラ、クリプトマイナー、さまざまな悪性ファイルのドロップ)を示しています。攻撃者は、サードパーティに頼ることなくキャンペーンを配布し、暗号化や難読化などを含むリバースエンジニアリング防止メカニズムを実装しています(図 13)。
このキャンペーンは安直かもしれませんが、特に難読化プロセスでは、マルウェアが十分に実行されていることがわかります。マルウェアは、実行時にアーカイブをダウンロードし、正規のシステムファイル名でプロセスを実行することで、ペイロードを非表示にしようとします。
検知
一般的に検知に関しては、いくつかの異なる方法を使用できます。各メソッド自体では機能しないかもしれませんが、他の検知メカニズムと併用すると、有効な結果を期待できます。クリプトマイナーも例外ではありません。実際には、その無害な特性から検知するのが難しいマルウェアの一部である可能性があります。多くのオペレーティングシステムでは、特殊な許可が不要な唯一のリソースとして計算能力(CPU 時間)を活用しています。
ネットワークへの接続
これらのマイナーを検知するために、ブロックチェーンネットワーク(前にスクレイピングした Monero ネットワークなど)を、ファイアウォールやセグメンテーションソリューションなどのネットワーク可視化ツールから取得したデータと相互参照できます。すべてのノードまたはプールは、Monero ブロックチェーンとやり取りする必要があるため、ネットワーク管理者はネットワークからのトラフィックに関する極めて貴重な知見を得ることができます。ネットワークポートと組み合わせると、ほとんどのクリプトマイナーは 999、3333、7777 などの個別のポート番号を使用するため、検知が非常に簡単になります。このケーススタディでは Monero を使用しますが、ブロックチェーンネットワークのマッピングは、すべての proof-of-work(プルーフオブワーク、PoW)ベースのネットワークで使用できます。
ただし、Monero ノードへのすべてのトラフィックが必ずしもクリプトマイニングされているわけではないことに注意してください。これらのノードは複数のサービスを提供することがあるからです。たとえば、IP 157[.]90[.]212[.]53 は Monero ネットワークマップにありますが、 Tor ネットワークの出口ノードでもあります。Monero ノードが他のサービスを提供している理由としては、不正使用されているか、または単に意図的に多目的に利用されているなど、さまざまな事情が考えられます。いずれにしても、追加情報なしでネットワークへの接続を使用すると、ブロックチェーンへの接続が弱くなり、誤検知が発生する可能性があります。これは、正確な検知のためにポート番号情報が重要であるもう 1 つの理由です。
誤検知のもう一つの理由は、マップの更新率が低いことです。正規のサーバーには、以前に Monero ノードで使用されていた IP アドレスを割り当てることができ、マップが最新でない場合は誤検知が発生します。
この検知は単独では実行できませんが、より包括的な検知ロジックまたは調査のトリガーとして使用できます。クリプトマイナーの操作では、マイニングジョブの割り当てのために Stratum サーバーと通信する必要があります。通常は、一般に知られているマイニングプールで動作しますが、場合によっては、ネットワークマップに表示されないプロキシを使用して非表示にすることもできます。
アルゴリズム実行の検知
クリプトマイナーが被害者のコンピューティングリソースを集中的に使用するため、システムの使用量の急増を監視することで感染の兆候がわかります。しかし、ネットワークマップの相互参照のように、この検知も単独では正確な検知にはなりません。
複数の検知可能な IOC を組み合わせると、検知信頼度が向上します。つまり、誤検知を低減します。マイニング操作の成功には、必須のカウンターパートが必要です。クリプトマイナーは、作業の証拠としてコンセンサスアルゴリズムを使用して、選択したコインを採掘する必要があります。このようなアルゴリズムにはどれも、実行時にシステムに固有のフィンガープリントがあり、これらの特徴を抽出することで、悪性のクリプトマイナーを検知する確かな方法を確立できます。
RandomX などの ASIC 耐性アルゴリズムは、通常、一意に識別できる複雑な演算セットを実装します。たとえば、RandomX の開発者は、まさにこの仮定に基づいて検知ツールを作成しました。システムで実行中のスレッドを反復することで、CPU レジスターの値を含むスレッドの状態を調査できます。RandomX は CPU の最新の機能を多数使って実装されているため、RandomX の開発者による検知ツールのように Rounding Control の設定を使用することがその 1 つの方法です。
実際、ハードウェア AES 演算や HugePage 設定などの他のインジケーターと組み合わせることで、検知率が向上します。要約すると、SSE レジスター内で一意の AES キーを探すか、スレッド・アクセス・トークン権限を照会することで、それぞれ検知することができます。
ほとんどのクリプトマイナーはプラットフォームに依存しないことを目指しているため、異なるオペレーティングシステムでも同じように動作することが期待でき、これらの方法を他のオペレーティングシステムにも展開することができます。1 つのオペレーティングシステムに限定されないということは、ターゲット数が大幅に増加するため、キャンペーンの成功率を高めることができます。
プロセスメモリー内のウォレットの特定
クリプトマイナーがプロキシ経由ではなくマイニングプールと直接通信する場合は、マイナーのウォレットがプロセスのメモリー内に存在しているはずです。これは、Stratum プロトコルでは、マイナーがサーバーを認証し、有効な共有の送信で報酬を受けるアカウントを通知する必要があるためです。通常はウォレットアドレスを使用し、Monero の採掘では特に、マイナーはおそらく XMRig ソフトウェアに基づいています。これらの前提条件を適用すると、さまざまなソケット API に接続してプールに送信されたウォレットを見つけて傍受できます。また、理論的には、マイナーが送信した認証メッセージを傍受するために、中間者(MITM)「攻撃」を使用できます。
また、プロセスの割り当てられたメモリー全体を、単純な正規表現を使用して厳密な形式に従って 95 文字のウォレットアドレスを検索することもできます。4 または 8 で始まり、BASE58 の有効な文字で構成されます。そのため、このタスクにはパターン /[48][1-9A-HJ-NP-ZA-KM-z]{94}/ で十分であり、YARA ルールに組み込むこともできます。クリプトマイナーがプールに最初に接続した後、いつでもスキャンを実行できます。これは、再接続する必要がある場合に備えて、マイナーがウォレットアドレスを使用できるようにする必要があるためです。
最後になりますが、前述のいずれかの方法を使用して、Stratum プロトコルに関連する他の文字列を検索し、内部からウォレットを解析できます。このような指標は、プロトコルの JSON 構造がよりユニークであるため、誤検知を減らすことができます。たとえば、図 14 のログイン要求を参照してください。より正確な検知のために複数のキーを含む強力なシグニチャを作成できます。
{
"id": 1,
"jsonrpc": "2.0",
"method": "login",
"params": {
"login": "<wallet address>",
"pass": "<Usually the worker name>",
"agent": "<Usually xmrig agent>",
"algo": [
"rx/0"
]
}
}
図 14:ログイン要求の例。パターンを一致させることでより正確な検知が可能になる。
結論
Akamai の研究者は、悪性のキャンペーンとその背後にいる脅威アクターを暴き続け、IOC を特定してお客様と一般の人々の両方の保護を支援します。
3 部構成のクリプトマイナーに関するブログシリーズの第 2 部であった今回は、マイニングプロキシの背後にあるマイニングプールの特定や、クリプトマイナーのボットネットのハッシュレートを経時的に分析してキャンペーンの地理的な運用を特定するなど、各種のキャンペーンに関するさまざまな手口について詳しく紹介しました。
よく知られている Monero とともに Zephyr を使用した悪性のクリプトマイナーを発見しました。さまざまなマイニングトポロジーを使用することで、クリプトマイナーは情報を非表示にして、識別情報と不正な指標の数を最小限に抑えることができました。
異なるクリプトマイナーの構造とマイニングプロセスを把握した後、おおむね以下のような疑問が提起されました。クリプトマイナーボットネットのマイニング操作を停止できますか。マイニング操作を効果的に停止すると、被害者のマシンに感染してリソースを消費するクリプトマイナーが停止します。この質問については、私たちのシリーズの最終回で詳しく説明します。
このシリーズやその他の最新のセキュリティ調査を見逃さないよう、当社のセキュリティ調査ページをご覧になり、ソーシャルメディアでフォローしてください。
セキュリティ侵害インジケーター(IoC)
IoC |
タイプ |
内容 |
|---|---|---|
f038c4273037 |
ハッシュ |
ケーススタディ #1:アクティブなクリプトマイナーのハッシュ |
47am2aMvQqCLnRBMqBz |
ウォレット |
ケーススタディ #1:Monero ウォレットのアドレス |
4BEUrVUbd8h579R2b87uo |
ウォレット |
ケーススタディ #1:Monero ウォレットのアドレス |
42XyygMzMRjd6A2MvPVXMGbZ6PzNe7Sivd8ek3ySHBmg18dDCWRhCZ6RFxVZFFUvoyCDnwA5Y2tSeSCaZAEq4n6q6DD8pQK |
ウォレット |
ケーススタディ #1:Monero ウォレットのアドレス |
5.133.65.53 |
IP |
ケーススタディ #1:マイニングプロキシ IP |
5.133.65.54 |
IP |
ケーススタディ #1:マイニングプロキシ IP |
5.133.65.55 |
IP |
ケーススタディ #1:マイニングプロキシ IP |
5.133.65.56 |
IP |
ケーススタディ #1:マイニングプロキシ IP |
53ea10047275485734e75ca9d1205a51f372b564580e02a1e2062f3b5b3942ce |
ハッシュ |
ケーススタディ #2:当社が発見した最大の Zephyr キャンペーン |
ZEPHYR3c6xGj8D5oP4tzKQbPn2dNdse6aPRWxNBiwBFrg7RFN4jf1cqgj5qdR9Wdru44g2FATJHHH38oFDTH6krgKntSzLc5Csy3t |
ウォレット |
ケーススタディ #2:HashVault プールを使用する大規模キャンペーンの Zephyr ウォレット |
9a3b3a3003b283b5a43130093d5803be52f84c66dd2f4d4125039d396119d917 |
ハッシュ |
ケーススタディ #2:サンプルハッシュ |
ZEPHYR3CFYFAze5jkYEQMfKdkhvrgSiSchDxqC2ekV8TYaxLdCVffS2d2aeqivDgtRixDe73tj8SjeiUnvxgSrTp65UqiPTRKMo2Z |
ウォレット |
ケーススタディ #2:Zephyr ウォレット |
https://pastebin.com/raw/4VeXYJAx |
URL |
ケーススタディ #2:Pastebin サービスを使用した制御可能な構成のサンプル |
ZEPHYR2PtmpFWSbkmyLfoy3wgnPSJdpSpjaH6vKaHh6KQB1FSRwxcgfRGx9qWYHQDNDQy5TFkYBRThm7jfCaQQPGNKe9pyvXG6Z3k |
ウォレット |
ケーススタディ #2:Zephyr ウォレット、履歴構成バージョン |
49WbPNohkR8VySDznW2freM7d9uUNiZWajQTE4aeFBUT6gJqye3ZPWbbL9r92r4kzHM7pZaoULavWFK83cSMkEYYDJTV7bT |
ウォレット |
ケーススタディ #2:同じサンプルの Monero ウォレット |
45.77.240.51 |
IP |
ケーススタディ #3:マイニングプロキシ |
b64d80bf079266a1bfb0713f8c52db2e9b3a8060491f504e578a6bf05a9c6f46 |
ハッシュ |
ケーススタディ #3:キャンペーンについて確認された最も古いサンプル |
yn.mvip8.ru |
URL |
ケーススタディ #4:その背後にある公開プールをマスクする Stratum プロキシ |
49J2yzHRcH8hAWSZajkjT2KztGjAMuTFKh5BxAUGdqomPkhvMmBNc9viDSVymu5V5SAqJrNHf4y9E6rLNArYWtuSJNtVEYv |
ウォレット |
ケーススタディ #4:サンプルが使用する Monero ウォレット |