Produkt

Schutz geschützter Windows-Prozesse

Dieser kurze Blogbeitrag ist der erste Teil einer zweiteiligen Serie, in der ein Userland-Windows-Exploit diskutiert wird, der ursprünglich von James Forshaw und Alex Ionescu offengelegt wurde. Der Exploit ermöglicht es Angreifern, Aktionen mit hohen Privilegien durchzuführen, die normalerweise einen Kernel-Treiber erfordern.

Protected Process Light

Windows 8.1 führte das Konzept von Protected Process Light (PPL) ein, das es speziell signierten Programmen ermöglicht, so ausgeführt zu werden, dass sie selbst für administrative Nutzer immun gegen Manipulation und Beendigung sind. Das Ziel ist es, zu verhindern, dass Malware Amok läuft – also kritische Systemprozesse manipuliert und Anti-Malware-Anwendungen beendet. Es gibt eine Hierarchie von PPL-„Ebenen“, bei der höher privilegierte Ebenen immun gegen Manipulationen durch niedriger privilegierte sind, jedoch nicht umgekehrt. 

Weitere Informationen zu PPL-Prozessen finden Sie in den folgenden Ressourcen:

Der Exploit

Auf einer übergeordneten Ebene ist der Exploit ein Cache-Poisoning-Angriff, bei dem ein Angreifer eine DLL zum KnownDlls -Cache hinzufügen kann – einer vertrauenswürdigen Liste von Windows-DLLs. KnownDlls ist nur für WinTcb-Prozesse beschreibbar, was die höchste Form von PPL darstellt... aber ein Fehler in der Implementierung der DefineDosDevice -API ermöglicht es Angreifern, CSRSS, einen WinTcb-Prozess, dazu zu bringen, in ihrem Namen einen Cache-Eintrag zu erstellen. KnownDlls wird vom Windows-Loader als vertrauenswürdig eingestuft, daher werden keine zusätzlichen Sicherheitsüberprüfungen durchgeführt, wenn KnownDlls geladen werden, selbst innerhalb von PPL-Prozessen. Nach dem Vergiften des Caches startet der Angreifer einen geschützten Prozess, der schließlich seine DLL lädt und deren Nutzlast ausführt.

Da dieser Exploit es Angreifern ermöglicht, eine DLL ihrer Wahl in einen PPL-Prozess zu injizieren, können sie jede Aktion mit WinTcb-Berechtigungen ausführen. Microsoft hat angegeben, dass sie kein Interesse an der Behebung dieser Schwachstelle haben. Es ist bestätigt, dass dies unter Windows 10 21H1 Version 10.0.19043.985 funktioniert.

Open Source

Der erste uns bekannte öffentliche Exploit-POC ist das kürzlich veröffentlichte PPLDump, ein Tool, das jeden PPL-Prozess, wie z. B. LSASS im RunAsPPL-Modus, dumpen kann. Wenige Wochen nach der Veröffentlichung von PPLDump erschien Sealighter-TI, das den Exploit-Code von PPLDump wiederverwendete, um Zugriff auf den Threat-Intelligence-ETW-Feed zu gewähren, der normalerweise unter NDA auf Anti-Malware-Unternehmen beschränkt ist. Die schnelle Entwicklung von Sealighter-TI zeigt, wie einfach es ist, den Exploit-Code für das Ausführen eines neuen Payloads zweckzuentfremden.

Da der Exploit-Code nun öffentlich ist, gehen wir davon aus, dass offensive Tools ihn schnell nutzen werden, um Payloads als WinTcb PPL auszuführen. Dies ermöglicht ihnen Folgendes:

  • Unternehmensanmeldeinformationen dumpen, selbst wenn LSASS für die Ausführung als PPL gehärtet ist.
  • Beenden oder lautloses Deaktivieren von PPL-Prozessen wie Sicherheitsprodukten.
  • Führen Sie vollständige Implantate als WinTcb PPL-Prozesse aus. Diese Implantate können von Sicherheits-Produkten im Nutzermodus weder inspiziert noch beendet werden. Microsoft beschränkt Sicherheits-Produkte auf AntiMalware PPL, das weniger privilegiert ist als WinTcb.
  • Code in bestehende PPL-Prozesse injizieren. Stellen Sie sich vor, Sie führen das Beacon-Payload von Cobalt Strike innerhalb von Windows Defender aus.

Schließen der Sicherheitslücke

Da für diese Schwachstelle keine öffentliche Abhilfemaßnahme existiert, veröffentlichen wir ein Tool namens PPLGuard, um sie zu schließen. PPLGuard, das mit Genehmigung auf der PPLDump-Codebasis basiert, nutzt den Exploit, um zunächst eine Hochstufung auf WinTcb PPL durchzuführen, und wendet dann eine DACL an, die das KnownDlls-Objektverzeichnis schreibgeschützt macht. Dies blockiert den Exploit, indem verhindert wird, dass CSRSS einen neuen Eintrag hinzufügt – ein kritischer Schritt in der Exploit-Kette. Diese DACL existiert nur im Arbeitsspeicher und wird daher nach einem Neustart gelöscht. 

GENERIC_WRITE DENY ACE durch PPLGuard zu KnownDlls hinzugefügt

Da PPLGuard die Schwachstelle schließt, auf der der Exploit basiert, werden nachfolgende Ausführungen fehlschlagen.

C:\git\PPLGuard>x64\Release\PPLGuard.exe
[+] KnownDlls-Härtung erfolgreich! :)
C:\git\PPLGuard>x64\Release\PPLGuard.exe
[-] DefineDosDevice fehlgeschlagen mit Fehlercode 5 – Zugriff verweigert.

Das PPLGuard-Proof-of-Concept-Tool finden Sie hier.

Fazit

In diesem Blog haben wir einen Windows-Exploit zur Privilegieneskalation behandelt und ein Open-Source-Tool bereitgestellt, das die ausgenutzte Schwachstelle entschärft. In Teil 2 dieses Blogs werden wir behandeln, wie Sie mit Elastic Security nach dieser Art von Angriffen suchen können. Bleiben Sie dran.

In der Zwischenzeit können Sie unsere neueste Version des Elasticsearch-Dienst auf Elastic Cloud ausprobieren. Nutzen Sie außerdem unsere Quick-Start-Schulung, um einen erfolgreichen Start sicherzustellen.

Update 2021-06-03: Nachdem dieser Blogbeitrag verfasst wurde, hat jemand den PPLDump-Exploit auf .NET portiert, um Cobalt Strike Beacon als WinTCB PPL auszuführen.