Catena di infezione di Qilin EDR Killer
Detection stack
- AIDR
- Alert
- ETL
- Query
Riepilogo
Il rapporto copre un caricatore a più fasi consegnato come msimg32.dll trojanizzata che può disabilitare o rimuovere oltre 300 prodotti di rilevamento e risposta degli endpoint. Il caricatore combina avanzati abusi SEH/VEH, tecniche di driver del kernel e breakpoint hardware per eludere i hook in modalità utente e uccidere i processi di sicurezza. L’attività è collegata all’ecosistema di ransomware Qilin e viene fornita con un driver personalizzato derivato dagli strumenti ThrottleStop. Il risultato finale è un payload dedicato per uccidere i EDR che termina i servizi di sicurezza e può riattivare il controllo dell’attaccante ripristinando o neutralizzando la logica del callback dell’integrità del codice.
Indagine
I ricercatori hanno decodificato all’indietro la DLL malevola, il suo caricatore PE e due driver ausiliari, rwdrv.sys e hlpdrv.sys. L’analisi descrive come il caricatore costruisce una tabella delle politiche degli slot syscall, altera il dispatcher delle eccezioni ed esegue l’hooking dell’IAT per reindirizzare l’esecuzione. Utilizza quindi la gestione delle eccezioni vettoriali per organizzare e avviare un payload basato su shell32. Lo strato del driver espone l’accesso alla memoria fisica grezza ed è sfruttato per rimuovere o disabilitare i callback del kernel correlati a EDR, nonché per terminare i processi protetti tramite un’interfaccia IOCTL personalizzata.
Mitigazione
Utilizzare difese stratificate ed evitare la dipendenza da un singolo controllo EDR. Monitorare per attività di caricamento driver anomale, utilizzo sospetto di IOCTL di memoria fisica e cambiamenti inaspettati nelle strutture dei callback del kernel. Prevenire il side-loading delle DLL dove gli attaccanti sostituiscono le librerie di sistema legittime, e aggiungere copertura per l’evasione stile breakpoint hardware. Mantenere aggiornate le firme di rete e degli endpoint, comprese le regole degli strumenti come ClamAV e Snort.
Risposta
Se rilevato, isolare l’endpoint, fermare il processo malevolo e scaricare eventuali driver sospetti. Catturare immagini di memoria completa per la forense, controllare specificamente per rwdrv.sys e hlpdrv.sys, e convalidare l’integrità dei callback del kernel e della telemetria di sicurezza correlata. Distribuire rilevazioni aggiornate per il nome del file msimg32.dll, eventi di caricamento del driver e il pattern IOCTL 0x2222008. Completare una revisione dell’integrità del sistema e recuperare dai backup noti e affidabili se non si può stabilire nuovamente la fiducia nell’host.
"graph TB %% Class definitions classDef technique fill:#ffcc99 %% Node definitions tech_initial_appinit["<b>Tecnica</b> – <b>T1546.010 AppInit DLLs</b>: Caricamento illecito della msimg32.dll malevola<br/><b>Descrizione</b>: Utilizzare il valore di registro AppInit_DLLs per far caricare una DLL malevola in ogni processo in modalità utente che carica User32.dll."] class tech_initial_appinit technique tech_obfuscation["<b>Tecnica</b> – <b>T1027 File o informazioni offuscati</b>: Payload crittografato con trucchi SEH/VEH<br/><b>Descrizione</b>: Crittografare o nascondere in altro modo il codice malevolo e utilizzare trucchi di Gestione delle Eccezioni Strutturate o Gestione delle Eccezioni Vettoriali per eludere l’analisi statica."] class tech_obfuscation technique tech_dll_injection["<b>Tecnica</b> – <b>T1055.001 Injection di DLL</b>: IAT hook di ExitProcess<br/><b>Descrizione</b>: Iniettare una DLL malevola in un processo target e modificare la sua Tabella degli Indirizzi di Importazione per dirottare le chiamate a ExitProcess."] class tech_dll_injection technique tech_hijack_flow["<b>Tecnica</b> – <b>T1574 Dirottamento del Flusso di Esecuzione</b>: Gestori VEH/SEH e breakpoint hardware<br/><b>Descrizione</b>: Sostituire o aggiungere gestori di eccezioni e impostare breakpoint hardware per reindirizzare l’esecuzione a codice malevolo."] class tech_hijack_flow technique tech_reflective_load["<b>Tecnica</b> – <b>T1620 Caricamento Riflessivo del Codice</b>: Decrittazione e esecuzione PE in memoria<br/><b>Descrizione</b>: Decrittare un Eseguibile Portatile in memoria ed eseguirlo senza scrivere su disco."] class tech_reflective_load technique tech_elev_control["<b>Tecnica</b> – <b>T1548 Abuso del Meccanismo di Controllo dell’Elevazione</b>: Caricamento del driver rwdrv.sys per R/W della memoria fisica<br/><b>Descrizione</b>: Installare un driver firmato o vulnerabile per ottenere accesso di lettura/scrittura alla memoria fisica."] class tech_elev_control technique tech_priv_esc["<b>Tecnica</b> – <b>T1068 Sfruttamento per Escalation dei Privilegi</b>: Manipolazione degli oggetti del kernel e disabilitazione dei callback EDR<br/><b>Descrizione</b>: Utilizzare il driver caricato per alterare le strutture del kernel e neutralizzare gli hook di rilevamento e risposta dell’endpoint."] class tech_priv_esc technique tech_persistence_appinit["<b>Tecnica</b> – <b>T1546.010 AppInit DLLs (Persistenza)</b>: Mantenere lo stato EDR disabilitato<br/><b>Descrizione</b>: Mantenere registrata la DLL malevola tramite AppInit_DLLs per persistere attraverso i riavvii mentre l’EDR rimane disabilitato."] class tech_persistence_appinit technique tech_sandbox_evasion["<b>Tecnica</b> – <b>T1497.002 Evasione della Virtualizzazione/Sandbox</b>: Controllo delle impostazioni locali e rilevamento dei breakpoint<br/><b>Descrizione</b>: Rilevare ambienti di analisi controllando le impostazioni locali del sistema e esaminando i breakpoint del debugger."] class tech_sandbox_evasion technique %% Connessioni che mostrano il flusso dell’attacco 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 "
Flusso di attacco
Rilevamenti
Possibile tentativo di side-loading della libreria dinamica Msimg32 (tramite caricamento dell’immagine)
Visualizza
IOC (HashSha256) per rilevare: Catena di Infezione Qilin EDR Killer
Visualizza
IOC (HashSha1) per rilevare: Catena di Infezione Qilin EDR Killer
Visualizza
IOC (HashMd5) per rilevare: Catena di Infezione Qilin EDR Killer
Visualizza
Rilevamento dei driver EDR Killer caricati negli attacchi ransomware Qilin [Creazione di processi Windows]
Visualizza
Rilevamento delle tecniche di evasione EDR tramite Nt* Syscall [Sistema Windows]
Visualizza
Rilevamento di msimg32.dll malevola utilizzata negli attacchi ransomware Qilin [Caricamento dell’immagine di Windows]
Visualizza
Esecuzione della simulazione
Prerequisito: Il controllo pre-volo della telemetria e della baseline deve essere completato con successo.
Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrativa DEVONO riflettere direttamente i TTP identificati e mirare a generare la telemetria esatta prevista dalla logica di rilevamento.
-
Narrativa e Comandi dell’Attacco:
Un attaccante crea un binario nativo C minimale che carica esplicitamente ntdll.dll e chiama NtTraceEvent tramite il suo nome esportato. Il binario è compilato sull’host di destinazione utilizzando gli strumenti di compilazione Visual C++, quindi eseguito. Poiché la chiamata è effettuata attraverso la superficie API regolare di Windows, l’evento di creazione del processo registra l’immagine (
ntdll.dll) e il campo CallTrace contiene la stringa “NtTraceEvent”, soddisfando la condizione di Sigma. L’attaccante quindi elimina il binario per ridurre i reperti forensi. -
Script di Test di Regressione:
# --------------------------------------------------------- # Fase 1 – Creare una sorgente C temporanea che chiama NtTraceEvent # --------------------------------------------------------- $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; // Chiamata minima – gli argomenti sono in gran parte ignorati per questa demo NtTraceEvent(NULL, 0, NULL, 0); return 0; } "@ $tmpPath = "$env:TEMPNtTraceDemo.c" $exePath = "$env:TEMPNtTraceDemo.exe" $src | Set-Content -Path $tmpPath -Encoding ASCII # --------------------------------------------------------- # Fase 2 – Compilare usando cl.exe (presuppone strumenti di compilazione Visual C++ installati) # --------------------------------------------------------- $vcVars = "$env:ProgramFiles(x86)Microsoft Visual Studio2019BuildToolsVCAuxiliaryBuildvcvars64.bat" if (Test-Path $vcVars) { & cmd /c "`"$vcVars`" && cl /nologo /O2 /Fe:`"$exePath`" `"$tmpPath`"" } else { Write-Error "Strumenti di compilazione Visual C++ non trovati. Installarli prima di eseguire questo script." exit 1 } # --------------------------------------------------------- # Fase 3 – Eseguire il binario (questo dovrebbe attivare la regola) # --------------------------------------------------------- & $exePath # --------------------------------------------------------- # Fase 4 – Pulire i reperti # --------------------------------------------------------- Remove-Item -Force $tmpPath, $exePath -
Comandi di Pulizia:
# Assicurarsi che eventuali file residui siano rimossi (eseguire come admin) Get-ChildItem "$env:TEMPNtTraceDemo.*" -ErrorAction SilentlyContinue | Remove-Item -Force