Windows internals - PPL进程

Protected Process Light

Protected Process Light即PPL,是从win8和Windows server 2012 R2开始引入的受保护进程的扩展

PPL的保护方式与经典受保护进程类似,用户态即使提权也无法打开(获取)受保护进程,而且PPL根据签名者具有的不同信任级别而划分不同的保护级别,如下图级别由高到低:

PPL一般保护着系统级进程以及反病毒软件等

关闭PPL

在未关闭PPL时,打开PPL进程会失败,即便是以system + SeDebug权限

PPL相关的结构在EPROCESS中,如下:

1
2
3
4
5
6
7
8
9
kd> dt nt!_EPROCESS
+0x000 Pcb : _KPROCESS
...
+0x878 SignatureLevel : UChar
+0x879 SectionSignatureLevel : UChar
+0x87a Protection : _PS_PROTECTION
+0x87b HangCount : Pos 0, 3 Bits
+0x87b GhostCount : Pos 3, 3 Bits
...

其中最关键的结构是EPROCESS.Protection

1
2
3
4
5
kd> dt nt!_PS_PROTECTION
+0x000 Level : UChar
+0x000 Type : Pos 0, 3 Bits
+0x000 Audit : Pos 3, 1 Bit
+0x000 Signer : Pos 4, 4 Bits
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
kd> dt nt!_PS_PROTECTED_TYPE
PsProtectedTypeNone = 0n0
PsProtectedTypeProtectedLight = 0n1
PsProtectedTypeProtected = 0n2
PsProtectedTypeMax = 0n3

kd> dt nt!_PS_PROTECTED_SIGNER
PsProtectedSignerNone = 0n0
PsProtectedSignerAuthenticode = 0n1
PsProtectedSignerCodeGen = 0n2
PsProtectedSignerAntimalware = 0n3
PsProtectedSignerLsa = 0n4
PsProtectedSignerWindows = 0n5
PsProtectedSignerWinTcb = 0n6
PsProtectedSignerWinSystem = 0n7
PsProtectedSignerApp = 0n8
PsProtectedSignerMax = 0n9

看一下services.exe的EPROCESS.Protection

可以看到Type类型为PsProtectedTypeProtectedLight,Signer为PsProtectedSignerWinTcb

将这个字段清0,再次试一下打开该进程就可以了(注意,此处必须要高权限system或者SeDebug)

1
2
3
4
5
6
7
kd> eb 0xffffc58780287080+0x87a 0x00
kd> ?? ((nt!_EPROCESS *)0xffffc58780287080)->Protection
struct _PS_PROTECTION
+0x000 Level : 0 ''
+0x000 Type : 0y000
+0x000 Audit : 0y0
+0x000 Signer : 0y0000

参考

The Evolution of Protected Processes – Part 1: Pass-the-Hash Mitigations in Windows 8.1

Windows Internals Part1 7th

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021 lzeroyuee
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信