Kam1n0 v2.x es una plataforma escalable de análisis y gestión de ensamblajes. Permite al usuario indexar primero una colección (grande) de archivos binarios en diferentes repositorios y proporcionar diferentes servicios analíticos, como búsqueda y clasificación de clones. Admite el acceso multiinquilino y la gestión de repositorios de ensamblaje mediante el concepto de Aplicación . Una instancia de aplicación contiene su propio repositorio exclusivo y proporciona un servicio analítico especializado. Teniendo en cuenta la versatilidad de las tareas de ingeniería inversa, el servidor Kam1n0 v2.x actualmente proporciona tres tipos diferentes de aplicaciones de búsqueda de clones: Asm-Clone , Sym1n0 y Asm2Vec , y una clasificación ejecutable basada en Asm2Vec . Se pueden agregar nuevos tipos de aplicaciones a la plataforma.
Un usuario puede crear múltiples instancias de aplicación. Una instancia de aplicación se puede compartir entre un grupo específico de usuarios. El propietario de la aplicación puede controlar el acceso de lectura y escritura del repositorio de aplicaciones y el estado de activación y desactivación. El servidor Kam1n0 v2.x puede servir las aplicaciones simultáneamente utilizando varios grupos de recursos compartidos.
Kam1n0 fue desarrollado por Steven HH Ding y Miles Q. Li bajo la supervisión de Benjamin CM Fung del Laboratorio de Seguridad y Minería de Datos de la Universidad McGill en Canadá. Ganó el segundo premio en el concurso de complementos Hex-Rays 2015. Si encuentra útil Kam1n0, cite nuestro artículo:
SHH Ding, BCM Fung y P. Charland. Kam1n0: Búsqueda de clones de ensamblaje basada en MapReduce para ingeniería inversa. En Actas de la 22ª Conferencia Internacional ACM SIGKDD sobre Descubrimiento de Conocimiento y Minería de Datos (SIGKDD) , páginas 461-470, San Francisco, CA: ACM Press, agosto de 2016.
SHH Ding, BCM Fung y P. Charland. Asm2Vec: mejora de la solidez de la representación estática para la búsqueda de clones binarios frente a la ofuscación del código y la optimización del compilador. En Actas del 40.º Simposio IEEE sobre Seguridad y Privacidad (S&P) , 18 páginas, San Francisco, CA: IEEE Computer Society, mayo de 2019.
Las aplicaciones Asm-Clone intentan resolver el problema de búsqueda eficiente de subgrafos (es decir, el problema de isomorfismo de gráficos) para funciones de ensamblaje (<1,3 segundos de tiempo promedio de consulta y <30 ms de tiempo promedio de índice con 2,3 millones de funciones). Dada una función de destino (la de la izquierda como se muestra a continuación), puede identificar los subgrafos clonados entre otras funciones en el repositorio (la de la derecha como se muestra a continuación).
Búsqueda de clones semánticos mediante pruebas de fuzz diferenciadas y resolución de restricciones. Un enfoque híbrido dinámico-estático eficiente y escalable (tiempo de consulta promedio <1 s y tiempo de índice promedio <100 ms con 1,5 millones de funciones). Dada una función de destino (la de la izquierda como se muestra a continuación), puede identificar los subgrafos clonados entre otras funciones en el repositorio (la de la derecha como se muestra a continuación). Admite visualización de gráficos de sintaxis abstracta.
Asm2Vec aprovecha el aprendizaje de representación. Comprende la relación léxica-semántica del código ensamblador. Por ejemplo, los registros xmm*
están relacionados semánticamente con operaciones vectoriales como addps
. memcpy
es similar a strcpy
. El siguiente gráfico muestra diferentes funciones ensambladoras compiladas a partir del mismo código fuente de gmpz_tdiv_r_2exp
en libgmp. De izquierda a derecha, las funciones de ensamblaje se compilan con la opción GCC O0, la opción GCC O3, el gráfico de flujo de control del ofuscador O-LLVM, la opción de aplanamiento y la opción gráfico de flujo de control falso del ofuscador LLVM. Asm2Vec puede identificarlos estáticamente como clones.
En esta aplicación, el usuario define un conjunto de clases de software que se basan en la relación funcional y proporciona archivos binarios que pertenecen a cada clase. Luego, el sistema agrupa automáticamente funciones en grupos en los que las funciones están conectadas directa o indirectamente mediante una relación de clonación. Los clusters que son discriminativos para la clasificación se conservan y sirven como firmas de sus clases. Dado un binario de destino, el sistema muestra el grado en que pertenece a cada clase de software.
Utilice Asm2Vec como modelo de cálculo de similitud de funciones
La siguiente figura muestra los principales componentes y funcionalidades de la interfaz de usuario de Kam1n0 v2.x. Adoptamos un diseño de materiales. En general, cada usuario tiene una lista de aplicaciones, una lista de trabajos en ejecución y una lista de archivos de resultados.
La versión actual de Kam1n0 consta de dos instaladores: el servidor central y el complemento IDA Pro.
Instalador | Componentes incluidos | Descripción |
---|---|---|
Kam1n0-Servidor.msi | motor central | Motor principal que brinda servicio de indexación y búsqueda. |
Banco de trabajo | Una interfaz de usuario para administrar los repositorios y el servicio en ejecución. | |
interfaz de usuario web | Interfaz de usuario web para buscar/indexar archivos binarios y funciones de ensamblaje. | |
Visual C++ redistribuible para VS 15 | Dependencia para z3. | |
Kam1n0-IDA-Plugin.msi | Complemento | Conectores e interfaz de usuario. |
Ruedas PyPI para Cefpython | Motor de renderizado para la interfaz de usuario. | |
PyPI y ruedas dependientes | Gestión de paquetes para Python. Incluido para IDA 6.8 y 6.9. |
El motor central Kam1n0 está escrito exclusivamente en Java. Necesita las siguientes dependencias:
Descargue el archivo Kam1n0-Server.msi
desde nuestra página de lanzamiento. Siga las instrucciones para instalar el servidor. Se le pedirá que seleccione una ruta de instalación. IDA Pro es opcional si el servidor no tiene que lidiar con ningún desmontaje. En otras palabras, el lado del cliente utiliza el complemento Kam1n0 para IDA Pro. Se recomienda encarecidamente instalar IDA Pro con el servidor Kam1n0. El servidor Kam1n0 detectará automáticamente su IDA Pro buscando la aplicación predeterminada que utilizó para abrir el archivo .i64
.
El complemento Kam1n0 IDA Pro está escrito en Python para la lógica y en HTML/JavaScript para la representación. Se requieren las siguientes dependencias para su instalación:
A continuación, descargue el instalador Kam1n0-IDA-Plugin.msi
desde nuestra página de lanzamiento. Siga las instrucciones para instalar el complemento y el tiempo de ejecución. Tenga en cuenta que el complemento debe instalarse en la carpeta de complementos de IDA Pro que se encuentra en $IDA_PRO_PATH$/plugins
. Por ejemplo, en Windows, la ruta podría ser C:/Program Files (x86)/IDA 6.95/plugins
. El instalador detectará y validará la ruta.
Asegúrese de tener la versión Oracle de Java 11. (No default-jdk en apt.)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found
), si está en un proxy, asegúrese de configurar y exportar sus variables de entorno http_proxy
y https_proxy
, y luego intente nuevamente con la opción -E
en sudo. Además, si recibe el error 'add-apt repository command not found', intente: sudo apt install -y software-properties-common
.sudo apt-get update
y sudo apt-get install oracle-java8-installer
java -version
; es posible que necesite configurar manualmente la variable de entorno JAVA_HOME (en /etc/environment
), JAVA_HOME=/usr/lib/jvm/java-11-oracle
Descargue la última versión para Linux (Kam1n0-IDA-Plugin.tar.gz y Kam1n0-Server.tar.gz) desde Kam1n0-Community.
Extraiga los dos archivos tar (es decir, tar –xvzf Kam1n0-IDA-Plugin.tar.gz y tar –xvzf Kam1n0-Server.tar.gz)
El archivo Kam1n0-Server.tar.gz creará el directorio del servidor.
Dentro del directorio server
, debería ver un archivo llamado kam1n0.properties
, que es donde establecerá varias configuraciones para kam1n0; esto es muy importante.
Establezca kam1n0.data.path
en el lugar donde desea que se escriban los datos relacionados con kam1n0. Elegimos ponerlo en el mismo lugar donde guardamos nuestro server
. kam1n0.ida.home
hace referencia a dónde se encuentra su instalación IDA. Comente esta línea (y kam1n0.ida.batch
, la línea siguiente) si no tiene IDA y no planea usar kam1n0 para el desmontaje. Para obtener más información (precisa) sobre el archivo kam1n0.properties
, consulte el archivo kam1n0.properties.explained
.
Ejecute kam1n0-server-workbench: java -jar kam1n0-server-workbench.jar
. Esto debería hacer que aparezca una ventana emergente que le solicita que inicie kam1n0. Alternativamente, ejecute kam1n0-server: java -jar kam1n0-server.jar --start
. Esto inicia el servidor desde la consola sin ventana.
Para conectarlo y usarlo, vaya a 127.0.0.1:8571
(el puerto de escucha predeterminado kam1n0 debe ser 8571, pero se puede cambiar en kam1n0.properties) en su navegador. Deberías ver la bonita interfaz de usuario web kam1n0. A partir de ahí, siga el tutorial en el repositorio Kam1n0-Community si no sabe cómo usar kam1n0.
Los repositorios de código ensamblador y los archivos de configuración utilizados en versiones anteriores (<2.0.0) ya no son compatibles con la última versión. Comuníquese con nosotros si necesita migrar sus repositorios antiguos.
Clona la última rama estable (¡no olvides --recursive
!):
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ: importe la raíz /kam1n0/kam1n0/ como un proyecto maven. Todos los submódulos se cargarán en consecuencia. EclipseEE: agregue el repositorio git clonado a la vista git. Importe todos los proyectos de Maven desde el repositorio de git. Es posible que deba modificar el classpath para solucionar cualquier error. Todas las rutas de recursos se modifican dinámicamente cuando se ejecutan dentro de un IDE (a través del submódulo kam1n0-resources).
Para construir el proyecto:
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
Los binarios resultantes se pueden encontrar en /kam1n0/build-bins/
Para ejecutar el código de prueba, primero deberá descargar chromedriver.exe
desde http://chromedriver.chromium.org/ y agregar su ruta absoluta a una variable de entorno denominada webdriver.chrome.driver
. También es necesario que haya un navegador Chrome instalado en el sistema. El código de prueba iniciará una instancia del navegador para probar las interfaces de la interfaz de usuario. El procedimiento de prueba completo durará aproximadamente 3 horas.
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
Estos comandos solo compilan Java con ruedas precompiladas de libvex y z3. Funciona de inmediato. La compilación de libvex y z3 depende de la plataforma. Usamos un tenedor de libvex de Angr. Se pueden encontrar scripts de compilación más serios, así como instaladores para Windows/Linux, en /kam1n0-builds/.
Contamos con un servidor Jenkin para desarrollo y entrega continuos. La última versión estable se publicará aquí. Periódicamente sincronizaremos nuestra rama experimental interna con este repositorio.
El software fue desarrollado por Steven HH Ding, Miles Q. Li y Benjamin CM Fung en el Laboratorio de Seguridad y Minería de Datos McGill y el Laboratorio de Investigación L1NNA de Queen en Canadá. Se distribuye bajo la licencia Apache versión 2.0. Consulte LICENCIA.txt para obtener más detalles.
Copyright 2014-2021 Universidad McGill y los investigadores. Reservados todos los derechos.