
Verteiltes Malware-Verarbeitungsframework basierend auf Python, Redis und S3.
Verteiltes Malware-Verarbeitungsframework basierend auf Python, Redis und S3.
Karton ist ein robustes Framework zum Erstellen flexibler und leichter Malware-Analyse-Backends. Es kann verwendet werden, um Malware*-Analysesysteme mit sehr geringem Aufwand zu einer robusten Pipeline zu verbinden.
Wir sind schon lange im Automatisierungsgeschäft tätig. Wir haben es mit immer mehr Bedrohungen zu tun und müssen alles automatisieren, um mit Vorfällen Schritt zu halten. Aus diesem Grund haben wir oft viele Skripte, die mit Entenband Klebeband und WD-40 zusammengehalten werden. Diese Skripte werden von Analysten im Eifer des Gefechts geschrieben, zerbrechlich und hässlich – aber sie funktionieren und produzieren Informationen, die gespeichert, weiterverarbeitet, an andere Systeme gesendet oder mit anderen Organisationen geteilt werden müssen.
Wir brauchten eine Möglichkeit, unsere PoC-Skripte zu nehmen und sie problemlos in unsere Analyse-Pipeline einzufügen. Wir wollten auch ihre Ausführung überwachen, die Protokollierung zentralisieren, die Robustheit verbessern, die Entwicklungsträgheit verringern... Aus genau diesem Grund haben wir Karton entwickelt.
* Obwohl Karton mit Blick auf die Malware-Analyse entwickelt wurde, funktioniert es in jedem mikroserviceorientierten Projekt gut.
Die Installation ist so einfach wie ein einzelner pip install-Befehl:
pip3 install karton-core
Um die gesamte Backend-Umgebung einzurichten, benötigen Sie außerdem S3-kompatiblen Speicher und Redis. Weitere Details finden Sie in der Dokumentation.
Um Karton zu verwenden, müssen Sie eine Klasse bereitstellen, die von Karton erbt.
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()
Dieses Paket bietet auch ein Befehlszeilentool namens „karton". Sie können es für einfache Verwaltungsaufgaben verwenden (es ist jedoch nicht als vollwertiges Verwaltungstool konzipiert).
$ 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)
Einige Karton-Systeme sind universell und für jeden nützlich. Wir haben uns entschlossen, sie mit der Community zu teilen.
Dieses Repository. Es enthält den Dienst karton.system – den Hauptdienst, der für die Verteilung von Aufgaben innerhalb des Systems verantwortlich ist. Es enthält auch das Modul karton.core, das von anderen Systemen als Bibliothek verwendet wird.
Ein kleines Flask-Dashboard für Aufgaben- und Warteschlangenverwaltung und -überwachung.
Der „Router". Erkennt Samples/Dateien und erzeugt verschiedene Aufgabentypen abhängig vom Dateiformat. Dadurch können andere Systeme nur auf Aufgaben mit einem bestimmten Format hören (z. B. nur zip-Archive).
Generischer Archiv-Entpacker. Hochgeladene Archive werden extrahiert und jede Datei wird einzeln verarbeitet.
Malware-Extraktor. Verwendet Yara-Regeln und Python-Module, um statische Konfiguration aus Malware-Samples zu extrahieren und zu analysieren. Es ist eine Angelrute, kein Fisch – wir teilen die Module selbst nicht. Aber es ist einfach, eigene zu schreiben!
Ein sehr wichtiger Teil der Pipeline. Der Reporter übermittelt alle Dateien, Tags, Kommentare und andere während der Analyse gewonnenen Informationen an MWDB. Wenn Sie MWDB noch nicht verwenden oder andere Backends bevorzugen, ist es einfach, einen eigenen Reporter zu schreiben.
Führt automatisch Yara-Regeln auf allen Dateien in der Pipeline aus und taggt Samples entsprechend. Regeln nicht enthalten ;).
Karton-System, das mit gängigen Methoden wie hex, base64 usw. codierte Dateien dekodiert. (Sie würden nicht glauben, wie häufig das ist).
Ein kleiner Wrapper um AutoIt-Ripper, der eingebettete AutoIt-Skripte und Ressourcen aus kompilierten AutoIt-Executables extrahiert.
Automatisiertes Black-Box-Malware-Analysesystem mit der DRAKVUF-Engine im Hintergrund, das keinen Agenten im Gastbetriebssystem erfordert.
So können diese Systeme verwendet werden, um eine grundlegende Malware-Analyse-Pipeline zu bilden:
Ein modularer Karton Framework-Dienst, der gängige Packer wie UPX und andere mit dem Qiling Framework entpackt.
Ein funktionsreiches modulares Tool zur Extraktion von Malware-Konfigurationen für MalDuck
Detect-It-Easy-Klassifikator für das Karton-Framework
RetDec-Entpackermodul für das Karton-Framework
Malware-Ähnlichkeitsplattform mit modularem Aufbau.
Eine skalierbare Pipeline zur Analyse von Windows-Treiber-Sicherheitslücken.
