Wenn Speicherschutz zum Sicherheitsrisiko wird
In der sich ständig weiterentwickelnden Landschaft der Windows-Sicherheit können bestimmte Funktionen, die für Flexibilität entwickelt wurden, zu zweischneidigen Schwertern werden. Eine solche Funktion ist die PAGE_EXECUTE_READWRITE-Speicherschutzkonstante – eine Berechtigungseinstellung, die Lese-, Schreib- und Ausführungszugriff auf Speicherbereiche gewährt. Während legitime Anwendungen gelegentlich solche Berechtigungen benötigen, stellen sie auch ein attraktives Ziel für Angreifer dar, die bösartigen Code injizieren und ausführen möchten.
Unser Forschungsteam bei Trovent Security hat diesen Angriff kürzlich aus einer anderen, weniger verbreiteten Perspektive untersucht, nämlich unter Verwendung des PowerShell-Moduls NtObjectManager von James Forshaw. Unsere Erkenntnisse haben uns dazu veranlasst, einen innovativen Ansatz zur Ausnutzung von RWX-Speicherbereichen zu entwickeln.
Das RWX-Speicherproblem verstehen
Was macht RWX-Bereiche gefährlich?
Windows definiert zehn verschiedene Speicherschutzkonstanten, die steuern, wie Prozesse mit Speicher interagieren. Unter diesen sticht PAGE_EXECUTE_READWRITE als besonders riskant hervor, da es Folgendes erlaubt:
- Lesen: Zugriff zum Anzeigen der Speicherinhalte.
- Schreiben: Fähigkeit, die Speicherinhalte zu modifizieren.
- Ausführen: Berechtigung, Code aus diesem Speicherbereich auszuführen.
Diese dreifache Bedrohung schafft eine ideale Umgebung für Angreifer. Sie können diese Bereiche lokalisieren, bösartigen Code injizieren und entweder die Ausführung manuell auslösen oder warten, bis der legitime Prozess ihn natürlich ausführt.
Warum Angreifer Prozessinjektion lieben
Prozessinjektion dient Angreifern zwei kritischen Zwecken:
- Persistenz etablieren: Durch Injektion in langlebige Prozesse kann Malware einen Halt im System aufrechterhalten.
- Erkennung umgehen: Das Verstecken von bösartigem Code in legitimen Prozessen macht die Erkennung erheblich schwieriger.
Einführung von tRWXi: Unser Proof-of-Concept-Tool
Um die praktischen Auswirkungen der RWX-Speicherausnutzung zu demonstrieren, haben wir tRWXi entwickelt – ein C#-Tool, das die gesamte Angriffskette zeigt:
Kernfunktionalität
- Aufzählen: Alle zugänglichen Prozesse nach RWX-Speicherbereichen durchsuchen.
- Injizieren: Entdeckte Bereiche mit benutzerdefiniertem Shellcode überschreiben.
- Ausführen: Den injizierten Code bei Bedarf auslösen.
tRWXi entdeckt mehrere RWX-Bereiche über Systemprozesse hinweg und enthüllt potenzielle Injektionsziel
Technische Implementierung
tRWXi nutzt mehrere Windows-APIs, die häufig mit Malware-Entwicklung in Verbindung gebracht werden:
OpenProcess: Handle zum Zielprozess erhalten.
VirtualQueryEx: Speicherbereichsinformationen abfragen.
WriteProcessMemory: Bösartigen Code injizieren.
- CreateRemoteThread: Injizierten Code ausführen.
Erfolgreiche Code-Injektion und -Ausführung durch Starten des Taschenrechners.
Überprüfung des eingeschleusten Shellcodes im Zielspeicherbereich.
Manuelle Ausführung des eingefügten Codes, der den Start des Rechners anzeigt.
Die Stealth-Herausforderung: Moderne Sicherheitslösungen umgehen
Während tRWXi die Schwachstelle effektiv demonstriert, macht seine Verwendung bekannter Malware-APIs es anfällig für die Erkennung durch Antivirensoftware und EDR-Lösungen. Diese Einschränkung führte uns dazu, ausgefeiltere Ansätze zu erforschen.
NtObjectManager: Die versteckte Alternative
Warum NtObjectManager das Spiel verändert
James Forshaws NtObjectManager-Modul bietet mehrere Vorteile für die Sicherheitsforschung:
- Vertrauenswürdige Quelle: Als legitimes Verwaltungstool reduziert es den Verdacht.
- Native Integration: Verwendet Windows-Kernel-Komponenten direkt.
- Reduzierter Fußabdruck: Vermeidet gängige Malware-API-Muster.
Den Object Manager verstehen
Der Windows Object Manager steuert kritische Systemkomponenten:
- Konfigurationsmanager/Registry
- I/O-Manager
- Prozess- und Thread-Manager
- Erweiterte lokale Prozeduraufrufe
- Speicher-/Abschnittsmanager
Durch die direkte Schnittstelle mit diesen Komponenten über das Nt*-API-Präfix (abgeleitet von Windows-Systemaufruf-Namenskonventionen) können wir die gleichen Ergebnisse mit erheblich geringerem Erkennungsrisiko erzielen.
Implementierung mit NtObjectManager
Der PowerShell-Ansatz erfordert nur drei Schlüsselkomponenten:
- NtProcess (Get-NtProcess): Prozessinformationen abrufen.
- NtVirtualMemory (Get-NtVirtualMemory/Write-NtVirtualMemory): Speicherbereiche mit ihren Schutzeinstellungen auflisten.
- NtThread (New-NtThread): Den injizierten Code ausführen.
Prozess-Handle mit NtObjectManager erhalten.
Identifizierung verwundbarer RWX-Bereiche im Zielprozess.
Auswahl eines geeigneten RWX-Bereichs für die Injektion.
Shellcode-Injektion mit NtObjectManagers Write-NtVirtualMemory.
Entwicklung von tRWXix und tRWXiu: Die erweiterte C#-Implementierung
Um eine robustere Lösung bereitzustellen, haben wir tRWXix mit der NtApiDotNet-Bibliothek entwickelt. Diese Implementierung bietet die gleiche Funktionalität bei gleichzeitig niedrigerem Erkennungsprofil.
Wichtige Code-Ausschnitte
Prozessinjektion vereinfacht:
Aufzählungslogik:
tRWXix entdeckt RWX-Bereiche mit der NtApiDotNet-Bibliothek.
Erfolgreiche versteckte Injektion und automatische Ausführung.
Verifizierung der injizierten Nutzlast im Speicher.
Manuelle Ausführung demonstriert Taschenrechner-Start über RWX-Injektion.
Darüber hinaus haben wir dieselbe Funktionalität mithilfe direkter Nt-Systemaufrufe in einem Tool namens tRWXiu implementiert.
Die verwendeten Systemaufrufe sind wie folgt und ihr Assemblercode ist in der Datei Syscalls.cs definiert:
- NtOpenProcess
- NtReadVirtualMemory
- NtWriteVirtualMemory
- NtCreateThreadEx
- NtAllocateVirtualMemory
Defensive Überlegungen: Schutz vor RWX-Ausnutzung
Organisationen sollten Folgendes in Betracht ziehen:
- Speicherschutzrichtlinien: Minimierung der Verwendung von RWX-Berechtigungen in Anwendungen.
- Erweiterte Überwachung: Einsatz von EDR-Lösungen, die Speicherschutzänderungen überwachen.
- Anwendungskontrolle: Implementierung strenger Whitelisting für Prozesserstellung und Thread-Injektion.
Fazit
RWX-Speicherbereiche stellen ein erhebliches Sicherheitsrisiko in Windows-Umgebungen dar. Während unsere Tools die Leichtigkeit der Ausnutzung demonstrieren, heben sie auch die Bedeutung des Verständnisses dieser Techniken für defensive Zwecke hervor. Durch die Erforschung sowohl traditioneller als auch versteckter Injektionsmethoden können Sicherheitsfachleute ihre Umgebungen besser vor diesen ausgeklügelten Angriffen schützen.
Die Entwicklung von tRWXi zu tRWXix und schließlich zu tRWXiu zeigt, wie Angreifer ihre Techniken kontinuierlich anpassen, um der Erkennung zu entgehen. Als Verteidiger müssen wir gleichermaßen anpassungsfähig bleiben und nicht nur die offensichtlichen Angriffsvektoren verstehen, sondern auch die subtilen Variationen, die an unseren Verteidigungen vorbeischlüpfen könnten.
Denken Sie daran: Die Kenntnis offensiver Techniken ist entscheidend für den Aufbau effektiver Verteidigungen. Verwenden Sie diese Informationen verantwortungsvoll und immer innerhalb rechtlicher und ethischer Grenzen.
Sie suchen ein System zur Angriffserkennung bzw. eine Managed Detection & Response Lösung? Oder möchten Sie wissen, wie die Context Engine von Trovent funktioniert? Kontaktieren Sie uns! Wir stehen gerne für ein Gespräch und für eine Demonstration unserer Lösungen bereit.

Sergey Makarov gehört seit 2020 zum Trovent-Team. Als Senior Security Specialist und Penetration Tester sorgt er für sichere IT-Landschaften bei unseren Kunden. Als zertifizierter Red Team Operator/Lead weiß er genau, wie Cyberangriffe ablaufen und wie sich Unternehmen davor schützen können. Darüber hinaus ist Sergey ein begeisterter Softwareentwickler. Die von ihm programmierten Tools – darunter YAETWi, tRWXi, tWATa und tKMD – sind als Open-Source-Projekte auf GitHub verfügbar.