TLSH est une bibliothèque de correspondance floue. Étant donné un flux d'octets d'une longueur minimale de 50 octets, TLSH génère une valeur de hachage qui peut être utilisée pour des comparaisons de similarité. Les objets similaires auront des valeurs de hachage similaires, ce qui permet la détection d'objets similaires en comparant leurs valeurs de hachage. Notez que le flux d’octets doit avoir une complexité suffisante. Par exemple, un flux d'octets identiques ne générera pas de valeur de hachage.
08/10/2024
Release version 4.10.x - un outil de clustering Python.
Voir le répertoire tlshCluster.
Je vais essayer de faire de 4.12.0 une version release et de créer une bibliothèque Python py-tlsh à partir de 4.12.0. 4.12.0 comprend : Merge pull request #137 - cela a corrigé une fuite de mémoire dans py-tlsh Merge pull request #134. - cela a amélioré ifdef WINDOWS pour qu'il soit plus portable. 4.12.1 inclut : Merge pull request #146 - Supprimez l'appel à sprintf() pour éviter les avertissements Merge pull request #141 - py_ext : utilisez PyVarObject_HEAD au lieu de PyObject_HEAD_INIT Merge pull request #138 - Build : définir les options par défaut uniquement sur "par défaut" Merge pull request #136 - Correction de bug + portabilité : améliorer la portabilité par division intégrale
2020
adopté par Virus Total
adopté par Malware Bazaar
Nous avons ajouté un identifiant de version (« T1 ») au début du résumé. Veuillez utiliser les versions de TLSH qui ont l'en-tête T1. Le code est rétrocompatible, il peut toujours lire et interpréter 70 chaînes de caractères hexadécimaux en tant que résumés TLSH. Et les ensembles de données peuvent inclure des mélanges d’anciens et de nouveaux résumés. Si vous avez besoin de générer des résumés TLSH à l'ancienne, utilisez l'option de ligne de commande « -old »
Merci à Chun Cheng, qui était un ingénieur humble et talentueux.
Le programme en mode par défaut nécessite un flux d'octets d'entrée d'une longueur minimale de 50 octets (et un minimum de caractère aléatoire - voir la note dans l'extension Python ci-dessous).
Pour des raisons de cohérence avec les anciennes versions, il existe une option -conservative qui impose une limite de 256 octets. Voir les notes pour la version 3.17.0 de TLSH
Le hachage calculé est de 35 octets de données (sortie sous la forme « T1 » suivi de 70 caractères hexadécimaux. Longueur totale de 72 caractères). Le « T1 » a été ajouté comme numéro de version pour le hachage - afin que nous puissions adapter l'algorithme tout en conservant la compatibilité ascendante. Pour obtenir l’ancien style de hachages hexadécimaux 70, utilisez l’option de ligne de commande -old.
Les octets 3, 4, 5 sont utilisés pour capturer les informations sur le fichier dans son ensemble (longueur, ...), tandis que les 32 derniers octets sont utilisés pour capturer des informations sur les parties incrémentielles du fichier. (Notez que la longueur du hachage peut être augmentée en modifiant les paramètres de construction décrits ci-dessous dans CMakeLists.txt, ce qui augmentera les informations stockées dans le hachage. Pour certaines applications, cela peut augmenter la précision de la prédiction des similitudes entre les fichiers.)
Construire TLSH (voir ci-dessous) créera une bibliothèque statique dans le répertoire lib
et l'exécutable tlsh
(un lien symbolique vers tlsh_unittest
). 'tlsh' renvoie à la bibliothèque statique, dans le répertoire bin
. La bibliothèque dispose de fonctionnalités permettant de générer la valeur de hachage à partir d'un fichier donné et de calculer la similarité entre deux valeurs de hachage.
tlsh
est un utilitaire permettant de générer des valeurs de hachage TLSH et de comparer les valeurs de hachage TLSH pour déterminer la similarité. Exécutez-le sans paramètres pour une utilisation détaillée.
Un port JavaScript disponible dans le répertoire js_ext
.
Un port Java est disponible dans le répertoire java
.
Nous répertorions ces ports juste pour référence. Nous n'avons pas vérifié le code dans ces référentiels, et nous n'avons pas vérifié que les résultats sont identiques à TLSH ici. Nous demandons également que tous les ports incluent les fichiers LICENSE et NOTICE.txt exactement tels qu'ils apparaissent dans ce référentiel.
Un autre port Java est disponible ici.
Un autre port Java est disponible ici.
Un port Golang est disponible ici.
Un port Ruby est disponible ici
Téléchargez TLSH comme suit :
wget https://github.com/trendmicro/tlsh/archive/master.zip -O master.zip unzip master.zip cd tlsh-master
ou
git clone git://github.com/trendmicro/tlsh.git cd tlsh git checkout master
Modifiez CMakeLists.txt pour créer TLSH avec différentes options.
TLSH_BUCKETS : détermine l'utilisation de 128 ou 256 compartiments, utilisez les 128 compartiments par défaut, sauf si vous êtes un expert et savez que vous avez besoin de 256 compartiments
TLSH_CHECKSUM_1B : détermine la longueur de la somme de contrôle, plus cela signifie moins de collisions, utilisez la valeur par défaut de 1 octet, sauf si vous êtes un expert et savez que vous avez besoin d'une somme de contrôle plus grande.
Exécuter:
make.sh
Remarque : La construction de TLSH sous Linux dépend de cmake
pour créer le Makefile
puis make
le projet, donc la construction échouera si cmake
n'est pas installé. Pour installer le compilateur cmake/gcc sur CentOs ou Amazon Linux : $ sudo yum install cmake $ sudo yum install gcc-c++
Ajouté en mars 2020. Voir les instructions dans README.mingw
Utilisez les fichiers de solution tlsh spécifiques à la version (tlsh.VC2005.sln, tlsh.VC2008.sln, ...) sous le répertoire Windows.
Voir tlsh.h pour l'interface de la bibliothèque tlsh et tlsh_unittest.cpp et simple_unittest.cpp sous le répertoire test
pour un exemple de code.
Nous avons récemment créé un package Python sur PyPi : https://pypi.org/project/py-tlsh/
Le py-tlsh remplace le package python-tlsh. Pour plus de détails, voir le numéro 94
Pour installer ce package
$ pip install py-tlsh
Si vous devez créer votre propre package Python, il existe un fichier README.python avec des notes sur la version Python.
(1) compile the C++ code $./make.sh (2) build the python version $ cd py_ext/ $ python ./setup.py build (3) install - possibly - sudo, run as root or administrator $ python ./setup.py install (4) test it $ cd ../Testing $ ./python_test.sh
importer tlshtlsh.hash (données)
Notez que les données doivent être des octets et non une chaîne. En effet, TLSH est destiné aux données binaires et les données binaires peuvent contenir un octet NULL (zéro).
En mode par défaut, les données doivent contenir au moins 50 octets pour générer une valeur de hachage et doivent avoir un certain caractère aléatoire. Pour obtenir la valeur de hachage d'un fichier, essayez
tlsh.hash(open(file, 'rb').read())
Remarque : l'instruction open a ouvert le fichier en mode binaire.
importer tlshh1 = tlsh.hash(data)h2 = tlsh.hash(similar_data)score = tlsh.diff(h1, h2)h3 = tlsh.Tlsh()avec open('file', 'rb') as f:for buf dans iter(lambda: f.read(512), b''):h3.update(buf)h3.final()# cette assertion est indiquant que la distance entre un TLSH et lui-même doit être nulleassert h3.diff(h3) == 0score = h3.diff(h1)
La fonction diffxlen
supprime le composant de longueur de fichier de l'en-tête tlsh de la comparaison.
tlsh.diffxlen(h1, h2)
Si un fichier avec un motif répétitif est comparé à un fichier avec une seule instance du motif, la différence sera augmentée si la longueur du fichier est incluse. Mais en utilisant la fonction diffxlen
, la longueur du fichier ne sera plus prise en compte.
Si vous utilisez l'option « conservatrice », les données doivent contenir au moins 256 caractères. Par exemple,
importer ostlsh.conservativehash(os.urandom(256))
devrait générer un hachage, mais
tlsh.conservativehash(os.urandom(100))
générera TNULL car il fait moins de 256 octets.
Si vous devez générer des hachages à l'ancienne (sans le préfixe "T1"), utilisez
tlsh.oldhash(os.urandom(100))
Les options anciennes et conservatrices peuvent être combinées :
tlsh.oldconservativehash(os.urandom(500))
Pour améliorer la précision de la comparaison, TLSH suit la répartition de la hauteur du godet en quartiles. Une différence de quartile plus grande entraîne un score de différence plus élevé.
Utilisez spécialement 6 trigrammes pour donner une représentation égale des octets dans la fenêtre glissante de 5 octets, ce qui produit des résultats améliorés.
Le hachage Pearson est utilisé pour distribuer le nombre de trigrammes aux compartiments de comptage.
Le score de similarité global éloigne les objets présentant une différence de taille significative. La similarité globale peut être désactivée. Il éloigne également les objets avec des distributions quartiles différentes.
TLSH peut être compilé pour générer des chaînes de hachage de 70 ou 134 caractères. La version plus longue a été créée pour utiliser les chaînes de hachage de 70 caractères et ne fonctionne pas pour votre application.
La similarité TLSH est exprimée sous forme de score de différence :
Un score de 0 signifie que les objets sont presque identiques.
Pour le hachage de 72 caractères, il existe un tableau détaillé des taux de détection expérimentaux et des taux de faux positifs basés sur le seuil. voir Tableau II à la page 5
Consultez le code Python et les notebooks Jupyter dans tlshCluster.
Nous fournissons du code Python pour la méthode HAC-T. Nous fournissons également du code pour que les utilisateurs puissent utiliser DBSCAN.
Nous montrons aux utilisateurs comment créer des dendogrammes pour les fichiers, qui constituent un diagramme utile montrant les relations entre les fichiers et les groupes.
Nous fournissons des outils pour regrouper l'ensemble de données Malware Bazaar, qui contient quelques centaines de milliers d'échantillons.
La méthode HAC-T est décrite dans HAC-T et recherche rapide de similarité en matière de sécurité
Jonathan Oliver, Chun Cheng et Yanggui Chen, TLSH – Un hachage sensible à la localité. 4e atelier sur la cybercriminalité et l'informatique fiable, Sydney, novembre 2013
Jonathan Oliver, Scott Forman et Chun Cheng, Utilisation de la randomisation pour attaquer les résumés de similarité. ATIS 2014, novembre 2014, pages 199-210
Jonathan Oliver, Muqeet Ali et Josiah Hagen. HAC-T et recherche rapide de similarité en matière de sécurité Conférence internationale 2020 sur les systèmes intelligents omnicouches (COINS). IEEE, 2020.
4.12.1
08/10/2024 Merge pull request #146 - Supprimez l'appel à sprintf() pour éviter les avertissements Merge pull request #141 - py_ext : utilisez PyVarObject_HEAD au lieu de PyObject_HEAD_INIT Merge pull request #138 - Build : définir les options par défaut uniquement sur "default" Merge pull request #136 - Correction de bug + Portabilité : Améliorer la portabilité par division intégrale
voir Change_History.md