
CVE-2023-38831 - WinRAR
Questo repository contiene una logica di rilevamento per CVE-2023-38831 (spoofing di file ZIP WinRAR / exploit a doppia estensione) con query grezze/blocchi di codice e nomi di provider ETW specifici + ID evento. Una versione vulnerabile di WinRAR (< 6.23) sul sistema di destinazione
CVE-2023-38831 viene sfruttato quando:
L'utente apre un ZIP dannoso in WinRAR
L'archivio contiene:
● Un file esca (ad es., invoice.pdf )
● Una directory con lo stesso nome (ad es., invoice.pdf \ )
● All'interno della directory "due" file con lo stesso nome ma nomi leggermente diversi (per un file spazio e che termina con qualsiasi estensione, ad esempio se il 1° file è "invoice.pdf " allora il 2° potrebbe essere qualsiasi script o eseguibile come "invoice.pdf .cmd")
WinRAR esegue lo script o l'eseguibile invece di aprire il documento ("PDF" in questo caso)
Questa esecuzione viene attivata chiamando la funzione ShellExecuteExW per eseguire il file, passando shExecInfo (ShellExecute tramite Explorer)
WinRAR genera un processo figlio (cmd, powershell, mshta, wscript, exe come qualsiasi cosa presente nella cartella)
L'esecuzione avviene spesso da Temp / AppData / percorso di estrazione
Riepilogo del flusso L'utente apre l'archivio
↓
WinRAR mostra il file esca
↓
L'utente fa doppio clic sul documento
↓
WinRAR estrae la directory con lo stesso nome
↓
Eseguibile scritto in *.pdf\*.pdf .exe
↓
ShellExecute tramite Explorer
↓
ImageLoad dell'eseguibile
↓
Esecuzione del payload
Perché questo flusso è importante per il rilevamento
● Nessun utilizzo di macro
● Nessuna dipendenza dalla creazione di processi
● L'exploit si basa sul mascheramento del filesystem
● Segnale ad alta confidenza e basso rumore
Dettagli tecnici importanti
I file vengono scritti in una struttura speciale
Come avere due oggetti (File/Dir) con lo stesso nome e quando hai un file e una directory con lo stesso nome, in un file di archivio e vuoi aprire il file temporaneamente, facendo doppio clic su di esso (file di destinazione) nell'archivio aperto, WinRAR estrae questo file per te, estrae anche tutti i file che hanno lo stesso nome del file di destinazione. Tutti vengono scritti in una directory temporanea nel percorso %tmp%.
| Nome file/dir | Percorso di estrazione |
| ------------------------------------------------------ | --------------------------------------------------------------------------------- |
| CLASSIFIED_DOCUMENTS.txt <– file di destinazione su cui si è cliccato | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
| CLASSIFIED_DOCUMENTS.txt .cmd <– il file nella directory | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
Se ci sono due file in una directory temporanea (di decompressione) con lo stesso nome ma dimensioni diverse (ad esempio, 20k e 12k) e apri l'archivio e apri il primo file, 1.txt, che è di 20k byte, WinRAR ti chiederà di sostituire un file con il secondo file, 1.txt, che è di 10K. Se fai clic su "Sì", si aprirà solo il secondo file, 1.txt. Questa condizione può essere aggiunta per l'esclusione.
Punto importante per la logica di rilevamento
Esecuzione del processo avviata da un percorso di estrazione ZIP o directory temporanea, con un'estensione fuorviante o una cartella mascherata da file
Quando WinRAR rilascia un file per la decompressione nella directory temporanea, deve contenere due file con lo stesso nome ma nomi leggermente diversi (spazio e che termina con qualsiasi estensione), come nome del file principale con uno “ ” (CLASSIFIED_DOCUMENTS.pdf ) alla fine del suo nome e poi un “.cmd” (CLASSIFIED_DOCUMENTS.pdf .cmd).
Quando WinRAR carica una DLL e chiama la funzione ShellExecuteExA, il parametro "pExecInfo" ha un percorso con uno spazio e che termina con qualsiasi estensione, come "CLASSIFIED_DOCUMENTS.pdf .cmd."
Provider ETW e filosofia di rilevamento (solo ETW) Provider ETW
| Scopo | Provider ETW |
| -------------------------- | ------------------------------------- |
| Creazione processo | `Microsoft-Windows-Kernel-Process` |
| Visibilità riga di comando | `Microsoft-Windows-Security-Auditing` |
| Operazioni file (opzionale) | `Microsoft-Windows-Kernel-File` |
Il rilevamento si baserà su (se non è presente ProcessStart, CreateProcess o logica genitore/figlio stile EDR):
● ETW del file system
● ETW di Shell/Explorer
● ETW di caricamento immagine (opzionale, non create)
● ETW della riga di comando (opzionale)
Provider ETW principali
| Scopo | Provider ETW |
| -------------------------- | ------------------------------------- |
| Creazione directory | `Microsoft-Windows-Kernel-File` |
| Creazione EXE | `Microsoft-Windows-Kernel-File` |
| Esecuzione shell | `Microsoft.Windows.ShellExecute` |
| Caricamento immagine | `Microsoft-Windows-Kernel-Image` |
| Explorer | `Microsoft-Windows-Explorer` |
| Shell | `Microsoft-Windows-Shell-Core` |
Logica di rilevamento grezza
Ad alto livello, la logica rileva:
● WinRAR.exe che avvia scritture di file
● Creazione sia di una directory che di un file con lo stesso nome base
● Estensione eseguibile che si concretizza dopo ridenominazione o sovrascrittura
● Sequenza che si verifica in un intervallo di tempo ristretto (<2s)
Questo modello è estremamente raro nei flussi di lavoro benigni ma centrale nel percorso di esecuzione dell'exploit.
● La regola evita intenzionalmente:
● Ispezione della riga di comando
● Tracciamento dei processi figlio
● Hashing completo dei file
Il rilevamento della logica principale è menzionato di seguito, insieme a un livello di confidenza e una breve giustificazione.
1. Caricamento immagine (conferma esecuzione)
Motivazione: conferma l'esecuzione effettiva senza telemetria di creazione processo.
Logica di rilevamento:
Caricatore Windows:
● Mappa Invoice.pdf .exe in memoria
Segnale ETW:
● ImageLoad
● Percorso immagine:
● *.pdf\*.pdf .exe
2. Regola di rilevamento (API ShellExecuteExA) - Logica della regola ad alta fedeltà
Regola di rilevamento generica basata sulla seguente telemetria:
● Eventi di creazione file da parte di WinRar.exe
● Eventi di caricamento immagine per WinRar.exe che carica una DLL Shell32.dll e inizia a utilizzare un'API (ShellExecuteExA|W) con i parametri.
● Questa funzione riceve un argomento chiamato SHELLEXECUTEINFO, che è una struttura. Come vedi, questa struttura ha molti campi, ma due sono importanti per noi: lpVerb e lpFile.
● lpVerb - Dice che se imposti LpVerb a NULL, ShellExecuteExA|W usa il verbo predefinito se disponibile, altrimenti esegue il verbo "open". E il verbo "open" apre o esegue il file.
● lpFile - lpFile è il percorso del file che viene utilizzato in ShellExecuteExA per eseguire il verbo e ora si può notare il carattere spazio (0x20) alla fine del percorso del file.
Nota:
1- Shell32.dll: è qui che viene definita ShellExecuteExA. Contiene la logica per analizzare la struttura SHELLEXECUTEINFO e determinare come gestire la richiesta (ad esempio, aprire un documento, eseguire un EXE o mostrare una finestra delle proprietà)
2- In questo modo funziona la vulnerabilità: la vulnerabilità è qui. WinRAR ha rimosso lo spazio dal nome del file al momento della scrittura ma ha dimenticato di applicare questa modifica all'elenco di estrazione. Quindi il nome del file di destinazione non è cambiato e lo spazio è ancora nel nome del file. Si può anche dire che ShellExecuteExA apre il file “CLASSIFIED_DOCUMENTS.pdf .cmd”. Il “.cmd” non ha importanza per ShellExecuteExA e esegue semplicemente un file con il nome “CLASSIFIED_DOCUMENTS.pdf ” in quel percorso.
Logica di rilevamento (logica della regola ad alta fedeltà):
● SQL-Based :\\Detection_Logic\\SQL-based-ShellExecute.txt
● KQL (ProcessCommandLine) :\\Detection_Logic\\KQL-API-ProcessCommandLine.txt
● Pseudocode Detection Logic :\\Detection_Logic\\SQL-API-ShellExecute.txt
Nota: - Puoi creare una logica di rilevamento secondo gli standard sopra. Sto anche aggiungendo un semplice script Python per ottenere eventi che ti aiuteranno nella scrittura della regola di rilevamento. È stato anche aggiunto ciò che è utile durante la creazione di una regola basata su ETW.
| Provider | Event ID | ID evento / Attività |
| ------------------------------------- | ----------------------------------------- | --------------------------- |
| `Microsoft-Windows-Shell-Core` | {30336983-0362-4540-9E69-14844E6A3B7A} | Event ID 1 (Esegui) |
| `Microsoft-Windows-Kernel-Process` | {22FB2AD3-E163-4078-8C2A-801648437D2D} | Caricamento immagine / Avvio processo |
3. Logica della regola ad alta fedeltà per lo sfruttamento di WinRAR CVE-2023-38831
- Motivazione: Avvisare quando un eseguibile viene creato o caricato da una directory il cui nome termina con un'estensione di documento, e l'esecuzione viene avviata tramite API Explorer/Shell.
- Pseudocode Detection Logic (High-Fidelity Rule Logic)- \\Detection_Logic\\WinRAR-CVE-2023-38831-Exploitation.txt
4. Regola di rilevamento EDR (basata su ETW)
Regola di rilevamento EDR generica basata sulla seguente telemetria:
● Eventi di creazione file
● Esecuzione shell / invocazione Explorer
● Eventi di caricamento immagine (opzionale ma forte)
Detection Logic : \\Detection_Logic\\EDR-Detection-ETW-based.txt
5. Query KQL senza DeviceProcessEvents (se l'endpoint lo supporta)
Motivazione: Poiché questa versione funziona senza fare affidamento su DeviceProcessEvents
Detection Logic : \\Detection_Logic\\KQL-Detection-without-DeviceProcessEvents.txt
6. Segnale di esecuzione shell (se abilitato e supportato)
Motivazione: rafforza la confidenza quando correlato con la creazione di file.
Detection Logic : \\Detection_Logic\\Shell-Execution-Signal.txt
7. SOC-Friendly (Flusso di triage)
Motivazione: Questa regola è stata creata per ogni fase scoperta durante un attacco.
Detection Logic : \\Detection_Logic\\SOC-Friendly.txt
(Avviso / Se inclusa ProcessStart, CreateProcess o logica genitore/figlio stile EDR)
1. Rileva quando winrar.exe crea una directory/file sospetto, specialmente da percorsi di estrazione temporanei o di archivio, ed esegue un file sospetto creato utilizzando una versione vulnerabile di WinRAR
Motivazione: crea regole in base agli eventi gestiti dal tuo prodotto, come accesso, evento o basato su cloud
Detection Logic:\\Detection_Logic\\Gen-Pseudocode-Detection-Logic.txt
2. Rileva quando winrar.exe genera un processo figlio sospetto, specialmente da percorsi di estrazione temporanei o di archivio
Detection Logic :
EndPonit : \\Detection_Logic\\winrar-spawns-suspicious-child-process.txt
Sigma Rule : \\Detection_Logic\\Sigma-Rule-WinRAR Exploit.txt
3. Avviso basato sul provider ETW (creazione processo)
| Provider | Event ID |
| ------------------------------------- | --------------------------- |
| `Microsoft-Windows-Security-Auditing` | 4688 (Creazione processo) |
Logica di rilevamento:
● Processo padre = winrar.exe
● Nuovo processo = motore di scripting o eseguibile
● CommandLine include Temp/AppData
4. Query KQL con DeviceProcessEvents (se l'endpoint lo supporta)
Motivazione: se vogliamo sviluppare utilizzando DeviceProcessEvents
Detection Logic : \\Detection_Logic\\KQL-Detection-with-DeviceProcessEvents.txt
5. Indicatore di attacco (puoi aggiungere un avviso ad alta confidenza)
Impegnandoti alle condizioni seguenti, puoi aggiungere una regola IOA o watch-list per l'avviso.
| Indicatore | Confidenza |
| ---------------------------------- | ---------- |
| winrar.exe genera cmd/powershell | Alta |
| Esecuzione da Temp/AppData | Alta |
| Esecuzione di `.cmd/.bat /.exe ` | Alta |
| ZIP a doppia estensione aperto | Media |
Crea una watchlist per due file con lo stesso nome in una directory creata da una versione vulnerabile di WinRAR (< 6.23) :
Come non si possono avere due file con lo stesso nome in una directory, né si possono avere una directory e un file con lo stesso nome.
Ma questo è possibile in software di compressione come WinRAR/7zip. In un file compresso, indipendentemente dal fatto che tu abbia file con lo stesso nome, i file vengono scritti in una struttura speciale.
Quindi puoi avere due oggetti (File/Dir) con lo stesso nome in un file ZIP/RAR.
Attivatori probabilmente legittimi:
● cmd.exe generato da installatori autoestraenti 7-Zip/WinRAR
● powershell.exe avviato da aggiornatori software aziendali impacchettati in RAR
● rundll32.exe utilizzato da driver stampante o installatori driver GPU
Logica di esclusione (esempio)
AND NOT (
ChildImage IN (cmd.exe, powershell.exe, rundll32.exe)
AND
CommandLine CONTAINS (
"setup.exe",
"install.cmd",
"driverinstall",
"vendorupdate"
)
)
Ciò preserva il rilevamento dell'exploit sopprimendo il comportamento noto dell'installatore. La telemetria dei file di archivio (eventi del file system) — Correlare questa regola con l'attività di estrazione RAR/ZIP (ad esempio, creazione di file .cmd/.bat/.exe immediatamente prima dell'esecuzione, specialmente da directory di estrazione WinRAR come Rar$EX*) aumenterebbe significativamente la confidenza e ridurrebbe i falsi positivi dimostrando che l'esecuzione è seguita direttamente dall'estrazione dell'archivio.
T1204.002 – Esecuzione utente: File dannoso
T1059 – Interprete comandi e script
T1036 – Mascheramento (doppia estensione)
Questo codice di rilevamento è solo per scopi didattici e test autorizzati.
Non utilizzarlo su sistemi che non possiedi o per i quali non hai esplicita autorizzazione al test.