
Marco de procesamiento distribuido de malware basado en Python, Redis y S3.
Marco de procesamiento de malware distribuido basado en Python, Redis y S3.
Karton es un marco robusto para crear backends de análisis de malware flexibles y ligeros. Se puede usar para conectar sistemas de análisis de malware* en un pipeline robusto con muy poco esfuerzo.
Llevamos mucho tiempo en el negocio de la automatización. Nos enfrentamos a cada vez más amenazas, y tenemos que automatizar todo para seguir el ritmo de los incidentes. Debido a esto, a menudo terminamos con muchos scripts unidos con cinta de pato aislante y WD-40. Estos scripts son escritos por analistas en el fragor del momento, frágiles y feos, pero funcionan, y producen inteligencia que debe ser almacenada, procesada más a fondo, enviada a otros sistemas o compartida con otras organizaciones.
Necesitábamos una forma de tomar nuestros scripts PoC e insertarlos fácilmente en nuestro pipeline de análisis. También queríamos monitorear su ejecución, centralizar el registro, mejorar la robustez, reducir la inercia de desarrollo... Para este mismo propósito, creamos Karton.
* aunque Karton fue diseñado pensando en el análisis de malware, funciona muy bien en cualquier proyecto orientado a microservicios.
La instalación es tan sencilla como un solo comando pip install:
pip3 install karton-core
Para configurar todo el entorno backend también necesitarás almacenamiento compatible con S3 y Redis, consulta la para más detalles.
Para usar karton debes proporcionar una clase que herede de Karton.
from karton.core import Karton, Task, Resource
class GenericUnpacker(Karton):
"""
Performs sample unpacking
"""
identity = "karton.generic-unpacker"
filters = [
{
"type": "sample",
"kind": "runnable",
"platform": "win32"
}
]
def process(self, task: Task) -> None:
# Get sample object
packed_sample = task.get_resource('sample')
# Log with self.log
self.log.info(f"Hi {packed_sample.name}, let me analyze you!")
...
# Send our results for further processing or reporting
task = Task(
{
"type": "sample",
"kind": "raw"
}, payload = {
"parent": packed_sample,
"sample": Resource(filename, unpacked)
})
self.send_task(task)
if __name__ == "__main__":
GenericUnpacker.main()
Este paquete también proporciona una utilidad de línea de comandos llamada "karton". Puedes usarla para tareas simples de gestión (pero no está diseñada como una herramienta de gestión completa).
$ karton configure # create a new configuration file
$ karton list -s # list current binds
karton name version karton
------------------------------------------------------------------------
karton.yaramatcher 1.2.0 5.3.0
karton.autoit-ripper 1.2.1 5.3.3
karton.mwdb-reporter 1.3.0 5.3.2
$ karton logs # start streaming all system logs
$ karton delete karton.something # remove unused bind (will be GCed by system during the next operation)
Algunos sistemas Karton son universales y útiles para todos. Decidimos compartirlos con la comunidad.
Este repositorio. Contiene el servicio karton.system - servicio principal, responsable de despachar tareas dentro del sistema. También contiene el módulo karton.core, que se utiliza como biblioteca por otros sistemas.
Un pequeño panel de Flask para la gestión y monitoreo de tareas y colas.
El 'enrutador'. Reconoce muestras/archivos y produce varios tipos de tareas dependiendo del formato del archivo. Gracias a esto, otros sistemas pueden escuchar solo tareas con un formato específico (por ejemplo, solo archivos zip).
Descompresor de archivos genérico. Los archivos subidos al sistema se extraerán y cada archivo se procesará individualmente.
Extractor de malware. Utiliza reglas Yara y módulos Python para extraer configuración estática de muestras de malware y análisis. Es una caña de pescar, no un pez - no compartimos los módulos en sí. ¡Pero es fácil escribir los tuyos!
Una parte muy importante del pipeline. El reportero envía todos los archivos, etiquetas, comentarios y otra inteligencia producida durante el análisis a MWDB. Si aún no usas MWDB o prefieres otros backends, es fácil escribir tu propio reportero.
Ejecuta automáticamente reglas Yara en todos los archivos del pipeline, y etiqueta las muestras adecuadamente. Reglas no incluidas ;).
Sistema Karton que decodifica archivos codificados con métodos comunes, como hex, base64, etc. (No creerías lo común que es).
Un pequeño envoltorio alrededor de AutoIt-Ripper que extrae scripts y recursos AutoIt incrustados de ejecutables AutoIt compilados.
Sistema automatizado de análisis de malware en caja negra con el motor DRAKVUF bajo el capó, que no requiere un agente en el SO invitado.
Un servicio modular del marco Karton que desempaqueta empaquetadores comunes como UPX y otros usando el marco Qiling.
Una utilidad modular rica en funciones para la extracción de configuración de malware para MalDuck
Clasificador Detect-It-Easy para el marco Karton
Módulo desempaquetador de RetDec para el marco Karton
Plataforma de similitud de malware pensada en la modularidad.
Un pipeline escalable de análisis de vulnerabilidades de controladores de Windows.
