Proof of Concept zum Ausbruch aus der Cuckoo Sandbox verfügbar

08.10.2014
G DATA Blog

Anfang dieser Woche entdeckten wir eine Sicherheitslücke im berühmten Malware-Analyse-Framework „Cuckoo Sandbox“. Wir teilten den Entwicklern diesen Bug am 7. Oktober 2014 mit. Nicht einmal drei Stunden später wurde der Patch verifiziert und die Updates wurden von den Entwicklern bereitgestellt.

Das Team von Cuckoo Sandbox hat in einem kurzen Schreiben bereits die Hintergründe des Bugs erläutert: cuckoosandbox.org/2014-10-07-cuckoo-sandbox-111.html. Wir liefern eine ausführliche Erklärung und einen einfachen Proof of Concept zur Ausnutzung dieses Bugs. Wir empfehlen, vorhandene Installationen auf die neueste Version von Cuckoo Sandbox zu aktualisieren.

Was ist Cuckoo Sandbox?

Das Cuckoo Sandbox-Framework besteht aus einem Hostsystem, das mindestens eine Sandbox verwaltet, in der Malware ausgeführt wird. Zu Beginn der Ausführung enthält der Sandboxclient nur eine kleine Clientsoftware, die die aktuelle Version des Analyse-Frameworks, die Konfiguration für diesen Lauf („analysis.conf“) sowie die auszuführende Malware vom Host entgegennimmt. Dann wird die Malware in den Sandboxen ausgeführt, und das Analyse-Framework erzeugt Protokolle über das Verhalten der Malware sowie weitere Informationen wie etwa Screenshots. Die Protokolle und die Screenshots werden zusammen mit Dateien, die von der Malware auf dem System erzeugt wurden, von der Sandbox an den Host gesendet, da sie möglicherweise interessante Informationen wie etwa die Malware-Konfiguration oder ausführbare Malware-Dateien einer zweiten Phase enthalten, die von der Malware heruntergeladen bzw. entpackt wurden.

In der Standardversion von Cuckoo ist die Kommunikation zwischen dem Host und den Sandboxen über ein TCP/IP-basiertes Text-Protokoll implementiert.

Wenn eine Sandbox eine Datei auf den Host lädt, verbindet sie sich über eine bestimmte IP-Adresse und einen bestimmten Port mit dem Host und startet das Upload-Protokoll. Die IP-Adresse und der Port sind auf dem Host konfigurierbar. Diese Daten werden anfangs über die Konfigurationsdatei für diesen Lauf („analysis.conf“) an den Client übertragen.

Mögliche Auswirkungen

Cuckoo Sandbox kann kostenlos heruntergeladen und  genutzt werden; es handelt sich um Open-Source-Software. Daher wird es von vielen Sicherheitsunternehmen, Strafverfolgungsbehörden sowie von Wissenschaftlern und unabhängigen Experten genutzt, um Malware zu analysieren. Da das Produkt kostenlos ist, ist anzunehmen, dass es eher in kleineren Organisationen und bei unabhängigen Experten verbreitet ist.
Der im Folgenden erläuterte Fehler gestattet es der analysierten Malware, beliebige Dateien an beliebige Speicherorte auf dem Hostsystem zu schreiben (Ausbruch aus der Sandbox). Dies ermöglicht es der Malware möglicherweise, die Kontrolle über die Hostsysteme zu übernehmen.

Verallgemeinernd gesagt haben die Autoren von Malware durch diesen Angriff die Möglichkeit, gerade in diejenigen Systeme einzudringen, mit denen die Angreifer bekämpft werden sollen. Dies kann durch das Schreiben maßgefertigter Malware erreicht werden, die aktiv versucht, diesen Bug in den Cuckoo Sandboxen auszunutzen. Voraussetzung dafür ist, dass die Angreifer es schaffen, dass ihre Malware von einer Instanz einer Cuckoo Sandbox ausgeführt wird, z. B. indem sie die schädlichen Dateien über eine öffentliche Webschnittstelle zu einem Analyse-Framework hochladen.

Technische Beschreibung

Auf der Hostseite enthält der Handler für das TCP/IP-Protokoll eine Klasse für die Bearbeitung der Datei-Uploads, die aufgerufen wird, wenn der Client eine Zeile mit der Zeichenfolge „FILE“ sendet. Die Fileupload-Klasse liest dann die nächste Zeile, wo sie einen relativen Pfad erwartet. Kommentare im Quellcode der Cuckoo Sandbox weisen darauf hin, dass zu erwartende Zeichenfolgen wie folgt lauten: „shots/0001.jpg“ oder „files/9498687557/libcurl-4.dll.bin“. Diese Zeichenfolgen werden zur weiteren Bereinigung in ihren relativen Verzeichnisteil und den Dateinamen aufgeteilt.

Der erwartete relative Pfad wird so bereinigt, dass keine Pfadtraversierung möglich ist: Im ganzen Pfad darf die Zeichenfolge „./ “ nicht enthalten sein, da diese zur Aufwärtstraversierung der Ordner verwendet werden könnte.

Es kann Blacklist mit Pfaden definiert werden, die dann mit dem relativen Ordnerteil abgeglichen wird. Sie enthält jedoch nur die Zeichenfolge „reports/“.

Sind all diese Prüfungen bestanden, wird der absolute Basispfad der Analyseergebnisse, an dem alle Berichte gespeichert werden (z. B. „/home/cuckoo/Desktop/output/“) sowie der relative Ordnerteil an eine Funktion übergeben, die die Ordner erstellt, wenn sie noch nicht vorhanden sind.

Im nächsten Schritt wird der absolute Zielpfad der Datei, die hochgeladen werden soll, mithilfe der in Python integrierten Funktion os.path.join erstellt. Die Pfade, die verbunden werden sollen, sind der absolute Basispfad und der angenommene mutmaßliche relative Dateipfad, der vom Client gesendet wurde:

Obwohl Sicherheitskontrollen vorhanden sind, ist es dennoch möglich, diese zu umgehen: Die Funktion os.path.join verbindet den Pfad korrekt, wenn das zweite Argument ein relativer Pfad ist. Doch was geschieht, wenn es uns gelingt, stattdessen einen absoluten Pfad anzugeben? Die Dokumentation beschreibt diesen Fall, doch das ist nicht notwendigerweise das Verhalten, das der Programmierer erwartet:

„[...] Wenn eine Komponente ein absoluter Pfad ist, werden alle bisherigen Komponenten [...] ignoriert und das Verbinden wird fortgesetzt [...]“
https://docs.python.org/2/library/os.path.html

Dies bedeutet in unserem Fall letztlich, dass das erste Argument komplett ignoriert wird, wenn das zweite Argument ein absoluter Pfad ist. Erinnern Sie sich? Das zweite Argument ist die vom Client-System gesendete Zeichenfolge.
Wenn der Pfad, den der Sandbox-Client sendet, den folgenden Kriterien entspricht, kann ein Angreifer die Datei in einem beliebigen absoluten Pfad auf dem System speichern, wenn die Cuckoo Sandbox die entsprechenden Rechte besitzt:

  • Absoluter Pfad
  • Enthält nicht die Zeichenfolge „reports/“
  • Enthält nicht die Zeichenfolge „./“

Aufgrund der Tatsache, dass die auf dem Analysesystem ausgeführte Malware die Kontrolle über das gesamte System übernehmen kann, kann sie problemlos die Datei „analysis.conf“ von Cuckoo Sandbox auslesen, um die IP-Adresse und den Port zu ermitteln, auf der der Host Verbindungen entgegennimmt. Die Malware kann dann eine Verbindung zum Host erstellen und ihm eine beliebige Datei senden, die aufgrund der oben genannten Einschränkungen in einem frei wählbaren Pfad gespeichert wird.

Ausnutzung

Die Datei „analysis.conf“ liefert dem Clientsystem nicht nur den Port und die IP-Adresse, sie enthält zudem weitere Informationen über die auszuführende Malware. Ein Teil davon ist der Pfad der Malware auf dem Hostsystem. In unserem Proof of Concept für einen Hostrechner unter Ubuntu gehen wir davon aus, dass sich die Malware im Home-Ordner des Benutzers befindet. Wir werden dann versuchen, die .bash_aliases des Benutzers zu überschreiben, um mit dem Exploit einen Befehl zu erzeugen, der ausgeführt wird, wenn die Shell das nächste Mal auf dem Host gestartet wird. Der folgende Code zeigt eine Möglichkeit zur Ausnutzung der Sicherheitslücke:

Dieser Exploit funktioniert natürlich nur dann, wenn sich die Malware auf dem Hostsystem im Home-Ordner des Benutzers befindet, sodass der Pfad an den Analyse-Client „durchsickert“. Da es der genannte Bug jedoch erlaubt, beliebig viele Dateien an beliebig vielen Speicherorten auf dem Host zu speichern, können Sie die Speicherorte sogar über einen Brute-Force-Angriff erraten.
Eine brauchbare Annahme, was den Benutzernamen von Cuckoo Sandbox betrifft, lässt sich aus der Installationsanleitung von Cuckoo Sandbox gewinnen:
sudo aduser cuckoo

 

Wahrscheinlich gibt es noch effizientere Lösungen für die Frage, welche Datei in welchem Pfad gespeichert werden soll, um so die Ausführung eines Befehls zu erzielen, doch als Proof of Concept sollte es ausreichen, die Schwere dieses Bugs aufzuzeigen.
Die tatsächlichen Auswirkungen, die diese Umgehung der Sandbox in der Praxis bewirkt, können von mehreren Faktoren abhängen, vor allem von der Trennung von Netzwerken, Hosts und Benutzern. Wird der Host-Prozess der Cuckoo Sandbox von einem Benutzer mit relativ wenigen Rechten ausgeführt, wird der Host für keine anderen Aufgaben verwendet und befindet er sich in einem separaten Netzwerk, ist die Gefahr geringer als im umgekehrten Fall. Doch besonders bei kleinen Unternehmen und bei unabhängigen Experten ist dies wahrscheinlich eher nicht anzunehmen.
Aus der obigen Beschreibung können Sie möglicherweise einige Strategien zur Risikominderung ableiten. Unsere Empfehlung lautet jedoch: Wenn Sie Cuckoo Sandbox nutzen und Ihre Systeme noch nicht aktualisiert haben, sollten Sie dies jetzt schleunigst nachholen!!!

Wichtige IT-Security-News per E-Mail

  • Aktuelle IT-Gefahren
  • Schutz-Tipps für Privatkunden
  • 15 % Willkommensgutschein