应用程序白名单
无论是在我们试图获得初始Beacon的时候,例如在webshell里执行exe载荷,或者在获得了shell之后使用其他工具进行后利用操作,例如提取凭证,AppLocker或者WDAC会阻碍我们的行为。AppLocker和WDAC都是基于白名单的应用控制机制,检测软件以及组织除了预设范围内的应用被执行。对于AppLocker以及WDAC的绕过,我们依赖于预设配置、LOLBAS,尽管微软已经意识到这点。
AppLocker
AppLocker 是 Microsoft 的应用程序白名单技术,可以限制允许在系统上运行的可执行文件、脚本、安装包、打包程序甚至dll,并且可以配置启用、仅审计、以及无。
如果一个类别被配置了启用,那么对应的规则会被适用,每个类别都有各自的默认规则。对于exe文件而言,任何在 Program Files文件夹下的可执行文件不受影响,Windows 文件夹下的可执行文件不受影响,以及管理员用户不受影响。此外,我们还可以添加自定义的规则,以及基于拒绝的规则,即不允许特定应用被执行。特定的拒绝规则可用于覆盖允许规则,这些规则通常用于阻止“LOLBAS” (https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/microsoft-recommended-block-rules),例如MSBuild.exe。
我们在之前的章节讲过怎么验证AppLocker的存在。接下来,我们讨论如何绕过AppLocker。
利用脆弱规则
如果管理员仅采用了默认规则,那么我可以可以轻易地绕过AppLocker。对于exe文件的分类,默认规则中的一条是允许 C:\windows\ 目录下的文件被执行。在默认的文件权限下,例如 C:\windows\tasks,C:\windows\temp 是所有用户可写的。
利用DLL
因为默认情况下,DLL分类在“高级”页面,因此有可能没有被管理员所选中。这时候,我们可以生成一个DLL载荷,然后通过rundll32 命令执行。
第三方执行
AppLocker仅适用于原生Windows可执行文件类型,对于Python,Java等第三方脚本引擎或者高级语言执行环境,不造成阻碍。例如,我们可以使用 python 类型的后利用工具进行操作,因为如今一些知名工具都具有多个语言的版本,mimikatz的python版本为 pypykatz (https://github.com/skelsec/pypykatz),此外 impacket 系列工具本身就是 python 写的,并且在后利用阶段帮助极大。
如图所示,因为没有提供任何参数,所以脚本报错了,但证明了 python 确实不受AppLocker约束。
HTA
hta也是一种常见的载荷分发类型,并且常用于客户端攻击。hta文件的内容与html无异,只是默认由 C:\windows\system32\mshta.exe 所执行。因为 mshta.exe是微软签名的应用程序,因此不被AppLocker所阻碍。我们可以将JScript代码嵌入到hta文件中,以绕过AppLocker,具体代码如下:
<html>
<head>
<script language="JScript">
var shell = new ActiveXObject("WScript.Shell");
var res = shell.Run("C:\\windows\\system32\\calc.exe");
</script>
</head>
<body>
<script language="JScript">
self.close();
</script>
</body>
</html>
我们可以在此基础上修改,将Beacon的载荷以JScript的形式插入进去,便可以使用 mshta.exe 执行 hta 文件获得Beacon。
LOLBAS
LOLBAS,即 Live Off The Land (https://lolbas-project.github.io/),是系统内置的可以为我们所用的二进制文件、脚本、库等。LOLBAS的优势在于,因为被微软所签名,所以不会被AppLocker所阻碍,用于其他方面也可以降低被检测的概率。为了突破 AppLocker,我们使用经典的 MSBuild.exe。该文件用于编译 .NET 工程文件,但实际上还有更多用途,例如执行 powershell 命令,注入 shellcode,甚至执行 PE 文件。我们以 mimikatz.exe 为例,从 https://gist.githubusercontent.com/xenoscr/aba102e5f83d3be26b1fe50b15f35c49/raw/04d7da8a72b00fb08e4c5bbd713a041ea2567443/Katz.Proj 下载嵌入了 mimikatz.exe 的工程文件,然后用MSBuild.exe在AppLocker本该锁定的文件夹编译该工程文件,我们会发现可以成功执行 mimikatz。因为工程文件中可以插入 C# 代码,所以 MSBuild.exe 可以在AppLocker 存在的情况下最大程度满足我们对渗透工具的需要。
WDAC
WDAC作用类似于 AppLocker,但有一些关键区别。这其中最重要的是微软承认 WDAC 是官方的安全边界。这意味着 WDAC 更加强大,常用的绕过手段都被修复了,并且如果能绕过WDAC,可以得到CVE。
从根本上的WDAC的绕过是不存在的,尽管我们可以寻找配置和策略上的漏洞,以及对 LOLBAS 的利用,我们可以在 https://github.com/bohops/UltimateWDACBypassList 查看可能导致 WDAC 绕过的手册。