
Framework distribuito per l'elaborazione di malware basato su Python, Redis e S3.
Framework distribuito per l'elaborazione di malware basato su Python, Redis e S3.
Karton è un framework robusto per creare backend di analisi malware flessibili e leggeri. Può essere usato per connettere sistemi di analisi malware* in una pipeline robusta con pochissimo sforzo.
Siamo nel settore dell'automazione da molto tempo. Gestiamo sempre più minacce e dobbiamo automatizzare tutto per stare al passo con gli incidenti. Per questo motivo, spesso ci ritroviamo con molti script incollati insieme con nastro adesivo da anatra e WD-40. Questi script sono scritti dagli analisti nell'urgenza del momento, fragili e brutti - ma funzionano e producono intelligence che deve essere archiviata, ulteriormente elaborata, inviata ad altri sistemi o condivisa con altre organizzazioni.
Avevamo bisogno di un modo per prendere i nostri script PoC e inserirli facilmente nella nostra pipeline di analisi. Volevamo anche monitorarne l'esecuzione, centralizzare il logging, migliorare la robustezza, ridurre l'inerzia di sviluppo... Per questo scopo preciso, abbiamo creato Karton.
* mentre Karton è stato progettato pensando all'analisi malware, funziona bene in ogni progetto orientato ai microservizi.
L'installazione è semplice come un singolo comando pip install:
pip3 install karton-core
Per configurare l'intero ambiente backend avrai anche bisogno di uno storage compatibile con S3 e Redis, consulta la documentazione per i dettagli.
Per utilizzare karton devi fornire una classe che eredita da 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()
Questo pacchetto fornisce anche un'utilità da riga di comando chiamata "karton". Puoi usarla per semplici attività di gestione (ma non è progettata come uno strumento di gestione completo).
$ 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)
Alcuni sistemi Karton sono universali e utili a tutti. Abbiamo deciso di condividerli con la comunità.
Questo repository. Contiene il servizio karton.system - il servizio principale, responsabile dell'invio dei compiti all'interno del sistema. Contiene anche il modulo karton.core, usato come libreria da altri sistemi.
Una piccola dashboard Flask per la gestione e il monitoraggio di compiti e code.
Il "router". Riconosce campioni/file e produce vari tipi di compito a seconda del formato del file. Grazie a ciò, altri sistemi possono ascoltare solo i compiti con un formato specifico (ad esempio, solo archivi zip).
Spacchettatore generico di archivi. Gli archivi caricati nel sistema verranno estratti e ogni file verrà elaborato individualmente.
Estrattore di malware. Utilizza regole Yara e moduli Python per estrarre la configurazione statica da campioni e analisi di malware. È una canna da pesca, non un pesce - non condividiamo i moduli stessi. Ma è facile scrivere i propri!
Una parte molto importante della pipeline. Il reporter invia tutti i file, i tag, i commenti e altre informazioni prodotte durante l'analisi a MWDB. Se non usi ancora MWDB o preferisci altri backend, è facile scrivere il proprio reporter.
Esegue automaticamente le regole Yara su tutti i file nella pipeline e etichetta i campioni appropriatamente. Regole non incluse ;).
Sistema Karton che decodifica file codificati con metodi comuni, come hex, base64, ecc. (Non crederesti quanto sia comune).
Un piccolo wrapper attorno ad AutoIt-Ripper che estrae script AutoIt incorporati e risorse da eseguibili AutoIt compilati.
Sistema automatizzato di analisi malware black-box con motore DRAKVUF sotto il cofano, che non richiede un agente sul sistema operativo guest.
Ecco come questi sistemi possono essere utilizzati per formare una pipeline di analisi malware di base:
Un servizio modulare del framework Karton che spacchetta packer comuni come UPX e altri utilizzando il Qiling Framework.
Un'utilità modulare ricca di funzionalità per l'estrazione della configurazione del malware per MalDuck
Classificatore Detect-It-Easy per il framework Karton
Modulo di spacchettamento RetDec per il framework Karton
Piattaforma di similarità malware con modularità in mente.
Una pipeline scalabile per l'analisi delle vulnerabilità dei driver Windows.
