Skip to main content

PPL

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

image.png

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

image.png

image.png

PID 748 正是 lsass.exe

image.png


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

笔者已经标记出了分支语句,根据代码我们得知在 PPL 启用的状态下,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 列入黑名单。因此,我们可以编写自己的驱动并且签名,如果觉得这麻烦的话,可以利用具有漏洞的官方驱动在内核空间执行代码(有些类似于通过 LOLBAS 绕过 AppLocker),这样的话我们就能从用户态载入未签名的驱动,例如 PPLKiller (https://github.com/RedCursorSecurityConsulting/PPLKiller) 就是利用了这种技术。

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