ssdeep
Calcule et compare des hashes flous (context-triggered piecewise) pour identifier des fichiers similaires ou apparentés, largement utilisé pour le triage de malwares. Computes and compares context-triggered piecewise (fuzzy) hashes to identify similar or related files, widely used in malware triage.
↗ https://ssdeep-project.github.io/ssdeep/Overview
ssdeep generates “fuzzy hashes” — unlike cryptographic hashes (MD5, SHA1), a small change to a file only slightly changes its ssdeep signature. This makes it possible to measure similarity between two files on a 0-100 scale, which is invaluable when triaging malware variants, spotting modified documents, or clustering samples that share large code blocks.
Common Usage
Generate a fuzzy hash for a single file
ssdeep malware_sample.exe
Hash a whole directory recursively
ssdeep -r /samples/ > hashes.txt
Compare a file against a set of known hashes
ssdeep -m hashes.txt suspicious.exe
Compare two signature files directly
ssdeep -d hashes1.txt hashes2.txt
Compute hashes then match against themselves (find similar pairs in a set)
ssdeep -rb /samples/ | ssdeep -m /dev/stdin
Malware Triage Workflow
Baseline a known-clean binary set
ssdeep -r /opt/clean-baseline/ > clean.sig
Hash the sample under investigation
ssdeep unknown_binary > unknown.sig
Check for matches against the clean baseline (near-100% match = likely benign/repacked)
ssdeep -m clean.sig unknown_binary
Cluster a malware zoo — output pairs with similarity score
ssdeep -rc /malware-zoo/ > zoo.sig
Tips
- Similarity scores above ~70 usually indicate a meaningful relationship (shared packer, same family, minor patch).
- Works best on files of similar size and type — comparing a 4KB script against a 40MB binary is meaningless.
- The
libfuzzylibrary ssdeep is built on is also bound into Python (ssdeeppip package) and YARA (ssdeep()module) for automated pipelines.
Help / Man page
ssdeep [-m file] [-k file] [-dpertlsbcvV] [-h|-h1|-h2] [-c mode] [FILES...]
-m file Match FILES against known hashes in file
-k file Same as -m but uses SHA256 hash format
-d Compare each pair of files in a signature file to each other
-p Pretty matching mode; all matches are shown
-e Display elapsed time
-r Recursive mode
-t val Only show matches above given threshold (0-100)
-l Print relative paths for filenames
-s Silent mode; only show error messages
-b Only display basename of files
-c CSV output
-v Verbose mode; repeat for more verbosity
-V Display version number and exit
-h Help
Vue d’ensemble
ssdeep génère des “hashes flous” : contrairement aux hashes cryptographiques (MD5, SHA1), un petit changement dans un fichier ne modifie que légèrement sa signature ssdeep. Cela permet de mesurer la similarité entre deux fichiers sur une échelle de 0 à 100, ce qui est précieux pour trier des variantes de malware, repérer des documents modifiés, ou regrouper des échantillons partageant de larges blocs de code.
Utilisation courante
# Générer un hash flou pour un seul fichier
ssdeep malware_sample.exe
# Hasher un répertoire entier récursivement
ssdeep -r /samples/ > hashes.txt
# Comparer un fichier à un ensemble de hashes connus
ssdeep -m hashes.txt suspicious.exe
# Comparer deux fichiers de signatures directement
ssdeep -d hashes1.txt hashes2.txt
# Calculer les hashes puis les comparer entre eux (trouver des paires similaires dans un ensemble)
ssdeep -rb /samples/ | ssdeep -m /dev/stdin
Workflow de triage de malware
# Établir une base de référence sur un ensemble de binaires sains connus
ssdeep -r /opt/clean-baseline/ > clean.sig
# Hasher l'échantillon en cours d'investigation
ssdeep unknown_binary > unknown.sig
# Vérifier les correspondances avec la base saine (correspondance proche de 100% = probablement bénin/repacké)
ssdeep -m clean.sig unknown_binary
# Regrouper un zoo de malwares : sortir les paires avec leur score de similarité
ssdeep -rc /malware-zoo/ > zoo.sig
Conseils
- Des scores de similarité au-dessus de ~70 indiquent généralement une relation significative (packer partagé, même famille, patch mineur)
- Fonctionne mieux sur des fichiers de taille et de type similaires : comparer un script de 4 Ko à un binaire de 40 Mo n’a aucun sens
- La bibliothèque
libfuzzysur laquelle ssdeep est construit est aussi liée à Python (package pipssdeep) et YARA (modulessdeep()) pour des pipelines automatisés
Aide / Page de manuel
ssdeep [-m file] [-k file] [-dpertlsbcvV] [-h|-h1|-h2] [-c mode] [FILES...]
-m file Match FILES against known hashes in file
-k file Same as -m but uses SHA256 hash format
-d Compare each pair of files in a signature file to each other
-p Pretty matching mode; all matches are shown
-e Display elapsed time
-r Recursive mode
-t val Only show matches above given threshold (0-100)
-l Print relative paths for filenames
-s Silent mode; only show error messages
-b Only display basename of files
-c CSV output
-v Verbose mode; repeat for more verbosity
-V Display version number and exit
-h Help