
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 unidos com pato fita 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 para outros sistemas ou compartilhada com outras organizações.
Precisávamos de uma maneira de pegar nossos scripts de prova de conceito e inseri-los facilmente em nosso pipeline de análise. Também queríamos monitorar sua execução, centralizar logs, 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 backend, você também precisará de armazenamento compatível com S3 e Redis, consulte 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):
"""
Realiza a descompactação de amostras
"""
identity = "karton.generic-unpacker"
filters = [
{
"type": "sample",
"kind": "runnable",
"platform": "win32"
}
]
def process(self, task: Task) -> None:
# Obtém o objeto da amostra
packed_sample = task.get_resource('sample')
# Log com self.log
self.log.info(f"Olá {packed_sample.name}, deixe-me analisar você!")
...
# Envia nossos resultados para processamento ou relatório adicional
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 funcional).
$ karton configure # cria um novo arquivo de configuração
$ karton list -s # lista os vínculos atuais
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 # inicia a transmissão de todos os logs do sistema
$ karton delete karton.something # remove vínculo não utilizado (será coletado pelo sistema durante a próxima operação)
Alguns sistemas Karton são universais e úteis para todos. Decidimos compartilhá-los com a comunidade.
Este repositório. Contém o serviço karton.system — serviço principal, responsável por despachar tarefas dentro do sistema. Também contém o módulo karton.core, que é usado como biblioteca por outros sistemas.
Um pequeno painel 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 escutar apenas tarefas com um formato específico (por exemplo, apenas arquivos zip).
Descompactador de arquivos genérico. Arquivos enviados ao sistema serão extraídos, e cada arquivo será processado individualmente.
Extrator de malware. 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 o seu próprio!
Uma parte muito importante do pipeline. O reporter envia todos os arquivos, tags, comentários e outras informações produzidas durante a análise para o MWDB. Se você ainda não usa o MWDB ou prefere outros backends, é fácil escrever seu próprio reporter.
Executa automaticamente regras Yara em todos os arquivos do pipeline e marca as amostras adequadamente. 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 AutoIt incorporados e recursos de executáveis AutoIt compilados.
Sistema automatizado de análise de malware em caixa-preta com o mecanismo DRAKVUF nos bastidores, que não requer um agente no sistema operacional convidado.
Assim é como 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 empacotadores comuns como UPX e outros usando o Qiling Framework.
Um utilitário de extração de configuração de malware modular e rico em recursos 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 Windows.
