- Erfahrungsbericht über die Entwicklung von defendnot, einem Tool, das Windows Defender durch direkte Nutzung der Windows Security Center (WSC) Service API deaktiviert
- Das Projekt begann im Prozess, die technischen Grenzen und rechtlichen Probleme des früheren Projekts no-defender zu überwinden
- Reverse Engineering und Debugging wurden trotz zahlreicher Hindernisse wie einer besonderen Umgebung (MacBook arm64, Remote-Debugging, hohe Latenz) durchgeführt
- Die Umgehung der Defender-Registrierung und die Mechanismen zur Prozessvalidierung wurden analysiert und nach vielen Fehlschlägen und Versuchen so verbessert, dass alles stabil funktionierte
- Am Ende wurde sogar eine Autorun-Funktion fertig implementiert, während zugleich offen geschildert wird, wie belastend der Projektverlauf war
Einführung
- Erfahrungsbericht über den Implementierungsweg des Tools defendnot, das Windows Defender deaktiviert
- Statt einer Erklärung der wichtigsten technischen Details liegt der Schwerpunkt auf den Problemen in der Praxis und den mühsamen Fehlversuchen
- Eine formale Dokumentation und technische Erklärung sollen später separat veröffentlicht werden
Rückblick auf vor einem Jahr
- Vor etwa einem Jahr wurde ein Projekt namens no-defender veröffentlicht, das die Struktur nutzte, bei der Windows Defender über die WSC-API deaktiviert wird
- Das Projekt bezog sich auf Third-Party-Code eines Antivirus-Anbieters und täuschte das System so, als wäre ein anderes Antivirus-Programm registriert
- Nach der Veröffentlichung erhielt es große Aufmerksamkeit und etwa 1.500 Stars, doch wegen einer DMCA-Löschaufforderung des betreffenden Antivirus-Unternehmens wurde entschieden, den Quellcode zu entfernen und das Projekt einzustellen
Anlass für den Projektbeginn
- Zum Zeitpunkt des Verfassens dieses Textes wird in einem Airbnb in Seoul gewohnt
- Die Hauptentwicklungsumgebung ist ein M4Pro MacBook, und es wurde kein separates Gerät für notwendiges x86-Reverse-Engineering mitgenommen
- Wegen eines CTF-Wettbewerbs und Reiseplans musste ohne x86-Gerät gearbeitet werden
- Parallel zur Prüfung, ob das no-defender-Projekt auf eine „saubere“ Weise implementiert werden kann, wurde untersucht, ob eine eigenständige Implementierung unabhängig von AV möglich ist
Erste Untersuchung (Tag 1)
- Mit Hilfe eines Freundes wurde ein WSC-Binary beschafft, und es wurde versucht, die WSC-Registrierung in einer dem früheren Projekt ähnlichen Struktur neu zu implementieren
- Die Implementierung erfolgte über die COM API von WSC, jedoch trat ein Access Denied-Fehler auf
- Als Ursache wurde ermittelt, dass WSC bei API-aufrufenden Prozessen eine Signaturprüfung und Authentifizierung durchführt
- Als versucht wurde, die Registrierung durch Injektion eines Moduls in einen AV-Prozess vorzunehmen, wurde der AV-Eintrag erfolgreich registriert
Austausch des AV-Binarys und weitere Experimente (Tag 1)
- Es wurde versucht, das Tool über signierte Systemprozesse (cmd.exe usw.) auszuführen, doch dies scheiterte an der PPL-Validierung (Protected Process Light)
- Für die Analyse wurde eine detaillierte Disassemblierung und Nachverfolgung in Aussicht gestellt und die Arbeit vorübergehend unterbrochen
Aufbau der Umgebung (Tag 2)
- Aufgrund der Grenzen der arm64-MacBook-Umgebung war x86-Windows-Debugging äußerst schwierig
- Über die Fernnutzung des PCs eines in den USA lebenden Freundes (Parsec, AnyDesk usw.) wurden Debugging und Experimente unter hoher Latenz durchgeführt
- Im komplizierten Wechselspiel aus Code-Builds und VM-Debugging wurden Verlangsamung und Verwirrung erlebt
Debugging des WSC-Dienstes (Tag 2)
- Es wurde bestätigt, dass der WSC-Dienst als von svchost ausgeführte DLL aufgebaut ist
- Zur Aufhebung des PPL-Schutzes wurde mit einem speziellen Treiber ein Bypass angewendet, und mit dem Debugger wurde der Funktionsaufruf bestätigt
- Es wurde festgestellt, dass innerhalb des Dienstes eine Prüfung des WinDefend-SID-Tokens stattfindet
- Daraus wurde die Theorie entwickelt, das Authentifizierungsverfahren durch das Nachahmen eines Prozesses mit WinDefend-SID umgehen zu können
Nachahmung der WinDefend-SID (Tag 2)
- Es wurde zusätzlich die Token-Struktur und Funktionsweise von Windows gelernt
- Nach Implementierung und Ausführung von Code zur Nachahmung der WinDefend-SID gaben zwar alle COM-Aufrufe SUCCESS zurück, tatsächlich wurde aber kein AV-Eintrag registriert
Rekonstruktion des Validierungsalgorithmus (Tag 3)
- Es wurde vorsichtig erneut analysiert, ob die SID-Prüfung im AV-Binary wirklich bestanden wird
- Falls die SID-Prüfung fehlschlägt, prüft der Dienst zusätzlich erhöhten Berechtigungsstatus, die Binärsignatur und das DllCharacteristics-Flag (ForceIntegrity) der PE-Datei
- Die Funktion, die diese Struktur ausführt, wurde nachgebildet und auf core-Binaries im System experimentell angewendet
Nutzung des Taskmgr-Prozesses (Tag 3)
- Es wurde mit Taskmgr.exe als Zielprozess erneut getestet, doch wegen eines Fehlers bei der Namensübergabe und eines IPC-Bugs lehnte WSC die Anfrage ab
- Nach Verbesserung der Dateipfad-Ableitung und der Methode zur Übergabe des AV-Namens wurde ein normaler Betrieb bestätigt
Aufräumen des Codes (Tag 3)
- Die Funktionen wurden bereinigt und die Implementierung einer Autorun-Funktion versucht
- Bei der Verwaltung des automatischen Starts kam es zu sporadischen Fehlschlägen, weshalb Code und Umgebung wiederholt überprüft wurden, um die Ursache zu finden
Implementierung des automatischen Starts (Tag 4)
- Es wurde festgestellt, dass in den Optionen des Aufgabenplaners (Task Scheduler) das Kontrollkästchen gesetzt war, das verhindert, dass der Task ausgeführt wird, wenn das Notebook nicht an das Stromnetz angeschlossen ist
- Nach Deaktivierung dieser Einstellung funktionierte der automatische Start normal
- Abschließend wurden Code-Cleanup und Tests durchgeführt
Fazit
- Reverse Engineering unter eingeschränkten und unbequemen Bedingungen war psychisch und physisch eine sehr harte Erfahrung
- Eine detailliertere Dokumentation zur WSC-Implementierung soll später separat veröffentlicht werden
Danksagung
- Pindos: Ein Freund, der nachts seinen PC zur Verfügung stellte, beim Debugging half und das Zimmer warm hielt
- MrBruh: Ein Kollege, der den Anstoß gab, das Projekt zu erkunden, und Feedback zu Ideen lieferte
- Dank auch an die Bekannten, die während des Projekts in Kontakt blieben und Rückhalt gaben
- Es wird gestanden, dass Kimchi geliebt wird
- Dank auch an den Künstler, der Graffiti an unserer Wand hinterlassen hat
1 Kommentare
Hacker-News-Kommentare
C:\ProgramData\Microsoft\Windows Defenderumzubenennen und an seiner Stelle eine leere Datei anzulegennetcat.exebenutzen darf oder nicht