
Plateforme d'analyse d'assemblage évolutive pour l'indexation, la recherche de clones et la classification d'exécutables à l'aide de techniques statiques, dynamiques et d'apprentissage automatique sur plusieurs architectures.
Kam1n0 v2.x est une plateforme évolutive de gestion et d'analyse d'assembly. Elle permet à un utilisateur d'indexer d'abord une (grande) collection de binaires dans différents dépôts et de fournir divers services analytiques tels que la recherche de clones et la classification. Elle prend en charge l'accès multi-tenant et la gestion des dépôts d'assembly en utilisant le concept d'Application. Une instance d'application contient son propre dépôt exclusif et fournit un service analytique spécialisé. Compte tenu de la polyvalence des tâches de rétro-ingénierie, le serveur Kam1n0 v2.x propose actuellement trois types d'applications de recherche de clones : Asm-Clone, Sym1n0 et Asm2Vec , ainsi qu'une classification d'exécutables basée sur Asm2Vec. De nouveaux types d'applications peuvent être ajoutés ultérieurement à la plateforme.
Un utilisateur peut créer plusieurs instances d'application. Une instance d'application peut être partagée entre un groupe spécifique d'utilisateurs. L'accès en lecture-écriture au dépôt de l'application et son état d'activation/désactivation peuvent être contrôlés par le propriétaire de l'application. Le serveur Kam1n0 v2.x peut servir les applications simultanément en utilisant plusieurs pools de ressources partagées.
Kam1n0 a été développé par Steven H. H. Ding et Miles Q. Li sous la supervision de Benjamin C. M. Fung du Data Mining and Security Lab à l'Université McGill au Canada. Il a remporté le deuxième prix du Hex-Rays Plug-In Contest 2015. Si vous trouvez Kam1n0 utile, veuillez citer notre article :
S. H. H. Ding, B. C. M. Fung, and P. Charland. Kam1n0: MapReduce-based Assembly Clone Search for Reverse Engineering. In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD), pages 461-470, San Francisco, CA: ACM Press, August 2016.
S. H. H. Ding, B. C. M. Fung, and P. Charland. Asm2Vec: boosting static representation robustness for binary clone search against code obfuscation and compiler optimization. In Proceedings of the 40th IEEE Symposium on Security and Privacy (S&P), 18 pages, San Francisco, CA: IEEE Computer Society, May 2019.
Les applications Asm-Clone tentent de résoudre le problème de recherche efficace de sous-graphes (c'est-à-dire le problème d'isomorphisme de graphes) pour les fonctions d'assembly (temps de requête moyen <1,3 s et temps d'indexation moyen <30 ms pour 2,3 millions de fonctions). Étant donné une fonction cible (celle de gauche comme illustré ci-dessous), elle peut identifier les sous-graphes clonés parmi d'autres fonctions du dépôt (celui de droite comme illustré ci-dessous).
Recherche de clones sémantiques par fuzz testing différencié et résolution de contraintes. Une approche hybride dynamique-statique efficace et évolutive (temps de requête moyen <1 s et temps d'indexation moyen <100 ms pour 1,5 million de fonctions). Étant donné une fonction cible (celle de gauche comme illustré ci-dessous), elle peut identifier les sous-graphes clonés parmi d'autres fonctions du dépôt (celui de droite comme illustré ci-dessous). Prend en charge la visualisation du graphe syntaxique abstrait.
Asm2Vec exploite l'apprentissage par représentation. Il comprend la relation sémantique lexicale du code d'assembly. Par exemple, les registres xmm* sont sémantiquement liés aux opérations vectorielles telles que addps. memcpy est similaire à strcpy. Le graphique ci-dessous présente différentes fonctions d'assembly compilées à partir du même code source de gmpz_tdiv_r_2exp dans libgmp. De gauche à droite, les fonctions d'assembly sont compilées avec les options GCC O0, GCC O3, l'obfuscateur O-LLVM Control Flow Graph, l'option Flattening et l'option LLVM obfuscator Bogus Control Flow Graph. Asm2Vec peut les identifier statiquement comme clones.
Dans cette application, l'utilisateur définit un ensemble de classes logicielles basées sur une parenté fonctionnelle et fournit des binaires appartenant à chaque classe. Ensuite, le système regroupe automatiquement les fonctions en clusters dans lesquels les fonctions sont connectées directement ou indirectement par une relation de clone. Les clusters discriminants pour la classification sont conservés et servent de signatures pour leurs classes. Étant donné un binaire cible, le système indique son degré d'appartenance à chaque classe logicielle.
Utilise Asm2Vec comme modèle de calcul de similarité des fonctions
La figure ci-dessous montre les principaux composants de l'interface utilisateur et les fonctionnalités de Kam1n0 v2.x. Nous adoptons un design material. En général, chaque utilisateur dispose d'une liste d'applications, d'une liste de tâches en cours et d'une liste de fichiers de résultats.
La version actuelle de Kam1n0 comprend deux installeurs : le serveur central et le plug-in IDA Pro.
Le moteur principal de Kam1n0 est purement écrit en Java. Vous avez besoin des dépendances suivantes :
Téléchargez le fichier Kam1n0-Server.msi depuis notre page de releases. Suivez les instructions pour installer le serveur. Il vous sera demandé de sélectionner un chemin d'installation. IDA Pro est optionnel si le serveur n'a pas à gérer de désassemblage. En d'autres termes, le client utilise le plug-in Kam1n0 pour IDA Pro. Il est fortement recommandé d'installer IDA Pro avec le serveur Kam1n0. Le serveur Kam1n0 détectera automatiquement votre IDA Pro en recherchant l'application par défaut que vous utilisez pour ouvrir les fichiers .i64.
Le plug-in Kam1n0 pour IDA Pro est écrit en Python pour la logique et en HTML/JavaScript pour le rendu. Les dépendances suivantes sont requises pour son installation :
Ensuite, téléchargez l'installeur Kam1n0-IDA-Plugin.msi depuis notre page de releases. Suivez les instructions pour installer le plug-in et l'environnement d'exécution. Veuillez noter que le plug-in doit être installé dans le dossier des plug-ins d'IDA Pro, situé dans $IDA_PRO_PATH$/plugins. Par exemple, sur Windows, le chemin peut être C:/Program Files (x86)/IDA 6.95/plugins. L'installeur détectera et validera le chemin.
Assurez-vous de posséder la version Oracle de Java 11. (Pas le default-jdk d'apt.)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found), si vous êtes derrière un proxy, assurez-vous de définir et d'exporter vos variables d'environnement http_proxy et https_proxy, puis réessayez avec l'option -E sur sudo. De plus, si vous obtenez une erreur 'add-apt repository command not found', essayez : sudo apt install -y software-properties-common.sudo apt-get update, et sudo apt-get install oracle-java8-installer
java -version ; vous devrez peut-être définir manuellement la variable d'environnement JAVA_HOME (dans /etc/environment), JAVA_HOME=/usr/lib/jvm/java-11-oracleLes dépôts de code d'assembly et les fichiers de configuration utilisés dans les versions précédentes (<2.0.0) ne sont plus pris en charge par la dernière version. Veuillez nous contacter si vous devez migrer vos anciens dépôts.
Clonez la dernière branche stable (n'oubliez pas --recursive !) :```bash
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
## Importer le projet.
IntelliJ: Importez la racine /kam1n0/kam1n0/ en tant que projet maven. Tous les sous-modules seront chargés en conséquence.
EclipseEE: Ajoutez le dépôt git cloné à la vue git. Importez tous les projets maven du dépôt git.
Vous devrez peut-être modifier le classpath pour corriger d'éventuelles erreurs.
Tous les chemins des ressources sont modifiés dynamiquement lorsqu'on exécute dans un IDE
(à travers le sous-module kam1n0-resources).
Pour construire le projet :```
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
Les binaires obtenus se trouvent dans /kam1n0/build-bins/
Pour exécuter le code de test, vous devez d'abord télécharger chromedriver.exe depuis http://chromedriver.chromium.org/ et ajouter son chemin absolu dans une variable d'environnement nommée webdriver.chrome.driver. Il est également nécessaire qu'un navigateur Chrome soit installé sur le système. Le code de test lancera une instance de navigateur pour tester les interfaces utilisateur. La procédure de test complète prendra environ 3 heures.```
cd /kam1n0/kam1n0
mvn -DskipTests clean package # you can skip this one if you already built the package
mvn -DskipTests package # you can skip this one if you already built the package
mvn -DforkMode=never test
Ces commandes ne compilent que Java avec les wheels pré-compilées de libvex et z3. Cela fonctionne directement.
La construction de libvex et z3 dépend de la plateforme. Nous utilisons un fork de libvex d'Angr.
Des scripts de construction plus sérieux ainsi que des installateurs pour Windows/Linux peuvent être trouvés sous /kam1n0-builds/
* kam1n0 : Le code source du serveur.
* kam1n0-builds : Le code source de l'installateur et les scripts pour construire la distribution.
* kam1n0-clients : Le code source des clients.
## Versions binaires
Nous avons un serveur Jenkins pour le développement et la livraison continus. La dernière version stable sera publiée ici. Périodiquement, nous synchroniserons notre branche expérimentale interne avec ce dépôt.
## Licence
Le logiciel a été développé par [Steven H. H. Ding](http://stevending.net/), [Miles Q. Li](http://milesqli.github.io/), et [Benjamin C. M. Fung](http://dmas.lab.mcgill.ca/fung/) dans le [McGill Data Mining and Security Lab](http://dmas.lab.mcgill.ca/) et le [Queen's L1NNA Research Laboratory](https://l1nna.com/) au Canada. Il est distribué sous la licence Apache Version 2.0. Veuillez vous référer à [LICENSE.txt](https://github.com/mcgill-dmas/kam1n0-community/blob/HEAD/LICENSE.txt) pour plus de détails.
Copyright 2014-2021 Université McGill et les chercheurs. Tous droits réservés.
## Remerciements
-orange.svg?style=for-the-badge)





| Installeur | Composants inclus | Description |
|---|---|---|
| Kam1n0-Server.msi | Moteur principal | Moteur principal fournissant le service d'indexation et de recherche. |
| Atelier (Workbench) | Interface utilisateur pour gérer les dépôts et le service en cours. | |
| Interface utilisateur Web | Interface utilisateur Web pour la recherche/l'indexation de fichiers binaires et de fonctions d'assembly. | |
| Redistribuable Visual C++ pour VS 15 | Dépendance pour z3. | |
| Kam1n0-IDA-Plugin.msi | Plug-in | Connecteurs et interface utilisateur. |
| Packages PyPI pour Cefpython | Moteur de rendu pour l'interface utilisateur. | |
| Packages PyPI et dépendants | Gestion des packages pour Python. Inclus pour IDA 6.8 et 6.9. |
Téléchargez la dernière release pour Linux (Kam1n0-IDA-Plugin.tar.gz et Kam1n0-Server.tar.gz) depuis Kam1n0-Community.
Extrayez les deux archives (c'est-à-dire tar –xvzf Kam1n0-IDA-Plugin.tar.gz et tar –xvzf Kam1n0-Server.tar.gz)
Le fichier Kam1n0-Server.tar.gz créera le répertoire du serveur.
À l'intérieur du répertoire server, vous devriez voir un fichier appelé kam1n0.properties, où vous définirez diverses configurations pour kam1n0 ; c'est très important.
Définissez kam1n0.data.path à l'endroit où vous souhaitez que les données liées à kam1n0 soient écrites. Nous choisissons de le placer au même endroit que nous conservons notre server. kam1n0.ida.home fait référence à l'emplacement de votre installation IDA. Commentez cette ligne (et kam1n0.ida.batch, la ligne suivante) si vous n'avez pas d'IDA et que vous ne prévoyez pas d'utiliser kam1n0 pour le désassemblage. Pour plus d'informations (précises) sur le fichier kam1n0.properties, consultez le fichier kam1n0.properties.explained.
Exécutez kam1n0-server-workbench : java -jar kam1n0-server-workbench.jar. Cela devrait ouvrir une fenêtre, qui vous invite à démarrer kam1n0. Sinon, exécutez kam1n0-server : java -jar kam1n0-server.jar --start. Cela démarre le serveur depuis la console sans fenêtre.
Pour vous connecter et l'utiliser, allez à 127.0.0.1:8571 (le port par défaut sur lequel kam1n0 écoute est 8571, mais peut être modifié dans kam1n0.properties) dans votre navigateur. Vous devriez voir la belle interface utilisateur Web de kam1n0. À partir de là, suivez le tutoriel sur le dépôt Kam1n0-Community si vous ne savez pas comment utiliser kam1n0.