extended Freenerding: Code Execution auf der GoPro Hero7/8

in #deutsch3 years ago

Einleitung
Ich möchte auf einer Action Cam eigenen Code ausführen. Das brauche ich für ein Projekt, man möchte eine Funktionalität, die es in keiner Stock-Firmware gibt. Die Alternative wäre, eine Action Cam selbst neu zu entwickeln. Das wäre zwar sehr spannend, aber noch viel aufwändiger als spannend. Das Naheliegende ist, eine gute Action Cam zu "hacken", um einfach nachzurüsten, was benötigt wird (viel darf und möchte ich dazu nicht sagen, aber es geht darum, dass Dinge automatisch passieren, wenn die Cam ein bestimmtes WLAN "sieht") und von den vorhandenen und schwer selbst from scratch zu entwickelnden Features wie beispielsweise ein wasserdichtes stabiles Gehäuse, dem legendären GoPro Mount und einer hervorragenden Bildstabilisierung zu profitieren.

gopro_pwned.jpg

Eine befreundete Produktionsfirma hat mir netterweise Hero 8 geliehen. "Oh, das interessiert mich auch, hier nimm und sag was raus kommt. Aber wenn Du sie kaputt machst, krieg ich ne neue!".
Ja, klar. Ehrensache! Scheiß auf die Garantie, so teuer sind die Dinger ja nicht :D

Vorarbeit anderer
Internetsuchen nach Begriffen wie "code execution", "firmware hack", "firmware mod" in Verbindung mit Hero 8 ergeben leider keine sinnvollen Treffer. Das meiste ist SEO Spam und führt zu Shops und schwindligen Seiten.
Allerdings gibt es der GPL Compliance geschuldet offizielle Firmware Source tarballs von GoPro selbst, und zwar hier: GoPro6 GPL GoPro 7 GPL
Aus den GPL Tarballs erfährt man in der Regel schon mal ziemlich viel über das Innenleben.

Und dann kam mir diese (https://gethypoxic.com/blogs/technical/gopro-hero8-teardown) Seite unter, unter dem Begriff "teardown" zu finden. Hier steht sehr viel technische Info, die mir nützlich sein wird.

Hacknroll
Zunächst lese ich mich in die Tools ein. Embedded Entwicklung und reverse engineering sind mir nicht fremd, aber einige der genannten Tools kenne ich noch nicht. Ich liebe es, neue Tools auszuprobieren und das Waffenarsenal zu erweitern, das mir gegen Herstellerbeschränkungen zur Verfügung steht, zu erweitern :)

Konkret: Frida (https://www.frida.re)
Das ist keine Feministin, sondern ein mächtiges Reversing Tool.
Allein das Tool kennenzulernen war den Nachmittag rumbasteln schon wert. Es funktioniert, indem es eine V8 javascript engine in den zu debuggenden Prozess injiziert und damit ermöglicht, Programmlogik des zu untersuchenden Programms mittels javascript code zu übernehmen. Das Ganze kann man dann noch in Python oder C scripten. Mind blown. Ein monkey wie ich kann damit viel feinen Fug treiben. Oder groben Unfug. Aber Wau Holland sagte ja immer, feiner Fug sei zu bevorzugen :)

Target für Frida: GoPro Quik Windows legacy Software
https://community.gopro.com/t5/de/GoPro-Legacy-Software/ta-p/603521?profile.language=de

Es geht noch einfacher
Einen wunderbaren Exploit fand ich dann ebenfalls bei hypoxic's Repository
Dort liegt ein gpauto Script, mit dem man beliebige Befehle/binaries ausführen lassen kann, wenn man weiss, dass die SD-Karte im Linux-Teil der GoPro als /tmp/fuse_d eingehängt ist. Eine passende busybox (ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, stripped) findet sich dort ebenfalls.

goprorootshell.jpg

Die zwei Dateien kommen auf eine SD-Karte und dann kann man bei Erfolg per WLAN und telnet direkt eine passwortlose rootshell starten. #epicwin

Der Exploit funktionierte direkt gegen die geliehene Hero8. Und ebenfalls gegen eine neu gekaufte Hero7. Nun habe ich mein eigenes Experimentierspielzeug und kann mich intensiv auf dem Ding umsehen.

Und natürlich auch per shell Fotos machen ;-)

/ # /usr/local/gopro/bin/gpsend bp SH%01
bacpac> SH%01 --> (%00)
/ # ls -la /tmp/fuse_d/DCIM/100GOPRO/
total 0
drwxr-xr-x 2 root root 131072 Oct 4 21:34 .
drwxr-xr-x 3 root root 131072 Sep 14 17:38 ..
-rwxr-xr-x 1 root root 4751630 Oct 4 21:34 GOPR0001.JPG
-rwxr-xr-x 1 root root 4936574 Oct 4 21:34 GOPR0002.JPG

Nach dem Studium des unglaublich guten Teardown der Hero7 von Hypoxic bin ich tief ins Rabbithole der Kamera, des Imaging SoC und so weiter gefallen.

Das nächste Ziel ist, eine Buildumgebung zum crosscompile für "Linux gopro 4.4.15 #1 SMP PREEMPT Fri Sep 14 01:48:07 UTC 2018 armv7l GNU/Linux" zu basteln, damit ich mir selbst Binaries bauen kann, um die auf der GoPro zu starten.

bis zum nächsten Freenerding!

Sort:  

Sehr schön. Habe ja nun inzwischen so manche Systeme gesehen, die man hat befreien können. Auf seiner Kamera eine Shell zu öffnen übersteigt man Fantasy. Ich feiere das sehr! ;)