Kit de herramientas de relación e investigación de código basado en Minhash (MCRIT)
MCRIT es un marco creado para simplificar la aplicación del algoritmo Minhash en el contexto de la similitud de código. Se puede utilizar para implementar rápidamente "tehipuladores", es decir, métodos que codifican las propiedades de las funciones desmontadas, para ser utilizadas para la estimación de similitud a través del algoritmo Minhash. Se adapta a trabajar con informes de desmontaje emitidos por SMDA.
Uso
Uso dockerizado
Recomendamos encarecidamente usar el Docker-MCRIT totalmente empaquetado para la implementación y el uso trivial.
En primer lugar, esto asegurará que tenga versiones totalmente compatibles en todos los componentes, incluida una base de datos para la persistencia y una interfaz web para una interacción conveniente.
Uso independiente
Instalar MCRIT por sí solo requerirá algunos pasos más.
Para lo siguiente, asumimos que Ubuntu como sistema operativo host.
Los requisitos de instalación de Python se enumeran en requirements.txt y se pueden instalar utilizando:
# install python and MCRIT dependencies
$ sudo apt install python3 python3-pip
$ pip install -r requirements.txt
Por defecto, MongoDB 5.0 se usa como backend, que también es el modo de operación recomendado, ya que proporciona un almacenamiento de datos persistente. Los siguientes comandos describen una instalación de ejemplo en Ubuntu:
# fetch mongodb signing key
$ sudo apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
# add package repository (Ubuntu 22.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 20.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 18.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# install mongodb
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# start mongodb as a service
$ sudo systemctl start mongod
# optionally configure to start the service with system startup
$ sudo systemctl enable mongod
Al realizar la instalación independiente, posiblemente desee instalar el módulo MCRIT basado en el repositorio clonado, como así:
Después de esta instalación inicial y, si se desea, MCRIT se puede usar sin conexión a Internet.
Operación
El backend de MCRIT generalmente se divide en dos componentes, un servidor que proporciona una interfaz API para trabajar y uno o más trabajadores que procesan trabajos en cola. Se pueden iniciar en conchas separadas usando:
y
Por defecto, el servidor REST API escuchará en http://127.0.0.1:8000/.
Interacción
Independientemente de su elección para la instalación, una vez que se ejecute, puede interactuar con el backend MCRIT.
Cliente MCRIT
Hemos creado un módulo de cliente Python que es capaz de trabajar con todos los puntos finales disponibles del servidor.
La documentación para este módulo cliente está actualmente en desarrollo.
MCRIT CLI
También hay una CLI que se basa en este paquete de clientes, ejemplos:
# query some stats of the data stored in the backend
$ python -m mcrit client status
{ ' status ' : { ' db_state ' : 187, ' storage_type ' : ' mongodb ' , ' num_bands ' : 20, ' num_samples ' : 137, ' num_families ' : 14, ' num_functions ' : 129110, ' num_pichashes ' : 25385}}
# submit a malware sample with filename sample_unpacked, using family name "some_family"
$ python -m mcrit client submit sample_unpacked -f some_family
1.039s - > (architecture: intel.32bit, base_addr: 0x10000000): 634 functions Una documentación más extensa de la CLI MCRIT está disponible aquí
Complemento MCRIT IDA
Un complemento IDA también está actualmente en desarrollo. Para usarlo, primero cree su propia config.py y realice los cambios requeridos según la implementación de su instancia de MCRIT:
cp ./plugins/ida/template.config.py ./plugins/ida/config.py
nano ./plugins/ida/config.py
Entonces simplemente ejecute el script que se encuentra en
./plugins/ida/ida_mcrit.py
en Ida.
Datos de referencia
En julio de 2023, comenzamos a poblar un repositorio de GitHub que contiene datos de referencia listos para usar para compiladores y bibliotecas comunes.
Historial de versiones
- 2024-06-20 V1.3.17: La eliminación y la limpieza del trabajo ahora son más robustas y no purgarán accidentalmente las muestras de manera inesperada - @yankovs - ¡gracias!
- 2024-05-10 V1.3.16: La limpieza de la cola también se ha extendido para purgar archivos cargados durante los 3 tipos de consultas (asignadas, sin mape, SMDA).
- 2024-04-17 V1.3.15: Tipo de trabajador
spawningworker ahora terminará a los niños después de queUeconfig.queue_spawningworker_children_timeout segundos. - 2024-04-02 V1.3.14: Experimental: Introducción del nuevo trabajador del tipo de
spawningworker : esta variante consumirá los trabajos de la cola como de costumbre, pero diferir la ejecución real del trabajo en un proceso separado (sub), lo que debería reducir los problemas con las asignaciones de memoria bloqueada. - 2024-04-02 V1.3.13: Al limpiar la cola, ahora también elimina todos los trabajos fallidos @Yankovs-¡gracias!
- 2024-03-06 V1.3.12: Se corrigió un error donde la protección de las muestras recientes de la limpieza de la cola conduciría a errores clave según lo informado por @yankovs-¡Thx!
- 2024-02-21 V1.3.10: Bump SMDA a 1.13.16, que cubre otras 200 instrucciones en una categoría mejor escapada (afecta a Minhashes).
- 2024-02-16 V1.3.9: Función de limpieza de colas automatizada terminada e integrada (deshabilitada por defecto) propuesta por @yankovs-¡Thx!
- 2024-02-15 V1.3.8: Bump SMDA para abordar los problemas con el reconocimiento de versiones en SMDafunción, se corrigieron las impresiones de excepción en la MCRITinterface de Ida Plugin (Thx a @MalwareFrank!).
- 2024-02-12 V1.3.5: Recalcular minhashes ahora mostrará porcentajes correctos (gracias a @malwarefrank !!).
- 2024-02-02 V1.3.4: Mini corrección en el complemento IDA para evitar hacer referencia a un objeto potencialmente no inicializado (¡gracias a @R0NY123!).
- 2024-02-01 V1.3.2: Corrección: la coincidencia no paralelo ahora genera el mismo formato de datos (gracias a @dannyquist !!).
- 2024-01-30 V1.3.1: La conexión con MongoDB ahora es totalmente configurable (gracias a @dannyquist !!).
- 2024-01-24 V1.3.0: Breaking: liberación de hitos con mejoras de indexación para Pichash y Minhash. Para garantizar la compatibilidad completa hacia atrás, se recomienda el recalculación de todas las hashes. Verifique esta guía de migración.
- 2024-01-23 V1.2.26: fijar a 0.13.2 para garantizar que el SMDA fijado permanezca compatible.
- 2024-01-09 V1.2.25: Asegúrese de que podamos entregar el estado del sistema independientemente de si hay un
db_state y db_timestamp o no. - 2024-01-05 V1.2.24: ahora admite el argumento de "consulta" en CLI, así como compactos de MatchingResults (sin información de coincidencia de funciones) para reducir la huella del archivo.
- 2024-01-03 V1.2.23: Limite el tamaño máximo de la exportación para proteger el sistema contra los bloqueos OOM.
- 2024-01-02 V1.2.22: Clase de datos introducida para uniqueblocksResult con funcionalidad de conveniencia.
- 2023-12-28 V1.2.21: Mcritclient ahora hace un paso para la coincidencia de consultas binarias.
- 2023-12-28 V1.2.20: El estado ahora proporciona una marca de tiempo de la última actualización de DB.
- 2023-12-13 V1.2.18: verificación de límites versus sample_ids pasados a getuniqueblocks.
- 2023-12-05 V1.2.15: Funcionalidad de conveniencia agregada a los objetos de trabajo, número de versión alineado con MCRITWEB.
- 2023-11-24 V1.2.11: SMDA fijado a la versión 1.12.7 Antes de actualizar SMDA e introducir una migración de la base de datos para recalcular los hashes PIC + Picblock con la generalización mejorada.
- 2023-11-17 V1.2.10: Capacidad agregada para establecer un token de autorización para el servidor a través del campo de encabezado:
apitoken ; capacidad adicional para filtrar por grupos de trabajo; Capacidad adicional para fallar los trabajos huérfanos. - 2023-10-17 V1.2.8: Solución menor en grupos de trabajo.
- 2023-10-16 V1.2.6: Estadísticas de colas resumidas, clasificación de trabajo refinado.
- 2023-10-13 V1.2.4: La eliminación de cola/trabajo expuesta a la interfaz REST, la velocidad de consulta mejorada para varias búsquedas de colas a través de la indexación y consultas de MongoDB parametrizadas.
- 2023-10-13 V1.2.3: Los trabajadores ahora se registrarán de los trabajos en progreso en caso de que se bloqueen (gracias a @yankovs para la plantilla de código).
- 2023-10-03 V1.2.2: Filtrado de MatchingResult para muestras de NUM MIN/MAX (incl. Fuera).
- 2023-10-02 V1.2.0: liberación de hitos para el boletín de virus 2023.
- 2023-09-18 V1.1.7: Fije de errores: Tasking Matching con 0 bandas ahora Desactiva la coincidencia de Minhash como se suponía que debía ser antes. También coincidía con el porcentaje de progreso del trabajo fijado.
- 2023-09-15 v1.1.6: interrupción de errores en la funcionalidad de bloques y conveniencia para interactuar con objetos de trabajo.
- 2023-09-14 V1.1.5: Gunicorn desactivado como manejador WSGI predeterminado por el momento debido a problemas con llamadas no retorno al manejar llamadas de cómputo.
- 2023-09-14 V1.1.4: Bugfix: Se agregó
requirements.txt a data_files en setup.py para asegurarse de que esté disponible para el paquete. - 2023-09-13 V1.1.3: Extraí algunas constantes críticas de rendimiento en parámetros configurables en MinhashConfig y StoraGeconfig, informes de progreso fijos para la coincidencia de coincidencia llagada, la interrupción de errores: el uso de GunicornConfig a la data de datos adecuada.
- 2023-09-13 V1.1.1: Requisitos / configuración simplificados,
gunicorn excluidos para Windows (¡gracias a @yankovs!). - 2023-09-12 V1.1.0: Para las implementaciones de Linux, MCRIT ahora usa
gunicorn en lugar de waitress como servidor WSGI debido a un rendimiento mucho mejor. Como Gunicorn necesita su propia configuración, esto requirió golpear las versiones menores (¡gracias a @yankovs!). - 2023-09-08 V1.0.21: Todos los métodos de McritClient ahora avanzan apitokens/usernames al backend.
- 2023-09-05 V1.0.20: Use dos complementos para representar direcciones en Sampleentry, Funcionentry al almacenar en MongoDB para abordar las limitaciones de BSON (gracias a @yankovs).
- 2023-09-05 V1.0.19: Las estadísticas ahora están utilizando los contadores internos que se habían creado hace un tiempo (gracias a @yankovs).
- 2023-08-30 V1.0.18: puntuación refinada de Linkhunt y agrupación de resultados a través de la relación ICFG.
- 2023-08-24 V1.0.15: Primer intento integrado de capacidad de caza de enlaces en MatchingResult.
- 2023-08-24 V1.0.13: La reconstrucción de las bandas de Minhash ya no explotará el uso de RAM. Reducir las verificaciones de ruta redundantes (gracias a @yankovs).
- 2023-08-23 V1.0.12: Se agregó la capacidad de reconstruir las bandas Minhash utilizadas para la indexación.
- 2023-08-22 V1.0.11: Se corrigió un error en el que al importar datos masivos, el
function_name también se agregó como function_label . - 2023-08-11 V1.0.10: Se corrigió un error en el que al importar datos masivos, el function_ID no se ajustaría antes de agregar minhashes a las bandas, posiblemente conduciendo a funciones no existentes.
- 2023-08-02 V1.0.9: El complemento IDA ahora puede filtrar por tamaño de bloque y puntaje Minhash, diseño optimizado y experiencia de usuario (gracias por los comentarios a @R0NY123!)
- 2023-07-28 V1.0.8: El complemento IDA ahora puede mostrar gráficos coloreados para funciones remotas y hacer consultas para Picblockhashes (para bloques básicos) para la función vista actualmente.
- 2023-06-06 V1.0.7: Capacidades de filtrado extendidas en MatchingResult.
- 2023-06-02 V1.0.6: El complemento de IDA ahora puede coincidir los trabajos de coincidencia, mostrar sus resultados y las etiquetas de importación por lotes. Armonización de MatchingResult.
- 2023-05-22 V1.0.3: Más robustez para la verificación de ruta cuando se usa MCRIT CLI en la carpeta de repo de Malpedia.
- 2023-05-12 V1.0.1: algunos progresos en la importación de etiquetas para el complemento IDA. Extensión API reflejada de MCRITWEB en McritClient.
- 2023-04-10 V1.0.0: Liberación de hitos para BOTCONF 2023.
- 2023-04-10 V0.25.0: El complemento IDA ahora puede hacer consultas de funciones para la función vista actualmente.
- 2023-03-24 V0.24.2: McritClient puede reenviar el nombre de usuario/Apitoken, AddjsonReport ahora es reenviado.
- 2023-03-21 V0.24.0: FunctionEntries ahora puede almacenar functionLabelentries adicionales, a lo largo de la envío del usuario/fecha.
- 2023-03-17 V0.23.0: Ahora es posible consultar coincidencias para SMDafunctions individuales (sincrónicamente).
- 2023-03-15 V0.22.0: McritClient ahora admite apitokens y respuestas sin procesar para un subconjunto de funcionalidad.
- 2023-03-14 V0.21.0: Soporte de back-end para un filtrado de grano más fino.
- 2023-03-13 V0.20.6: Soporte de backend para filtrar la familia/muestra por puntaje en MatchResult.
- 2023-02-22 V0.20.4: interrupción de errores para calcular puntajes únicos y acceder a estos resultados.
- 2023-02-21 V0.20.3: Capacidades de frontend de soporte con la presentación de resultados.
- 2023-02-17 V0.20.2: OBJETO DE INFORME DE MATCHO EXTENDIDO para admitir mejoras de frontend.
- 2023-02-14 V0.20.0: Cliente de consola revisada para simplificar las interacciones basadas en el shell con el backend.
- 2023-01-12 V0.19.4: Capacidades de filtrado adicionales para los resultados de coincidencia.
- 2022-12-13 V0.19.1: Ahora es posible requerir cantidades específicas (más altas) de partidos de banda para candidatos (es decir, reducir la confusión de la coincidencia).
- 2022-12-13 V0.18.X: Habilitar la coincidencia de ID de función arbitraria.
- 2022-11-25 V0.18.9: coincidencia de consulta acelerada.
- 2022-11-18 V0.18.8: Manejo armonizado de deleción y modificaciones, soluciones menores.
- 2022-11-13 V0.18.7: Deleción de muestra acelerada drásticamente.
- 2022-11-13 V0.18.6: Se agregó funcionalidad para modificar la información existente de muestra y la familia.
- 2022-11-11 V0.18.2: Actualización del procedimiento de correspondencia, ahora debería poder manejar binarios más grandes de manera más robusta y eficiente.
- 2022-11-03 V0.18.1: soluciones menores.
- 2022-11-03 V0.18.0: El aislamiento de bloque único ahora también genera una propuesta para una regla Yara, la salida de resultados reestructurado.
- 2022-10-24 V0.17.4: armonizado setup.py con requisitos, eficiencia de memoria mejorada para procesar trabajos cruzados.
- 2022-10-18 V0.17.3: Se agregó un script de conveniencia para producir informes de SMDA de manera recursiva desde una carpeta semiestructurada.
- 2022-10-13 V0.17.2: Problemas de OOM potenciales fijos durante el cálculo de Minhash mediante el procesamiento de funciones que se cuestionarán en lotes más pequeños.
- 2022-10-12 V0.17.1: Se agregó una función para programar un trabajo que garantice que los minhashes se hayan calculado para todas las muestras/funciones.
- 2022-10-11 V0.17.0: La búsqueda de bloques únicos ahora es un trabajo asicrónico a través del trabajador.
- 2022-10-11 V0.16.0: Las muestras de los trabajos de MatchQuery ahora se almacenarán con su muestra/funcionamiento de funciones para permitir un mejor procesamiento posterior.
- 2022-10-04 V0.15.4: El servidor ahora puede mostrar su versión.
- 2022-09-28 V0.15.3: Abordar problemas de rendimiento para instancias más grandes, generando secuencia de instrucciones escapadas para bloques únicos.
- 2022-09-26 V0.15.0: Crossjobs ahora en backend, comenzó a proporcionar funcionalidad para identificar bloques básicos únicos en las muestras.
- 2022-08-29 V0.14.2: soluciones menores para la implementación.
- 2022-08-22 V0.14.0: Los trabajos ahora pueden depender de otros trabajos (preparación para mudarse de trabajo cruzado para back-end), mejoras de calidad de vida al manejo de empleo.
- 2022-08-17 V0.13.1: Opción de línea de comandos agregada para perfiles (requiere CProfile).
- 2022-08-09 V0.13.0: ahora puede hacer consultas directas eficientes para los partidos Pichash y Picblockhash.
- 2022-08-09 V0.12.3: Bugfix for FamilyEntry
- 2022-08-08 V0.12.2: corrfix de errores para la entrega de datos XCFG, agregó la dependencia faltante.
- 2022-08-08 V0.12.0: Sintaxis de búsqueda avanzada integrada.
- 2022-08-03 V0.11.0: (que se rompe) ahora las familias ahora están representadas con una familia.
- 2022-08-03 V0.10.3: ahora dejando datos de función XCFG de forma predeterminada en DB, el acceso expuesto a él a través de REST API y MCRITClient.
- 2022-07-29 V0.10.2: Capacidad agregada para eliminar familias, ahora también mantiene la información de XCFG para todas las funciones de forma predeterminada.
- 2022-07-12 V0.10.1: rendimiento mejorado.
- 2022-07-12 V0.10.0: (Rompiendo) El manejo del trabajo simplificado.
- 2022-05-13 V0.9.4: corrección de errores para recibir archivos enviados.
- 2022-05-13 V0.9.3: Actualizaciones adicionales a MatchingResults.
- 2022-05-13 V0.9.2: Se agregó otro campo y más funciones de conveniencia en MatchingResult para un mejor acceso: esos están rompiendo cambios para MatchingResults creados anteriormente.
- 2022-05-05 V0.9.1: Procesamiento de presentaciones binarias, soluciones menores para la cola Minhash-Liberación inicial.
- 2022-02-09 V0.9.0: Se agregaron bloques de picbras a MCRIT.
- 2022-01-19 V0.8.0: migró el cliente y los ejemplos en el repositorio MCRIT primario.
- 2021-12-16 V0.7.0: lanzamiento privado inicial.
Créditos y notas
¡Gracias a Steffen Enders y Paul Hordiienko por sus contribuciones al prototipo de investigación interna de este proyecto! ¡Gracias a Manuel Blatt por sus extensas contribuciones y refactorizaciones de este proyecto, así como por el módulo del cliente!
¡Solicitud de solicitud de bienvenida! :)
Licencia
MinHash-based Code Relationship & Investigation Toolkit (MCRIT)
Copyright (C) 2022 Daniel Plohmann, Manuel Blatt
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Some plug-ins and libraries may have different licenses.
If so, a license file is provided in the plug-in's folder.