
Piattaforma di analisi assembly scalabile per indicizzazione, ricerca di cloni e classificazione di eseguibili utilizzando tecniche statiche, dinamiche e di apprendimento automatico su più architetture.
Kam1n0 v2.x è una piattaforma scalabile per la gestione e l'analisi di assembly. Permette a un utente di indicizzare una (grande) collezione di binari in diversi repository e fornisce servizi analitici come la ricerca di cloni e la classificazione. Supporta l'accesso multi-tenant e la gestione dei repository di assembly utilizzando il concetto di Applicazione. Un'istanza di applicazione contiene il proprio repository esclusivo e fornisce un servizio analitico specializzato. Considerando la versatilità dei compiti di reverse engineering, il server Kam1n0 v2.x fornisce attualmente tre diversi tipi di applicazioni per la ricerca di cloni: Asm-Clone, Sym1n0 e Asm2Vec, e una classificazione degli eseguibili basata su Asm2Vec. Nuovi tipi di applicazione possono essere aggiunti alla piattaforma.
Un utente può creare più istanze di applicazione. Un'istanza di applicazione può essere condivisa tra un gruppo specifico di utenti. L'accesso in lettura/scrittura e lo stato di attivazione del repository dell'applicazione possono essere controllati dal proprietario dell'applicazione. Il server Kam1n0 v2.x può servire le applicazioni contemporaneamente utilizzando diversi pool di risorse condivise.
Kam1n0 è stato sviluppato da Steven H. H. Ding e Miles Q. Li sotto la supervisione di Benjamin C. M. Fung del Data Mining and Security Lab presso la McGill University in Canada. Ha vinto il secondo premio al Hex-Rays Plug-In Contest 2015. Se trovi Kam1n0 utile, ti preghiamo di citare i nostri articoli:
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.
Le applicazioni Asm-Clone tentano di risolvere il problema efficiente della ricerca di sottografi (cioè il problema dell'isomorfismo di grafi) per le funzioni assembly (tempo medio di interrogazione <1.3 s e tempo medio di indicizzazione <30 ms con 2,3 milioni di funzioni). Data una funzione target (quella a sinistra come mostrato sotto), può identificare i sottografi clonati tra altre funzioni nel repository (quella a destra come mostrato sotto).
Ricerca di cloni semantici tramite fuzz testing differenziato e risoluzione di vincoli. Un approccio ibrido dinamico-statico efficiente e scalabile (tempo medio di interrogazione <1 s e tempo medio di indicizzazione <100 ms con 1,5 milioni di funzioni). Data una funzione target (quella a sinistra come mostrato sotto), può identificare i sottografi clonati tra altre funzioni nel repository (quella a destra come mostrato sotto). Supporta la visualizzazione del grafo sintattico astratto.
Asm2Vec sfrutta l'apprendimento di rappresentazioni. Comprende la relazione semantica lessicale del codice assembly. Ad esempio, i registri xmm* sono semanticamente correlati a operazioni vettoriali come addps. memcpy è simile a strcpy. Il grafico seguente mostra diverse funzioni assembly compilate dallo stesso codice sorgente di gmpz_tdiv_r_2exp in libgmp. Da sinistra a destra, le funzioni assembly sono compilate con GCC O0, GCC O3, O-LLVM obfuscator Control Flow Graph, Flattening e LLVM obfuscator Bogus Control Flow Graph. Asm2Vec può identificarle staticamente come cloni.
In questa applicazione, l'utente definisce un insieme di classi software basate sulla correlazione funzionale e fornisce binari appartenenti a ciascuna classe. Quindi il sistema raggruppa automaticamente le funzioni in cluster in cui le funzioni sono collegate direttamente o indirettamente da relazioni di cloni. I cluster che sono discriminanti per la classificazione vengono mantenuti e fungono da firme delle loro classi. Dato un binario target, il sistema mostra il grado di appartenenza a ciascuna classe software.
Utilizza Asm2Vec come modello di calcolo della somiglianza delle funzioni.
La figura seguente mostra i principali componenti dell'interfaccia utente e le funzionalità di Kam1n0 v2.x. Adottiamo un material design. In generale, ogni utente ha un elenco di applicazioni, un elenco di lavori in esecuzione e un elenco di file di risultati.
La versione corrente di Kam1n0 consiste in due installer: il server principale e il plug-in per IDA Pro.
| Installer | Componenti inclusi | Descrizione |
|---|---|---|
| Kam1n0-Server.msi | Motore principale | Motore principale che fornisce il servizio per l'indicizzazione e la ricerca. |
| Workbench | Un'interfaccia utente per gestire i repository e il servizio in esecuzione. | |
| Interfaccia utente web | Interfaccia utente web per cercare/indicizzare file binari e funzioni assembly. | |
| Visual C++ redistributable per VS 15 | Dipendeza per z3. | |
| Kam1n0-IDA-Plugin.msi | Plug-in | Connettori e interfaccia utente. |
| Pacchetti PyPI per Cefpython | Motore di rendering per l'interfaccia utente. | |
| Pacchetti PyPI e dipendenze | Gestione dei pacchetti per Python. Inclusi per IDA 6.8 e 6.9. |
Il motore principale di Kam1n0 è scritto puramente in Java. Hai bisogno delle seguenti dipendenze:
Scarica il file Kam1n0-Server.msi dalla nostra pagina delle release. Segui le istruzioni per installare il server. Ti verrà chiesto di selezionare un percorso di installazione. IDA Pro è opzionale se il server non deve gestire alcun disassemblaggio. In altre parole, il lato client utilizza il plug-in Kam1n0 per IDA Pro. Si consiglia vivamente di avere IDA Pro installato con il server Kam1n0. Il server Kam1n0 rileverà automaticamente il tuo IDA Pro cercando l'applicazione predefinita che usi per aprire file .i64.
Il plug-in Kam1n0 per IDA Pro è scritto in Python per la logica e in HTML/JavaScript per il rendering. Le seguenti dipendenze sono richieste per la sua installazione:
Successivamente, scarica l'installer Kam1n0-IDA-Plugin.msi dalla nostra pagina delle release. Segui le istruzioni per installare il plug-in e il runtime. Tieni presente che il plug-in deve essere installato nella cartella dei plug-in di IDA Pro situata in $IDA_PRO_PATH$/plugins. Ad esempio, su Windows, il percorso potrebbe essere C:/Program Files (x86)/IDA 6.95/plugins. L'installer rileverà e convaliderà il percorso.
Assicurati di avere la versione Oracle di Java 11. (Non default-jdk in apt.)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found), se sei su un proxy, assicurati di impostare ed esportare le variabili d'ambiente http_proxy e https_proxy, e riprova con l'opzione -E su sudo. Inoltre, se ricevi un errore "add-apt repository command not found", prova: sudo apt install -y software-properties-common.sudo apt-get update e sudo apt-get install oracle-java8-installer
java -version; potresti dover impostare manualmente la variabile d'ambiente JAVA_HOME (in /etc/environment), JAVA_HOME=/usr/lib/jvm/java-11-oracleScarica l'ultima release per Linux (Kam1n0-IDA-Plugin.tar.gz e Kam1n0-Server.tar.gz) da Kam1n0-Community.
Estrai i due tarball (es. tar –xvzf Kam1n0-IDA-Plugin.tar.gz e tar –xvzf Kam1n0-Server.tar.gz)
Il file Kam1n0-Server.tar.gz creerà la directory del server.
All'interno della directory server, dovresti vedere un file chiamato kam1n0.properties, dove imposterai varie configurazioni per kam1n0; questo è molto importante.
Imposta kam1n0.data.path sul percorso in cui desideri che i dati relativi a kam1n0 vengano scritti. Noi scegliamo di metterlo nello stesso posto in cui manteniamo il server. kam1n0.ida.home si riferisce a dove si trova la tua installazione di IDA. Commenta questa riga (e kam1n0.ida.batch, la riga successiva) se non hai IDA e non intendi usare kam1n0 per il disassemblaggio. Per maggiori informazioni (accurate) sul file kam1n0.properties, consulta il file kam1n0.properties.explained.
Esegui kam1n0-server-workbench: java -jar kam1n0-server-workbench.jar. Questo dovrebbe far apparire una finestra che ti chiede di avviare kam1n0. In alternativa, esegui kam1n0-server: java -jar kam1n0-server.jar --start. Questo avvia il server dalla console senza finestra.
Per connetterti e usarlo, vai a 127.0.0.1:8571 (la porta predefinita su cui kam1n0 ascolta dovrebbe essere 8571, ma può essere cambiata in kam1n0.properties) nel tuo browser. Dovresti vedere la bella interfaccia web di kam1n0. Da lì, segui il tutorial sul repo Kam1n0-Community se non sai come usare kam1n0.
I repository di codice assembly e i file di configurazione utilizzati nelle versioni precedenti (<2.0.0) non sono più supportati dall'ultima versione. Contattaci se hai bisogno di migrare i tuoi vecchi repository.
Clona l'ultimo branch stabile (non dimenticare --recursive!):```bash
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
## Importazione del progetto.
IntelliJ: Importa la root /kam1n0/kam1n0/ come progetto Maven. Tutti i sottomoduli verranno caricati di conseguenza.
EclipseEE: Aggiungi il repository git clonato alla vista git. Importa tutti i progetti Maven dal repository git.
Potrebbe essere necessario modificare il classpath per risolvere eventuali errori.
Tutti i percorsi delle risorse vengono modificati dinamicamente quando si esegue all'interno di un IDE (tramite il sottomodulo kam1n0-resources).
Per compilare il progetto:```
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
I binari risultanti si trovano in /kam1n0/build-bins/
Per eseguire il codice di test, dovrai prima scaricare chromedriver.exe da http://chromedriver.chromium.org/ e aggiungere il suo percorso assoluto in una variabile d'ambiente chiamata webdriver.chrome.driver. È anche richiesto che sia installato un browser Chrome nel sistema. Il codice di test avvierà un'istanza del browser per testare le interfacce UI. L'intera procedura di test richiederà circa 3 ore.```
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
Questi comandi compilano solo Java con ruote precompilate di libvex e z3. Funziona immediatamente.
La compilazione di libvex e z3 dipende dalla piattaforma. Usiamo un fork di libvex da Angr.
Script di build più seri, così come gli installer per Windows/Linux, sono disponibili in `/kam1n0-builds/`.
* kam1n0: Il codice sorgente del server.
* kam1n0-builds: Codice sorgente dell'installer e script per creare la distribuzione.
* kam1n0-clients: Il codice sorgente dei client.
## Versioni binarie
Abbiamo un server Jenkin per lo sviluppo e la distribuzione continui. L'ultima versione stabile verrà pubblicata qui. Periodicamente sincronizzeremo il nostro ramo sperimentale interno con questo repository.
## Licenza
Il software è stato sviluppato da [Steven H. H. Ding](http://stevending.net/), [Miles Q. Li](http://milesqli.github.io/) e [Benjamin C. M. Fung](http://dmas.lab.mcgill.ca/fung/) presso il [McGill Data Mining and Security Lab](http://dmas.lab.mcgill.ca/) e il [Queen's L1NNA Research Laboratory](https://l1nna.com/) in Canada. È distribuito sotto la licenza Apache versione 2.0. Fare riferimento a [LICENSE.txt](https://github.com/mcgill-dmas/kam1n0-community/blob/master2.x/LICENSE.txt) per i dettagli.
Copyright 2014-2021 McGill University e i Ricercatori. Tutti i diritti riservati.
## Riconoscimenti
-orange.svg?style=for-the-badge)




