简介
PPL全称,Protected Process Light ,是从windows8.1开始引入的一种安全机制,
它
能保护关键进程不被恶意代码入侵、篡改、和利用。
换句话说就是系统给进程分了个级别,受PPL保护的进程权限更高,低级别的不能打开高级别的进程。
开启
PPL
在注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
添加RunAsPPL=dword:00000001
,
重启就可以开启了PPL保护
。而
原先DEBUG权限令牌(SeDebug)就能任意的读取进程虚拟内存、远程注入代码、结束进程、调试、拷贝描述符、复制句柄、等操作。当我们开启PPL后,Mimikatz就无法从lsass抓到密码,需要绕过,因为它只有SeDebug权限。
绕过方式
要绕过LSA保护,可以采取下列方法:
1.删除RunAsPPL注册表项并重新启动系统
2.通过修改EPROCESS内核结构,在LSASS进程上禁用PPL标志
3.直接读取LSASS过程存储器的内容,而不使用打开的过程函数
后两种方法需要具有读取和写入内核内存的能力。实现此目的最简单的方法是通过加载驱动程序,在这里我们使用MSI Afterburner的RTCore64.sys驱动程序。这个驱动是一个存在任意读写漏洞的驱动程序。
当我们加载一个漏洞驱动后,我们可以使用第二种方法修改EPROCESS内核结构来关闭PPL。为此,我们需要找到LSASS EPROCESS结构的地址,并将5个值(SignatureLevel,SectionSignatureLevel,Type,Audit和Signer)修改为零。当上述值修改为零后即可以绕过PPL保护。
在这里我们利用EnumDeviceDrivers函数找到内核基地址。这可以用来定位PsInitialSystemProcess,它指向系统进程的EPROCESS结构。由于内核将进程存储在链接列表中,因此EPROCESS结构的ActiveProcessLinks成员可用于迭代链接列表并查找LSASS。