
Marco de procesamiento distribuido de malware basado en Python, Redis y S3.
Framework distribuido de procesamiento de malware basado en Python, Redis y S3.
Karton es un framework robusto para crear backends de análisis de malware flexibles y ligeros. Se puede utilizar 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 automatizarlo todo para seguir el ritmo de los incidentes. Por ello, a menudo acabamos con muchos scripts unidos con cinta cinta adhesiva y WD-40. Estos scripts son escritos por analistas en el momento crítico, frágiles y feos, pero funcionan, y producen inteligencia que debe almacenarse, procesarse más a fondo, enviarse a otros sistemas o compartirse 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 monitorizar su ejecución, centralizar el logging, mejorar la robustez, reducir la inercia de desarrollo... Para este propósito exacto, creamos Karton.
* aunque Karton fue diseñado pensando en el análisis de malware, funciona bien en cualquier proyecto orientado a microservicios.
La instalación es tan fácil como un único 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 documentación para más detalles.
Para usar karton tienes que 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 totalmente capacitada).
$ 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 librería por otros sistemas.
Un pequeño dashboard Flask para la gestión y monitorización de tareas y colas.
El "router". 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).
Desempaquetador genérico de archivos. Los archivos subidos al sistema serán extraídos, y cada archivo será procesado 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 propios!
Una parte muy importante del pipeline. El reporter envía todos los archivos, etiquetas, comentarios y otra inteligencia producida durante el análisis a MWDB. Si aún no usas MWDB o simplemente prefieres otros backends, es fácil escribir tu propio reporter.
Ejecuta automáticamente reglas Yara en todos los archivos del pipeline, y etiqueta las muestras apropiadamente. 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 wrapper alrededor de AutoIt-Ripper que extrae scripts y recursos AutoIt incrustados de ejecutables AutoIt compilados.
Sistema automatizado de análisis de malware de caja negra con el motor DRAKVUF bajo el capó, que no requiere un agente en el sistema operativo invitado.
Así es como estos sistemas pueden usarse para formar un pipeline básico de análisis de malware:
Un servicio modular del framework Karton que desempaqueta packers comunes como UPX y otros usando el framework Qiling.
Una utilidad modular rica en características para la extracción de configuración de malware para MalDuck
Clasificador Detect-It-Easy para el framework Karton
Módulo desempaquetador RetDec para el framework Karton
Plataforma de similitud de malware con la modularidad en mente.
Un pipeline escalable de análisis de vulnerabilidades de drivers de Windows.
