Cuckoo-Reboot

Cuckoo-Reboot:

wir haben die Cuckoo-Sandbox um die Möglichkeit eines Reboots erweitert. Hierfür wurden drei weitere Module geschrieben und Änderungen an bestehenden Modulen vorgenommen. Im folgenden werden wir die neuen Module und die Änderungen an Cuckoo erläutern. Zunächst werden wir die neuen Module (prereboot.py, rebootagent.py, reboot.py) erläutern und wie sie zusammenarbeiten, danach zeigen wir die Änderungen an Cuckoo selbst auf.

Auxiliary Modul prereboot.py:

Das erste neue Modul ist die "prereboot.py", welche in ".../analyzer/modules/auxiliary/" liegt. Somit wird die enthaltene Klasse Prereboot vom Cuckoo-Analyzer gestartet. Beim Start der Klasse wird zunächst überprüft, ob in den übergebenen Optionen der Key "reboot" existiert. Ist dies der Fall, wird zunächst die Windows-Version (XP, 7, 8) ermittelt, um das Startup-Directory zu bestimmen und die eigene Funktion "config_reboot_agent" aufgerufen. In der Funktion wird in die "rebootagent.py" des "ANALYZER_FOLDER" eingetragen und der Reboot-Agent in das Startup-Directory kopiert. Wenn das Sample komplett durchgelaufen ist, wird durch eine Änderung im Analyzer die Funktion "prepare_reboot" aufgerufen, wobei ihr eine Liste mit allen geschriebenen und verschobenen Dateien übergeben wird. Die Funktion trägt dann alle Dateien in die Windows Registry welche nach einem Reboot durch die "cuckoomon.dll" analysiert werden sollen. Dies ist notwendig um nach dem Reboot das Verhalten der Dateien zu Dokumentieren. Zum Schluss werden alle geschriebenen Dateien an das Host-System weitergegeben und der eigentliche Systemreboot wird mit Hilfe des CMD Befehls "shutdown" initialisiert.

Reboot-Agent:

Der Reboot-Agent ist eine verkleinerte Version des normalen Cuckoo-Agent. Er wird in das Startup-Directory kopiert um nach dem erfolgten Neustart des Systems wieder mit dem Cuckoo-Hostsystem kontakt auf zu nehmen und somit eine Analyse des weiteren Verhaltens des Samples zu ermöglichen. Es wird zunächst das Modul reboot.py, welches sich im Cuckoo-Analyzer Directory befindet, ausgeführt und dann ein XML-RPC Server gestartet und die Klasse RebootAgent im Server instanziert. Somit ist es weiterhin möglich vom Host-System aus, die Analyse zu steuern und die Funktionen "get_error() und get_status()" ab zu fragen.

Reboot-Analyzer:

Das letzte neue Modul ist die "reboot.py". Sie befindet sich im Cuckoo-Analyzer Verzeichnis und wird vom Modul "rebootagent.py" ausgeführt. In ihm befindet sich eine verkleinerte Variante des Cuckoo-Analyzers. Die Klasse Reboot enthält die Funktionen "get_options()", "prepare()" und "complete()", die aus dem original Cuckoo-Analyzer kommen. Zudem enthält sie die Funktion "rebooted()" welche eine verkleinerte Variante der Analyzer Funktion "run()" ist. Hier werden alle Auxiliaries gestartet, wobei vorher der "reboot" Key aus den "File Execution Options" der Windows Registry entfernt wurde, um eine Endlosschleife des analysierten Programmes nach dem Neustarts zu verhindern. Nach einer variablen Zeit, wird die Analyse dann beendet und alle Ergebnisse an das Host-System übermittelt.

Änderungen an bestehenden Cuckoo Modulen:

Für unser Konzept des Reboots von innen waren einige kleinere Änderungen an Cuckoo nötig. Die größten Änderungen hat hierbei die Klasse Analyzer im Modul "analyzer.py" erfahren. Des Weiteren wurden an allen Modulen die sich im Auxiliary Verzeichnis befinden kleine Änderungen vorgenommen.

Die Klasse Analyzer: In der Klasse Analyzer wurde zunächst um ein neues Objekt erweitert. Es handelt sich hierbei um "self.options" in welcher das Verzeichnis gespeichert wird, dass "get_options()" als Rückgabewert hat. Hierdurch ist es nun möglich die für ein Sample gewählten Optionen an weitere Module zu übergeben. Dies ist für den Reboot, der im Auxiliary Modul "prereboot.py" initialisiert wird notwendig. Außedem wurde der Aufruf der Funktion "prepare_reboot()" aus dem Modul "prereboot.py" eingefügt. Dieser Aufruf wird nur ausgeführt, wenn in den Optionen der Key "reboot" gesetzt wurde und bereitet den Reboot vor (siehe oben). Danach werden die bereits geschriebenen Dateien auf das Host-System gedumpt und in "prereboot" die Funktion "initialize_reboot()" ausgefürht.

Die Module in ".../modules/auxiliary": Da das Modul "prereboot.py" die Optionen braucht, haben wir diese beim initialisieren im Analyzer übergeben. Da wir aber keine Ausnahme schaffen wollten, was das Risiko von Fehlern erhöht, übergeben wir allen Modulen die sich in den Auxiliaries befinden diese Optionen. Außerdem muss in dem Modul "screenshots.py" der Name der erstellten Screenshots noch umbenannt werden. Wenn wir dies nicht tun, dann werden nach dem Reboot des Systems und dem erneuten Starten des Moduls die Screenshots von vor dem Reboot überschrieben, da der Iterator neu startet und so die Screenshots wieder von eins an durchnummeriert werden. Wir haben daher als Name für die Screenshots die Uhrzeit in hh:mm:ss gewählt. Somit haben wir immer noch eine chronologiscche reihenfolge der Screenshots und es ist sichergestellt, dass keine alten Screenshots überschrieben werden.