
Framework distribuído de processamento de malware baseado em Python, Redis e S3.
Framework distribuído de processamento de malware baseado em Python, Redis e S3.
Karton é um framework robusto para criar backends de análise de malware flexíveis e leves. Pode ser usado para conectar sistemas de análise de malware* em um pipeline robusto com muito pouco esforço.
Estamos no ramo de automação há muito tempo. Lidamos com cada vez mais ameaças, e temos que automatizar tudo para acompanhar os incidentes. Por causa disso, muitas vezes acabamos com muitos scripts presos com fita de pato adesiva e WD-40. Esses scripts são escritos por analistas no calor do momento, frágeis e feios - mas funcionam, e produzem inteligência que deve ser armazenada, processada posteriormente, enviada a outros sistemas ou compartilhada com outras organizações.
Precisávamos de uma maneira de pegar nossos scripts PoC e inseri-los facilmente em nosso pipeline de análise. Também queríamos monitorar sua execução, centralizar o logging, melhorar a robustez, reduzir a inércia de desenvolvimento... Para esse propósito exato, criamos o Karton.
* embora o Karton tenha sido projetado com a análise de malware em mente, ele funciona bem em qualquer projeto orientado a microsserviços.
A instalação é tão fácil quanto um único comando pip install:
pip3 install karton-core
Para configurar todo o ambiente de backend você também precisará de armazenamento compatível com S3 e Redis, veja a documentação para detalhes.
Para usar o karton você deve fornecer uma classe que herde 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 pacote também fornece um utilitário de linha de comando chamado "karton". Você pode usá-lo para tarefas simples de gerenciamento (mas não foi projetado como uma ferramenta de gerenciamento totalmente capaz).
$ 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)
Alguns sistemas Karton são universais e úteis para todos. Decidimos compartilhá-los com a comunidade.
Este repositório. Ele contém o serviço karton.system - serviço principal, responsável por despachar tarefas dentro do sistema. Ele também contém o módulo karton.core, que é usado como biblioteca por outros sistemas.
Um pequeno dashboard Flask para gerenciamento e monitoramento de tarefas e filas.
O "roteador". Ele reconhece amostras/arquivos e produz vários tipos de tarefas dependendo do formato do arquivo. Graças a isso, outros sistemas podem apenas escutar por tarefas com um formato específico (por exemplo, apenas arquivos zip).
Descompactador genérico de arquivos. Arquivos enviados ao sistema serão extraídos, e cada arquivo será processado individualmente.
Extrator de malware. Ele usa regras Yara e módulos Python para extrair configuração estática de amostras de malware e análises. É uma vara de pescar, não um peixe - não compartilhamos os módulos em si. Mas é fácil escrever os seus próprios!
Uma parte muito importante do pipeline. O reporter envia todos os arquivos, tags, comentários e outras inteligências produzidas durante a análise para o MWDB. Se você ainda não usa o MWDB ou apenas prefere outros backends, é fácil escrever o seu próprio reporter.
Executa automaticamente regras Yara em todos os arquivos do pipeline, e marca as amostras apropriadamente. Regras não incluídas ;).
Sistema Karton que decodifica arquivos codificados com métodos comuns, como hex, base64, etc. (Você não acreditaria como isso é comum).
Um pequeno wrapper em torno do AutoIt-Ripper que extrai scripts e recursos AutoIt embutidos de executáveis AutoIt compilados.
Sistema automatizado de análise de malware black-box com o motor DRAKVUF por baixo, que não requer um agente no sistema operacional convidado.
É assim que esses sistemas podem ser usados para formar um pipeline básico de análise de malware:
Um serviço modular do framework Karton que descompacta packers comuns como UPX e outros usando o framework Qiling.
Um utilitário modular rico em recursos para extração de configuração de malware para MalDuck
Classificador Detect-It-Easy para o framework Karton
Módulo descompactador RetDec para o framework Karton
Plataforma de similaridade de malware com modularidade em mente.
Um pipeline escalável de análise de vulnerabilidades de drivers do Windows.
