 Informationen, wie die Streams genutzt werden können, besucht c3lingo.org. Wir freuen uns über eure Rückmeldungen bevorzugt mit Hashtag C3T. Eure Übersetzer für diesen Talk sind OS 10.000 und Eipfen. Vielen Dank. So, wir machen hier eine echte Demonstration vor Ort. Also einen Terminal und noch einen Terminal. Was passiert denn hier? Ein Moment, bitte. Jetzt bin ich fast so weit ausgezeichnet. Vielen Dank. Und vielen Dank zum CCC, dass ich hier vortragen darf. Ich würde gerne mal hier fragen, ob jemand Ruckus Netzwerkgeräte kennt. Der CCC wird mich hassen. Ich habe die Black Hat Konferenz Wifi besucht. Und Ruckus hat dort Wifi zur Verfügung gestellt. Und da wollte ich wissen, wie viel Probleme das hat. Und da habe ich auf cv-details.com nachgeschaut. Und habe gesehen, dass also fünf kritische und elf insgesamt waren. Und die waren Kommando in Injektionen. Und diese Probleme sind nach der Authentisierung. Und entweder sind sie richtig sicher. Und das könnt ihr selber beantworten. Bevor ich hier anfange, wer bin ich denn? Ich bin Gal Zoror. Ich komme aus Israel. Ich bin ein Forscher und leite in der Forschungsgruppe. Und ich habe das hier zehn Jahre gemacht. Ich habe die Sachen auseinandergenommen. Ich schaue mir Angriffszenarien an und Embedded Devices. Und ich nehme die R510 Anlicht Version. Das sind Access Points, die nicht Wifi-Control bitten. Aber hier alle in dieser Liste haben die gleiche Codebase. Und der Zone Director hat auch diese Probleme. Die Probleme, die ich zeige, sind bei Firmware-Versionen, wie ich hier bezeige. Da ist jetzt keine Compression und keine Encryption angeschaltet. Man kann das Kernel-B-Config-Wire von einem Reset bekommen. Und ich habe das im User Space emuliert. Als ich die Probleme gefunden habe, habe ich das Ding gekauft. Ich habe ein Docker Hub und da habe ich verschiedene Systeme für unterschiedliche Architekturen. ARMV7, ARMV6, MIPS und MIPSL. Und auf diesen Dockers habe ich verschiedene Router emuliert. Für diese Demo habe ich einen Docker genommen, der den ARMV7 emuliert und ein Tabi in Kernel laufen lässt. Und jetzt zeige ich euch, wie einfach es ist, eine Umgebung aufzusetzen. Und das funktioniert nicht. Ein Moment. Ich zeige gleich ein Video. Jetzt habe ich es ausgezeichnet. Jetzt starte ich mein Docker mit dem Port 575. Der startet, der braucht ein paar Minuten, weil ich es aus einem ursprünglichen Video rausgeschnitten habe. Jetzt gehe ich zu der Ordnung, wo die Firma ausgepackt ist. Und jetzt kann ich das zum Dockereinkopieren. Und dann habe ich das eingepackt und gehe in den Dockerein. Und habe dieses Tar-File hier. Hier packe ich es aus. Dann gehe ich in den Ordner rein. Ja, in den Ordner rein. Und jetzt ändere ich mein Routefallsystem zu diesem neu ausgepackten. Und jetzt habe ich den Rocker-Banner und die Rocker-Busybox. Und ich sehe die Starteskripte. Das ist das mit den Dockern. Also fangen wir mal mit einem Exploit an. Das ist mein erster. Ich hole die Atmen-Details ohne Atmen zu haben. Jetzt machen wir eine echte Demo. Und was könnte schon schiefgehen? Naja, alles, aber... Hier ist mein Terminal ausgezeichnet. Jetzt hole ich ein File von dem Router. Ich sehe keine IP-Adresse, aber ich hole eine IP-Adresse von den Users. Noch mal. Das ist das auch echte Terminal. Also ich nehme WGit, WGit und hole ein File von dem Router. Ich nehme WGit, WGit und hole eine IP-Adresse von dem Router. Ich habe die Nummer 8 bekommen. Jetzt hole ich das gleiche File und suche da drinnen. Danach. All power for login. Und das gleiche. Tja, da kommt nichts. So, noch mal die 8 rein. Da haben wir es. Wunderbar. Das sind die Atmen-Details. Und ich habe die ohne Alternatisierung rausgeholt. Jetzt gehe ich den Router rein, hole die raus. Und kann mich dort einleiten. Ich kann den Debug-Mode rein tun, den Script-Mode rein tun. Und kann mit dem Exekommand die Shell ausführen. Jetzt habe ich die Busybox als Admin. Und ich bin Teil der Route-Gruppe. Und damit habe ich es geschafft. Live-Demos sind echt schwer. Na gut. Lass uns mal verstehen, was wir gerade getan haben. Ich habe als erstes mir die Web-Server-Konfiguration angeschaut. Da wird das Configuration-Face gestartet. So sieht die Configurations-Datei dafür aus. Hier sehen wir das Slash-Web, das Router-Activ fürs Web ist. Und dann sehen wir ein EGS-Handler für EGS und JSP Extensions. Und was wir hier nicht sehen, hier sehen wir keinerlei Limitierung, was für Datainmann runterladen kann. Das heißt, wir können einfach alles ins Slash-Web runterladen. Das heißt, es gibt überhaupt keine Zukunftskontrolle. Jetzt, wo wir wissen, dass wir alles herunterladen können, suchen wir mal nach interessanten Dokumenten. Es sind 67 Dateien da, die keine HTML-Dateien sind. Und es gibt auch einen symbolischen Link hier nach Slash-DMP. Das heißt, jedes Detail von Slash-Web, Slash-User, Slash-VPS-Toolcache kommt aus dem TMP-Ordner. Da ich das in QM emuliert habe, konnte ich schauen, sehen, dass verschiedene Dinge ins Tempferzeichen geschrieben werden. Und da sehen wir, dass der Router jeden Tag eine Datei in verschiedenen, mit einer Revision abspeichert. Aber das Problem war, es war in Slash-Web, Slash-Run. Aber das ist kein Problem, weil Slash-Run ein Link ist zu TMP-Slash-Run. So konnte ich also das RPM-Key-Fall runterladen, die RKM-Key-Datei. Das ist symbolisch gelingt zu TMP. Run ist auch entsprechend gelingt. Und dann musste ich nur die Revision nochmal kriegen. Glücklicherweise gab es genau eine Datei, die genau die Revision abspeichert. Und dann konnte ich direkt die richtige Revision runterladen. Nachdem das RPM-Key-Datei runtergeladen ist, sehen wir hier, nachdem wir es in Strings reingepiped haben, dass hier Zugriffsdaten in plaintext sind. Nicht wahr? Um das fertig zu machen, wollte ich eine Busybox-Shale haben. Aber standenmäßig gibt es ein anderes Command-Line-Interface, das kostümisiert von Ruckus. Und es gibt dort so ein Kommando, was eigentlich in die Kommando-Zeile, in die Kommando-Zeile des Betriebssystems, aber das Problem war, man braucht dafür die Seriennummer, und die hatte ich nicht. Und dafür gibt es aber etwas anderes, was ich gefunden habe. Es gibt ein Debug-Modus. Damit kann man gespeicherte Skripte starten. Aber es gab eine Path-Reverse-Verwodbarkeit da drin. Und dann konnte ich das benutzen, um eine Binsch-SH starten. So, aber nachdem wir jetzt mit dieser Anfänger-CTF-Aufgabe fertig waren, gibt es bestimmt noch mehr Möglichkeiten, wie man Code-Execution auf diesen Geräten kriegt. Also gut, das hier ist meine zweite Remote-Code-Execution-Angriff. Da haben wir hier mal ein Buffer-Overflow abused, ausgenutzt. Ja, jedenfalls hier gibt es ein paar Jitter-Strips, die mir geholfen haben, die Binarys zu analysieren. Glücklicherweise hat Rokus all die Lock-Calls drin gelassen, sodass wir alle Funktionsnamen und so weiter wieder herausfinden können. Hier sehen wir es zum Beispiel. Hier ist zum Beispiel der Funktionsname. Das heißt, ich habe einen Script geschrieben, die die unbenannten Funktionen dann in den richtigen Namen unbenannt hat. Und jetzt haben wir halt hier schöne Namen, zum Beispiel GetCDN. Jetzt haben wir hier so ein EMFDD. Hier konnte ich 1500 Funktionen auf 800 unbenannte Funktionen reduzieren. Hier haben wir raus noch ein generisches Script gemacht. Das sucht nach bestimmten Pattern in Jija in dem decompilierten Code. Und das zeige ich euch mal, was das jetzt macht. Hier sehen wir zum Beispiel ein Dropper, der mit der Trace Option kompiliert worden ist. Und hier sehen wir, dass die Funktionsnamen in diesem Lock-Call drin ist. Die heißt hier, getECDAS-PrefKey. Und hier gibt es eine regular Expression, die den Funktionsnamen matcht. Und dann passiert das gleiche wie vorher, die Funktionsnamen werden unbenannt, sodass sie den Lock-Statements entsprechen. Dieses Script gibt es jetzt schon auf alle Script-Account. Hier nutzt es ruhig, es ist ziemlich nützlich in vielen Umgebungen. Okay, zurück zu drei wichtigen Bineer-Interfaces. Bin Flash-Webs ist der eingebauten Webserver. Da werden Händler ausgeführt, in Abhängigkeit von der Konfiguration, die wir gerade gesehen haben. Der schickt Kommandos durch ein Unix Domain-Socket zu EMF-D. Der enthält die Logik. Der nimmt die Sachen von den Webseiten und macht eine eigene Logik und macht dann Backup oder System Information, Restore, etc. Und er nutzt LibEMF. Das macht die Web Authentisierung und einige Code wird ausgeführt. Hier ist das Diagramm für alles. Vorne sieht man den Webserver. Wenn er eine JSA-Seite bekommt, dann nimmt er diesen Händler und gibt das dem EMF-D. Der kommt aber den Funktionsnamen an und ruft den Punkte auf. Dann wird er zum Beispiel einen Shell-Kommando ausgeführt oder so was, wo EMF-Konfiguration oder Interface-Konfiguration oder Routing oder so was. Hier ist ein Beispiel, wenn ich ein Request an diese Adresse schicke wo dieser Händler dran ist, dann wird eine Funktion Delegate ausgeführt und das wird durch den Unix-Socket geschickt. Der EMF-D versucht den String zu finden und lässt diese Funktion laufen. Und der EMF-D hat diesen String zu dieser Funktion gemappt. Jetzt schauen wir mal die Authentisierung an. Vier Authentiserungs-Levels. Wir haben FM-Login, User-Login, Authentisierung von User oder vom FM oder vom Admin. Und das ist für eine bestimmte Zeit gespeichert. Die Seiten sollten prüfen, ob das gültig ist. Hier haben wir den Sessionscheck aufgerufen, bevor er unten dieses Ajax-CMD statt aufruft. Ich habe mit Grap gesucht, wo ich das finde. Und ich habe 67 Seiten gefunden, die überhaupt keine Checks durchgeführt haben. Das kann ohne Authentisierung erreicht werden. Und die erste sah sehr interessant aus. Hier sehen wir, dass das Ding keinen Sessionscheck durchführt und das kann an dieser Adresse erreicht werden. Genug davon. Lasst es uns einfach mal ausprobieren. Jetzt kommt die Demo von einem Stack Overflow. Wo wir Stack Overflow ausnutzen. Ich benutze jetzt das Terminal. Ein Moment. Live-Demos sind anscheinend schwierig. So, hier sind wir. Können Sie alle sehen? Gut, sehr gut. Hallo Router, ich bin nicht da. Das ist gut. Das ist mein Inhalt, den ich hinschicken werde. Damit werde ich ein Overflow durchführen. Und ich werde Telnet aufrufen mit diesen Parametern. Und jetzt schicke ich das mal hin. Wenn ich nichts falsch mache, dann funktioniert das jetzt hier. So, in einer Sekunde sollte das funktionieren. Ausgezeichnet. Ich habe eine OK Message gekriegt. Und jetzt kann ich Telnet dahinternetten. Und es geht. Ich bin der Admin. Und ich bin Teil von der Routgruppe. Das war's. Vielen Dank. Jetzt müssen wir mal verstehen, was ich hier gemacht habe. Jetzt erkläre ich mal, wie dieser Ajax Request funktioniert. Ich habe das beides auf der Emulation laufen lassen. Und damit habe ich Standard Web Request untersucht. Hier habe ich die Funktion aufgerufen. Ich habe die Seite aufgerufen. Und die wird in dem EMF-Demon gemappt auf diese Funktion. Das kriegt einen Action-Attribut aus dem Request. Und das ist das Kommando Do-Command. Und dann ist dieser Adapter. Dieser Adapter ruft diese Funktion auf. Und das ist ein großes Switch. Der Adapter führt unterschiedliche Kommandos aus, in Abhängigkeit vom Attribut. Hier kriegt er das Kommando GetConnect-Status. Und diese Funktion kriegt ein Kommand GetInternet-Status. Jetzt auf einer Seite, die keinen Session-Check durchführt. Das wird gemappt auf diese Ajax-Restricted-Command-Stat. Und macht keine Authentisierung. Der ruft dann dieses Ding auch auf, aber mit sehr wenigen Kommandos. Und dann gibt er Zap-D zu diesem Kommando. Und ruft das executable Zap auf. So sieht das aus, wenn es an der Stelle aufgerufen wird. Wir können die Server und Klein-Argumente, indem wir die als Argumente rübergeben. Und diese Argumente, die sind nicht ausreichend aufgeräumt. Und das kann da ganz andere Sachen mit rein tun. Ich habe die Zap-Quelltexte online gefunden. Und Ruckers beschreiben das als ein Performance-Test-Tool. Und ich habe den Code angeschaut. Und ich habe festgestellt, in dem Minus-D-Argument ist ein Code overflow. Hier ist der Code, der das passt. Der setzt alle Kommas durch Spaces. Dann kopiert er jedes Segment zu einem Waffe. Und weil er eine Zahl erwartet, ist das ein kleiner Waffe. Und er versucht sicher zu sein, indem sie das String-Copy verwenden. Aber die haben die gesamte String-Länge für N genommen. Also haben sie nicht den String geschützt. Und ich habe den Stack kaputt gemacht. Also der R510 nutzt NX und ASLR. Und ich habe Arme 2 Gadgets verwendet, um zu meinem Payload zu zeigen. Und da habe ich Telnet D. Und bitte den Telnet D, um mir ein Login auf dem Port A235 zu öffnen. Und weil das aus EMFD aufgerufen wird, habe ich Bruteforce verwendet, um die neuen Bits Zufall zu überwinden. Jetzt schaue ich mir eine Request an, der den ZapD nochmal laufen lässt. Wenn ich den Server-Attribut kontrolliere, kann ich das nicht einfach für Command-O-Injection benutzen? Hier sehen wir, dass das EXAC System benutzt. EXAC-Symbi Implementation called. Und das called FindSysRapper. Dann wird Vfork und EXAC-V aufgerufen, um das Server-Command aufzurufen. Dann schauen wir uns mal FindSysRapper an. Es schaut noch SlashBin SlashSysRapper.sh.sh. Und das kommt jetzt in eine globale Variable namens SysRapper-Fahrt. Und dann wird das ausgeführt mit dem Argument, was wir umgegeben haben. Hier sehen wir, dass das 7000 Zeilen lang ist, ziemlich lang. Aber es hat viele Commandos. Und hier das Zap Ausführungs-Commando interessiert mich. Die Variable hier wird genutzt, um Zap auszuführen. Aber ob es seine Command-Argumente mit Quotes kriegt und das hat mich dann hier gestoppt. Aber was mich gehalten hat, war das RKS-CLI-Ding. Und bevor ich zu meinem nächsten Angriff weitergehe, möchte ich euch das RKS-CLI zeigen. Das ist das, wo ich für den ersten Angriff rauskommen musste. Das ist das Ding, was ich nutzen kann direkt nach dem Systemstart. Auch das hier hat so ein V54-Ausrufszeichen-Ding. Aber wir brauchen die Seriennummer. Aber dieses V54-Commando nutzt Dinge von SlashRital-EZT-System-Access. Aber dazu können wir schreiben mit Ruckus. Und wenn wir da diesen Parameter passen, dann können wir damit die Shell esgeben. Also komisches Zeug jetzt. Ja. Ja, tatsächlich. Die bellen mich an, wenn ich das mache. Und dann wurde ich gefragt, was ist dein Chow? So wie Chow-Hunde? Am Ende habe ich ein Busybox laufen lassen können. Ich war ein bisschen verwundert von Easter Eggs, aber okay. Und ich habe mir gedacht, ah, dieses E-Mfd muss doch verwundbar sein. Und das wird schon endgültig irgendwann möglich sein. Und das ist jetzt mein letzter Angriff, wo ich eine Command Execution der Verwendbarkeit gefunden habe. Und diesmal habe ich das gemacht, in dem ich eine Webseite geschrieben habe. Hier im FD führt Code in einem sehr komischen Weg aus. Hier wird es manchmal über SafeScript ausgeführt. Manche über Unix, Circuits. Hier gibt es all die Funktionen, die benutzt werden, um Shellcode auszuführen. Hier gibt es 107 System Calls. Und jetzt suche ich nach einem Aufruf, der das macht, ohne die Argumenten sich vorher anzuschauen. Und hier habe ich diese vier Funktionsaufrufe gefunden. Und heute zeige ich euch den letzten, nämlich CMD Import AWP Port angeschaut. Da musste ich Post Request zu Slash Admins CMDs, dat.jsp zu schicken. Das musste ungefähr so aussehen. Kommando Import AWP Port. Das nutzt auch Du-Command, um CMD Import AWP Port aufzurufen. Und das nutzt dann unsicher, dieses System zu finden. Alles, was ich hier brauchte, war, ich konnte schon einfach das Kommando reintun. Und damit konnte ich Code ausführen. Aber nein, ich brauchte noch eine Form von Authentifizierung. Aber es wird erst hier nach einer Session geschaut und erst dann wird die Verwundbarkeit ausgelöst. Ich brauchte einen anderen Ansatz. Also brauchte ich etwas nach, was Ajax CMDs dat aufruft, aber nicht nach einer Session aufruft. Das heißt, ich habe mir wieder SAP angeschaut. Das hat viele verschiedene Argumente. Und wir können ungewollte Argumente weitergeben ohne Authentifizierung. Zum Beispiel Logfile. Aber das ist nicht hilfreich, weil ich muss den Content kontrollieren. Ich habe das Tag, SAP und Node Argument genutzt. Das ist ein String. So wird es in das Logfile geschrieben. Hier ist der Schreibcode für das Logfile. Hier wird es geöffnet. Und hier kann ich den Inhalt der Datei beeinflussen, indem ich die jeweiligen Wertesetze. So, jetzt wollte ich hier was schreiben. Es muss ein Slashwap sein. Aber das Problem ist, es ist Teil des SquashFS Dateisystems, was Read Only ist. Was man nur lesen kann. Glücklicherweise ist Slashwap Slash Uploaded. Und das ist Slash IDC Slash AirSpider Slash Uploaded. Und das ist Schreibber. Jetzt kann ich also eine Datei schreiben. Das Problem war, das SAP Kommando musste zu einer Transmission, also seine Station sich verbinden. Ansonsten startet es nicht. Das heißt, ich habe mal SAP de-compiliert. Und dann kann das SAP zu der Station auf meinem Computer sich verbinden. Das war der Request, den ich gesendet habe. Das erfüllt das SAP Kommando aus. Beachte, dass ich hier zwei Argumente benutze, um den Delegate Call reinzuschreiben. Jetzt ist es in Slashwap Slash Uploaded Slash Index.jsp. Und das, die Seite war mit ganz schön viel Zeug drin. Aber das war nicht weiter schlimm, weil es war Hauptsache, meine Funktion wird darin aufgerufen. Jetzt kann ich diese Verwundbarkeiten verketten und lade erst mal die Seite hoch. Und dann kann ich eine Kommando Injection machen. Und das ist jetzt die Zeit für meine letzte Demo. Das ist die schwierigste von den drei. Viel Glück mir. Jetzt brauche ich noch einen Terminal. Ja, das hier. Hier werde ich jetzt SAPD ausführen, was die Transmission Station ist. Jetzt höre ich hier auf Port 444 mit Netcat. Und jetzt in meinem anderen Terminal. Jetzt möchte ich euch das Seitenerstellstrip zeigen. Jetzt zeige ich, ist hier der Server drin, was mein Computer ist. Und damit kann ich jetzt meine Funktion in meinen Datei stellen. Und jetzt poste ich das PageGrade, also das Heirstellen, zum Uter, zu unterstrich ACMDs, dat.jattus.p. Und jetzt jeden Augenblick wird das antworten und okay sagen. Und ich habe die Seite jetzt geschrieben. Jetzt zeige ich euch mein Payload, mit dem ich Kommandos injekten kann. Hier benutze ich slashbin slashsh und verbinde mich da mit meinem Computer. Dann poste ich diese Datei zum Router. Auf upload inindex.jattus.p. Und missed. Okay, again. And now hopefully. Und jetzt hoffentlich. Hopefully I'll see that I am the root user. Jetzt hoffentlich kann ich sehen, dass ich der root user bin. Eine Sekunde. Und jetzt. Be root. Sei root. Ja. Wow, wow. Live demos. Live demos. You don't see them anymore. Okay. Jetzt zusammenfassend. Ich habe drei verschiedene Remote Code Executions gezeigt. Ein Admin, Ausdentifizierungsleak und ein J-Break. Dann Stack Overflow vor der Authentifizierung. Und am Ende gab es ein Kommando, Injection und ein Ausdentifikationsbypass. Dann, was habe ich genutzt? Ich habe meine Docker benutzt, die sehr hilfreich sein. Und ein J-Descript geschrieben. Ich habe den Leuten, die, ich habe zehn CVS angefordert. Und ja, das haben sie bestätigt. Und wenn ihr hier irgendwelche Rokos benutzt, dann solltet ihr schauen, dass ihr wirklich auf der letzten Version seid. Sonst können Leute damit irgendwas machen. Also ja, bitte checkt eure Version. Na gut. Und diese Forschung war ziemlich witzig. Es hat auch, war eine gute Gelegenheit, unsere Docker Emulationen zu überprüfen. Und der Blockpost wird publiziert. Aber das braucht jetzt noch bis zum 6. weil Rokos lieb gefragt hat. Also wartet schön. Und dann schaut uns unsere tolle Forschung an. Vielen Dank, dass ihr zugehört habt. Vielen Dank. Vielen Dank für den tollen Vortrag. Bitte stellt euch an den Mikrofon an. Oder stellt die Frage im Internet. Heute das Internet zuerst. Also bitte. Okay. Es gibt hier einige Frage. Die erste Frage. Funktioniert das auch auf Anliegen? Ja, das wird funktionieren, aber nicht auf der neuesten. Ich habe meine Forschung auf der Anliegen Version durchgeführt. Okay, jetzt mal eine aus dem Raum. Vielen Dank für den tollen Vortrag. Hier, du hast gesagt, es gab 107 Händler, die System aufrufen. Hast du Jita dafür benutzt, um das rauszufinden? Ja, der Referenzzähler, der gab mir eine gute Idee, wo was falsch sein könnte. Und als ich danach gesucht habe, habe ich die erreichbaren Seiten des Systems angeschaut. Und das hat alles ein bisschen reduziert. Das waren immer noch 15, 12 oder 15. Die Injektion ist von Hand getan. Also ich habe da keine besonderen Skripte geschrieben für Jita. Also keine Analyse des Calltrees in Jita? Ne, das nicht. Lass mich erst mal sagen, wie zur Hölle. Okay, jetzt als NSW-Konsultant. Die Quad-1-Bennutzung. Die eigentliche Frage ist, wie sind die Angriffsvektoren? Die Angriffsvektoren sind bloß auf Layer 3, oder? All die Angriffe sind sowohl vom LAN als auch vom Internet möglich. Am Ende habe ich jetzt plus zu sagen, dass ich Hardware von einem orangischen Hersteller habe. Okay, das Internet, noch eine Frage. Das Internet möchte wissen, ist das Würte-Smartzone-Modell auch dabei? Nur der Zugriff, der Access Point und einige der Probleme sind im Zonedirektor. Danke für den schönen Talk. Ich habe auf ein paar Seiten gesehen, es gab ein Gehardcode des Cross-Side-Request-Forgetoken. Es gab da noch mehr Plätze, wo es Sicherheitschecks waren, die man überwinden konnte mit dem String. Ich habe meine Forschung eher darauf konzentriert, wie es im Low-Level aussieht, mit dem Stack Overflow und der Kommando-Injection, oft in Binaries. Aber wir haben auch ein paar Web-Probleme gesehen. Eins ist SSRF und ein anderes könnte mit den Tokens sein, weil die hardcoded sind. Da kann man in der Firma noch ein bisschen weiter umschauen. Ich habe den hardcoded noch nicht berichtet, also das CVI. Okay, das Internet. Wie viel Zeit hast du dafür gebraucht, dieses Gerät in kleiner Stücke zu zerreißen? Ich habe einen Monat gebraucht. Der erste Exploit war relativ schnell, in zwei Tagen. Und der Rest der Analyse hat so ungefähr drei Wochen gebraucht. Okay, Mikrofon Nummer zwei. Danke für den tollen Talk. Ich habe ihn mir sehr gefallen. Am Anfang ging es ein bisschen schnell für mich. Wie ist es mit dem Docker passiert? Wie hast du die Rockus-Firmware bekommen in den Docker-Container? Könntest du noch mal deine Frage wiederholen? Wie hast du herausgefunden, dass man das Rockus-Image auf dem Docker-Image laufen lassen kann? Ich habe ein paar Schritte übersprungen. Ich habe Pinwalk verwendet und habe die Firmware runtergeladen. Und Pinwalk holt das SquashFS raus. Und dieses Fallsystem habe ich in den Docker reinkopiert. Und weil der Docker auf der anderen Architektur läuft, konnte ich den Code von der Firmware dort laufen lassen. Den User-Space-Code. Noch mehr fragen? Ihr habt 30 Sekunden Zeit, eine Frage zu stellen. Hast du 30 Sekunden Inhalt? Ich könnte einen tollen Tanz aufhören. Ah, nee, vielleicht doch nicht. Ich wünschte, ich könnte. Immer noch keine Fragen? Dann gute Nacht euch allen. Und dank dem Vordheimung bitte. Vielen Dank, das war er.