Aller au contenu

FLOSS - Guide d'extraction de strings obfusquées pour malware

FLOSS - Guide d’extraction de strings obfusquées pour malware

FLOSS (FLARE Obfuscated String Solver, par Mandiant) extrait automatiquement les strings obfusquées du malware. Les auteurs cachent régulièrement les URLs, clés de registre, et commandes afin que l’utilitaire strings classique ne trouve rien d’utile. FLOSS va plus loin : il identifie les routines de décodage à l’intérieur du binaire, les émule, et récupère le plaintext — surfaçant les stack strings, tight strings, et strings décodées que l’extraction statique manque. C’est un outil de triage de première passe pour n’importe quel exemple de malware Windows.

Analysez le malware uniquement dans une VM/sandbox isolée. FLOSS émule le code de l’exemple.

Installation

MéthodeCommande
Binaire standaloneTélécharger depuis GitHub Releases (Windows/Linux/macOS)
pippip install flare-floss
Vérifierfloss --version

Utilisation de base

CommandeDescription
floss malware.exeExtraire tous les types de strings
floss -j malware.exeSortie JSON
floss --no static malware.exeIgnorer les strings statiques ordinaires
floss -n 6 malware.exeLongueur minimale de string 6
floss --helpListe complète des options

Types de strings que FLOSS récupère

TypeCe que c’est
StatiqueStrings ordinaires (ce que strings trouve)
StackConstruit caractère par caractère sur la stack au runtime
TightConstruit dans des boucles serrées, jamais complètement en mémoire à la fois
DécodéeProduite par une routine de décodage (XOR, RC4, custom)

Les trois derniers sont la valeur ajoutée — ils sont invisibles à strings car ils n’existent jamais comme bytes contigus dans le fichier.

Sélectionner les types d’analyse

FlagEffet
--only staticSeulement les strings ordinaires (rapide)
--only stackSeulement les stack strings
--only tightSeulement les tight strings
--only decodedSeulement les strings émulées/décodées
--no decodedIgnorer la phase d’émulation (lente)
# Triage rapide : ignorer l'émulation
floss --no decoded sample.exe

# Passe profonde : tout, JSON pour les outils
floss -j sample.exe > strings.json

Signaux de triage pour grep

PatternSuggère
URLs / IPsInfrastructure C2
HKLM\, HKCU\Persistance via registre
cmd.exe, powershellExécution de commande
CreateRemoteThread, VirtualAllocInjection de processus
Blobs Base64Payloads embarqués
.onion, adresses walletRansomware/exfil
floss sample.exe | grep -iE "http|\.exe|HKLM|powershell|AppData"

Sortie et intégration

OptionObjectif
-j / --jsonSortie lisible par machine pour les pipelines
-v / -vvVerbeux / debug
--functions 0x401000Cibler l’émulation sur des fonctions spécifiques
Scripts IDA/GhidraAnnoter les strings récupérées de retour dans le désassemblage

Alimenter la sortie FLOSS dans Ghidra comme commentaires rend l’analyse manuelle suivante beaucoup plus rapide.

Flux de travail courants

# Séquence de triage malware standard
floss -j sample.exe > floss.json          # récupérer les strings
jq -r '.strings.decoded[].string' floss.json | sort -u   # cibler les décodées
# → pivoter vers Ghidra/x64dbg sur les fonctions qui ont produit les strings intéressantes

# Comparer les variantes : quelles strings ont changé entre les exemples ?
floss --no decoded a.exe > a.txt; floss --no decoded b.exe > b.txt
diff a.txt b.txt

FLOSS vs outils apparentés

OutilRécupère
FLOSSStatique + stack + tight + décodée (émulation)
stringsSeulement les bytes imprimables contigus
capaCapabilities/comportements, pas les strings
Detect It EasyIdentification de packer/compilateur

Un trio de triage standard : Detect It Easy pour identifier le packing, FLOSS pour récupérer les strings, capa pour énumérer les capabilities.

Ressources