Hermes Analysesystem

en

Motivation

Cuckoo Sandbox ist ein Malware-Analyse-System, mit dem Ziel Malware innerhalb einer kon-trollierten Umgebung auszuführen und somit analysieren zu können. Cuckoo erlaubt weiter-hin die Ausführung von Malware auf mehreren verschiedenen virtuellen Maschinen. Diese müssen sich allerdings auf derselben physischen Maschine (Cuckoo-Node) befinden, nämlich auf der, auf der auch die aktive Cuckoo-Instanz läuft.

Um diese Einschränkung zu umgehen, ohne tiefgreifende Änderungen an Cuckoo selbst vor-nehmen zu müssen, wurde ein verteiltes System entworfen, mit dem es möglich ist, mehrere verschiedene Cuckoo-Nodes zentral zu verwalten und zu steuern. Dieses System besteht aus einem Server-System (Hermes) und mehreren Client-Nodes (Secretary).

Umsetzung

Der Hermes-Server dient als zentraler Steuerknoten für beliebig viele Cuckoo-Nodes. Wäh-rend auf Hermes Job zur Ausführung auf den Cuckoo-Nodes konfiguriert werden können, pollen die Cuckoo-Nodes mithilfe der Secretary-Komponente selbständig neue Jobs um diese auszuführen.

Architektur

Hermes

Hermes ist eine mit Grails umgesetzte Web-Applikation. Grails ist ein Web-Framework, das sich besonders für Rapid-Web-Development eignet und auf bestehenden etablierten Frameworks, wie z.B. Spring oder Hibernate, aufsetzt und diese miteinander verbindet. Die leichtgewichtige Entwicklung wird hierbei vor allem durch den Einsatz der JVM Skriptsprache Groovy und der Schwerpunktsetzung auf das Paradigma Convention-over-configuration ermöglicht.

Schichten des Grails-Framework

Die zentralen Klassen innerhalb von Hermes sind die Job- und die Node-Klasse. Ein Job-Objekt beschreibt hierbei im Prinzip eine Job-Konfiguration, bestehend aus auszuführendem Malware-Sample und Sensor, sowie der zu nutzenden virtuellen Maschine. Darüber hinaus können weitere Metadaten hinterlegt werden, wie z.B. simulierte Uhrzeit, Priorität oder frühsten Ausführungszeitpunkt. Die Node-Objekte repräsentieren die registrierten Cuckoo-Nodes.

Die Nutzung von Hermes erfolgt über ein eigens entwickeltes Content-Management-System (CMS). Das CMS ist in der Verwaltungs-, Sicherheits-, Informations-, und API-Komponente unterteilt worden. Die Verwaltungskomponente steuert das Erzeugen, Bearbeiten und Löschen der einzelnen Objektstrukturen. Diese werden im Administrationsbereiche verwaltet. Die Sicherheitskom-ponente basierend auf das Role Based Access Control (RBAC) Verfahren. Hierbei können im Administrationsbereich Benutzer angelegt werden die nur Zugriff auf die jeweiligen Verwal-tungskomponeten haben wenn sie die benötigte Rolle zugewiesen haben. Ein Zugriffsver-such ohne dieser Rolle führt zu einem Zugriff verboten Inhalt.

Komponenten

Im Hermes System werden die zu überwachenden Cuckoo Nodes auf ihren Status beobach-tet. Dies wurde durch die Informationskomponente des Hermes Systems realisiert. Hierbei werden die jeweiligen Cuckoo Nodes auf ihrer derzeitige Auslastung und Jobbearbeitung beobachtet. Während der Jobbearbeitung vollzieht ein Job unterschiedliche Jobstadien (Sie-he Bild Zustandsdiagramm).

Secretary

Secretary besteht aus 3 größeren Hauptkomponenten: Secretary an sich, der die Kommunikation mit Cuckoo und Hermes koordiniert, das Hermes-Package, dass die Funktionen der Hermes-API abbildet und den Aufruf per HTTPS ermöglicht und das Cuckoo-Package, das die Schnittstelle des Cuckoo API-Servers abbildet und den Aufruf per HTTP ermöglicht.

Die Kommunikation mit Cuckoo erfolgt über den Cuckoo-eigenen API-Server (ein einfacher HTTP-Server, umgesetzt mit dem Python Web-Framework Bottle) per HTTP. Als Austauschformat wird JSON verwendet. Der RestApiClient stellt die Methoden create_file_task() und view_task() zur Verfügung, um neue Jobs an Cuckoo zu übermitteln bzw. den Status der aktuellen Jobs abzufragen.

Die Kommunikation mit Hermes erfolgt über den Hermes-API-Controller (Hermes Web-API) per HTTPS. Parameter können hierbei per form-data innerhalb eines HTTP-POST-Requests übermittel werden. HTTP-Response im JSON-Format wird daraufhin von der DtoFactory in entsprechende DTO-Objekte umgewandelt, die den Domain-Objekten auf Hermes entsprechen.

Der Programmablauf von Secretary ist im folgenden Aktivitäts-Diagramm dargestellt:

Sobald Secretary initialisiert wird, wird zuerst geprüft, ob diese Instanz von Secretary (und somit die Cuckoo-Node, auf der Secretary ausgeführt wird) bereits auf Hermes registriert ist. Wenn dies nicht der Fall ist, so registriert sich Secretary bei Hermes. Anschließend wird ein neuer Thread gestartet, der nur dafür verantwortlich ist, den aktuellen Node Status (Onli-ne/Offline, CPU-Load, etc.) an Hermes zu übermitteln. Im Hauptthread wird nun hingegen die eigentliche Polling-Schleife ausgeführt. Es wird zuerst nach neuen Jobs auf Hermes ge-pollt, bis Secretary neue Jobs erhält. Diese werden daraufhin an Cuckoo übermittelt. Sobald Cuckoo die Bearbeitung der Jobs abgeschlossen hat, werden die Ergebnisse an Hermes über-tragen.

Ergebnis und Ausblick

Durch die Entwicklung des Hermes Systems ist es gelungen einen eigenständigen Visualisierungsprototypen für die Resultate des Cuckoo Sandbox Frameworks anzubinden. Hierbei können weitere Komponenten wie zum Beispiel eine Malware-Erkennungs-Engine an das System angekoppelt werden. Außerdem ist es erforderlich die Mongo-Datenbank vom Cuckoo Sandbox Framework, an das Hermes System anzubinden um weitere Analyseschritte mit den vorhandenen Rohdaten durchzuführen.

Die Quelldateien von Hermes und Secretary werden im Downloadbereich angeboten.