
Verteiltes Malware-Verarbeitungsframework basierend auf Python, Redis und S3.
Verteiltes Malware-Verarbeitungsframework basierend auf Python, Redis und S3.
Karton ist ein robustes Framework zur Erstellung flexibler und leichtgewichtiger Malware-Analyse-Backends. Es kann verwendet werden, um Malware*-Analysesysteme mit sehr geringem Aufwand in eine robuste Pipeline einzubinden.
Wir sind schon lange im Automatisierungsgeschäft tätig. Wir haben es mit immer mehr Bedrohungen zu tun, und wir müssen alles automatisieren, um mit den Vorfällen Schritt zu halten. Aus diesem Grund haben wir oft viele Skripte, die mit Enten-Klebeband und WD-40 zusammengehalten werden. Diese Skripte werden von Analysten in der Hitze des Gefechts geschrieben, sie sind fragil und hässlich – aber sie funktionieren und produzieren Erkenntnisse, die gespeichert, weiterverarbeitet, an andere Systeme gesendet oder mit anderen Organisationen geteilt werden müssen.
Wir brauchten eine Möglichkeit, unsere PoC-Skripte einfach in unsere Analyse-Pipeline einzufügen. Außerdem wollten wir ihre Ausführung überwachen, das Logging zentralisieren, die Robustheit verbessern, die Entwicklungs-Trägheit reduzieren ... Für genau diesen Zweck haben wir Karton entwickelt.
* Obwohl Karton mit Blick auf die Malware-Analyse entwickelt wurde, funktioniert es gut in jedem mikroservice-orientierten Projekt.
Die Installation ist so einfach wie ein einziger pip install-Befehl:
pip3 install karton-core
Um die gesamte Backend-Umgebung einzurichten, benötigen Sie außerdem S3-kompatiblen Speicher und Redis, siehe die Dokumentation für Details.
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 außerdem ein Kommandozeilen-Dienstprogramm namens "karton". Sie können es für einfache Verwaltungsaufgaben verwenden (es ist jedoch nicht als vollwertiges Verwaltungswerkzeug 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 beschlossen, 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 außerdem das Modul karton.core, das als Bibliothek von anderen Systemen verwendet wird.
Ein kleines Flask-Dashboard für Aufgaben- und Warteschlangenverwaltung und -überwachung.
Der "Router". Er erkennt Samples/Dateien und erzeugt verschiedene Aufgabentypen je nach Dateiformat. Dadurch können andere Systeme nur auf Aufgaben mit einem bestimmten Format lauschen (zum Beispiel nur zip-Archive).
Generischer Archiv-Entpacker. In das System hochgeladene Archive werden entpackt, und jede Datei wird einzeln verarbeitet.
Malware-Extraktor. Er verwendet Yara-Regeln und Python-Module, um statische Konfiguration aus Malware-Samples und -Analysen zu extrahieren. 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 Erkenntnisse an MWDB. Wenn Sie MWDB noch nicht verwenden oder einfach 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. kodierte Dateien dekodiert. (Sie würden nicht glauben, wie verbreitet 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 DRAKVUF-Engine unter der Haube, das keinen Agenten auf dem Gast-Betriebssystem 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 Werkzeug zur Extraktion von Malware-Konfigurationen für MalDuck
Detect-It-Easy-Klassifizierer für das Karton-Framework
RetDec-Unpacker-Modul für das Karton-Framework
Malware-Ähnlichkeitsplattform mit Fokus auf Modularität.
Eine skalierbare Pipeline zur Analyse von Windows-Treiber-Schwachstellen.