Kam1n0 v2.x est une plateforme évolutive de gestion et d'analyse d'assemblage. Il permet à un utilisateur d'indexer d'abord une (grande) collection de binaires dans différents référentiels et de fournir différents services analytiques tels que la recherche et la classification de clones. Il prend en charge l'accès multi-tenant et la gestion des référentiels d'assembly en utilisant le concept d' Application . Une instance d'application contient son propre référentiel exclusif et fournit un service d'analyse spécialisé. Compte tenu de la polyvalence des tâches d'ingénierie inverse, le serveur Kam1n0 v2.x propose actuellement trois types différents d'applications de recherche de clones : Asm-Clone , Sym1n0 et Asm2Vec , ainsi qu'une classification exécutable basée sur Asm2Vec . Un nouveau type d'application peut être ajouté à la plate-forme.
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 référentiel d'applications et l'état marche-arrêt 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és.
Kam1n0 a été développé par Steven HH Ding et Miles Q. Li sous la supervision de Benjamin CM Fung du Data Mining and Security Lab de l'Université McGill au Canada. Il a remporté le deuxième prix au Hex-Rays Plug-In Contest 2015. Si vous trouvez Kam1n0 utile, veuillez citer notre article :
SHH Ding, BCM Fung et P. Charland. Kam1n0 : recherche de clones d'assemblage basée sur MapReduce pour l'ingénierie inverse. Dans Actes de la 22e Conférence internationale ACM SIGKDD sur la découverte des connaissances et l'exploration de données (SIGKDD) , pages 461-470, San Francisco, Californie : ACM Press, août 2016.
SHH Ding, BCM Fung et P. Charland. Asm2Vec : amélioration de la robustesse de la représentation statique pour la recherche de clones binaires contre l'obscurcissement du code et l'optimisation du compilateur. Dans Actes du 40e Symposium IEEE sur la sécurité et la confidentialité (S&P) , 18 pages, San Francisco, Californie : IEEE Computer Society, mai 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 du graphe) pour les fonctions d'assemblage (temps de requête moyen <1,3 s et temps d'index moyen <30 ms avec 2,3 millions de fonctions). Étant donné une fonction cible (celle de gauche comme indiqué ci-dessous), il peut identifier les sous-graphes clonés parmi d'autres fonctions du référentiel (celle de droite comme indiqué ci-dessous).
Recherche de clones sémantiques par tests de fuzz différenciés et résolution de contraintes. Une approche hybride dynamique-statique efficace et évolutive (temps de requête moyen <1 s et temps d'index moyen <100 ms avec 1,5 million de fonctions). Étant donné une fonction cible (celle de gauche comme indiqué ci-dessous), il peut identifier les sous-graphes clonés parmi d'autres fonctions du référentiel (celle de droite comme indiqué ci-dessous). Prise en charge de la visualisation du graphique de syntaxe abstraite.
Asm2Vec exploite l'apprentissage des représentations. Il comprend la relation lexicale et sémantique du code assembleur. 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 montre différentes fonctions d'assemblage compilées à partir du même code source de gmpz_tdiv_r_2exp
dans libgmp. De gauche à droite, les fonctions d'assemblage sont compilées avec l'option GCC O0, l'option GCC O3, l'option Control Flow Graph de l'obfuscateur O-LLVM, l'option Flattening et l'option Bogus Control Flow Graph de l'obfuscateur LLVM. Asm2Vec peut les identifier statiquement comme des clones.
Dans cette application, l'utilisateur définit un ensemble de classes logicielles basées sur des relations fonctionnelles et fournit des fichiers 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 relation de clonage. Les clusters discriminants pour le classement sont conservés et servent de signatures à leurs classes. Étant donné un binaire cible, le système affiche le degré d'appartenance à chaque classe de logiciel.
Utiliser Asm2Vec comme modèle de calcul de similarité de fonctions
La figure ci-dessous montre les principaux composants et fonctionnalités de l'interface utilisateur de Kam1n0 v2.x. Nous adoptons une conception matérielle. 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 se compose de deux installateurs : le serveur principal et le plug-in IDA Pro.
Installateur | Composants inclus | Description |
---|---|---|
Kam1n0-Serveur.msi | Moteur de base | Moteur principal fournissant un service d'indexation et de recherche. |
Établi | Une interface utilisateur pour gérer les référentiels et le service en cours d'exécution. | |
Interface utilisateur Web | Interface utilisateur Web pour la recherche/indexation de fichiers binaires et de fonctions d'assemblage. | |
Visual C++ redistribuable pour VS 15 | Dépendance pour z3. | |
Kam1n0-IDA-Plugin.msi | Plugin | Connecteurs et interface utilisateur. |
Roues PyPI pour Cefpython | Moteur de rendu pour l'interface utilisateur. | |
PyPI et roues dépendantes | Gestion des packages pour Python. Inclus pour IDA 6.8 et 6.9. |
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 version. Suivez les instructions pour installer le serveur. Vous serez invité à sélectionner un chemin d'installation. IDA Pro est facultatif si le serveur n'a pas à effectuer de démontage. En d'autres termes, le côté client utilise le plugin Kam1n0 pour IDA Pro. Il est fortement suggéré 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 avez utilisée pour ouvrir le fichier .i64
.
Le plug-in Kam1n0 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 le programme d'installation Kam1n0-IDA-Plugin.msi
à partir de notre page de version. Suivez les instructions pour installer le plug-in et le runtime. Veuillez noter que le plug-in doit être installé dans le dossier des plugins IDA Pro qui se trouve dans $IDA_PRO_PATH$/plugins
. Par exemple, sous Windows, le chemin peut être C:/Program Files (x86)/IDA 6.95/plugins
. Le programme d'installation détectera et validera le chemin.
Assurez-vous de disposer de la version Oracle de Java 11. (Pas default-jdk dans apt.)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found
), si vous êtes sur 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 « commande de référentiel add-apt introuvable », 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-oracle
Téléchargez la dernière version pour Linux (Kam1n0-IDA-Plugin.tar.gz et Kam1n0-Server.tar.gz) depuis Kam1n0-Community.
Extrayez les deux archives tar (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.
Dans le répertoire server
, vous devriez voir un fichier appelé kam1n0.properties
, dans lequel vous définirez diverses configurations pour kam1n0 ; c'est très important.
Définissez kam1n0.data.path
à l'endroit où vous souhaitez que vos données liées à kam1n0 soient écrites. Nous choisissons de le placer au même endroit où nous gardons 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 IDA et ne prévoyez pas d'utiliser kam1n0 pour le démontage. 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 faire apparaître une fenêtre vous invitant à démarrer kam1n0. Vous pouvez également exécuter 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, accédez à 127.0.0.1:8571
(le port par défaut sur lequel kam1n0 écoute doit être 8571, mais peut être modifié dans kam1n0.properties) dans votre navigateur. Vous devriez voir la jolie interface utilisateur Web kam1n0. A partir de là, suivez le tutoriel sur le repo Kam1n0-Community si vous ne savez pas comment utiliser kam1n0.
Les référentiels de code assembleur 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 référentiels.
Clonez la dernière branche stable (n'oubliez pas --recursive
!) :
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ : importez la racine /kam1n0/kam1n0/ en tant que projet maven. Tous les sous-modules seront chargés en conséquence. EclipseEE : ajoutez le référentiel git cloné à la vue git. Importez tous les projets Maven depuis le référentiel git. Vous devrez peut-être modifier le chemin de classe pour résoudre toute erreur. Tous les chemins de ressources sont modifiés dynamiquement lors de l'exécution dans un IDE (via le sous-module kam1n0-resources).
Pour construire le projet :
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
Les binaires résultants peuvent être trouvés dans /kam1n0/build-bins/
Pour exécuter le code de test, vous devrez 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 de l'interface 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 compilent uniquement Java avec des roues précompilées de libvex et z3. Cela fonctionne immédiatement. La version de libvex et z3 dépend de la plate-forme. Nous utilisons un fork de libvex d'Angr. Des scripts de build plus sérieux ainsi que des installateurs pour Windows/Linux peuvent être trouvés sous /kam1n0-builds/
Nous disposons d'un serveur Jenkin 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 référentiel.
Le logiciel a été développé par Steven HH Ding, Miles Q. Li et Benjamin CM Fung au laboratoire d'exploration de données et de sécurité de McGill et au laboratoire de recherche L1NNA de Queen's au Canada. Il est distribué sous la licence Apache version 2.0. Veuillez vous référer à LICENSE.txt pour plus de détails.
Copyright 2014-2021 L'Université McGill et les chercheurs. Tous droits réservés.