 Dieser Vortrag heißt Doping Euphipid. Er wird gehalten von Jisga und Daniel für den Fall, dass ihr bei einem der kleineren Sitzsee-Events wart vor vier oder fünf Jahren, dann wisst ihr, dass Jisga normalerweise Dinge mit Nähmaschinen macht. Und das ist die zweite Schicht heute schon für Sie als Speakerin, was alleine schon stressvoll ist. Das ist der zweite Vortrag zum gleichen Thema. Der erste ist natürlich als Aufnahmelochfahnen. Bei dem ging es um die Firmware des Fitbit. Damit übergebe ich an euch. Herzlich willkommen zu unserem Vortrag. Wir werden euch heute zeigen, wie man die Firma modifizieren kann, so dass man keinen Sport machen muss. Unsere Motivation hier dahinter, als wir Fitness-Tracker angefasst haben, dass die meisten von denen die Sachen nicht lokal verschlüsseln. Die meisten verschlüsseln ist ganz lokal. Deswegen gibt es immer die Möglichkeit, die Daten direkt von der App von dem Band runter zu ziehen. Die meisten App verlangen auch, dass man die Daten hoch lädt. Das ist total schlecht für die Privatsphäre. Also wenn man an sich Fitbit anguckt, dass eine der Marktführer, das ist der Grund, warum wir es gehackt haben. Sie haben auch einigermaßen ernsthafte Sicherheit. Das ist ähnlich zu vielen IoT-Systemen. Und das Sicherheitssystem ist ganz nett, aber es verlangt, dass man die Daten hoch lädt. Also die Sicherheit und die Daten sind das Beste, um daraus zu sehen. Das erste, was wir erklären werden, wie das System generell funktioniert und dann, wie wir es verändern und dann kommen wir zu dem technischen Teil. Also der Tracker hat einen Schlüssel installiert, der symmetrisches, der während der Herstellung getragen wird. Also es ist schon auf dem Armband, wenn es kauft. Und es ist zur Verschlüsselung mit dem Server. Das System ist so sicher wie die Ende-zu-Ende-Verschlüsselung. Und das ist die Idee. Und der Tracker hat nur Bluetooth. Also braucht man ein Handy, was den ganzen Traffic weiteleitet. Die lokale Verbindung ist nicht wirklich sicher. Und die End-zu-end-Verbindung gibt es zwischen dem Handy und dem Server. Und die Frage ist, ob wir die End-zu-end-Verschlüsselung knacken können. Und die Antwort darauf ist natürlich, ja. Sie wird nämlich nur für die neuen Geräte verwendet. Die Geräte vor 2015 wurden nicht verwendet und da konnten wir ins Protokoll gucken. Und da gab es eine Memory-Read-Attack, die erst 2017 gefixt wurde. Also haben wir eine gute Chance, wenn du die Firma nicht selber gepatched hast, hast du eine gute Chance an, dass man den Speicher auslesen kann. All diese Dinge sind Probleme bei der Verschlüsselung. Und jetzt zeige ich euch, wie man die Verschlüsselung auf dem Tracker zerbrechen kann und wie er an eure Daten kommt. Wenn man die Original-Smartphone-App hat, hat man zwei Schritte. Das erste ist ein Log-in-Indie-App. Wenn man eine eigene App macht, braucht man das natürlich nicht. Und dann braucht man noch ein lokales Pairing. Das kann jeder mit dem Tracker machen. Und dann gibt es die dritten Schritt, die Fernerverbindung mit dem lokalen Benutzer. Sobald man einen Code eingegeben hat auf dem Tracker, wird die credentials lokal gespeichert. Und die App kann dann die credentials benutzen, um authentifizierte lokale Kommando auszuführen. Die hängt ab von dem Device-Key. Die Frage ist natürlich, wie man an diese credentials rankommt. Dafür kann man den Tracker verbinden. Da gibt es ein paar Probleme. Man muss zwar eigentlich beweisen, dass man physikalisch anwesend ist. Eine Möglichkeit ist, dass man eine Pin eingeben muss. Die Pin wird angezeigt auf dem Tracker. Und da trägt man dann in die Smartphone-App ein. Die wird verschlüsselt an den Server übertragen und verglichen. Das ist halb okay. Aber dann gibt es natürlich auch noch Tracker, die keinen Display haben. Da muss man nur drauf klopfen. Und das lässt sich problemlos mit einer Replay-Attacke sozusagen nachmachen. Damit kann man, weil es keinen Beweis gibt, dass das aktuell ist, kann man jede beliebige Aufzeichnung für eine Replay-Attacke verwenden. Die Plantext-Assoziation braucht nur, dass man eine Seriennummer vorgibt. Und die ist auf die Packung aufgedruckt. Die Authentifizierungs-Credentials funktionieren für immer. Die kann man also immer wieder verwenden, auch wenn man die Daten von irgendwie Mappen mitgelesen hat. Das erste, was wir benutzt haben, um die Authentifizierung zu brechen, war ein Speicher, weil ausgelesener Speicher. Wir haben zwei Firmware-Updates verglichen und haben festgestellt, dass ein Kommando entfernt wurde. Und zwar für die One und die Flex wurde ein Kommando nicht entfernt. Da kann man einfach einen Befehl schicken mit einer Adresse und einer Länge. Und dann bekommt man eben diese Daten zurückgeschickt. Und das enthält auch den Encryption Key. Man kann den also einfach auslesen. Und damit kann man dann entschlüsseln, die Dumps, die die Firmware enthalten und eben auch die ganzen Fitness-Daten. Und wenn sich fragt, warum haben die das gemacht? Man braucht die Authentifizierung für den so genannten Live-Modus. Also wenn man zum Beispiel einen Pulsmesser hat, also an einem Fitbit, also man will, dass nicht jedes Mal an eine Service schicken und der Server wäre sehr ausgelastet. Also was sie gemacht haben, jetzt kann man einen Closing von AirLang machen, einen Blut-of-Handel ansprechen und dann bekommt man, was sehr cool ist, nämlich Live-Daten, die nicht verschlüsselt sind. Und es ist eine Zusammenfassung von den aktuellen Daten. Also das erste darüber, also man kann es mitlesen und jeder, der die Credentials hat, kann es auch anmachen. Also Fitbit hat das Ganze auch im letzten Firmware-Update gefixt. Also in dem Sinn, dass man den Live-Modus ausmachen kann, aber man kann es immer noch benutzen, also wenn es nicht ausgemacht hat. Und es ist auch in den neuesten Smartwatches noch drin. Also und jetzt würde euch Daniel noch ein bisschen mehr über die Firmware und die Hardware Okay, legen wir los. Manche von dem Zeug, von dem wir euch schon erzählt haben und auch für das dynamische Debacken möchten wir Zugang zu der tatsächlichen Hardware haben. Aber schauen wir doch erstmal auf eine Schematik, wie das Board ausgelegt ist. Wir haben das Main, das eigentliche System auf einem Chip. Das ist basiert auf einem ARM Cortex M3. Dann ist noch ein Bluetooth Low Energy Chip drauf für die Kommunikation mit der Smartphone App und dann gibt es noch ein Accelerometer. Das alles ist verbunden mit einem Bus. Wir wissen auch, dass manche der Software, die in der Firmware läuft, welche Libraries da benutzt worden sind. Wir wissen also zum Beispiel, dass für die Verschlüsselung LipToneCrip benutzt wurde, für Bluetooth wurde Lip Shield verwendet. Insofern hilft uns das sehr beim Reverse Engineering. So sieht es die Platine aus, wenn man sie aus dem Gehäuse herausnimmt. Man sieht, dass es viele, viele Testpunkte gibt. Und jetzt wollen wir natürlich herausfinden, welche Testpunkte wir brauchen, um den Debagger anzuschließen. Ein paar Leute haben schon rausgefunden, dass man diese vier hier braucht. Je nachdem welches Protokoll man verwenden will für den Debuggen, braucht man verschiedene Testpunkte. In unserem Fall haben wir SWD verwendet. Damit brauchen wir Testpunkt 8, 9, 10 und eine Erde. Wir können aber auch einfach nur die Erde aus der Batterie hernehmen. Und auf der anderen Seite, die Stromanschlüsse, da kann man dann einfach irgendeinen Stromanschluss anschließen. Wir wollen die Firmware herunterladen und auch die gespeicherten Daten verändern können. Schauen wir uns mal die Firmware an. Auf der rechten Seite sieht man unser Test-Setup. Das sieht vielleicht jetzt ein bisschen zusammengestöckelt aus, aber es funktioniert. Das Speicher-Layout sieht so aus. Es gibt drei Teile. Es ist der Flash-Speicher, wo die Firmware gespeichert ist. Ein EE-Prom, in dem sind die Daten drin, die unabhängig von der Batterie sein sollen. Und dann haben wir noch ein SRAM. Da sind verschiedene Firmware variablen drin. Im Flash, wenn wir uns näher anschauen, sehen wir, dass es zwei unabhängige Firmwares gibt. Also zwei verschiedene Dinge, die da laufen. Ein Teil heißt der BSL und ein Teil heißt App. Das liegt daran, dass man eben auch einen Rücksturzmodus haben möchte, wenn man die Firmware updated. Wir brauchen das noch auf den späteren Niveau, aber jetzt einfach erst mal im Gedechenstverhalten. Es gibt zwei Teile. Der App ist auch alles, was man braucht, um die Verschlüsselung zu betreiben, also die Schlüssel und die Daten. Wir wollen jetzt den GDB-Zugang einschalten, damit wir mit dem Debugger darauf zugreifen können. Wir haben festgestellt, wenn man GDB anschließt, dass der Debugger aufwärts und funktioniert, sobald die Firmware startet, weil die Firmware diese Ports deaktiviert, während des Bootups. Sie braucht das für andere Sachen und das ist natürlich schlecht für uns. Wir wollen wissen, was wir machen können, damit wir es wieder einschalten können und dafür ändern wir die Firmware. Dafür haben wir unserer Gruppe schon das Nexmon Framework entwickelt, mit der wir Firmwares binär patchen können und das haben wir jetzt angepasst für die Firmware vom Fitbit. Und jetzt haben wir die Möglichkeit, die Firmware beliebig zu verändern und können damit die GPIO-Pins nach dem Bootup wieder zurücksetzen, so dass wir dem Debugger anschließen können und damit haben wir GDB Zugang für können, also Watchpoint setzen und Breakpoints. So jetzt gucken wir uns die Firmware Flashing Prozesse mal genauer an. Ihr habt vielleicht schon gesehen, wie der Aufbau des Fitbits war, aber es ist schwieriger, das wieder zu verwenden, wenn es mal offen war. Also ist die Idee, das über Funk zu flaschen und dafür muss man es natürlich reverse-engineern. Wir gucken uns jetzt mal den Prozess davon an. Der Updateprozess ist ein bisschen schwierig, weil in jedem Kommunikationsschritt mit dem Server seine Version hinzufügt und der Server sagt ja dann, ob die Firmware noch aktuell ist oder nicht. Und dann wird es in der App angezeigt und man kann das entsprechend neu flaschen und es wird aber erst geflasht, wenn der User auf die App klickt und das quasi zustimmt. Das ist aber kein Sicherheitsfeature, sondern das ist einfach nur ein Userfeature. Sobald das Update geschadet ist, kriegt man einen Dump von dem Tracker, was die Metadaten sowie die Seriennummer enthält. Das ganze funktioniert mit einem Firmware-Request, der dann an den Server geschickt wird, der dann die neuen BSL und Firmware-Daten enthält. Die Firmware-Flaschland zuerst ist BSL, was zuerst validiert wird, dann geschrieben wird und im letzten Schritt bootet man dann das neue BSL. Danach wird die gleiche Prozedur für die App wiederholt. Dann wird in die App rebutet und man hat das Band wieder wie zuvor. Das Format des Updates stellt sicher, dass man die korrekte Firmware flascht. Jeder Teil der Firmware beginnt mit einem bestimmten extra decimal Code. Da gibt es einmal den BSL-Junk, den App-Junk und hier nachdem hat man eben zero bytes oder wirklich ein Inhalt. Man hat da natürlich Größenlimitierungen abhängig von dem Tracker. Deswegen schmeißt man die beiden Firmware-Images zusammen und schreibt sie danach auf das Band. Alle Teile sind hintereinander gehängt und davor kommt ein Header. Der Header hat eine Verschlußungsoption, die sagt, ob es verschlüsselt oder nicht ist. Und am Ende kommt dann noch eine Prüf-Summe und ein Seamark-Tec. Jetzt sagen wir also, wir wissen, wie das Update funktioniert und es ist schön, aber wir kriegen immer noch Fehler, wenn wir das so machen. Deswegen wird auch noch der Adress-Bereich geprüft. Deswegen wird es in mehreren Runden geflasht, wo der Adress-Bereich-Check erst mal deaktiviert wird. Wenn man mitten in der Firma was ändern möchte, dann muss man die komplette Firmware wieder flaschen. Wenn das Update nicht geklappt hat, dann wird die Firmware-Version als 0.0 angezeigt in allen Daten. Und das ist natürlich nicht so gut. Und jetzt erst mal löschen wir uns, wie die Verschlüsselung funktioniert in allem, was wir jetzt angeschaut haben. Wir wissen jetzt, wie man Firmware-Incryption macht im Plantex-Modus, aber die meisten neuen Tracker haben schon von Auslieferungszustand aus die Verschlüsselung aktiviert. Wir brauchen also jetzt eine verschlüsselte Firmware. Die neuen Versionen benutzen ERX und dafür brauchen wir drei Dinge. Eine 2-byte Nouns, die am Anfang jedes Dumpf steht. Ein 128-Bit Verschlüsselungsschlüssel, den man aus dem E-Prom lesen kann mit der bereits beschriebenen Speicherzugriffs-Attacke. Und wir brauchen einen 8-byte MAC-Lip-Tom Crypt, weil das ja auf einer Open-Source-Library basiert, auf der Lip-Tom Crypt. All diese Funktionen gibt es auch in einer Java-Library, die Spongee-Castle heißt. Daraus kriegen wir diese Funktion, um das zu berechnen. Wir wissen, wie die Kommunikation funktioniert. Wir wissen, wie das Firmware-Update strukturiert ist. Und wir wissen, wie man ordentlich das Update macht. Wir stellen also hier alles zusammen. Wir brauchen sechs Schritte, die man machen muss, um eine eigene veränderte Firmware herzustellen. Man braucht auch den symmetrischen Schlüssel. Dann macht man einen Plaintext-Dump der Firmware. Das kopieren wir dann alles auf einen PC. Da kommt dann der Next-Mon drauf. Und damit können wir die Firmware beliebig anpassen. Für die ersten beiden Schritte und für die letzten beiden Schritte haben wir eine Android-App. Und hier steht auch die URL dafür. Und die veränderte Next-Mon-Version haben wir auch ein neues Repositorium. Die letzten beiden Schritte sind dann, dass wir die Firmware zurück zum Smartphone laden, neu verschlüsseln und die dann auf den Tracker flaschen. Wir zeigen euch jetzt eine Demo, was man damit machen kann. Natürlich wollt ihr euren Fitness-Tracker auf eine interessante Art modifizieren. Wir haben das zum Beispiel so umgeschaltet, dass jeder Schritt mit 100 mal genommen wird. Hier seht ihr, wie ich das Fitbit schüttle. Und jedes Mal, wenn ich es schüttle, werden 100 Schritte erzeugt. Und vielleicht ist es noch gut zu sagen, dass es nicht mit der neuen Firmware funktioniert. Aber das ist, weil wir ihnen gesagt haben, das ist falsch. Das Oktober-Update, was rauskam, war praktisch nach unserer Forschung erst raus. Also diese Modifikationen, die kann man auf einem Fitbit One Flex oder auf den anderen Version benutzen. Bei dem Flex ist es noch nicht so lange her, dass das Update gemacht würde. Also wenn ihr jetzt einen Tracker kauft, habt ihr eine Chance, das noch zu modifieren oder wenn ihr noch einen rumliegen habt, findet Live-Modus. Das ist noch ein bisschen cooler. Also das ist immer noch möglich. Und wenn man mit den Live-Daten zufrieden ist, kann man einfach alle Daten darüber rausziehen. Und dazu muss man halt den Online-Modus deaktivieren. Um unseren Talk jetzt zusammenzufassen, geht raus und flasht die Geräte eurer Nachbarn. Behaltet die Kontrolle über eure eigenen Daten und lasst jeden Code auf eurem Fitbit laufen.