FLOSS - Foglio di aiuto per l’estrazione di stringhe offuscate del malware
FLOSS (FLARE Obfuscated String Solver, di Mandiant) estrae automaticamente stringhe offuscate dal malware. Gli autori nascondono regolarmente URL, chiavi del registro e comandi in modo che l’utility classica strings non trovi nulla di utile. FLOSS va oltre: identifica le routine di decodifica all’interno del binario, le emula e recupera il plaintext — scoprendo stringhe dello stack, stringhe strette e stringhe decodificate che l’estrazione statica manca. È uno strumento di triage del primo passo per qualsiasi campione di malware Windows.
Analizza il malware solo in una VM/sandbox isolata. FLOSS emula il codice dal campione.
Installazione
| Metodo | Comando |
|---|
| Binario autonomo | Scarica da GitHub Releases (Windows/Linux/macOS) |
| pip | pip install flare-floss |
| Verifica | floss --version |
Utilizzo di base
| Comando | Descrizione |
|---|
floss malware.exe | Estrai tutti i tipi di stringhe |
floss -j malware.exe | Output JSON |
floss --no static malware.exe | Salta le stringhe statiche semplici |
floss -n 6 malware.exe | Lunghezza minima della stringa 6 |
floss --help | Elenco completo delle opzioni |
Tipi di stringhe che FLOSS recupera
| Tipo | Cosa è |
|---|
| Static | Stringhe ordinarie (ciò che strings trova) |
| Stack | Costruite carattere per carattere sullo stack in fase di esecuzione |
| Tight | Costruite in cicli stretti, mai completamente in memoria alla volta |
| Decoded | Prodotte da una routine di decodifica (XOR, RC4, personalizzata) |
Gli ultimi tre sono il valore aggiunto — sono invisibili a strings perché non esistono mai come byte contigui nel file.
Selezione dei tipi di analisi
| Flag | Effetto |
|---|
--only static | Solo stringhe semplici (veloce) |
--only stack | Solo stringhe dello stack |
--only tight | Solo stringhe strette |
--only decoded | Solo stringhe emulate/decodificate |
--no decoded | Salta la fase di emulazione (lenta) |
# Triage veloce: salta l'emulazione
floss --no decoded sample.exe
# Passaggio profondo: tutto, JSON per gli strumenti
floss -j sample.exe > strings.json
Segnali di triage da cercare
| Modello | Suggerisce |
|---|
| URL / IP | Infrastruttura C2 |
HKLM\, HKCU\ | Persistenza tramite registro |
cmd.exe, powershell | Esecuzione di comandi |
CreateRemoteThread, VirtualAlloc | Iniezione di processo |
| Blob Base64 | Payload incorporati |
.onion, indirizzi del portafoglio | Ransomware/exfil |
floss sample.exe | grep -iE "http|\.exe|HKLM|powershell|AppData"
Output e integrazione
| Opzione | Scopo |
|---|
-j / --json | Output leggibile dalla macchina per le pipeline |
-v / -vv | Verboso / debug |
--functions 0x401000 | Metti a fuoco l’emulazione su funzioni specifiche |
| Script IDA/Ghidra | Annota le stringhe recuperate nel disassembly |
Alimentare l’output di FLOSS in Ghidra come commenti rende l’analisi manuale successiva molto più veloce.
Workflow comuni
# Sequenza standard di triage del malware
floss -j sample.exe > floss.json # recupera le stringhe
jq -r '.strings.decoded[].string' floss.json | sort -u # focus su decodificate
# → pivot a Ghidra/x64dbg sulle funzioni che hanno prodotto stringhe interessanti
# Confronta varianti: quali stringhe sono cambiate tra i campioni?
floss --no decoded a.exe > a.txt; floss --no decoded b.exe > b.txt
diff a.txt b.txt
FLOSS vs Strumenti correlati
| Strumento | Recupera |
|---|
| FLOSS | Statica + stack + stretta + decodificata (emulazione) |
strings | Solo byte stampabili contigui |
| capa | Capacità/comportamenti, non stringhe |
| Detect It Easy | Identificazione packer/compilatore |
Un trio standard di triage: Detect It Easy per identificare il packing, FLOSS per recuperare le stringhe, capa per enumerare le capacità.
Risorse