 So now we come to our next talk. It's about the Amazon Dash Button. Who of you knows what the Amazon Dash Button is? Okay, kind of everybody. Who has an Amazon Dash Button? Who has used it to buy something? Okay. So for everybody who has never seen an Amazon Dash Button, you now get the chance, I brought one. It looks like this. Hallo zusammen. Wir begrüßen euch aus der Übersetzerkabine zum Vortrag ein bisschen Licht auf den Amazon Dash Button zu bewerfen von Hunz. Aus der Übersetzerkabine begrüßen euch Pete Priority und Mr. Browns. Und wir hoffen, ihr könnt von unserer Übersetzung profitieren. Ich habe keine Idee, wer regelmäßig Play-Doh kaufen muss. Also dieses Spielzeug, ich weiß gar nicht, wo das hingeht. Ist das, dass die Kinder das einfach aufessen oder warum braucht man das regelmäßig? Das ist wahrscheinlich etwas, das man nicht in diesem Talk, in diesem Vortrag lernen werden. Warum man regelmäßig Play-Doh kaufen muss. Aber wir werden lernen, wie man es hätten kann, um es für einen anderen ins Fett zu bekommen. Manche werden sagen, ich habe schon mal so etwas gehört. Die erste Version dieses Buttons wurde genau so schon analysiert. Es gibt aber eine neue Version. Und wie das im Internet so ist, die neue Version wird angeschrieben, sicherer zu sein. Aber so ist es mit den Sachen im Internet, das Internet der Dinge. Was wir jetzt machen, ist, dass wir das Spielzeug, das Internet der Dinge, was wir so hören werden, ist ein Vortrag über die, hat uns Software und auch, wie die Kommunikation mit dem Server aussieht. Hunts wird uns einen Vortrag darüber geben. Vortrag hatten, er hat das schon seit längerem gemacht. Lass ihn uns mit einem herzlichen Applaus begrüßen auf der Bühne und lasst uns was lernen. Vielen Dank. Schön, dass ihr da seid. Schön, euch zu sehen. Lasst uns einen genaueren Blick auf den Amazon Dash-Button gucken, bewerfen. Es ist im Prinzip ein Wi-Fi verbundener Knopf und gibt es in den Staaten schon seit ungefähr 2014, ich glaube, hier in Deutschland seit August 2016. Also diesen Jahr. Es gibt zwei Hardware-Versionen. In dieser Vortrag nur die Versionen zwei behandeln, weil der erste ist schon behandelt worden. Ich glaube, auch den ersten kriegt man nicht mehr. Die alte Version ist auch komplett gehackt eigentlich. Dieser Knopf kann benutzt werden um bestimmte Konsumgüter einfach wieder zu bestellen. Zum Beispiel Waschpulver oder so. Es ist nur für manche Marken und Produkte verfügbar. Man kann es nicht freikaufen. Es kostet fünf Euro. Das ist eine Erstattung bei dem ersten Kauf. Es gibt auch eine anpassbare Version für 20 Dollar. Man kann aber immer noch nicht sein eigenem Code draufschreiben, aber man kann den Amazon-Webservice benutzen um den Knopf zu drücken. Was ist daran interessant? Es hat schon mal Wi-Fi. Also ist da irgendwie so etwas wie ein Computer drin. Es ist also irgendwie ein Internet auf einem Chip geredet. Eine Frage ist natürlich, wie es funktioniert. Ich würde es einfach wissen wollen. Und da natürlich die Frage, was ist mit der Sicherheit, wenn wir das in unser Netzwerk packen. Was kann es missbraucht werden für Cyber? Ein anderer wichtiger Aspekt für Hacker ist, ob wir unsere eigenen Internet-Dingle-Projekte da draufschreiben. Es ist stärker als ein ESP8266 und hat einen vergleichbaren Preis. Und wenn wir da kein Code drauflaufen lassen können, dann besitzen wir es nicht wirklich. Vorherige Forschungen, die schon passiert sind, gibt es hier. Ihr könnt euch die Vortragsfolien besorgen aus dem Fahrplan. Ich würde diese beiden links, auf diese beiden links verbeißen während meines Vortrags, weil das schon passiert ist. Ein einfacher Weg, den Knopf anders zu verwenden ist, die Smartphone Anwendung zu benutzen. Man konfiguriert den einfach normal, aber man schließt die App, wenn man ein Anwendung getätigt hat. Und dann kann nichts Neues bestellt werden, die Produkte außer alles von auf der Serverseite. Der Knopf versucht immer noch den Server zu kontaktieren. Aber das Server ist nicht konfiguriert und der Button blingt rot und das passiert nichts. Man kriegt doch nichts. Und natürlich macht es einen Haufen Zeug, um online zu kommen. Es benutzt sich mit einem WLAN, es sende eine DHCP ab und tns-Request antragen raus. Man kann das natürlich monitornen und locken und gucken, wann der aktiv ist. Zum Beispiel kann man DHCP, Dr. Tai, einfach ganz einfach angucken. Wer macht das schon? Ein paar Leute, so. Wir werden ein großes Stück weitergehen in diesem Protekt. Lass uns einen Blick auf die Hardware werfen. Was ist da drin? Die Kommunikationsprotokoll und die Krypto, die Filmware-Version. Diese Version war die aktuellste am 25. Als ich zum letzten Geschichte von 1912 bin. Und wir wollen einen eigenen Code auf dem Knopf laufen, das man ohne zu löten. Ich habe nicht die Smartphone-App analysiert. Das geht über mein Level. Okay, lass uns über die Hardware sprechen. Das Gehäuse ist einfach nur zugeschmossen. Das ist plastik. Man muss es irgendwie aufbrechen oder aufschneiden. Mein erster Art. Versuch war mit einem Messer. Ich habe leider ein paar S&D-Komponenten zerstört. Das Beste, was ich geschafft habe, war, ein Schneidemesser zu benutzen von oben, weil ich schon wusste, wo das zerkehrt. Man kann die Testpunkte hier sehen. Das ist der Microcontroller hier. Ich habe es einfach aufgeschnitten. Es gibt einen kleinen Platz zwischen dem Chip und der Verpackung. Der PCB hat vier Schichten. Viele S&D 0201 Teile. Also wirklich alles sehr klein. Man kann sehen, man kann die Pads des Microcontrollers sehen. Hier kann man ihn nicht sehen, weil da noch ein schwarzes Zeug drüber klippt. Ich weiß nicht, warum Sie das machen, aber man kann es vorsichtig wegnehmen und entfernen. Man kann es mit der Zitone ein bisschen ver-einfachen, das wegzukriegen. Der Microcontroller ist eigentlich ziemlich stark. Der Cortex M4 kann bis zu 120 MHz getaktet werden. Es hat 160 kB RAM und 502 kB Flash. Der Nachteil ist das Paket, also die Verpackung des Chips. Dann gibt es natürlich den WLAN integrierten Chip. Es funktioniert bei 2,4 GHz bis zu 72 Mbit. Es hat WPA 1 und 2 natürlich. Es gibt dann eingebauten IP-Layer-Stack, wie man sich an den Unix Socket orientieren kann. Man kann einfach von dem Controller ein Socket öffnen und mit dem Kommunikation beginnen. Es hat auch SSL und INS-Support Unterstützung. Natürlich gibt es da ein Spannungsregulator. Ein einziger Arbeiteri ist drin mit 1,5 Volt oder weniger. Es muss durch 3,3 Volt gepusht werden. Deswegen gibt es einen ziemlich starken Spannungsregulator. Sie hätten eine Billigan benutzen können. Es hat auch ein Bluetooth Low-Energy. Hier kann man den sehen. Ich bin mir nicht sicher, ob Sie das schon benutzen. Vielleicht machen Sie das auch schon mit der iOS-App. Aber ich habe es nicht angeschaut. Es gibt ein 4 MB SPI-Speicher, ein Mikrofon, das man hier sehen kann. Man kann leider ein bisschen sehen, dass die Schachtel die Verteckung weg ist. Es gibt 3 LEDs, rot, grün und blau. Das Ding wird getaktet von einem Oscillator. 32 KHz. Es gibt auch ein paar Discrete Halbleiter. Die werden benutzt, um ein Ding mit Strom zu versorgen. Wenn man alles zusammen packt, sieht es mehr oder weniger so aus. Ein bisschen einfacher als die Realität, aber das Bluetooth verbunden. Die Billigan geht über den SPI-Bus. Das Interessante ist, dass man in zusätzliches Usard für den SPI-Bus hat. Die Spannungsregulation startet, wenn man den Knopf drückt. Eine interessante Sache ist, es gibt keine andere Möglichkeit, das Ding aufzuwecken. Der Knopf kann niemals alleine aufwachen, nur durch den Knopf zurück. Wenn es erst mal in den Schlaf fällt, kann man nur wieder durch den Knopf druck erwecken. Die Spannungsbesorgung wird durch ein Ledge gestartet. Der Mikro-Kontroller kann die Spannung zur Batterie messen und kann die Batterie verbinden. Amazon weiß also, wann deine Batterie lehrst, weil das auch an den Server kommuniziert wird. Und damit deine Energie verbraucht. Petra hat da schon viel gemessen. Man sieht, dass Wi-Fi viele Spannungen zieht. Nur 4 Watt. Ohne Wi-Fi geht es um die 80mW. Mit ein bisschen Spannung, Energie, Sporschund kann man auch nur 0,5 Watt erreichen. Ungefähr 75 Minuten mit Wienern oder ungefähr 10 Stunden mit gutem Energiespann. Man könnte also eine ganze Leitung mit dem Mikrofon zuhören und dann mit Wi-Fi einmal alles abschicken, weil das Limit ist die Batterie. Das Debugging Interface ist auch da. Hat die Lötpunktischung gesehen. Der alte hatte Einzelkabel Debugging aktiviert. Und man konnte einfach den Speicher dumpen. Der neue Knopf hat Testpads, aber Einzelkabel Debugging ist deaktiviert. Der Konsole ist sehr eingeschnitten auf ein paar langweilige Befehle. Da kommen wir später noch mal zurück. Hier sieht man die Debug-Interfaces von der Unterseite. Man kann einen Connector anschließen. Welchen können Sie auf der Petra vom Seite nachschauen? All diese sind 3,3 Volt und der Pin-Out ist kompatibel mit dem alten Knopf. Hier sind ein paar Befehle. Es gibt verschiedene Moden. In Testmodus gibt es noch viel mehr Modi. Wir nutzen das wahrscheinlich in der Elfabrik, um Qualität Tests zu machen. Das ist das User-Mode-Menü, das man hat, wenn man den Serienport anschließt. Einfach eine Firma-Revision. Man kann die Batteriespannung messen. Man kann die Automatik-Shutdown, die die Automatik runterfahren. Die Entwicklung-Modus-Menü hat ein paar interessante Befehle. Es gibt immer noch keinen Speichezugang, aber man kann spezielle Modi aktivieren und so weiter. Man kann das WLAN aktivieren und so weiter. Lass uns einen Blick auf die Kommunikations-Protokolle und die Verschlüsselung werfen. Die Kommunikation läuft wie folgt. Man hat die SMG55, das ist der Mikro-Kontroller. Dann gibt es den Wi-Fi-Chip, das ist das AT-WINC. Dieser Chip macht all die TLS-Dinge. Das ist das WLAN, das ist das WLAN, das ist das WLAN, das ist das WLAN, das ist das WLAN, das ist das WLAN, das ist das WLAN. Ein Chip macht all die TLS-Dinge. Diese beiden kommunizieren im plaintext und der sparten nutzt dann HTTPS um zu den Amazon zu verbinden. Man kann also plaintext-Daten sehen und die sind auf 40 MHz getaktet. Das ist ziemlich flott. Einer der ersten Dinge, die ich getan habe, war die Kommunikation zu analysieren, die da ist. Ich wusste nicht, ob sie jetzt TLS benutzen innerhalb des Knoffs oder ob sie den TLS dann erst den Microcontroller machen. In der letzten Hardware-Version haben sie das Microcontroller gemacht. Deshalb habe ich in der FPGA zwischen die beiden Dinge gestellt und alle Daten mitgeschnitten, die durchgegangen sind. Ich habe den BUS angeschnitten, um meine Mittel-Experimente zu machen. Ich habe jetzt die volle Firma, also damit wäre das nicht nötig gewesen. Das sah wie folgt aus. Man kann sehen, dass ich dann den Microcontroller entfernt habe und ganz viele Kabel hinzugefügt habe. Diese gehen dann zu einem Art Baseboard, wo ich dann einen Breakout-Board anschließen kann für den Microcontroller. Und der Microcontroller ist auf diesem Board. Es gibt ein paar LEDs. Hier habe ich die serielle Konsole und hier das Einzelkabel-Debuggen. Das ist ein Reset-Knopf und das ist der aktuelle Dash-Button. Hier ist die Stromversorgung. Es gibt ganz viele Jumper und das sind die Verbindungen zu Bluetooth und Wi-Fi, um einfach meine Mittel zu machen. Dass das Ganze mit dem FPGA eingesteckt. Das ist also, wie ich die Kommunikation analysiert habe, die ich jetzt vorstellen werde. Die WLAN-basierte Kommunikation wird von der anderen Android-App benutzt. Ich weiß nicht, ob die iOS dieselben Modus verwendet. Um in die Konfiguration das Modus zu kommen, muss man den Knopf für ein paar Sekunden drücken, bis die LED blau leuchtet. Dann ist der Knopf im Access-Point-Mode und man kann zu einem WLAN-SSID verbinden, die Amazon-Configur-Me heißt. Und es gibt einen DHCP-Server für die IP-Verteilung und es gibt einen einfachen HTTP-Server, und es gibt eine Webseite mit grundlegenden Informationen, wie die Seriennummer, die Firmware und der Ladesstand der Batterie in Prozent. Nichts gerade interessant, aber die App macht mehr interessantes Sachen. Es holt die geräte Information von der Route und bekommt mehr Information. Die App generiert einen elliptischen Kurven-Diffelmen-Schlüssel und postet ihn dann diese Adresse und bekommt dann den Public Key von der selben Location, postet auch die Locale-Konfiguration. Das ist nicht sehr interessant, deshalb ist es auch unverschlüsselt. Es gibt einen verschlüsselten S-Token und einen verschlüsselten Network-Konfiguration zu einem Network. Nachdem das diese Konfiguration vollständig ist, verbindet sich der Button zu den WLAN und registriert sich sehr erst mit einem Amazon-Server. Dann passiert etwas Interessantes, denn es bekommt jetzt ein Kunden-Secret, also ein Kunden-Geheimnis oder ein Kunden-Key, das im Flash-Speicher gespeichert wird, der dann für die Bestellung zuständig ist. Es gibt ein paar geheimen Schlüssel. Das Device-Secret ist ein 20-Zeichen in Großbuchstaben und Zahlen. Das wird auch auf den Flash-Speicher geschrieben während der Herstellung. Das Kunden-Secret-Key kommt dann nach der Konfigurationsphase von den Amazon-Server. Und das ist zufällig vom sehr wahrscheinlichen Konfiguration. Man bekommt für jede Konfiguration einen neuen Key. Das ist beides im Flash-Speicher gespeichert und wird für HMAC-Requests benutzt. Die elliptische Kurve benutzt die Prime 256 für 1 Kurve. Sie benutzen dann SHA256. Um den symmetrischen Key zu generieren. Die Daten für die ISG-CM-Daten ist TLV-verschlüsselt. Type 0 ist das Cypher-Text und die Länge ist 16-Bit. Die Plaintext ist JSON kodiert. Das ist lustig. Sie benutzen TLV für die Verschlüsseldaten. Wenn man Verschlüsselt, bekommt man JSON. Hier sind ein paar Beispiel-Daten. Man sieht hier den Public Key. Local ist einfach nur das Land. Der S-Token ist das Server-Token. Das ist etwas, das die Amazon-App vom Server bekommt. Sobald man die Konfiguration eines neuen Dash-Buttons startet. Das ist das, was den Button an deinem Account bindet. Der Token ist 32 bits. Das Netzwerk ist so kodiert. Interessant ist, dass der HTTP-Server eine unbenutzte Location hat. Zumindest die App benutzt das nicht. Es ist Flash. Das scheint Flash-Access zu erlauben. Das habe ich noch nicht genau untersucht. Aber es scheint, als ob da eine gewisse Authentifikation nötig ist. Die letzte Schritt der Registrierung mit dem Amazon-Server. Das ist, was passiert, wenn der Button mit App konfiguriert wird. Es macht einen Post auf diese URL des Amazon-Servers. Das übermittelt die Seriennummer. Und ein Transaction-Counter, ein Transaktionszähler. Das ist ein 32-bit-zähler. Und man sieht auch den Token der App. Dieser Transaktions-Counter ist nachher benutzt. Dann machen sie einen H-Mac, indem sie den Geräteschlüssel nutzen. Und die Antwort benutzt dann den Kunden-Secret Key. Es gibt auch ein paar Zeitschnippe. Wenn man den Knopf dann mal gedrückt hat, nach dem ganzen Konfigurationen-Zeug, um was zu bestellen, dann macht es zwei Post-Requests. An diesem Gateway von Amazon. Es benutzt Content-Type Binary-Rio. Der erste Anfrag ist zu bestellen. Der Anfrag und das zweite ist zu bestellen. Wie oft der Knopf gedrückt wurde. Ich glaube, ich habe ein Beispiel am Anhand der Folien. Eine interessante Sache, ist, dass der Server ein Firmware-Update erfragen kann. Und dann wird ein downloader Firmware gestattet. Und dann wird ein downloader Firmware gestattet. Und dann wird ein downloader Firmware gestattet. Der Post und die Bestellung hat eine Bestellung zu localisieren. Das ist das Seriögipsen, die Weißnummer, das Gerätnummer und mit einem Kunden-Geheimnis versehen. Dann kriegt man ein status quoter Service auch. Und das wird benutzt, um zu entscheiden, ob die Bestellung erfolgreich war oder nicht. Wenn der Knopf grün leuchtet, dann bei der ATTP status quo 200 und zu 412 wird man ein Rote, den man vielleicht sehen will, und man weiß, dass die Prokustellung nicht erfolgreich war. Hier ist noch ein Flag um Firmware-Updates anzufangen. Ich habe den STP benutzt, diese vorne zu triggeln, und dann hat der Server redet nicht. Du hast schon die aktuelle Version. Na ja, Warnversuch. Wenn man die Security zusammenfassend sagen möchte, während der Konfigurationsphase im Access Point Modus, kann man den Knopf simulieren, denn dann muss ich nicht gegenüber der Anwendung authentifizieren. Deswegen kann man das mit man in den Mitteln angreifen. Die Warn-Gedenschen kann man simulieren. Wenn man den Knopf entsprechend an den Aufbau vorbereitet, eines Tages kann dein Nachbar einen Knopf kaufen. Wenn das konfiguriert, dann kannst du seine Warn-Gedenschen schnappen. Aber das läuft ja nicht so lange. Deswegen ist das Risiko relativ klein. Das Präsidium in einem kurzen Zeitpunkt ist der Nachbar, den Knopf konfiguriert. Die Konfiguration mit dem Server benutzt HTTPS, und ich glaube, die testen das Server-Settinger, sagt zumindest das Internet. Die Client-Anfahrten haben kein Security-Check, die Knöpfe haben keine Zertifikat. Sie benutzen nur das Edge-Mech mit dem Zähler und dem geheimen Schlüssel. Aber das beugt immerhin Wiederholungsattacken oder Bestellungen ohne Einschlüssel vor. Der Knopf ist wirklich nur aktiv, wenn man den Knopf schlückt und verbindet sich mit dem Warn-Gedenschen nur für ein paar Sekunden. Deswegen ist der Schaden, den man damit machen kann, sehr klein. Das benutzt doch kein UPNP oder so. Da ist also nicht wirklich viel, was man von außen machen kann. Okay, lass uns mal die Firmware anschauen. Der alte Knopf benutzt ein Broadcom-Weiss-Chip-Sat mit einem extra Betriebssystem von ExpressLogChick mit einem Netflix-Ipis-Stack. Ein eigenes Betriebssystem. Ich glaube, das hat Amazon selber geschrieben, genauso wie der Bootloader. Man kann auch nichts mit der Internet dazu finden. Man kann hier den Ausgangs-Series-Report sehen. Ich glaube, es gibt hier nicht normalerweise all diese Informationen, ich glaube, die Entwicklung-Modus und Logging-Anrufe halten, um das zu sehen. Es gibt verschiedene Aufgaben. Die Hauptaufgabe, die Transaktionsaufgabe, Avocado-Knopf. Es scheint ein spezieller Name für den Knopf zu sein. Es gibt eine extra Aufgabe für die NED und natürlich Kommando-Anhandler und der Netmanager. Wenn man jetzt die fünf Jahre dumpen möchte, dann würdest du natürlich sofort Single-Wire-Debug zuerst versuchen. Aber das kann wegen einem Security-Log-Bit nicht erfolgreich sein. Man kann auch nicht in den Bootraum kommen, das ist auch verhindert. Der einzige Weg an entsprechendes Platz des Mikro-Kontrollers ist ein kompletter Flasch, das komplette Flasch zu lösen. Dafür muss man den gesamten Mikro-Kontroller auslöten, um da hinzukommen und dann hast du halt auch keinen Flasch innerhalb mehr. Dann kannst du auch die fünf Jahre nicht dumpen. Ich hatte mir den externen Flasch mal angeguckt und habe ihn ausgelötet, das sieht man hier. Ich habe ihn auf einem kleinen Stück BSD gelötet und habe es mit einem Raspberry Pi verbunden. Da gibt es dieses Tool, das heißt Flaschrom, das ist wirklich sehr gut. Du kannst mehr oder weniger jeden Flasch draußen bekommen. Du kannst die Firmware in diesen Flaschen zumindest teilweise. Das Ding damit ist, der Mikro-Kontroller kann nicht die Firmware direkt vom SPI Flasch, aber es muss also irgendwie in den Rommen kommen. Deswegen muss die Firmware auch im internen Flasch sein. Wahrscheinlich haben wir eine Duplizierung. Wir können es dumpen und im Hexilidur anschauen und das samplieren, das habe ich getan. Wenn man den SPI Flasch analysiert, dann sieht man, dass es die Firmware enthält und ein bisschen dynamisch und speicher. Der dynamische Speicher scheint an dieser Stelle zu starten. Da sind zum Beispiel die Park-Locks dabei. Man kann also einen Text ausgaben sehen, was der Knopf gemacht hat und man kann auch den Transaktions-Säler sehen finden. Der Start des Flasches enthält eine Liste von statischen Blöcken. Das sieht ungefähr so aus. Die Struktur ist ziemlich einfach. Das ist der Name des Blocks. Am Ende ist die Version des Blocks und ein kleiner Aufsatz im Flasch. Mit der Länge dieses Blocks. Man kann das sehr leicht herausfinden. Ich habe die Struktur abgeschrieben und eine Liste gestritten. Das ist also was wir kriegen. Das SMG55. Das ist die Firmware für den Ein. Das ist etwas sehr gut auf den halben Megabyte Flasch. Man sieht, es gibt noch einen zusätzlichen Header für diese Firmware und die Payload beendet dann sozusagen den Header. Da gibt es noch andere Eigenschaften für den Beifahrt-Chip und Lutz. Aber das ist nicht arm, sondern eine andere Technologie. Und es gibt auch diesen Flaschbrecher, den wir hier sehen. Die Firmware ist ungefähr 400 Kilo weit, aber das ist ein IP-Stack. Ich habe den SMG55 Block heruntergeladen und analysiert. Und wenn man es analysieren möchte, ein Stück Firmware, dass in der Microcontroller geht, in einem Cortex M3 oder M4, dann weißt du, dass es ungefähr an diesem Ort anfängt. Und am Anfang des Flaschbrechers hat man üblicherweise den Interab-Kontroll-Vektor, den eingebetteten Interab-Kontroll-Vektor. Und man kann den Reset-Eingangspunkt finden. Wir würden also erwarten, dass wir eine Vektor-Tabelle irgendwo finden werden. Und das suchen wir. Der Stack-Point, das wird irgendwo auf den Ramm zeigen. Irgendwo am Ende des Rams. Und der Stack-Point, das wird irgendwo auf den Ramm zeigen. Wenn wir die Firmware näher angucken, dann gibt es diesen Zusätzlichnetter, den wir vorher schon hatten. Er macht irgendwie nicht so richtig Sinn. Als Vektor-Tabelle weil es offensichtlich irgendwie Flasche ist. Danach kommt eine ungewöhnliche Adresse und so habe ich herausgefunden, dass das wohl die Länge der Firmware ist. Und das sind die Firmware, die wir vorhin schon hatten. Und das sind die Firmware, die wir vorhin schon hatten. Und so habe ich herausgefunden, dass das wohl die Länge der Firmware sein muss. Dann gibt es einen Haufen Null an dieser Stelle, an dieser Stelle, dann können wir den Stack-Point da finden und dann die Händler-Einträge. Meine Initial-Assamption war, dass die ersten 200 Bytes abgeschnitten werden müssen und an diese Stelle kopiert werden müssen, aber das hat nicht geklappt. Denn wenn man die Basis hier falsch kriegt, dann sieht man im Disassembler, dass die Referenz nicht stimmt. Das habe ich nochmal versucht und habe dann halber nicht abgeschnitten und dann hat alles funktioniert. Also habe ich jetzt die Firmware und Teil der Firmware und die Disassembly davon. Das Problem ist, dass es im Flash bei 4.000 startet. Das heißt, da muss nur eine Art Bootloader-Code davor kommen und diesen Code hatte ich nicht. Also habe ich später herausgefunden, dass es die Konfigurations Speicher ist. Das hat die MAC address und dann das Secret in der Geheimschlüsse. Das ist aber auch der Teil, wo die Wi-Fi-Konfiguration gespeichert ist. Das ist also vor der Firma. Also habe ich einfach das versucht. Das wäre großartig, wenn wir diese gedammte Firmware ausführen können, ohne den Bootloader. Das heißt, ich habe diese Firmware einfach auf einen kompatiblen Microcontroller kopiert und habe die Vector-Tabelle dupliciert und an den Anfang des Flash geschrieben, so dass alle Pointer eben gut passen, um das Log-Bit vom Flash zu starten und die Firma hat funktioniert. Also hatte ich Debug-Ausgabe und alles war gut. Also hatte ich Debugging mit dem Single-Wire-Debug und ich konnte also ein Debugger anschließen und plötzlich hatte ich eine Entwicklerkonsole auf dem virtuellen Gerät. Ich habe das etwas analysiert und habe gesehen, dass es Log-Bit nicht gesetzt ist und dann ist es offensichtlich im Entwicklungsmodus. Jedoch gab es ein kleines Problem dann offensichtlich war ich nicht was mir nicht möglich, diesen neuen Button zu benutzen, weil die Dekorations und der geheimen Schlüssel fehlen. Das heißt, ich musste also ich wollte ein Darm von der Code Execution konzentriert. Das heißt also, ich musste irgendwie die Firma exploiten. Wenn man ein Disassembly und Debugging-Axis dann kann es nicht viel einfacher werden, wenn man so etwas versucht. Denn man kann Breakpoints setzen und man kann das Register auslesen und das macht alles sehr viel einfacher. Also der erste Ansatz war einfach eine ganz, ganz lange Zeile auf die Serial-Konsole zu schreiben. Die hatten also wirklich längen Checks eingesetzt und das waren Limit auf 256 bytes. Das war überraschend. Also dachte ich mir andere Möglichkeiten aus Low Level wie zum Beispiel die RCP auszunutzen. Würde den Wi-Fi NC betreffen und das würde mir nicht helfen, weil ich ja eigentlich den AM Microcontroller ausnutzen würde. Auf diesem AM Microcontroller läuft der HTTPS-Server und das hat TLV und JSON-Parser. Das heißt, das wäre eventuell etwas interessantes, aber es gibt auch nämlich das Audio-Konfigurations-Protokoll. Das wurde von einem alten Knopf benutzt und man einen iOS-App benutzt hat. Ich weiß nicht, ob es immer noch mit dem neuen Button benutzt wird oder ob es das mit Blutfritz ersetzt würde. Aber der Code ist immer noch da und das unterstützt immer noch die Audio-Konfigurationen. Dieses Protokoll wurde untersucht von Jay Greco und bevor ich mich selbst reingewühlt habe, habe ich mit ihm Kontakt aufgenommen und habe ihn gefragt, ob er mir ein Beispiel, ein Sample-Datei schickt. Und er hat mir einen Sample geschickt und auch ein Update auf seinem Blog. Das ist nicht wirklich ASK, aber FSK mit 4K und das sah nur aus wie ASK und Low-Pass Filter. Also wusste ich, dass es FSK ist und ich hatte echte Sample-Data und die habe ich analysiert. Das ist die Payload von dem Audio-Protokoll. Das ist ein Preamble und die Paketlänge ist ein Byte und das komplette Paket muss kleiner als 128 Byte sein. Da sind CRC, SSID Password und das RAM ist das Land. Wenn wir das so genau uns die Funktionen genau anschauen, die diesen Payload passt, dann sehen wir, dass abgesehen von diesem 128 Byte-Lengen-Check es gibt es keinen einzigen anderen Lengen-Check. Also all diese Buffer wie RAM, die werden einfach mit meinem Copy auf den Stack also das Trivial auszunutzen. Ich habe den RAM benutzt, weil es das letzte auf dem Stack ist. Jetzt können wir uns den Stack genau anschauen. Wir sehen den RAM-Buffer und das noch ein bisschen mehr User Space, wo wir unseren Payload ersetzen können und es gibt noch etwas mehr Platz im Password und im SSID-Buffer aber müssen aufpassen, dass wir eben nicht die 128 Bytes der Payload-Länge überschreiten. Das Problem ist, dass nach dem zusätzlichen Speicher gibt es ein paar Werte auf dem Stack und wenn man die überschreibt, dann wird es den Exception-Händler auslösen, aber es gab noch etwas anderes. Wir brauchten ein IRQ-Disable, also viel IRQ, das da passiert und sobald wir das versammeln, dann wir das nicht so gut, wenn wir Tasks switchen. Das ist auch ein Wattstock, der Dash läuft und der schaltet den Dash nach einer Weile ab. Das ist dieses Immortal-on-Mortal-Switch. Wir haben das in Register 4 und danach noch ein paar andere Stacks, wo man auch noch etwas pro Load einbauen kann. Also habe ich dieses Payload gebaut, das ist die Anweisung den Interrupt auszuschalten und diese beiden Instructions habe ich nach dem Payload-Counter gesetzt und auf AM muss man den Load relativ zum Programm code setzen und das braucht 4 Bytes pro Load und mit dieser Methode kann man 2 Bytes per Register sparen zwischen Werte werden immer benutzt, für den Bordstock und so weiter wenn man die auf den Stack und auf dem Stack zu poppen das speichert ein paar Bytes und jetzt können wir den Flash-Speicher danken. Ich habe also den Source-Pointer vom Flash habe ich in Register 1 getan Register 2 ist das UART-Base dann da ich die Firma analysiert habe habe ich gefunden die UART-Rite-Funktion gefunden, so dass wir auf Schreibe Endbytes auf das UART diese Funktion nimmt die Basisadresse der UART und den Source-Pointer und die Anzahl an Bytes die auf UART geschrieben werden sollen dann muss ich den Watchdog bedienen also anstupsen habe ich den und habe die Register 5 und 4 geschrieben also die Payload ist eigentlich sehr klein und nach jedem Junk stupst sich den Watchdog an es gibt ein paar Längenchecks um zu sehen ob ich das Ende des Flash erreicht habe und sobald ich das Ende erreicht habe da gibt es ein Endlosschleife Jump to dump das sieht man hier jetzt auf dem Slide nicht lasst einfach den Watchdog auslaufen und der Dash schaltet sich dann aus hier habe ich ein Demonstrationsvideo davon also hier habe ich den Dashbutton geöffnet mit dem Serialen Kabel verbunden man sieht das nicht so ganz gut aber es ist ein Ohrstöpsel von einem Headset und ich habe hier ein kleines Skript das in dem Skript kann ich ein paar Sampler Anweisungen geben in der Grund sieht man den Serialen Output vom Dashbutton ich habe es durch den Filter gelaufen damit man meine Secrets nicht zieht dann gehe ich einfach in den Konfigurationsmodus und starte das Skript und das die Audio Datei generiert und spielt es durch die Headphones ab sonst lasst uns das mal ausprobieren das ist die normale Ausgabe vom Dashbutton als das in den Konfigurationsmodus mein Skript startet es dumpt den kompletten Fleisch es dauert eine Weile weil es ein halbes Megabyte ist ja die Audio ist eigentlich sehr kurz man braucht es wird einfach mehr oder mal wiederholt also eins dieser Prokete wird korrekt empfangen die externen Lautsprecher funktionieren auch da wollte ich ein YouTube Video draus machen aber es funktioniert so weit jetzt ist die Frage wie geht es jetzt weiter Amazon wird es wahrscheinlich mit einem firmware update fixen aber was sie nicht tun können ist die aktuellen Knöpfe updaten außer das Server kann also wenn du einen Button hängen willst solltest du das vom Server registrieren so dass es nicht mehr den firmware upgrade vom Server bekommt die Sache ist wenn man die Sicherheitsbit löscht dann funktioniert es nicht es ist eventuell möglich eine komplette löschung zu erreichen aber anderenfalls braucht man multilevel loader also was ich gemacht habe könnt ihr hier in dem Git Repository euch erholen da ist auch das Notizen zu disassemblieren und es gibt auch Link auf der Verplantleite und ich bin mir nicht so ganz sicher ob ich da weiter was dran machen werde wenn du weiter machen willst dann spreche ich mich einfach an und ich bin vorzuhelfen du kannst mich so kontaktieren jetzt sind meine green angels damit bin ich am Ende meines Vortrags für jetzt ja wenn ihr Fragen habt dann ist jetzt die Zeit dafür ok wir machen das wie immer wenn ihr Fragen habt, kommt bitte an die Mikrofon ok da ist schon die erste Frage an den ersten Mikrofon ok als erstens, danke schön coole Arbeit, ziemlich eindrucksvoll die Folge die ich habe ist wie hast du es geschafft diese kleinen Kabel zu löten eins nach dem anderen wie sonst ich halt eigentlich meinen Finger über die die ich schon gelötet habe und dann tippe ich eigentlich das andere kurz an ohne die anderen zu berühren und ich halte die anderen mit dem Finger runtergedrückt das ist eigentlich die Magie welche Durchmesser das Kabel hatten wir 0,1 ne Mitte danke, eine Frage aus dem Internet ja, danke super tolle Talk Dankeschön Welchen Distance in Blieger hast du benutzt Eidorf cooler Vortrag wie lange hat das gedauert das alles zu investieren und diese Ergebnisse zu erreichen die du erhalten hast, Tage, Monate, Wochen gute Frage ich schreibe nicht auch wie lange ich da brauche weil das mein Hobby ist manche Leute kaufen halt ein Kinoticket und machen 90 Minuten Spaß und ich kaufe den Knopf für 5 Dollar um voll Zeug zu tun das finde das Publikum gut es war gar nicht so schwer weil es anderen Code gab man konnte die Funktionsnamen sehr einfach bekommen und das hat alles gut zusammengepasst die nächste Frage am Anfang ja, war ein Zeitstempel war das 4 Zeitstempel wissen die nicht über 2038 ja, keine Ahnung ich weiß nicht was sie dann machen und vielleicht ein Firmware Update die Zertifikate sind auch im WIFI Controller gespeichert werden sie wahrscheinlich auch die Zertifikate nochmal wieder aktualisieren wahrscheinlich auch mit einem Firmware Update ich habe gerade nur gedacht das klingt ja wirklich sehr furchtig von ihnen ok, Mikrofon Nr. 4 ja, coole Arbeit ich habe versucht die Firmware mit einem Powerline Angriff zu dampen es hat aber nicht geklappt und die Frage war auch, wofür das Bluetooth Modell benutzt Komponente benutzt die Antwort ist ich glaube, dass es vielleicht eventuell mit dem iOS Anwendung zu tun hat mit der Anwendel App aber ich habe keinen iOS und ich weiß es nicht aber die sprechen irgendwie ein bisschen mit dem Bluetooth Chip und die finden raus ob es da ist, also als ich erst getrennt habe kam die Firmware nicht mehr auf aber ich habe mich damit nicht genau beschäftigt mit dem Android App benutzt das Bluetooth Energy jedenfalls nicht ok, eine weitere Frage aus dem Internet es ist möglich dort ein Betriebssystem bei Linux auf dem Button zu insulieren die Antwort ist, nein das ist ein Unterschied zwischen eine Mikro-Kontrolle und eine CBro und das ist die Speicher-Management-Einheit und der Mikro-Kontrolle hat keine Speicher-Management-Einheit und könnte Mikro-Linux versuchen aber ich glaube nicht 160 KB RAM würden dafür ausreichen es gibt einen Haufen kleine Echtzeitbetriebssysteme auf dem Betriebssysteme die man lützen könnte, aber nicht Linux ok, thank you very much ok, vielen lieben Dank vielen lieben Dank wir aus der Übersetzungskabine verabschieden uns über euch und wir hoffen