Qilin EDR-Killer-Infektionskette
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Der Bericht behandelt einen mehrstufigen Loader, der als trojanisierte msimg32.dll geliefert wird, um über 300 Endpoint-Detection-and-Response-Produkte zu deaktivieren oder zu entfernen. Der Loader kombiniert fortgeschrittenen SEH/VEH-Missbrauch, Kernel-Treiber-Techniken und Hardware-Breakpoints, um User-Mode-Hooks zu umgehen und Sicherheitsprozesse zu beenden. Die Aktivität wird mit dem Qilin-Ransomware-Ökosystem in Verbindung gebracht und wird mit einem benutzerdefinierten Treiber geliefert, der aus dem ThrottleStop-Tooling abgeleitet ist. Das Endergebnis ist eine dedizierte EDR-Killer-Nutzlast, die Sicherheitsdienste beendet und die Kontrolle des Angreifers wiederherstellen kann, indem sie die Callback-Logik zur Codeintegrität wiederherstellt oder neutralisiert.
Untersuchung
Forscher haben die bösartige DLL, ihren PE-Loader und zwei Hilfstreiber, rwdrv.sys und hlpdrv.sys, rückentwickelt. Die Analyse beschreibt, wie der Loader eine Syscall-Slot-Policy-Tabelle aufbaut, den Ausnahme-Dispatcher manipuliert und IAT-Hooking einsetzt, um die Ausführung umzuleiten. Anschließend wird ein payload auf Basis von vectored exception handling inszeniert und gestartet. Die Treiberschicht bietet Zugriff auf den physischen Speicher und wird genutzt, um EDR-bezogene Kernel-Callbacks zu entfernen oder zu deaktivieren sowie geschützte Prozesse über eine benutzerdefinierte IOCTL-Schnittstelle zu beenden.
Abschwächung
Halten Sie Verteidigungen auf mehreren Ebenen bereit und vermeiden Sie die Abhängigkeit von einer einzigen EDR-Kontrolle. Überwachen Sie verdächtige Treiberladeaktivitäten, ungewöhnliche physische Speicher-IOCTL-Nutzung und unerwartete Änderungen an Kernel-Callback-Strukturen. Verhindern Sie DLL-Side-Loading, bei dem Angreifer legitime Systembibliotheken ersetzen, und erweitern Sie die Abdeckung für Evasion-Techniken im Hardware-Breakpoint-Stil. Halten Sie Netzwerk- und Endpoint-Signaturen aktuell, einschließlich Regelwerke von Tools wie ClamAV und Snort.
Reaktion
Bei Erkennung isolieren Sie den Endpunkt, stoppen den bösartigen Prozess und entladen verdächtige Treiber. Erfassen Sie vollständige Speicherabbilder für forensische Untersuchungen, überprüfen Sie explizit rwdrv.sys und hlpdrv.sys und validieren die Integrität der Kernel-Callbacks sowie der zugehörigen Sicherheits-Telemetrie. Setzen Sie aktuelle Erkennungen für den Dateinamen msimg32.dll, Treiberladen-Ereignisse und das Muster IOCTL 0x2222008 ein. Führen Sie eine Überprüfung der Systemintegrität durch und stellen Sie gegebenenfalls von vertrauenswürdigen Sicherungskopien wieder her, wenn das Vertrauen in das System nicht wiederhergestellt werden kann.
"graph TB %% Class definitions classDef technique fill:#ffcc99 %% Node definitions tech_initial_appinit["<b>Technik</b> – <b>T1546.010 AppInit DLLs</b>: Schadhaften msimg32.dll sideloaden<br/><b>Beschreibung</b>: Verwenden Sie den AppInit_DLLs-Registrierungswert, um eine schadhafte DLL in jeden Benutzermodus-Prozess zu laden, der User32.dll lädt."] class tech_initial_appinit technique tech_obfuscation["<b>Technik</b> – <b>T1027 Verschleierte Dateien oder Informationen</b>: Verschlüsseltes Payload mit SEH/VEH-Tricks<br/><b>Beschreibung</b>: Verschlüsseln oder verbergen Sie bösartigen Code und setzen Sie strukturelles Ausnahme-Handling oder vectored exception handling ein, um statische Analyse zu vermeiden."] class tech_obfuscation technique tech_dll_injection["<b>Technik</b> – <b>T1055.001 DLL-Injektion</b>: IAT-Hook von ExitProcess<br/><b>Beschreibung</b>: Injizieren Sie eine schadhafte DLL in einen Zielprozess und ändern Sie dessen Import-Adresse-Tabelle, um ExitProcess-Aufrufe zu kapern."] class tech_dll_injection technique tech_hijack_flow["<b>Technik</b> – <b>T1574 Ausführungsfluss kapern</b>: VEH/SEH-Handler und Hardware-Breakpoints<br/><b>Beschreibung</b>: Ersetzen oder fügen Sie Ausnahme-Handler hinzu und setzen Sie Hardware-Breakpoints, um die Ausführung auf bösartigen Code umzulenken."] class tech_hijack_flow technique tech_reflective_load["<b>Technik</b> – <b>T1620 Reflexives Code-Loading</b>: Entschlüsselung und Ausführung von PE im Speicher<br/><b>Beschreibung</b>: Entschlüsseln Sie eine Portable Executable im Speicher und führen Sie sie aus, ohne sie auf die Festplatte zu schreiben."] class tech_reflective_load technique tech_elev_control["<b>Technik</b> – <b>T1548 Missbrauch der Elevation Control Mechanism</b>: rwdrv.sys-Treiber für physischen Speicher R/W laden<br/><b>Beschreibung</b>: Installieren Sie einen signierten oder anfälligen Treiber, um Lese-/Schreibzugriff auf physischen Speicher zu erhalten."] class tech_elev_control technique tech_priv_esc["<b>Technik</b> – <b>T1068 Ausnutzung zur Privilegieneskalation</b>: Kernel-Objekte manipulieren und EDR-Callbacks deaktivieren<br/><b>Beschreibung</b>: Verwenden Sie den geladenen Treiber, um Kernel-Strukturen zu ändern und Endpoint Detection and Response-Hooks zu neutralisieren."] class tech_priv_esc technique tech_persistence_appinit["<b>Technik</b> – <b>T1546.010 AppInit DLLs (Persistenz)</b>: EDR-Zustand bleibt deaktiviert<br/><b>Beschreibung</b>: Halten Sie die schadhaft registrierte DLL über AppInit_DLLs aufrecht, um über Neustarts hinweg zu bestehen, während EDR deaktiviert bleibt."] class tech_persistence_appinit technique tech_sandbox_evasion["<b>Technik</b> – <b>T1497.002 Virtualisierungs-/Sandkasten-Ausweichung</b>: Locale-Check und Breakpoint-Erkennung<br/><b>Beschreibung</b>: Analysierende Umgebungen durch Überprüfung der Systemeinstellungen und Prüfung auf Debugger-Breakpoints erkennen."] class tech_sandbox_evasion technique %% Connections showing attack flow tech_initial_appinit –>|leads_to| tech_obfuscation tech_obfuscation –>|leads_to| tech_dll_injection tech_dll_injection –>|leads_to| tech_hijack_flow tech_hijack_flow –>|leads_to| tech_reflective_load tech_reflective_load –>|leads_to| tech_elev_control tech_elev_control –>|leads_to| tech_priv_esc tech_priv_esc –>|leads_to| tech_persistence_appinit tech_persistence_appinit –>|leads_to| tech_sandbox_evasion "
Angriffsablauf
Erkennungen
Möglicher Versuch des Side-Loadings der Msimg32-DLL-Bibliothek (via image_load)
Ansehen
IOCs (HashSha256) zur Erkennung der Qilin EDR Killer Infektionskette
Ansehen
IOCs (HashSha1) zur Erkennung der Qilin EDR Killer Infektionskette
Ansehen
IOCs (HashMd5) zur Erkennung der Qilin EDR Killer Infektionskette
Ansehen
Erkennung von EDR Killer-Treibern, die in Qilin-Ransomware-Angriffen geladen werden [Windows Prozess-Erstellung]
Ansehen
Erkennung von EDR-Ausweichtechniken über Nt* Syscalls [Windows-System]
Ansehen
Erkennung von bösartigem msimg32.dll, verwendet in Qilin-Ransomware-Angriffen [Windows Image Load]
Ansehen
Ausführung der Simulation
Voraussetzung: Der Telemetrie- und Basisstart-Check muss bestanden sein.
Begründung: In diesem Abschnitt wird die präzise Ausführung der Angreifertechnik (TTP) beschrieben, die vorgesehen ist, um die Erkennungsregel auszulösen. Die Befehle und das Narrativ MÜSSEN direkt die identifizierten TTPs widerspiegeln und darauf abzielen, die genaue Telemetrie zu generieren, die durch die Erkennungslogik erwartet wird.
-
Angriffs-Narration & Befehle:
Ein Angreifer erstellt eine minimale native C-Binärdatei, die explizit ntdll.dll lädt und NtTraceEvent über seinen exportierten Namen aufruft. Die Binärdatei wird auf dem Zielhost mit den Visual C++ Build Tools kompiliert und dann ausgeführt. Da der Aufruf über die reguläre Windows-API-Oberfläche erfolgt, zeichnet das Ereignis der Prozesserstellung das Bild (
ntdll.dll) auf und das Feld CallTrace enthält den String „NtTraceEvent“, was die Sigma-Bedingung erfüllt. Der Angreifer löscht anschließend die Binärdatei, um forensische Artefakte zu reduzieren. -
Regressionstest-Skript:
# --------------------------------------------------------- # Schritt 1 – Erstellen Sie eine temporäre C-Quelle, die NtTraceEvent aufruft # --------------------------------------------------------- $src = @" #include <windows.h> typedef NTSTATUS (NTAPI *pNtTraceEvent)(HANDLE, ULONG, PVOID, ULONG); int main() { HMODULE hNtdll = LoadLibraryA("ntdll.dll"); if (!hNtdll) return 1; pNtTraceEvent NtTraceEvent = (pNtTraceEvent)GetProcAddress(hNtdll, "NtTraceEvent"); if (!NtTraceEvent) return 1; // Minimaler Aufruf – Argumente werden für dieses Demo größtenteils ignoriert NtTraceEvent(NULL, 0, NULL, 0); return 0; } "@ $tmpPath = "$env:TEMPNtTraceDemo.c" $exePath = "$env:TEMPNtTraceDemo.exe" $src | Set-Content -Path $tmpPath -Encoding ASCII # --------------------------------------------------------- # Schritt 2 – Kompilieren mit cl.exe (setzt Visual C++ Build Tools voraus) # --------------------------------------------------------- $vcVars = "$env:ProgramFiles(x86)Microsoft Visual Studio2019BuildToolsVCAuxiliaryBuildvcvars64.bat" if (Test-Path $vcVars) { & cmd /c "`"$vcVars`" && cl /nologo /O2 /Fe:`"$exePath`" `"$tmpPath`"" } else { Write-Error "Visual C++ Build Tools nicht gefunden. Installieren Sie diese vor dem Ausführen dieses Skripts." exit 1 } # --------------------------------------------------------- # Schritt 3 – Führen Sie die Binärdatei aus (dies sollte die Regel auslösen) # --------------------------------------------------------- & $exePath # --------------------------------------------------------- # Schritt 4 – Bereinigen von Artefakten # --------------------------------------------------------- Remove-Item -Force $tmpPath, $exePath -
Bereinigungsbefehle:
# Stellen Sie sicher, dass verbleibende Dateien entfernt werden (als Admin ausführen) Get-ChildItem "$env:TEMPNtTraceDemo.*" -ErrorAction SilentlyContinue | Remove-Item -Force