Skip to main content

PPL

随着凭证导出被攻击者的滥用,微软也开发出了相应的防御措施,例如 PPL。对于 IT 管理员,PPL 非常容易部署,是一个 quick-win。虽然 PPL 是可以被绕过的,但还是给导出凭证的操作增添了额外的难度。我们之前说过,Windows 有 4 种完整度等级,而 PPL,则是更高级的,这意味着即便是 SYSTEM 权限也无法访问被 PPL 保护的进程,而 lsass 支持 PPL保护。我们可以在注册表的如下位置添加 RunAsPPL 从而启用 PPL。

image.png

对于启用了 PPL 的主机 SRV01,无论是用 nanodump 还是 mimikatz 或其他类似工具,我们都无法正常导出 lsass 进程。nanodump 的报错告诉我们,无法获得对 lsass.exe 进程的句柄,即便我们已经是 SYSTEM 特权了。

image.png

image.png

PID 748 正是 lsass.exe

image.png


那么,我们查看 mimikatz 相关部分的代码:

笔者已经标记出了分支语句,根据代码我们得知在可以怎么绕过 PPL 的限制呢?具备管理员权限后,我们当然可以删除 RunAsPPL 的注册表然后重用的状态下OpenProcess 无法访问但这样对于提取 lsass.exe 进程,即便是开启中的凭证也无意义可言SeDebugPrivilege。既然 特权的本地管理员。

但是正如开头所说,PPL 是驱动级的,那么我们自然可以被绕的,虽然依旧会给我们增额外的难度。其中方法之一就是使用 mimikatz 载签名的驱动 mimidrv.sys,移除 lsass.exe 的 PPL保护

!+

!processprotect /process:lsass.exe /remove

image.png

在这之后,我们就可以愉快地提取凭证了来反制。但是,攻与防编写这样的驱动并为其签名,并不持续一个门槛很低斗争,虽然 mimidrv.sys 可以帮助我们移除 lsass.exe 的 PPL 保护,但是 mimidrv.sys 会被 AV/EDR 列入黑名单选项。因此,我们可以去加载存在任意代码执行的脆弱驱动,例如 RTCore64.sys。该驱动存在 CVE-2019-16098 的漏洞,因为允许用户读自己任意内存、IO端口等,因此会导致高特权下的代码执行,进而可被用于绕过微软的驱动并且签名 (默认情况下只允许加载签名的驱动) 策略部署恶意代码。

image.png

类似的驱动还有 PROCEXP152.SYS

image.png

因此如果觉得这麻烦的话,我们可以利用通过加载这些脆弱的且具有漏洞的官方驱动在内核空间执行代码(有些类似于通过 LOLBAS 绕过 AppLocker),这样的话我们就能从用户态载入未签名的驱动,例如实现内核级的代码执行而绕过 PPLKiller (https://github.com/RedCursorSecurityConsulting/PPLKiller) 就是利用了这种技术。PPL。

其他一些参考工具:
EDRSandblask: https://github.com/wavestone-cdt/EDRSandblast 
PPLDump: https://github.com/itm4n/PPLdump  (在最新Win11已经不适用)
pypykatz: https://github.com/skelsec/pypykatz