 wie viele Betreiber von Server-Betreiber benutzen der ISXI-Server oder virtualisierte Server. Wir benutzen das, um Maschinen zu virtualisieren. Meine hier in Sandboxen, also Software-Sicherheitskästen-Bereiche, die dann halt versucht, dass die Prozesse innerhalb von einer virtuellen Maschine nicht in den übergeordneten Hypervisor, indem sie laufen, auf der Hard-Feld, die sie laufen, überspringt. Damit eine Sicherheitslücke zerstellt. Hier ist, heute hören wir, why, why, why from Triton Security Labs, und sie wird darüber reden, wie die Sicherheitslücke, die sie in den letzten, G-Pound Capture the Flag Sicherheitslücke gefunden hat, funktionieren. Also, ein großer Runde Applaus für F1, Y, Y, Y, F1, why, why, why. Hallo. Hallo, hallo. Danke für die Einleitung. Ich bin F1, Y, Y, Y, eine der Sicherheitsforscher bei, und ich zeige euch, wie man aus Sandbox virtuellen Maschinen ausbrechen kann mit ESXI. Hier haben wir eine, ich erkläre euch, wie wir das in dem CTF gefunden haben und wie der Ausbruch funktioniert hat. Ich zeige euch auch die Arbeiten, die wir darüber veröffentlicht haben. Wir sind Teil dieses Sicherheitslabs, Chain Tech. Wir haben unterschiedliche praktische technologische Sachen angeschaut, wie Android-Routing, IoT-Verteidigungsforschung und so weiter. Einige spielen auch CTF als Teil von Bloop und Team Deliverers. Wir haben beim DevCon die CTF-Gruppe gewonnen. Wir sind auch Organisierer von eurem eigenen CTF, mit sehr schweren Problemen. Wenn ihr daran Interesse habt, dann kommt zu unserem CTF-Spiel. Bevor wir unsere Reise anfangen, wie wir die virtuellen Maschinen verlassen können, müssen wir darüber nachdenken, was das überhaupt ist. Ich möchte zu alle gerne für euch diese Frage stellen. Benutzt irgendeine Virtualisierung Software, wie zum Beispiel VR Workstation, Hyper-V, Virtual Box oder ähnliches benutzt habt, bildet euch mal. Okay, okay, okay, super. Also, wenn ihr ein Softwareentwickler seid oder ein Sicherheitsforscher seid, dann habt ihr wahrscheinlich Virtualisierung Software schon öfters benutzt. Aber, hat irgend eine schon von virtuellen Maschinenausbruch gehört? Bitte noch mal melden. Oh, oh, Verraschung. Danke. Es überrascht mich, dass ihr alle darüber wisst. Aber ich möchte es trotzdem noch mal vorstellen. Was ist der virtuellen Maschinenausbruch? Der Host-Betrieb-System läuft auf dem Hypervisor. Der Hypervisor ist quasi das Grundbetriebssystem und das hat viele, und das behandelt auch virtuellisierte Hardware, die von den guest-virtuellen Maschinen benutzt werden, die guest-Betriebssystemen. Das ist wie normale Virtualisierung funktioniert. Die guest-Betriebssysteme sind voneinander isoliert und können nicht mit dem HostOS, also nicht mit dem HostOS angreifen, oder nicht mit dem HostOS interagieren. Wenn aber im HostOS ein Betriebssystem-Bug existiert, dann ist es möglich, von den guest-Betriebssystemen in das Betriebssystem auszubrechen, wenn diese Sicherheitsbugs ausgenutzt werden, um dann beliebigen Code auf dem HostOS auszuführen. In diesem Fall, und das nennen wir Virtualisierung, virtuellen Maschinenausbruch. Warum schauen wir uns ISXI an? Der erste Grund ist, dass wir sehen, dass es häufiger und häufiger benutzt wird, als eine private Cloud benutzt wird, um private Daten zu speichern. Diese Firmen benutzen diese Methodik. Wiesware ist eine Lösung von VMware. Wenn ihr bei einer Firma seid, dann könnt ihr vielleicht VMware benutzen. Und ISXI ist der Hypervisor. Es wird häufig in privaten Cloud-Anwendungen angewendet. Das Zweite ist, dass es eine Herausforderung des Angriffsziel ist. Es gibt viele unterschiedliche Angriffe auf VMware Workstation in den letzten Jahren. Es wurden unterschiedliche Sicherheitslücken ausgenutzt, in der Grafikkarten oder Netzwerkarten oder USB-Geräten. Aber es gibt keinen öffentlichen Ausbruch aus ISXI. Das ist ein herausforderndes Ziel von uns und wir lieben eine Herausforderung. Warum ist ISXI so herausfordernd, so schwer, also den Ausbruch aus ISXI? Das Erste ist, dass wenige Dokumente darüber existieren. Das Einzige, was wir gefunden haben, ist ein White Paper, also eine grundlegende Erklärung von VMware. Dabei werden nur ein paar Definitionen und Bilder angezeigt, ohne irgendwelche Details. Lass uns mal kurz auf die Architektur von ISXI eingehen. ISXI ist ein Enterprise Hypervisor, der direkt auf einem Server, auf eine Hardware läuft. Es besteht aus zwei Teilen, einmal dem VMware Kernel und die Benutzerwelt. Der VM Kernel ist ein POSIX-ähnliches Betriebssystem. Und das benutzt ein Dateisystem, das im Arbeitsspeicher gehalten wird. Das bedeutet, alle Dateien, die da drin gespeichert sind, sind nicht persistent. Und der VM Kernel kümmert sich auch um die Hardware für ISXI. Es gibt auch VMware, Driver, IO, also Input, Output Sachen und eine AP. Und der Benutzerwelt, die wird von VMware benutzt, um die Betriebssysteme, die auf dem VM Kernel zu limitieren. Diese Prozesse haben nur eine reduzierte Menge von POSIX-Befählen. Manche der benutzten APIs, es gibt manche User-World-Prozesse, die von dem VMACs gehostet werden. Diese Architektur von ISXI, ich möchte euch ein Beispiel geben, wie die ISXI-Maschine funktioniert. Das WMS-Prozess kann mit der VMware kommunizieren. Mit der dokumentierten, spezialisierten AP auf Huf. Wenn das Gasbetriebssystem Instruktionen erstellt und diese zu VMware zurückgeleitet werden, wird von VMware die Anfragen verarbeitet. So funktioniert die VMware-Maschine. Wie können wir jetzt von der virtuellen Maschine ausbrechen? Es geht nur, wenn es eine Schwachstelle in der virtuellen Hardware gibt. Der Treiber wird mit der virtuellen Hardware kommunizieren und kann die Schwachstellen ausnutzen. Wir können SHA-Code in dem VMACs-Prozess ausführen und so aus der virtuellen Maschine ausbrechen von ISXI. Der zweite Grund, warum ISXI so herausfordernd ist, ist die User-World-API. Die VMACs nutzen sehr viele undokumentierte Aufrufe. Und wenn du Code von VMACs zurückschließen willst, ist es sehr schwierig. Glücklicherweise konnten wir zwei System-Calls-Tabellen finden. Es gibt zwei System-Calls-Tabellen, die wir gefunden haben. Diese sind hefreich, um auf Code zurückzuschließen. Es gibt manche Sicherheitsvorkehrungen, die es hier gibt. Also müssen wir zusätzliche Informationen heranziehen, um die zuverlägige Verschlüsse zu brechen. Zusätzlich haben wir herausgefunden, dass es eine weitere Sicherheitsmaßnahme gibt. Und das ist eine Sandbox, die den VMACs-Prozess abschließt. Also du kannst im VMACs-Prozess Schale Code ausführen, aber du kannst nicht sensitive Informationen herangehen, außer wenn du aus der Sandbox ausprichst. Drittens hat die WMS von EX-XI nach der Kombination des WMX zwischen der Arbeitsstation von ES-XI. Zum Beispiel ist die Paket-Übertragungsfunktion, die vom WMX in den WM-Körnel übertragen. Es gibt viele Schwachstellen, die im Paket-Übertragungsfunktion stecken der Treiber. Und die werden nur die Arbeitsstationen betreffen. Der WMX von ES-XI hat nur eine sehr geringe Angriffsfläche. Lass uns jetzt die Reise beginnen, von ES-XI auszubrechen. Lass uns die gesamte Ausnutzungskette betrachten. Wir verwenden zwei Schwachstellen. Und das zweite ist eine nicht initialisierte Stapelesung. Wir können jegliche Adressfreigaben geben, nutzen, um Informationen zu extrahieren. Nachdem wir beide diese Schwachstellen ausnutzen, können wir jegliche Shade-Code-Ausführungen in den WMX-Prozess herbeiführen. Wir nutzen logische Schwachstellen, um diese Sandbox zu entkommen. Das ist die gesamte Ausnutzungskette. Lass uns das erste verwenden, die erste Schwachstellen. Die erste Schwachstelle ist eine nicht initialisierte Stack-Usage. Wir nutzen die WMS-Netzwerk-Karte, diese versucht, Kommando auszuführen. Es wird die Physik-Memory-Page-Seite ausnutzen. Es nutzt die Memory-Mapping-Funktion zwischen dem Host und dem Gast. Danach wird das WMX-Netz eine Funktion initialisieren, die auf diesem Stack läuft. Es wird ein Extractor verwenden, um dieses Kommand auszuführen. Und zuletzt wird es die Physik-Memory-Lease-Funktion nutzen, um die Memory-Page zu extrahieren. Es schaut so aus, es gibt keine Probleme hier. Aber wenn du diese Funktion anschaust, dann können wir das nicht initialisieren, weil es einen Check gibt, bevor die Initialisierung der physikalischen Memory-Page gibt. Wir versuchen die Adresse, wenn der Check passiert, dann initialisiert es. Wenn dieser Check nicht funktioniert, dann wird der Stack niemals initialisiert. Und zuletzt können wir die Adresse Argumente kontrollieren, indem wir die Memory-Adresse in den Register schreiben. Was noch schlimmer ist, ist die Funktion für die physikalische Memory-Lease, wenn diese Funktion nicht initialisiert wird. Also, die Sache daran ist, wenn wir die Daten auf dem Stack jetzt ein bisschen padden können, haben wir die Möglichkeit, Arbitäre, Transformation zu machen. Also padden wir die Daten auf dem Stack und sorgen dafür, dass der Check failed. Und wenn es dann zum befreiten Speicher kommt, wird es dann um einen Pointer unserer physikalischen Memory-Page befreien. Also, suchen wir jetzt eine Funktion, um die Daten auf dem Stack zu padden. Also, wo kann man denn so was finden im Software-Development? Überall da, wenn wir Speicher auf dem Stack freimachen, ansonsten tun wir es auf dem Heap und versuchen eine Funktion, die diese Vorgaben erfüllt. Eine Funktion in unserem Gastsystem finden wir diese Funktion. Also, wenn diese Zahl klein ist, als diese Wert, nutzen wir den Stack, um das Ganze zu speichern und ansonsten. Und dann kopieren wir die Daten vom Gastsystem zum Hostsystem. Also, können wir jetzt die Funktion nutzen, um unsere Daten auf dem Stack zu padden. Und wir das machen, um Arbitäre Transformation zu machen. Also können wir die Instruktion im Gastsystem nutzen, um die Daten auf dem Stack zu padden. Also, diese Daten zeigen den Inhalt des falschen Memory-Strucks. Es sollte eigentlich null sein, aber diese falschen Daten wollen wir jetzt freien. Also, setzen wir ein paar Register im VMX-Net, was die Funktion der Memory-Create benutzt und dann updaten wir die Merk-Adressen der Karte, um... Das führt dann zu dem VMX, um dazu, dass diese Struct zerstört wird, die wir davor gepaddet haben. Die ist aber eigentlich mit einer festen Größe und es guckt, ob der PageCount null ist. Wenn ja, dann befreitest den Pointer. Also können wir jetzt Arbitere Daten transferieren durch diese unizialisierte Stack-Schwachstelle. Also, die zweite Schwachstelle, die wir nutzen, die wir nutzen, ist auch in der Netzwerkarte. Es versucht das Kommando GetPolicy aufzurufen und es zwingt, den Memory-Align dazu 16 zu sein. Danach initialisiert es die ersten acht Bytes auf dem Stack, aber dann vergisst es, die nächsten acht Bit zu initialisieren und dann schreibt, dass dieses Struct wird zurück in unser Gastsystem. Also können wir da durch den initialisierten Daten auf dem Stack nutzen, um dadurch Daten zu übertragen. Und nach dem Debacken haben wir festgestellt, dass es feste Offsets zwischen den Speich-Adressen gibt. Also um alle Informationen zu kriegen über den Adressraum, können wir die ganzen Informationen über den Adressbereich durch diese Schwachstelle bekommen. Also was haben wir jetzt? Wir können arbiträre Adressen freen und wir können alle Informationen über den Adressraum bekommen durch die zweite Schwachstelle. Also was wollen wir machen? Wir wollen die arbiträre Schelkode ausführen. Also wie bauen wir die beiden Schwachstellen jetzt zusammen, um damit unser Ziel anzugreifen? Es ist natürlich echt schwer, das Ganze durch die Adress-Adress-Free zu machen, aber es ist viel einfacher, wenn wir dazu andere arbiträre Adressen schreiben können. Aber wie kriegen wir das denn hin? Durch den Nutzen von memory-free. Also wir haben wir ein Struct und die muss halt pointer beinhalten und die Größe davon. Also wenn wir die beschreiben können, haben wir leicht arbiträre Adress-Speich-Zugriffe. Also wo finden wir das Ganze? Also wir nutzen dazu Structures auf dem Heap, aber wir können nicht das Layout von dem Heap manipulieren, da der stabil sein muss. Also können wir keine Structures im Heap benutzen. Also wenn wir ein bisschen reverse-ingenuiert haben, haben wir das Struktur dafür gefunden. Das ist nämlich der RPC-Channel. Was ist RPCI? Das ist ein Channel, um Kommunikation zwischen dem Gast und dem Gastbetriebssystem zu ermöglichen. Und das Interessante ist, wenn ich möchte fragen, wenn jemand VMware Tools auf ihrem Gastbetriebssystem installiert hat, nicht so viele wie vorher. Also wenn du eine VMware Workstation nutzt, dann hast du wahrscheinlich VMware Tools in deinem Gastbetriebssystem installiert. Weil wenn du diese Tools installiert hast, kannst du angenehme Funktionen nutzen, wie etwa Dinge zwischen dem Host und dem Gast hin und her zu kopieren. VMware Tools sind implementiert, indem beliebige Kommandos verwendet werden. Hier sind ein paar Beispiele, die der Kommandos, die da implementiert sind. Wir können zum Beispiel InfoSet Funktion verwenden, um Informationen über anderen Gast zu setzen. Und wir können diese Informationen wieder auch ablesen. Was passiert, wenn wir diese Kommandos in unserem Gast ausführen? Zum Beispiel, wenn wir diesen RPCI Kommando in unserem Gast ausführen, was passiert dann im VMX? Es wird ein RPCI Händler, eine Anfrage zurückgeben. Dieser RPCI Händler wird dann ein Sub-Command nutzen, indem es die Anzahl der Register im Gast überprüft. Das RPCI Tool im Gastbetriebssystem wird ein Channel öffnen, der wird es dann initialisieren. Dann wird es ein Sub-Commando verwenden, setLan, um die Größe des Channels zu setzen. Und es wird Speicher allotzilieren, um dieses RPCI Kommando auszuführen. Danach wird es ein SetData Sub-Commando ausführen, um das die Daten zu padden im Speicher. Sobald das die Daten vom Gast gesendet werden, wird es das SendLan Sub-Commando nutzen. Es wird ein gleichnamigen RPCI Kommando verwenden, um diesen String auszuführen. Danach wird es ein Close Sub-Command ausführen, um die Channelstruktur aufzulehren, die Daten wieder zu befreien und die Größe auf 0 zu setzen. Was passiert, wenn wir jetzt dieses RPCI Kommando in unserem Gast ausführen? Es gibt weiterhin ein Channelstruktur Fehler in unserem Extaktor, die wir nutzen können. Das ist eine perfekte Struktur für unsere Ausnutzung. Jetzt haben wir alle Dinge, die wir brauchen. Wir haben Schwachstellen, wir haben die Struktur. Wie können wir das kombinieren? Wir nutzen das PDMEMlock, um den Speicher zu verwenden. Wir nutzen das FastBnetTag. Was ist FastBnetTag? Es ist eine Methode, um Schwachstellen auszunutzen in unserem System. Es ist eine Ausnutzungsmethode, um PDMEMlock auszunutzen. PDMEMlock auszunutzen. Wie können wir das auszunutzen? Danach, nachdem wir den Check entscheiden, den RPCI Index auszuführen. Dadurch können wir diese Adresse als falsche Trunk benutzen. Und davor ist die aktuelle Länge. Danach wird die Länge des Fake Trunks gesetzt werden. Das heißt, wir können irgendein Wert setzen, um den Check zu umgehen. Hier können wir den Check umgehen. Dieser falsche Trunk wird zuerst in die Linklist eingeführt. Dann können wir den Fake Trunk initialisieren durch eine andere Heizlücke. Dann können wir den nachfolgenden Channel mit ChannelPlus1 und ChannelPlus2 überschreiben. Damit können wir einen Teil vom ChannelPlus1 überschreiben. Das heißt, wenn ich jetzt beliebige Arbeitsspeicher schreiben kann, kann ich das einfach wiederholen. Endet euch nach unser Ziel. Unser Ziel ist es, beliebigen Shellcode im VMS auszuführen. Und wir können beliebige Adressen jetzt schreiben. Es gibt viele Wege, beliebige Code auszuführen, wenn wir beliebigen Arbeitsspeicher schreiben können. Wir können einen Bereich überschreiben. Wir können Straten überschreiben. Wir können einen Pointer überschreiben auf einen Rob Gadget. Wir können den Funktionspointer in irgendein Segment überschreiben. Und damit springen wir in unser Rob Gadget hinein, das im ChannelPlus1 mitliegt. Und wenn wir Rob haben, dann kann man immer beliebigen SourceCode ausführen. Rob ist die return-orientiertes Programmierung. Das ist eine sicher, eine Funktion, wie man Software schreibt in einem Rahmen einer Vulnerabilität. Sicherheitslücke. Wir versuchen jetzt, unterschiedliche Sachen auszulesen, wie z. B. der HTC Password. Das funktioniert auch nicht. Dann haben wir realisiert, dass eine Sandbox, also eine Sicherheitsumgebung existiert. Und wir können das Meister von nicht ausführen, wenn wir nicht aus dieser Sandbox ausbrechen können. Die nächste Schritt ist, wir analysieren und realisieren diesen Sandbox-Ausbruch. Als wir realisiert hatten, dass es eine Sandbox gibt, haben wir uns den Code angeschaut und haben den Kernel-VM-Kernel-Axis-Control-Sub-Zugangskontroll-System gefunden. Und dort wird Syscall-Hooking, also, dass man sich all die Syscalls umleitet, benutzt wird. Und wir haben dann die Konfigurations-Sartei gefunden in diesem Ordner, SESH, HTC, WMWR-Policy Domains. Und es gibt viele unterschiedliche Sandboxen, die von WMWR benutzt werden. Für unterschiedliche Prozesse in der Benutzerwelt, in der Zusammengebung. Plug-in-DOM und die globale WM-DOM. Das ist, wo unsere virtuelle Maschine drin läuft. Als wir das gefunden und gelesen hatten, war uns ziemlich schnell klar, dass der, das Slesch war, direkt im Bereich der Einzige ist, wo wir lesen und schreiben können. Wir hatten viele PID-Dateilen, also Process-ID, wo es die ID von unterschiedlichen Prozessen drin liegt und dort drin gespeichert ist. Und diese Konfigurteil ist die einzige Konfigurteil, die wir überschreiben können. Was ist in NITDI? NITDI ist eine Software, die ein Super-Server ist, der Internet-Services anbietet. Dann haben wir die uns angeschaut, die NITDI.conf, und es definiert zwei Services. Es ist D und AUTH-D, und definiert welche Binärdateien von unterschiedlichen Services benutzt wird. Zum Beispiel, es bin AUTH-D. Außerdem haben wir festgestellt, dass AUTH-D immer ausgeführt werden kann, aber es ist HD unter Umständen nicht. Das heißt, es ist die einzige Konfigurationsdatei, in die wir schreiben können. Was ist, wenn wir den Befehl umschreiben können? Wir überschreiben das jetzt zum Beispiel mit SH, also eine beliebige Shell, und dann können wir den NITDI-Prozess neu starten, dadurch, dass wir ihn killen, und dann müssen wir den NITDI-Prozess neu starten. Wir haben uns die Konfigurationsdateien angeschaut und der Kill-System-Call benutzt werden kann. Das heißt, wir benutzen Kill, HUB, heng ab, um den NITDI-Prozess neu zu starten. Danach können wir alle beliebige Fehler ausführen, dadurch, dass wir den NITDI-Befehl benutzen. So können wir aus der Sicherheitsumgebung ausbrechen. Hier ist eine Demo davon. Scheinend funktioniert das nicht. Ihr könnt das aber trotzdem auf YouTube finden. Wir haben diese Demo nach der CTF erstellt. Wir konnten einen Reverse Shell erstellen, nachdem wir den Befehl ausgeführt haben. Wenn ihr weitere Informationen über unseren Angriffsweg lesen wollt, dann könnt ihr den hier finden. Das war's. Vielen Dank. Ich glaube nicht, dass ich wirklich ... Wir haben Fragen, wenn ihr im Internet, die uns zuhören, Fragen stellen wollt, dann tut dies bitte über den IRC-Kanal. Dann könnt ihr jetzt hier eure Frage kommen. Aber aktuell sind da noch keine. Haben wir Fragen aus dem Publikum? Ja! Okay. Hast du WMWR kontaktiert für diesen Hack? Wir haben all diese Schwachstellen an WMWR berichtet. Es ist ein Jahr, nachdem sie es repariert haben. Danke. Vielen Dank für den tollen Vortrag. Ich wollte nur wissen, ob es irgendwas gibt, was ich als Systematischvertreter machen könnte, um so etwas noch weiterzurezieren. Also, dass man so etwas verhindern kann. Also, ob wir irgendwas in unserem ESXi-Setup machen können, das ist verhindert. Also ... Kannst du deine Frage bitte wiederholen? Gibt es irgendetwas, das man tun kann, als ein Administrator, um diese Sandbox noch stärker abzusichern? So, dass solche Anfringer Angriffe nicht möglich sind? Die erste Frage, okay. Du kannst die Sandbox verstärken, indem man Kommandos auf der ISXL-Shell ausführt. Ich habe keine Kommandos jetzt hierhergegeben. Ich habe die Kommandos verwendet, um die Sandbox runterzureichen. Du kannst Dokumente finden über die ISXL. Ich habe diese Dinge selber gefunden, indem ich die Kommandos verwendet habe, die auf der ISXL-Shell angeboten waren. Es wurde nicht von WMWR dokumentiert, diese Kommandos. Ich werde diese Kommandos auf meinem Twitter veröffentlichen. Tut mir leid, dass ich diese noch nicht in die Slides gegeben habe. Hätten diese Dinge, die Angriffe ... diese Kommandos, die Angriffe verhindert haben. Die Sandbox wird verwendet, um den WMX-Prozess zu beschützen, abzusichern. Wenn du dein ISXI-Update ist, dann denke ich, dass es sicher sein wird. Vielen Dank, wir haben eine Frage aus dem Internet. Also, funktioniert diese Schwachsteile auch auf anderen nicht-VTDW-Enableden-VMXI-Installationen? Könntest du die Frage nochmal kurz wiederholen? Also, funktioniert es auch nicht auf ADWT-Enabled-VMs oder ist es eine binäre Besetzung? Ja. Also, diese Schwachstellen existieren alle in der virtuellen Hardware. Also, das Problem ist die virtuelle Hardware, die man in der virtuellen Maschine benutzt. Wartere Fragen? Ich sehe niemanden. Wartere Fragen aus dem Internet? Das war die deutsche Besetzung von der Great Escape of ISXI, von dem 36 C3-Communication Congress.