 For as long as Nintendo has been making video games, they've been building in copy protection and region locking. Solange Nintendo Konsolen hergestellt hat, haben sie auch stark an dem Schutz dieser Konsolen gearbeitet. Heute sind wieder da die Drehungs, die uns mal wieder was von Nintendo switchen, um dem Sicherheitssystem zeigen zu wollen. Applaus, bitte. Hey, guys. Hallo, Leute. Is it working? Funktioniert das hier? Okay, also. Hey. Also, herzlich willkommen. Das sind Derek und... Als erstes möchten wir... Also, wir sind ethische Hacker. Wir unterstützen keine Raubkopien. Wir möchten wirklich nur kreative Sachen machen. Also, der Nintendo Switch kam vor neun Monaten raus und wir haben seitdem damit rumgespielt. Und es war wirklich erfolgreich. Aber wir wollen es natürlich knacken. Also, der natürliche Eintrittspunkt ist natürlich wie immer der Web Browser. Also, der Switch hat wir in den Web Browser, aber kein Web Browser App, aber wir haben den Weg gefunden, den zu starten. Also, es gibt dieses Teterspiel hier, was man kaufen kann. Es braucht ein bisschen. Also, man geht ins Hauptmenü, drückt auf den rechten Trigger-Knopf und es startet das Menü. Dann geht man ins Menü und dann geht man ganz runter und dort gibt es ein Link zu ihrer Website. Es braucht ein bisschen... Also, es ist Spray zu heben und so Sachen. Oh, ich hoffe, ich habe es nicht kaputt gemacht. Oh, sorry, ich habe es kaputt gemacht. Okay, also, noch ein Versuch. Also, das ist... Den WebExplot, den wir benutzen, der war damals schon sechs Monate alt, als der Switch rauskam. Und wir haben natürlich gedacht, wir müssen nicht unser eigener finden, wir nehmen einfach den, den es schon gibt und benutzen den. Es ist ziemlich nervig, das jedes Mal neu zu machen, aber ich habe es wahrscheinlich schon tausendmal gemacht, man stupft ab. Es ist das WLAN. Ich habe leider keinen. Tut mir leid. Also, das ist nicht, wie wir uns das vorgestellt haben, sondern versuchen wir das immer später. Tut mir leid. Aber wir können hier vielleicht ins Menü gehen und dort und... Also, wir können uns nachher um die Demo. Der Switch ist eigentlich... Der Switch ist ein Hybrid, Hybrid hardware, also, von einem... Es hat einen Quad-Core-Prozessor, mit einem Gegenherz, es ist ein ARM-Prozessor und es hat einen Maxwell Architektur mit 764 MHz. Kommt drauf an, ob man das Ganze an in der Docking Station hat oder nicht, also in der... Ohne die Docking Station, ein bisschen weniger. Und es benutzt den RAM. Und dann gibt es die zwei Argumente, die Joy-Cons. Also, dass man zu zu weit spielen kann und die haben einen Gyrameter, einen Beschleunigungs-Sensor und die haben so eine Eigenschaft, HD-Rumble, und die haben überhaupt keine Sicherheit. Also, man kann die aufschrauben, anschauen, die Teilnummer anschauen, anschauen, googeln und eine Flasche rausspucken, das ist alles plaintext. Aber wenn das Hauptding aufmacht, das ist was man sieht. Man sieht die zwei RAM-Riegel und hat man die Haupt-CPU in Rot. Und der Rest ist WLAN, Strom und solche Sachen. Und natürlich... Also, sie haben extra Bord entwickelt für die Flasche, damit man es rausnehmen kann und einfach dampen kann. Und die Code-Name für den Switch ist hack. Ich bin mir nicht sicher, was Sie sich dabei gedacht haben. Wenn wir uns die Haupt-CPU anschauen, dann heißt sie ODNXO2, weil Nintendo ODN ist. Und der Chip kommt von Nintendo und das ist der Code-Name für den Nintendo Switch. Die Teilnummer ist aber tatsächlich eine Lüge. Es ist ein ganz normaler Tigre X-Chip von Nvidia. Die Leute haben es aufgemacht und es liegt genau gleich aus. Die Online-Menu ist frei verfügbar, online und es detailliert alles bis auf den Sicherheitspad. Sie haben auch ihre eigenen Linux-Treiber. Aber wir können die Security-Register so hinbekommen. Wir haben eine ARM-7 CPU mit Power-Management. Es hat viel RAM. Die Haupt-CPU hat 64 KB SRAM mit einem sicheren Zugriff. Und dann haben wir auf dem same Chip eine weitere CPU. Sie haben Direct-Memory-Experts. Sie haben viele Sicherungen drin. Und ein Speicherkontroller. Und alles in allem eine ziemlich komische Architektur. Sie waren relativ kreativ. Und dann die DSP, die Sound-Processing-Unit und ein paar Busses. Sie haben 32 Bit für Downgrade-Protection. Jeder Bootloader schaut sich ein dieser Fuse an und kann so schauen, dass es nicht gedowngraded worden ist. Dann wird es nicht booten, weil es eine solche Sicherung haben, die sie durchgebrannt haben. Dann haben wir einen SPK, den sicheren Boot-Schlüssel, ein 128 Bit mit. Es ist die komplette Vertraulichkeit. Es wird dadurch gesichert. Damit können wir die komplette Software entschlüsseln. In diesen Sicherungen drin. Man kann aber Zugriff darauf deaktivieren. Dann haben wir den Hash von den öffentlichen Schlüssel. Sie sprechen zwar nur den Hash, aber das ist genauso gut. Dann haben wir noch die Möglichkeit, 320 Bit Boot-Rums zu patchen. Das heißt, Sie können das weiter fixen, indem Sie die Fuses neu beschreiben. Weil das bloß ein normaler Chip von NVIDIA ist, die uns ein Development-Bord geben, mit dem wir entwickeln können, oder für 700 Dollar oder die Hälfte. Da kann man mit dem IOW patch spielen und rausfinden, was undekommentiert ist. Wenn sich die Software anguckt, es gab das Gerücht, das es auf FreeBSD läuft. Nein, tut es nicht. Es hat einen eigenen Mikro-Könel, der den Nintendo schon für 3DS benutzt hat. Es ist so 8.000 Jahre alt. Alle Treiber laufen im User-Space. Also es ist eine Mikroservice-Architektur. Dann haben Sie einen eigenen NVIDIA-Grafik-Treiber, der ähnlich zum Linux-Treiber ist, aber den Sie stark modifiziert haben. Sie haben eine eigene ARP entwickelt, um mit dem Treiber zu reden. Es ist irgendwie so, wie wohl kann. Es ist undokumentiert für uns. Wenn vom 3DS kommt, aus der 3DS-Hacking-Szene, kann man das ein bisschen vergleichen. Der Unterschied ist, alle User-Prozesse haben jetzt ASLR. Das macht es sehr schwer, Safegames auszunutzen, weil wenn man einen Backfindet, kann man damit nicht viel machen. Man kann im eigenen Rahmen nicht viel machen. Sie haben sehr viel neu geschrieben und umbenannt, aber wenn man die Abgezogen austauscht, dann ist die Struktur dieselbe. Tut mir leid, das war zu weit. Das muss ich zurück. Also genau das 3DS läuft auf den ARM 9, der viel gemacht hat, der auch keinen Speicherschutz hatte. Den haben sie entfernt und es läuft auf derselben CPU mit Schreibschutz auf den Speicher. Das Security-Mail, das Sie haben, das Höchste ist die Trustzone, die wir jetzt benutzen. Es ist so designed, dass die Keys nie diese Zonen flassen. Das ist wie ein Hardware-Schlüssel. Dann gibt es den Kernel. Der ist dazu da, um Kommunikation zwischen den Prozessen zu stellen und die Prozess-Isolation voranzuheben. Und es benutzt diese Grundprozesse, auf denen alles aufbaut. Das FS ist zum Beispiel der File-System-Triber. NCM ist ähnlich interessant. SM ist der Service Manager, der sehr interessant ist. Der steuert, welche Prozesse mit welchen Reden dürfen. Und dann gibt es den PM-Loader, der neue Prozesse lädt und SPL, was zwischen den Interfaces redet. Und dann gibt es die Mikroservices, die sich um Bluetooth, Wifi und solche Sachen kommen. Und dann, ganz unten, mit dem niedrigsten Berichtigung läuft, läuft zum Beispiel der Webbrowser oder die Games. Also, das Ganze ist in das Handbox. Also, da hat man Zugang zu den Assist-Calls. Man hat 40 Nutzer-Services, also, auf die er zugreifen kann. Und es hat einen File-System per Prozess. Also, was bedeutet das? Nur, ein Spiel auf seine eigene Speiche zu greifen kann. Also, wir wollten es aus den Umbrella-Exploit machen. Also, wo wir Sachen auf Karten laden und auf Zugreifungen können. Aber wir können das einfach aus dem Browser ausmachen. Dann gibt es die Service Handbox, also, dass es wo die ganzen Treiber drin sind. Da gibt es 20 Mehr-Sys-Calls, die vor allem die Kommunikation zwischen den Prozessen handhaben. Es hat eine Service-WideList, es gibt einen Zugang zu ein paar mehr. Aber die haben überhaupt keinen Dateizugriff. Es gibt ein paar Ausnahmen, aber das ist eigentlich ziemlich stark. Also, selbst wenn es schafft, einen Treiber auszunutzen, klickt man trotzdem keinen Zugriff aufs File-System. Und die müssen manchmal zu Geräten aushaltberätend. Deswegen haben sie eine MMI-O-Map. Aber wenn eine Anfrage rausgeht aus dem ... Selbst wenn eine Anfrage rausgeht, kümmert sich die Körnerle um die Anfrage. Also, das heißt, selbst ein Treiber kann ... Also, kann der selbst Treiber das Gerät nicht fragen, was er tun soll. Also, dann gibt es die Base-Service-Sandbox. Also, das sind die 5, 6 Prozesse, die speziell sind, die ich vorhin genannt habe. Die sind in dem Kern- und Package mit drin. Die sind Sys-Calls für die normalen Dienste. Aber sie haben keine Service-WideList. Also, das sind die, die die Widelist umsetzen müssen. Deswegen haben sie keine Widelist. Also, das sind die, die ... Also, sie können sich nicht selber kontrollieren. Und auch, weil sich diese Services um das Detail-System können, haben sie auch keine Filesystem-Weite-List. Also, wir kommen irgendwann ... Also, wir fangen jetzt mal ganz unten an. Also, wir fangen mal wieder mit Web-Quit an, wie in der Demo nachher. Es gibt ein paar Fehler, die haben sie alle behoben, aber es kommt immer mehr. Es wird für den Online-Shub genutzt. Also, wenn ein Spieler online kauft, die Anleitungen. Und es geht immer über HDTP. Also, wir können die Daten nicht wirklich kontrollieren, außer bis auf das eine Spiel. Es gibt auch noch einen neuen Weg, den neuen Browser starten. Also, man erstellt den Access-Point. Und kann dann Lock-in-Pages anzeigen. Und dann startet der Switch im Browser. Also, da muss noch nichts, es funktioniert einfach. Also, wenn wir den Speichel vom Browser dumpen können, sehen wir, dass es dynamisch linked. Also, es ist kein Elf, aber wir haben es dahin konvertiert. Quasi alle ihre Funktionsnames finden wir hier. Mit allen Sys-Calls und so weiter, Krypto-Zeugs. Das ist das, was wir uns später zeigen werden. Die Game-Applikation, die ist Spiel. Da wusste Nintendo, dass wir das irgendwann hinkriegen. Das ist relativ einfach. Was wir dann nachgemacht haben, ist, wir wollten unsere Previsual Escalation schaffen. So, ich bin Pluto. Und es gibt dort ein Service namens PLU. Ich glaube nicht ein Schicksal, aber ich habe diesen Service genommen. Das ist ein Benutzersugriff. Ein Service der Form Zugriff. Das war ein Service. Das sind Integers. Wenn man einen großen Index gibt, dann gibt es einen Area Out of Bounds. Read, was bei hohen Werten crashes, beim niegeligen Werten konnte man den Code dumpen. Das heißt, wir haben einen der Microservices genommen und ihn dumpen können. Als nächstes wollen wir den Service Manager angucken. Wir wollen, welcher schaut, welche Service auf wen zu greifen kann, mit einer Wildlist. Wenn wir ein String geben, dann gibt es uns einen Handel zurück. Wir senden ihm unsere PRD. Und so wissen, dass er weiß, welche PRD anfragt. Das passiert, wenn wir einfach die Initialisierung überspringen. Dann ist das uninvisellisiert. Das heißt, es wird in dem Fall Null sein. Das heißt, der Service Manager denkt, dass wir PRD Null sind. Die PRD ist das ID Null. Dann kriegen wir Zugriff auf alles. Wir können mit allem reden, aber wir haben kein Code davon. Deswegen wollen wir eigentlich einen Code haben, um die zu analysieren. Wenn wir uns das anschauen, wie die Banners geladet werden. Das ist im FSB-Service. Dann schauen wir uns den FSB-Service an, um die Banners zu dumpen. Aber wenn wir das versuchen, dann kriegen wir eine Fehlermeldung. Das heißt, das liegt daran, dass der Kernel uns darin hindert, mehr als eine Session gleichzeitig offen zu haben. Das heißt, wenn wir den Loder, der eigentlich läuft, aber crashen, dann können wir die Session vielleicht benutzen. Wenn wir ein Kommando in Loder benutzen, und das ist eine ungütige Threater, die geben, dann crasht es. Damit können wir das System sehr viel überstehen. Jetzt gucken wir uns den Kernel an. Dann machen wir einen kleinen Umweg. Derek würde euch dazu was erzählen. Also, was passiert, bevor das System gut wird? Es sieht aus, als hätten wir ein bisschen Zeit bei der Demo verloren. Also, was wir bis jetzt erreicht haben, ist, wir haben einfach Black Box Testing gemacht, und es macht Spaß, aber nicht wirklich. Also, der Switch benutzt ein Mikro-Kernel, und das Angriffsektor ist sehr klein. Und es ist sehr unwahrscheinlich, dass man irgendwas findet, wo man das Ganze dumpen kann. Und es gibt als Erlehrer, die Dienste schützen. Man braucht Schwachstellen auch in den Diensten, um Zugang zum Beispiel zu den Kernel-Calls in der Zugriff zu bekommen. Also, Black Box Testing, den Kernel war ein bisschen, war eigentlich ein tolles Ende für uns. Also, wenn man über darüber nachdenkt, wie das Ganze aussieht mit den Zugriffsrechten, ist WebKit eigentlich ziemlich unten. Aber es ist eine Konsole. Also, warum probieren wir die anderen Sachen? Also, gucken wir uns doch mal die Boot-Sequenz an. Es ist wirklich cool, weil es alles öffentlich dokumentiert ist von den Video, und man kriegt einen Haufen Informationen umsonst. Und wie es funktioniert, also, was auf der ultra-schlechten alten CPU läuft, die sie BPMP nennt, das ist Boot Power Management Processor. Und das ist aber keine Custom Boot Room. Das Ding kommt von den Video. Aber Nintendo hat ein paar Patches draufgemacht. Also, das Boot Room, wie es erklärt wird in der Dokumentation, wird einfach ein BCT-Land, also ein Boot-Konfigurationstabelle, und dann im zweiten Schritt weiter. Aber zu dem Zeitpunkt weiß ja nicht, was das BCT ist. Man weiß auch nicht, wo der zweite Code für den zweiten Schritt liegt, aber das steht in der BCT-Tabelle. Also, wenn wir uns den Boot in Folge auf den Switch angucken, gibt es ein paar Sachen. Also, wenn irgendwas fehlt, dann geht das Switch in Recovery Modus und dann kann über USB Nachrichten schicken. Also, wenn bedenkt, so bekommt man ein Backdoor hin. Das ist leider nicht so. Also, Nintendo benutzt dafür einen privaten ARS-ARC, und den haben wir natürlich nicht. Aber was wir natürlich machen können, ist, wir können das EMC dumpen, was total leicht ist. Also, wir haben einen guten Überblick über die Boot Komponenten bekommen. Also, das ist ein bisschen schwieriger, aber was man hier sieht, man sieht das Boot Room auf der linken Seite. Das LED, was sich Package One nennt, was der nächste Bootloader ist und den nächsten Schritt in einem Ladefunktionen. Und das nächste ist klar textgespeichert. Also, Sie benutzen hier keine universalen... Also, wir mussten hier nichts knacken. Also, wie funktioniert der Package One loader? Also, wie entschlüsselt er den nächsten Schritt? Also, das Ding hat der Eigenschaft, wenn man den Schlüssel aus dem Speichelad kann man keine Package One loader hergehen, der den Keyblock generiert, um den Keyblock zu entwickeln. Also, das wird genutzt um den nächsten Schritt zu entschlüsseln. Also, wir hätten gerne diesen Schlüssel, weil der Kernel Verschlüssel ist und das ist Teil von Paket 2, den man recht sieht. Aber dieser Schlüssel ist nur für den Package One loader verfügbar. Also, wir brauchen Code execution oder... Also, wie dampen wir die Schlüssel? Also, früher haben wir das so gemacht, wir haben irgendwas anders geglitched und haben da die Schlüssel rausgekommen. Also, jetzt haben wir versucht den Switch zu glitchen, um die Schlüssel zu bekommen und um das zu machen, um die Remote Code execution zu bekommen. Was man glitchen will, ist das Bootraum, was man glitchen lassen will, um den Package One loader anzufassen. Also, wie wird es verifiziert? Der Bootloader benutzt das BCT, was ich vorher während hab und das ist praktisch der die ganzen Signaturen beinhaltet. Und da ist auch eine RSA und PSA Signature drauf. Das ist wirklich eine starke Verschlüsselung. Also, Sie nutzen hier den RSA Public Key, um die Signaturen zu verifizieren. Und dieser Public Key wird gehasht und der wird in Sicherung niedergeschrieben. Also, man kann den Hasht nicht ändern. Also, was Sie jetzt machen wollen, wenn der Bootraum den Schlüssel verifiziert, wollen wir das ganze glitchen. Also, den Hasht Check, weil dann können wir unseren eigenen Key und unsere eigene Signature laden und dann haben wir es. Aber da hatten wir damals das Bootraum noch nicht. Also, was wir nicht wussten, wann es passiert. Also, wann das ganze kontrolliert wird. Also, muss man das Timing finden. Also, dazu muss man sich das EMMC-Bass angucken. Also, man kann das ganze mitlesen. Man bekommt einen sehr coolen Dump und man bekommt einen ganzen Kommandus, die vom Bootraum ausgeführt werden, zum EMMC. Also, man sieht hier das Diff, was der Zeitabstand zwischen den Befehlen ist, die ausgeführt wurden. Und das ist praktisch die Zeit, die das Bootraum braucht, um ein paar Operationen auszuführen. Also, aber braucht es ein bisschen, um das ganze zu verifizieren. Und wenn man was Invalid ist, wenn Invalid ein Schlüssel reinschreibt, dann fällt das ganze. Und es startet ein nächsten BCT. Und dann kann man sehen, wo sich die Zeit verändert und dann weiß man, wo die Verifizierung läuft. Und der Bootloader geht her und bricht ab, wenn er feststellt, dass das nicht der valide Schlüssel ist. Und dann weiß man, wo das ganze passiert. Es hat etwa ein Monat gedauert, um dieses Setup für das Glitch zu entwickeln. Das benutzt Glitching über den Strom. Wir haben die ganze Zeit, um das ganze zu entwickeln. Wir haben die ganzen Kapazitoren entlötet, die den AM7 betreiben. Dann haben wir den FPGA benutzt, um ... Dann haben wir den FPGA benutzt, um die Spannung runterzubekommen, um die Zeit zu verlangsamen, um in der Hoffnung, dass die Kontrolle fehlschlägt. Und wenn man dann Code execution bekommt, waren wir ziemlich faul und haben einfach den EMC Clock bearbeitet. Also, da gab es ein Register, was ich bearbeiten konnte. Und praktisch beim Ende der Frequenz konnten wir das ganze Bit by Bit machen und das an unser FPGA schicken. Dann haben wir alle Keys gedammt und so haben wir alle Schlüssel bekommen und auch alle Bindernerteilen. Mach noch mal. Danke, Derek. Er hat uns die ganzen Schlüssel besagt. Als erstes können wir den Kainel von innen angucken, statt nur als Blackbox. Also, was wir jetzt rausfinden, ist, wo was im Speicher genannt ist. Irgendwo ganz oben. Das ist eine Witte, machte mal. Wir können tatsächlich den Read-Only-Memory beipassen, den wir hier ein paar Bits setzen. Das Ding ist, wir haben hier ein DRAM-Mirror im Adressraum. Alle Objekte, die wir allozieren, haben wir mithilfe eines Lappys. Das heißt, alle Alokationen sind gleich groß. Das heißt, wir kriegen nicht so richtig einfache News After Free hin. Das heißt, wir können bloß ein Objekt mit einem ähnlichen Objekt überlagern, welches vom gleichen Typ ist. Die meisten Pointer sind trotzdem für beide Objekte valide, weil sie einfach genau die gleichen Länge haben. Außerdem kann der Kornel keinen Programmcode auswählen, der mit geringeren Privilegien ausgeführt wird. Nur. Nur, dass ich das richtig sage. Hier sieht man die Nutzer-Zugrufsrechte. Was sie auswählen gemacht haben, haben sie den Kornel mit dem Usus-Space als Ausführbartei gelingt. Es ist meistens nutzlos, aber es bedeutet, dass sie aus dem Nutzer-Space einfach in den Kornel-Space wechseln können. Man kann das gar nicht mehr. Aber man muss den ASLR bypassen. Man kann es ganz vergessen benutzen, aber nicht mehr. Also haben wir nur Read-Only auf dem Kornel. Aber jetzt können wir mit IOMU über den Speicher-Manager auf draufzugreifen. IOMU sorgt dafür, dass alle nicht-CPU-Busmasters geschützt sind. Und dann kann man eine Speicher-Tip. Jeder dieser Busse hat einen Asset, und man kann bloß auf die Busse zugreifen, die in unserem eigenen Page-Table sind. Der Kornel hat diesen Page-Table und das sorgt dafür, dass man bloß seinen eigenen Hieb haben kann. Es gibt auch noch Funktionen, mit denen man von anderen Prozessen den Memory zugreifen kann. Aber wie haben wir jetzt die SMMU-Umgang? Wir haben uns das offizielle Datenblatt angeschaut. Und dann haben wir gesucht nach wie kommen wir an der SMMU vorbei. Die SMMU ist eine Memory-Management-Unit innerhalb der GPU und die supportet das Bypassen. Das heißt, Nvidia hat sich hier selber in der Hintertür verschafft. Die GPU kann also die SMMU Bypassen an der vorbei gehen. Und das finde ich super, das fanden wir super und wir wollen an dieser Stelle Nvidia danken. Das ist eine Art und Weise, das zu tun, aber das können Sie auch insbesondere nicht fixen, weil es keinen Fuse dafür gibt. Der Loader nutzt das Dateisystem um die Zugriffsrechte zu laden. Das heißt, wir können nach Zugriff auf den Memory-Controller fragen und das heißt, wir können irgendwelche Wurder in der Drossel beschreiben und damit können wir die SMMU beschreiben. Wir können einfach den kompletten, die das komplette Rahmen überschreiben. Das geht nicht, weil es ein weiterer Schutzmechanismus mittels eines Direct-Memory-Access looken. Es gibt zwei verschiedene Wege, das Ganze zu allokieren. Also wenn man eine kleine Tabelle hat mit weniger als 40 freien Spracher, kann man die internen Strukturen benutzen, aber wenn man mehr als 40 hat, wird das Ganze in einem Pool allokiert. Das wird auch für alle anderen Prozesse genutzt. Das Ganze, aber die Tabelle wird einfach vertraut. Wir können den Objekt auf dem gemeinsamen Spracher erstellen und wir können ihm sagen, dass der Kernel sich damit sprechen teilen soll. Dann können wir das Ganze zu unserem Prozess mapen und dann haben wir den Kernel zu unserem Prozess gemapped. Und es denkt ihm noch, es ist ein gemeinsamer Spracher. Dann können wir es praktisch patchen und damit haben wir ein Hintertür. So haben wir den Kernel gehauen. Die Trust Zone ist die schöne Ausführungsumgebung, wo man ein paar Glütsche schon gesehen hat, die uns geholfen haben, das Ganze dazu, Package 1 zu 1 zu entschlüsseln. In den nächsten 10 Minuten werden wir euch zeigen, warum wir diese Trust Zone komplett ignorieren können. Das ist eine Trust Zone, um Code sicher aufzulassen. Es ist eigentlich dazu da, was zum Monitorn, aber auf dem Termination macht das aber nichts. Zum sicheren Monitorn. Der erste Code, der dort läuft, ist die Entschlüsselung. Und es lädt den Payload in die Trust Zone und dann sichert es den Speicher ab. Und dann springt es dorthin. Das erste, was das Secure Monitor macht, ist den Kernel zu buten. Ihr habt das Paket auch gesehen. Das wird im Hauptraum sein. Dann schreibt es den Kernel ins Speicher, in den Schlüssel die Paketmodule und startet und führt dann den Kernel aus. Das ist das Wichtigste, was das Ganze macht. Die zweite Wichtigste Aufgabe ist die Krypto vom Switch. Die Verschlüsselung ist nicht direkt in das Software vom Secure Monitor, aber sie nutzen die Security Engine von Nvidia. Und was das die Trust Zone auch noch macht, aber nicht so wichtig ist, es wird noch genutzt, um die CPU-Kurs hoch zu fahren. Damit wir eine Möglichkeit haben, die anderen Kurs zu starten und das Kommission des Schlafmodus. Also die Hardware unterstützt einen Tiefschlafmodus, um Batterie zu speichern. Das ist das Schöne an Nintendo-Konsolen. Sie halten sehr lange mit der Batterie. Wenn sich das hier anguckt, das ist nicht wichtig für den Homebrew. Deswegen können wir die Trust Zone komplett ignorieren. Aber wir können es uns trotzdem anschauen. Also, damit wir alles angeguckt haben, die Tegra SE, habe ich die Krypto-Engine unterstützt AS, SHA, S-A und R&G. Ihr erinnert euch vielleicht aus dem 3DS. Sie nutzen das Konzept vom 3DS für Verschlüsselung. Man hat zwei Schlüssel, die kann man einzeln sperren. Und die Schlüsselspeicher ist immer gesperrt. Man kann das nicht einfach auslesen. Und dasselbe geht es auch mit der Trust Zone. Also selbst für ein Code-Execution in der Trust Zone bekommt, kann man nicht einfach die Schlüssel auslesen. Das ist eigentlich sehr sicher. Und was auch interessant ist über die Tegra SE, dass die Krypto-Operation nicht nur den Speich überarbeiten, sondern man kann Entschlüsselung und Verschlüsselung zwischen Schlüssel und Slots um Kies zu rotieren. Man kann sich das vorstellen, dass man einen Schlüssel verschlüsselt hat und dann kann man den Entschlüssel in einen anderen Platz um so, und so kommt man auf ein paar coole Sachen, die man machen kann. Also wie funktioniert die Kryptografie? Auf der linken Seite seht ihr die sichere DCQ-Wald, das ist der sichere Monitor und auf der Rechnung ist die nicht sicher Zone. Das wird vor allem dafür genutzt für das Fallsystem. Also das erste, was man machen muss, man fragt den Verschlüssel an, dann wird er generiert, man übergibt ein paar Parameter in den Schlüssel, das Wichtigste ist sogar den zuverlegten Session Key. Also jedes Mal wenn die Konzernstelle wechseln, in den neuen Session Key, ein Schlüssel auszulesen, kann man ihn nach einem Reboot nicht mehr benutzen. Das ist ein sicheres Design, aber wie benutzt man diese Kryptokies? Also man übergibt ein verschlüsselten Schlüssel in die DCQ-Wald, das lädt den Schlüssel und der wird verschlüsselt und der finale Schlüssel wird zurück und dem Klartext in den User Mode zurückgeben. Also wenn man sich das Ganze anguckt, nutzt das Fallsystem nicht die Hardware-Krypto, sondern eine beschleunigte AMD-Indistruktur. Also könnte man das Fallsystem manipulieren und dann macht der Secure Monitor einfach all die Schlüssel-Aparationen vor uns. Das ist relativ wichtig. Der letzte Möglichkeit von der Secure Monitor ist der Schlaf-Modus. Hier ist so ein guter Nachts-String oder so. Hier ist der Power-Management-Controller und der macht den Schlaf- und den Aufwachphase. Es wird alles eingeschlafen außer der DRAM und das PMC, der Power-Management-Chef. Nur wenn wir in den Sleep-Mode reingehen, dann ist der Secure Monitor schläft auch ein. Das heißt, er packt das Zeug woanders hin. In den DRAM tatsächlich. Aber das ist kein Problem, weil es sowohl für Schlüssel als auch signiert. Das heißt, ja, das ist kein Problem. Das heißt, beim Aufwachen liest es wieder und dann hat er Wenn wir aufwachen, dann gehen wir einfach alles rückwärts durch und dann kriegen wir den Secure Engine vom DRAM zurück. Dann kriegen wir eine Warm-Boot-Executioner aus, die signiert ist. Was sie tut, ist, einfach wieder die OSM-D-Ram auslesen in den Trustzone-Ram für den Secure Monitor und dann macht die Haupt-CPU einfach weiter. In Theorie klingt das alles recht gut, aber wir können einfach mal das Vertrauen von der Vertrauenszone, von Trustzone rausnehmen. Das ist der Kernel. Der Kernel meppt ganz viel Zeugs in den DRAM, aber die sind wirklich, wirklich wichtig in dem Aufwachprozess. Zum Beispiel die Aufwachschlüssel und so weiter werden auch aus dem DRAM genommen. Das heißt, wenn wir das jetzt in der richtigen Art und Weise modifizieren, dann kriegen wir Code-Execution vom User-Mode. Aber wie ich gesagt habe, es ist einfach nur was ein Aus- und Spaß macht. Es ist nicht wichtig, vielen Dank. Es ist ziemlich grün jetzt. Also was wir bis jetzt gemacht haben, wir haben einen USB-Debagger gebaut und es funktioniert. Man kann Breakpoints setzen, man kann durch den Code stepen. Man kriegt zwar nicht alle Signale, ist natürlich offener Code, es braucht immer noch den Exploit, den wir nicht teilen, aber vielleicht gibt es jemanden, der es selber entwickeln will. Was wir uns wirklich wissen, ist das Homebrew. Wir haben Libnx geschrieben, was diese User-Library ist, wo man die ganzen Funktionen darauf zugreifen kann. Man kann zu anderen Prozessen reden. Man hat die Rappers. Es funktioniert. Es hat das Netzwerk, das Data-System, USB. Wir haben Framebuffer, die funktionieren. Wir haben einen Kumpel, der seit zwei Wochen Vollzeit daran arbeitet. Da läuft ein Android-Zeug drin, was ziemlich wirst, aber es funktioniert. Wir arbeiten in Updates. Das kann man aber jetzt benutzen. Aber es gibt immer noch Arbeit zu tun. Man muss immer noch den profitären Code-Reverts-Engine machen. Homebrew macht auch Spaß. Wo brauchen wir Hilfe? Wir brauchen vor allem GPU-Beschleunigung. Im Moment wird alles per Software gerendet. Wir brauchen natürlich noch Unterstützung bei Audio. Dann hätten wir gerne, dass Leute Spiele machen. Wir wollten den Homebrew-Launcher ausbringen. Wir konnten es heute nicht rausbringen, aber er kommt demnächst. Zusammen mit dem Re-Switch-Team, die noch ein paar andere Explorers benutzen. Wir wollen es als stabile Plattform rausbringen. Und upgraded auf firmware 3.0 und bleibt dort. Vielen Dank für alle, die daran gearbeitet haben. Vielen Dank. Es ist ein sehr cooles System. Es ist ein sehr cooles System. Es ist ein sehr cooles System. Es ist ein sehr cooles System. Das ist etwas, was ich gestern nachgeschrieben habe. Wir hoffen, dass es funktioniert. Wenn wir Zeit für Fragen haben, sind wir gerne. Es gibt Fragen in Saal. 1 bis 6. Falls ihr Fragen habt, stellt euch hinter die Mikros. Es gibt noch einen Signal-Engel. Und es gibt natürlich noch ein Signalengel, der Fragen aus dem Internet beantwortet. Vielen Dank, wenn man das Ganze glitscht, um in die Schlüssel zu bekommen. Also, wie lange habt ihr gebraucht, um das richtige Timing herauszubekommen? Habt ihr das irgendwie automatisiert? Entschuldigung, könntest du die Frage wiederholen? Also, als ihr versucht habt, zu glitschen, wie lange hat es gebraucht und könnte man das irgendwie automatisieren? Es hat ungefähr ein Monat gedauert, um die Kies so ein bisschen zu bekommen. Und nur kürzlich, ich glaube letzte Woche, haben wir ein paar andere Schlüssel auch bekommen. Wir haben ein Glitching Setup, und ja, es war möglich, es zu automatisieren. Wir haben das Signal gefunden. Das heißt, nach jedem Glitch-Versuch konnten wir einfach resetten und neu versuchen. Vielen Dank für den tollen Vortrag. Ich würde gerne eine Glitch-Attack nachbauen. Also, gibt es irgendwo online? Ich würde es wirklich gerne selbst ausprobieren. Gibt es die Information für die Glitch-Attack irgendwo? Die Frage ist, ob mehr Informationen zu Glitch verfügbar sind? Es ist quasi einfach Power-Glitching. Es gibt viel Informationen darüber, es ist nicht so schwer. Es war ein ziemlich billiges Setup. Man braucht bloß ein paar Mosfets, die die Spannung auf Null setzen und dann funktioniert es einfach, nehme ich an. Mikrophone 1. Also, es gab Witze darüber, dass es praktisch nur ein Android-Table ist. Habt ihr immer versucht, Android oder Linux drauflaufen zu lassen? Nein, das haben wir noch nicht versucht. Aber ich denke, das wäre ziemlich cool, Android auf der Switch laufen zu lassen. Aber ja, es würde bloß Sinn machen mit einem Code, also mit einem Exploit im Bootcode. Signalangel. Vielen Dank. Vielen Dank. Also, ihr habt auch über Verschlüsselungen auf den Key Slots geredet. Also, kann man einen Key von einem gesperrten Key Slot auslesen und dann entschlüsseln? Die Frage war, ob man Verschlüsselungen geschlossen Key rüber kopieren in einen ungelockten Key Slot. Das Problem ist, dass es da ein Bit gibt, was es lockt und wenn man es richtig aufsetzt, dann ist dieser Angriff nicht möglich. Mikrophone 4. Vielen Dank. Ihr habt uns gerade erzählt, dass wir auf der 5.3.0 bleiben sollten. Also, was hat sich denn geändert von 2 zu 3? Also, dass Homebrew nicht auf der 2. Version funktionieren werden. Und was wurde in der Version 3.0.1 gepatched? Das ist nicht mehr funktioniert. Die Frage war, warum gerade 3.0.0 und nicht später, der Grund ist, das Problem ist, dass Sie den Bug gefixt haben in 3.0.1. Das heißt, wenn ihr da drunter seid, dann seid ihr verwundbar, aber bei 3.0.1 nicht mehr, weil wir dort die Wideless nicht mehr umgehen können. Das ist die Antwort dazu. Aber irgendwas wollte ich noch sagen? Es war wahrscheinlich eh nichts Wichtiges. Mikrophone 2. Also, dieses Exploit funktioniert mit dem Browser Hub, die es aber auch mit anderen Webkits versucht hat, z.B. im Captive Portal. Die Frage war, ob es in dem Tetris Game funktioniert oder auch im Captive Portal. Nein, der Webkit ist nicht gebandelt, es ist mehr ein System App. Und das Spiel launcht einfach das. Das heißt, die gleiche Verwundbarkeit funktioniert auch bis 2.3. Dann haben Sie es gefixt und dann haben Sie es auch irgendwann über 2.2 kann man es einfach so machen ohne. Das war die ganze Zeit, die wir für Fragen hatten. Noch mal einen herzlichen Applaus.