{"id":396,"date":"2026-03-04T10:09:50","date_gmt":"2026-03-04T09:09:50","guid":{"rendered":"https:\/\/iobseu-xejul.wordpress.com\/?p=396"},"modified":"2026-03-04T10:09:50","modified_gmt":"2026-03-04T09:09:50","slug":"firmware-forensik-so-untersuchst-du-einen-unbekannten-esp32-binary-auf-hinterturen","status":"publish","type":"post","link":"https:\/\/technodidact.de\/en\/firmware-forensik-so-untersuchst-du-einen-unbekannten-esp32-binary-auf-hinterturen\/","title":{"rendered":"Firmware-Forensik: So untersuchst du einen unbekannten ESP32-Binary auf Hintert\u00fcren"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Einleitung: Misstrauen ist der Anfang guter Sicherheit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Du hast ein g\u00fcnstiges IoT-Ger\u00e4t im Internet bestellt. Eine smarte Steckdose, ein WiFi-Thermostat oder ein ESP32-Entwicklungsboard von einem No-Name-Hersteller. Die Hardware sieht solide aus, der Preis war verlockend \u2013 aber dann kommt der Gedanke: Was ist eigentlich auf dem Chip drauf?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Antwort lautet: Du wei\u00dft es nicht.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In einer Zeit, in der Lieferkettenangriffe zunehmen und selbst gro\u00dfe Hersteller schon Malware in ihren Produkten ausgeliefert haben&nbsp;<a href=\"https:\/\/www.serma-safety-security.com\/en\/blog\/behind-the-scenes-of-a-hardware-penetration-test-part-3-analysis-diving-into-the-inner-workings\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>, ist blindes Vertrauen in fremde Firmware fahrl\u00e4ssig. Die gute Nachricht: Als Maker hast du die Werkzeuge und das Wissen, um selbst herauszufinden, was wirklich auf deinem ESP32 l\u00e4uft.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Artikel ist ein praktischer Leitfaden f\u00fcr die&nbsp;<strong>Firmware-Forensik auf ESP32-Basis<\/strong>. Du lernst, wie du die Firmware aus einem unbekannten Ger\u00e4t ausliest, sie analysierst, nach verd\u00e4chtigen Mustern suchst und Hintert\u00fcren oder Schadcode identifizieren kannst. Wir bewegen uns dabei in der Grauzone zwischen legitimer Sicherheitsforschung und dem, was Angreifer tun \u2013 aber genau dieses Wissen macht den Unterschied.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Warnung vorab:<\/strong>&nbsp;Die hier beschriebenen Techniken sind f\u00fcr deine eigenen Ger\u00e4te oder solche gedacht, die du untersuchen darfst. Das Umgehen von Sicherheitsmechanismen an fremden Ger\u00e4ten kann strafbar sein. Handle verantwortungsvoll.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">I. Grundlagen: Was ist Firmware und wo versteckt sie sich?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 Die Architektur des ESP32<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bevor wir mit der Forensik beginnen, m\u00fcssen wir verstehen, wie ein ESP32 aufgebaut ist. Der Chip besteht aus mehreren Komponenten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Interner Speicher (ROM)<\/strong>: Enth\u00e4lt den Bootloader von Espressif, ist fest verdrahtet und kann nicht ver\u00e4ndert werden\u00a0<a href=\"https:\/\/wenku.csdn.net\/column\/2kn84qgeao\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/li>\n\n\n\n<li><strong>Externer Flash-Speicher<\/strong>: Hier liegt die eigentliche Firmware. Meist ein SPI-Flash-Chip mit 4 MB bis 16 MB Gr\u00f6\u00dfe.<\/li>\n\n\n\n<li><strong>eFuses<\/strong>: Einmal programmierbare Speicherbereiche im Chip, die Sicherheitseinstellungen und Schl\u00fcssel enthalten\u00a0<a href=\"https:\/\/circuitlabs.net\/secure-boot-implementation-in-esp-idf\/#anchoring-trust-in-hardware-the-role-of-efuses\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Die Firmware, die wir untersuchen wollen, befindet sich auf dem externen Flash. Sie besteht aus mehreren Partitionen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Bootloader<\/strong>: Startet das System und f\u00fchrt erste Pr\u00fcfungen durch<\/li>\n\n\n\n<li><strong>Partitionstabelle<\/strong>: Definiert, wo welche Partitionen liegen<\/li>\n\n\n\n<li><strong>Application (fab)<\/strong>: Die Hauptanwendung<\/li>\n\n\n\n<li><strong>OTA-Partitionen<\/strong>: F\u00fcr Over-the-Air-Updates<\/li>\n\n\n\n<li><strong>NVS (Non-Volatile Storage)<\/strong>: Speicher f\u00fcr Konfigurationsdaten<\/li>\n\n\n\n<li><strong>SPIFFS\/LittleFS<\/strong>: Dateisysteme f\u00fcr Webseiten oder Konfigurationen<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 Der Angriffspfad: Wo lauern Gefahren?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Angreifer, der Schadcode in ein Ger\u00e4t einschleusen will, hat mehrere M\u00f6glichkeiten:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Direkte Manipulation der Firmware<\/strong>\u00a0vor der Auslieferung (Supply-Chain-Angriff)\u00a0<a href=\"https:\/\/www.serma-safety-security.com\/en\/blog\/behind-the-scenes-of-a-hardware-penetration-test-part-3-analysis-diving-into-the-inner-workings\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong>Nachtr\u00e4gliches Eindringen<\/strong>\u00a0\u00fcber eine Schwachstelle und dauerhafte Installation<\/li>\n\n\n\n<li><strong>Bereits im Werk eingespielte Hintert\u00fcren<\/strong>\u00a0(besonders bei Billigprodukten aus nicht vertrauensw\u00fcrdigen Quellen)<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Die Forensik zielt darauf ab, solche Manipulationen zu erkennen \u2013 egal, auf welchem Weg sie ins Ger\u00e4t gelangt sind.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">II. Phase 1: Firmware auslesen \u2013 Die Extraktion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bevor wir analysieren k\u00f6nnen, m\u00fcssen wir an die Firmware herankommen. Je nachdem, wie das Ger\u00e4t gesch\u00fctzt ist, gibt es verschiedene Wege.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 Der Normalfall: Lesen \u00fcber UART \/ Serial<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bei den meisten ESP32-Entwicklungsboards und vielen einfachen IoT-Ger\u00e4ten ist der Zugang trivial:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ben\u00f6tigte Hardware:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>USB-UART-Adapter (z.B. CP2102 oder CH340)<\/li>\n\n\n\n<li>Drei Jumper-Kabel<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vorgehen:<\/strong><\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Pins identifizieren<\/strong>: Suche auf dem Board nach\u00a0<code>TX<\/code>,\u00a0<code>RX<\/code>,\u00a0<code>GND<\/code>\u00a0und\u00a0<code>VCC<\/code>\u00a0(meist 3,3V). Bei unbekannten Boards hilft ein Multimeter: GND erkennst du an der Verbindung zu gro\u00dfen Kupferfl\u00e4chen, VCC an der Spannung gegen GND.<\/li>\n\n\n\n<li><strong>Verbindung herstellen<\/strong>:\n<ul class=\"wp-block-list\">\n<li>USB-UART\u00a0<code>TX<\/code>\u00a0\u2192 Board\u00a0<code>RX<\/code><\/li>\n\n\n\n<li>USB-UART\u00a0<code>RX<\/code>\u00a0\u2192 Board\u00a0<code>TX<\/code><\/li>\n\n\n\n<li>GND verbinden<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>esptool.py verwenden<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Installation<\/em>\npip install esptool\n\n<em># Flash-Inhalte anzeigen<\/em>\nesptool.py --port \/dev\/ttyUSB0 flash_id\n\n<em># Kompletten Flash auslesen (bei 4MB)<\/em>\nesptool.py --port \/dev\/ttyUSB0 read_flash 0x0 0x400000 firmware_dump.bin<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Der Parameter&nbsp;<code>0x400000<\/code>&nbsp;steht f\u00fcr 4 MB (4 \u00d7 1024 \u00d7 1024). Passe die Gr\u00f6\u00dfe an deinen Flash an.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 Der schwierigere Fall: JTAG\/SWD und Schutzma\u00dfnahmen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Moderne Ger\u00e4te haben oft Sicherheitsvorkehrungen. Der ESP32 bietet zwei wichtige Schutzmechanismen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Secure Boot<\/strong>: Verhindert, dass nicht signierte Firmware ausgef\u00fchrt wird\u00a0<a href=\"https:\/\/circuitlabs.net\/secure-boot-implementation-in-esp-idf\/#anchoring-trust-in-hardware-the-role-of-efuses\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong>Flash Encryption<\/strong>: Verschl\u00fcsselt den Flash-Inhalt\u00a0<a href=\"https:\/\/circuitlabs.net\/ota-update-security-for-esp32\/#1-authenticity-integrity-digital-signatures\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Flash Encryption aktiviert ist, n\u00fctzt dir das direkte Auslesen wenig \u2013 du bekommst nur verschl\u00fcsselte Daten. Aber nicht alle Hersteller aktivieren diese Schutzma\u00dfnahmen, und selbst wenn, gibt es manchmal Wege:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>JTAG\/SWD-Anschl\u00fcsse finden:<\/strong><br>Viele Boards haben versteckte Testpunkte f\u00fcr JTAG (TMS, TCK, TDO, TDI). Mit einem Logic Analyzer kannst du w\u00e4hrend des Bootvorgangs nach Aktivit\u00e4t suchen. Ist JTAG nicht bewusst deaktiviert, kannst du dar\u00fcber oft den Speicher auslesen&nbsp;<a href=\"https:\/\/www.serma-safety-security.com\/en\/blog\/behind-the-scenes-of-a-hardware-penetration-test-part-3-analysis-diving-into-the-inner-workings\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Chip-off-Methode:<\/strong><br>Als letzte M\u00f6glichkeit (und nur f\u00fcr hartn\u00e4ckige F\u00e4lle) kann der Flash-Chip abgel\u00f6tet und in einem programmer ausgelesen werden. Dabei fallen aber die eFuse-Schutzmechanismen des ESP32 weg \u2013 du bekommst dennoch nur verschl\u00fcsselte Daten, wenn Flash Encryption aktiv ist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 Fallback: Update-Dateien analysieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Viele Ger\u00e4te bieten Firmware-Updates zum Download an. Diese Dateien sind oft nichts anderes als vollst\u00e4ndige Flash-Abbilder oder komprimierte Firmware-Pakete. Ein Blick auf die Support-Seite des Herstellers kann daher schon zum Ziel f\u00fchren&nbsp;<a href=\"https:\/\/www.serma-safety-security.com\/en\/blog\/behind-the-scenes-of-a-hardware-penetration-test-part-3-analysis-diving-into-the-inner-workings\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">III. Phase 2: Den Dump verstehen \u2013 Formatanalyse<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Du hast eine Datei&nbsp;<code>firmware_dump.bin<\/code>. Was jetzt?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 Erste Orientierung mit&nbsp;<code>strings<\/code>&nbsp;und&nbsp;<code>binwalk<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die einfachsten Werkzeuge sind oft die n\u00fctzlichsten:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Zeichenbare Strings extrahieren (ab 4 Zeichen L\u00e4nge)<\/em>\nstrings -n 8 firmware_dump.bin &gt; strings.txt\n\n<em># Damit nach verd\u00e4chtigen Begriffen suchen<\/em>\ngrep -i \"password\\|key\\|secret\\|backdoor\\|telnet\\|root\\|admin\" strings.txt\ngrep -i \"http\\|192.168\\|10.0\\|socket\\|connect\" strings.txt<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Binwalk ist das Schweizer Taschenmesser der Firmware-Analyse:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Analyse des Dumps<\/em>\nbinwalk firmware_dump.bin\n\n<em># Entropie-Analyse (erkennt verschl\u00fcsselte\/komprimierte Bereiche)<\/em>\nbinwalk -E firmware_dump.bin\n\n<em># Automatisches Extrahieren gefundener Dateisysteme<\/em>\nbinwalk -e firmware_dump.bin<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Entropie-Analyse ist besonders aufschlussreich: Ein flacher Verlauf um 0,5\u20130,8 deutet auf normalen Code hin, ein Wert nahe 1,0 auf Verschl\u00fcsselung oder Kompression&nbsp;<a href=\"https:\/\/www.tarlogic.com\/blog\/owasp-fstm-stage-3-analyzing-firmware\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>. Pl\u00f6tzliche Spr\u00fcnge zeigen Grenzen zwischen verschiedenen Datentypen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 Partitionstabelle rekonstruieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ESP32-Firmware folgt einer bestimmten Struktur. Die Partitionstabelle liegt normalerweise bei&nbsp;<code>0x8000<\/code>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Partitionstabelle ansehen<\/em>\ndd if=firmware_dump.bin of=partition_table.bin bs=1 skip=$((0x8000)) count=$((0x1000))\nstrings partition_table.bin<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Eine typische Partitionstabelle (CSV-Format im Bin\u00e4rbild) enth\u00e4lt Eintr\u00e4ge wie:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nvs,      data, nvs,     0x9000, 0x6000,\nphy_init, data, phy,     0xf000, 0x1000,\nfactory,  app,  factory, 0x10000, 0x200000,<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Damit wissen wir, wo die eigentliche Anwendung beginnt (oft bei&nbsp;<code>0x10000<\/code>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.3 Bootloader extrahieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der Bootloader liegt bei&nbsp;<code>0x1000<\/code>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dd if=firmware_dump.bin of=bootloader.bin bs=1 skip=$((0x1000)) count=$((0x7000))<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ein signierter Bootloader (Secure Boot V2) erkennst du an einem RSA-Signatur-Block am Ende&nbsp;<a href=\"https:\/\/circuitlabs.net\/ota-update-security-for-esp32\/#1-authenticity-integrity-digital-signatures\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">IV. Phase 3: Tiefenanalyse \u2013 Reverse Engineering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt wird es spannend. Wir haben die Anwendungsfirmware extrahiert und wollen wissen, was sie wirklich tut.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Architektur identifizieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der ESP32 nutzt einen Xtensa-LX6-Prozessor. F\u00fcr das Reverse Engineering brauchen wir Disassembler, die diesen Befehlssatz verstehen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ghidra<\/strong>\u00a0(mit Xtensa-Plugin): Kostenlos, m\u00e4chtig, von der NSA entwickelt<\/li>\n\n\n\n<li><strong>IDA Pro<\/strong>\u00a0(kommerziell): Der Industriestandard<\/li>\n\n\n\n<li><strong>Radare2 \/ Cutter<\/strong>: Open-Source, kommandozeilentauglich<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In Ghidra: Lege ein neues Projekt an, importiere die Firmware-Datei und w\u00e4hle als Architecture &#8222;Xtensa&#8220; (nach Installation des Plugins).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 Nach bekannten Schwachstellen suchen<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">4.2.1 Harte Kodierung von Zugangsdaten<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Der Klassiker: In vielen IoT-Ger\u00e4ten finden sich hart kodierte Passw\u00f6rter oder API-Keys:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Nach typischen Patterns suchen<\/em>\nstrings firmware.bin | grep -E \"pass|pwd|key|token|secret|admin\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In Ghidra: Suche nach Zeichenketten (Search \u2192 For Strings) und schaue, wo sie referenziert werden. F\u00fchrt eine Zeichenkette in eine Funktion, die Verbindungen aufbaut, ist das verd\u00e4chtig.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4.2.2 Versteckte Zug\u00e4nge (Backdoors)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Manche Hersteller lassen bewusst Hintert\u00fcren f\u00fcr den Support \u2013 oder Angreifer schleusen sie ein. Typische Anzeichen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Telnet-Server<\/strong>: Suche nach\u00a0<code>telnetd<\/code>,\u00a0<code>busybox telnet<\/code>\u00a0oder\u00a0<code>bind(23<\/code><\/li>\n\n\n\n<li><strong>Ungew\u00f6hnliche offene Ports<\/strong>:\u00a0<code>socket()<\/code>,\u00a0<code>bind()<\/code>\u00a0mit Portnummern &gt; 1024<\/li>\n\n\n\n<li><strong>Spezielle &#8222;magische&#8220; Pakete<\/strong>: Funktionen, die auf bestimmte Befehlssequenzen reagieren<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Beispiel: Eine Funktion, die einen UDP-Socket \u00f6ffnet und eingehende Pakete auf einen bestimmten Magic-Wert pr\u00fcft:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">c<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>\/\/ Pseudocode aus Ghidra<\/em>\nif (udp_data[0] == 0xDE &amp;&amp; udp_data[1] == 0xAD &amp;&amp; udp_data[2] == 0xBE &amp;&amp; udp_data[3] == 0xEF) {\n    execute_shell_command(udp_data+4);\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.2.3 Unsichere Update-Mechanismen<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Eine der gef\u00e4hrlichsten Schwachstellen: Wie werden Updates eingespielt?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suche nach Funktionen, die mit OTA (Over-the-Air) zu tun haben:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>esp_ota_begin()<\/code>,\u00a0<code>esp_ota_write()<\/code>,\u00a0<code>esp_ota_end()<\/code>\u00a0<a href=\"https:\/\/circuitlabs.net\/ota-update-security-for-esp32\/#1-authenticity-integrity-digital-signatures\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>HTTP-Clients ohne SSL (erkennbar an\u00a0<code>http:\/\/<\/code>\u00a0statt\u00a0<code>https:\/\/<\/code>)<\/li>\n\n\n\n<li>Fehlende Signaturpr\u00fcfung (kein Aufruf von\u00a0<code>esp_secure_boot_verify_signature()<\/code>)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn die Firmware Updates per HTTP l\u00e4dt und nicht auf Signaturen pr\u00fcft, kann jeder im selben Netzwerk Schadcode einspielen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.3 Dynamische Analyse im Emulator<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Manchmal verr\u00e4t ein Programm sein Verhalten erst, wenn es l\u00e4uft. Mit Emulatoren k\u00f6nnen wir die Firmware ausf\u00fchren, ohne sie auf echte Hardware zu spielen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>QEMU f\u00fcr Xtensa:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Emulation starten (vereinfacht)<\/em>\nqemu-system-xtensa -cpu esp32 -machine esp32 -kernel firmware.bin -nographic<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Firmadyne \/ FirmAE:<\/strong><br>Diese Frameworks emulieren komplette Linux-Firmware f\u00fcr IoT-Ger\u00e4te \u2013 n\u00fctzlich, wenn der ESP32 mit einem Linux-System (wie OpenWrt) l\u00e4uft&nbsp;<a href=\"https:\/\/www.serma-safety-security.com\/en\/blog\/behind-the-scenes-of-a-hardware-penetration-test-part-3-analysis-diving-into-the-inner-workings\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.4 Statistische Analyse: Was ist ungew\u00f6hnlich?<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">4.4.1 Code-Abweichungen<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Vergleiche den extrahierten Code mit bekannten sauberen Versionen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># Bei Open-Source-Projekten: Mit git vergleichen<\/em>\ngit clone https:\/\/github.com\/example\/project\nobjdump -d original.elf &gt; original.asm\nobjdump -d extracted.elf &gt; extracted.asm\nmeld original.asm extracted.asm<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4.4.2 Ungew\u00f6hnliche Funktionsnamen<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In Ghidra: Exportiere die Liste aller Funktionen. Suche nach:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Namen mit\u00a0<code>backdoor<\/code>,\u00a0<code>debug<\/code>,\u00a0<code>test<\/code>,\u00a0<code>hidden<\/code><\/li>\n\n\n\n<li>Kryptische Namen wie\u00a0<code>f_12345678<\/code>\u00a0(k\u00f6nnten verschleierter Code sein)<\/li>\n\n\n\n<li>Sehr viele kleine Funktionen (m\u00f6glicherweise obfuskierter Code)<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4.4.3 Signaturerkennung mit YARA<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">YARA-Regeln k\u00f6nnen nach bekannten Malware-Mustern suchen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">yara<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">rule ESP32_Backdoor {\n    meta:\n        description = \"Erkennt eine bekannte ESP32-Backdoor\"\n    strings:\n        $s1 = \"telnetd -l \/bin\/sh\" wide ascii\n        $s2 = \"open backdoor port\" wide ascii\n        $s3 = { 6a 02 6a 01 6a 06 6a 00 }  # socketcall syscall sequence\n    condition:\n        any of them\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Anwendung:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">yara esp32_rules.yara firmware.bin<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">V. Phase 4: Netzwerkverhalten analysieren<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Firmware allein verr\u00e4t nicht alles. Was das Ger\u00e4t tats\u00e4chlich tut, zeigt sich oft erst im Netzwerkverkehr.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 Verkehr im Labor aufzeichnen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Aufbau:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Das Ger\u00e4t in ein isoliertes WLAN stecken<\/li>\n\n\n\n<li>Einen Laptop mit Wireshark im Monitor-Modus verwenden<\/li>\n\n\n\n<li>Allen Verkehr aufzeichnen<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Worauf achten:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ungew\u00f6hnliche Ziele<\/strong>: Verbindungen zu IPs in L\u00e4ndern, die nichts mit dem Hersteller zu tun haben<\/li>\n\n\n\n<li><strong>DNS-Anfragen<\/strong>: Fragt das Ger\u00e4t nach Domain-Nach hause&#8220;?<\/li>\n\n\n\n<li><strong>Periodische Beaconing<\/strong>: Sendet es regelm\u00e4\u00dfig kleine Pakete an eine externe IP?<\/li>\n\n\n\n<li><strong>Unverschl\u00fcsselte Daten<\/strong>: Werden Sensordaten oder gar Passw\u00f6rter im Klartext \u00fcbertragen?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5.2 Firmware-Updates mitschneiden<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn das Ger\u00e4t ein Update durchf\u00fchrt, kannst du die heruntergeladene Datei mit Wireshark mitschneiden:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em># In Wireshark: File \u2192 Export Objects \u2192 HTTP<\/em>\n<em># Zeigt alle \u00fcber HTTP \u00fcbertragenen Dateien an<\/em><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Update-Datei kannst du dann separat analysieren \u2013 vielleicht ist sie weniger gesch\u00fctzt als die urspr\u00fcngliche Firmware.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">VI. Praktisches Beispiel: Eine verd\u00e4chtige smarte Steckdose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nehmen wir ein konkretes Szenario: Du hast eine g\u00fcnstige WLAN-Steckdose gekauft und willst wissen, ob sie sicher ist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 1: Auslesen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">esptool.py --port \/dev\/ttyUSB0 read_flash 0x0 0x400000 steckdose.bin<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 2: Strings extrahieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">strings -n 8 steckdose.bin | grep -i \"cloud\\|api\\|token\\|password\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fundstelle:&nbsp;<code>api.verdaechtiger-server.com<\/code>&nbsp;und&nbsp;<code>Authorization: Bearer 4e6f72446120697374206469652057656872<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 3: Binwalk-Analyse<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">binwalk steckdose.bin<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ergebnis: Eine LZMA-komprimierte Partition bei 0x110000.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 4: Entropie-Pr\u00fcfung<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">binwalk -E steckdose.bin<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Entropie ist durchg\u00e4ngig hoch \u2013 ein Zeichen f\u00fcr Verschl\u00fcsselung oder Kompression. Aber der Bereich um 0x9000 hat niedrige Entropie: Hier liegt die Partitionstabelle im Klartext.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 5: Partitionstabelle extrahieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dd if=steckdose.bin of=ptable.bin bs=1 skip=$((0x8000)) count=$((0x1000))\nstrings ptable.bin<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wir finden:&nbsp;<code>nvs, data, nvs, 0x9000, 0x4000<\/code>&nbsp;und&nbsp;<code>factory, app, factory, 0x10000, 0x300000<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 6: Firmware extrahieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">dd if=steckdose.bin of=firmware.bin bs=1 skip=$((0x10000)) count=$((0x300000))<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 7: In Ghidra laden<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Neues Projekt anlegen<\/li>\n\n\n\n<li><code>firmware.bin<\/code>\u00a0importieren, Architecture &#8222;Xtensa&#8220;<\/li>\n\n\n\n<li>Analyse laufen lassen<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 8: Nach Backdoors suchen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Suche nach&nbsp;<code>socket<\/code>&nbsp;und&nbsp;<code>bind<\/code>. Wir finden eine Funktion&nbsp;<code>sub_40123456<\/code>, die:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Einen UDP-Socket auf Port 8888 \u00f6ffnet<\/li>\n\n\n\n<li>Auf eingehende Pakete wartet<\/li>\n\n\n\n<li>Wenn die ersten 4 Bytes\u00a0<code>0xCAFEBABE<\/code>\u00a0sind, f\u00fchrt sie den Rest des Pakets als Befehl aus<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fund:<\/strong>&nbsp;Eine klassische Backdoor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 9: Netzwerk-Test<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Im isolierten Labor zeigt Wireshark: Die Steckdose kontaktiert regelm\u00e4\u00dfig&nbsp;<code>update.verdaechtiger-server.com<\/code>&nbsp;\u2013 \u00fcber unverschl\u00fcsseltes HTTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fazit:<\/strong>&nbsp;Das Ger\u00e4t ist kompromittiert oder bewusst mit Hintert\u00fcr ausgeliefert worden.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">VII. Werkzeugkasten f\u00fcr die Firmware-Forensik<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Unverzichtbare Tools<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Werkzeug<\/th><th class=\"has-text-align-left\" data-align=\"left\">Zweck<\/th><th class=\"has-text-align-left\" data-align=\"left\">Installation<\/th><\/tr><\/thead><tbody><tr><td><strong>esptool.py<\/strong><\/td><td>Flash auslesen\/beschreiben<\/td><td><code>pip install esptool<\/code><\/td><\/tr><tr><td><strong>binwalk<\/strong><\/td><td>Firmware analysieren\/extrahieren<\/td><td><code>sudo apt install binwalk<\/code><\/td><\/tr><tr><td><strong>Ghidra<\/strong><\/td><td>Reverse Engineering<\/td><td><a href=\"https:\/\/ghidra-sre.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">ghidra-sre.org<\/a><\/td><\/tr><tr><td><strong>strings<\/strong><\/td><td>Text extrahieren<\/td><td><code>sudo apt install binutils<\/code><\/td><\/tr><tr><td><strong>xxd<\/strong><\/td><td>Hex-Dumps<\/td><td><code>sudo apt install xxd<\/code><\/td><\/tr><tr><td><strong>hexdump<\/strong><\/td><td>Alternative zu xxd<\/td><td><code>sudo apt install bsdmainutils<\/code><\/td><\/tr><tr><td><strong>YARA<\/strong><\/td><td>Mustererkennung<\/td><td><code>sudo apt install yara<\/code><\/td><\/tr><tr><td><strong>Wireshark<\/strong><\/td><td>Netzwerkanalyse<\/td><td><code>sudo apt install wireshark<\/code><\/td><\/tr><tr><td><strong>radare2<\/strong><\/td><td>Kommandozeilen-Disassembler<\/td><td><code>sudo apt install radare2<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">N\u00fctzliche Zus\u00e4tze<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>cwe_checker<\/strong>\u00a0: Pr\u00fcft auf bekannte Schwachstellenmuster<\/li>\n\n\n\n<li><strong>Firmadyne<\/strong>\u00a0: Emulation ganzer Firmware-Images<\/li>\n\n\n\n<li><strong>QEMU<\/strong>\u00a0: Emulation einzelner Binaries<\/li>\n\n\n\n<li><strong>checksec<\/strong>\u00a0: Pr\u00fcft Sicherheitsmechanismen von Binaries<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">VIII. Grenzen und Herausforderungen<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">8.1 Verschl\u00fcsselte Firmware<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Flash Encryption aktiviert ist, bekommst du nur Kauderwelsch. Ohne den Schl\u00fcssel (in den eFuses) ist eine Analyse unm\u00f6glich&nbsp;<a href=\"https:\/\/circuitlabs.net\/ota-update-security-for-esp32\/#1-authenticity-integrity-digital-signatures\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>. Einzige Chance: Ein bekanntes Schwachstelle im Bootrom, die den Schl\u00fcssel preisgibt \u2013 aber das ist selten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8.2 Signierte Firmware<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Secure Boot verhindert, dass manipulierte Firmware l\u00e4uft&nbsp;<a href=\"https:\/\/circuitlabs.net\/secure-boot-implementation-in-esp-idf\/#anchoring-trust-in-hardware-the-role-of-efuses\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a>. F\u00fcr die Forensik ist das aber kein Hindernis \u2013 wir wollen ja nur lesen, nicht schreiben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8.3 Obfuskation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Manche Hersteller verschleiern ihren Code absichtlich, um Reverse Engineering zu erschweren. Typische Methoden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Entfernen von Symbolen (haben wir sowieso)<\/li>\n\n\n\n<li>Kontrollfluss-Verschleierung (viele Spr\u00fcnge, schwer zu folgen)<\/li>\n\n\n\n<li>String-Verschl\u00fcsselung (Strings sind nicht als solche erkennbar)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Hier hilft nur Geduld und Erfahrung \u2013 oder dynamische Analyse im Emulator.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8.4 Rechtliche Fallstricke<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Das Umgehen von Schutzmechanismen kann gegen Gesetze versto\u00dfen (z.B. \u00a795c UrhG in Deutschland). F\u00fcr Forschungszwecke gibt es Ausnahmen, aber informiere dich vorher. Und: Analysiere nur eigene Ger\u00e4te oder solche, f\u00fcr die du die Erlaubnis hast.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">IX. Pr\u00e4vention: Wie sch\u00fctze ich meine eigenen Ger\u00e4te?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die andere Seite der Medaille: Wenn du eigene ESP32-Produkte entwickelst, solltest du die hier beschriebenen Angriffe kennen, um dich zu sch\u00fctzen:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Secure Boot aktivieren<\/strong>\u00a0\u2013 verhindert, dass manipulierte Firmware l\u00e4uft\u00a0<a href=\"https:\/\/circuitlabs.net\/secure-boot-implementation-in-esp-idf\/#anchoring-trust-in-hardware-the-role-of-efuses\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong>Flash Encryption einschalten<\/strong>\u00a0\u2013 sch\u00fctzt vor Auslesen\u00a0<a href=\"https:\/\/circuitlabs.net\/ota-update-security-for-esp32\/#1-authenticity-integrity-digital-signatures\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong>Signierte Updates<\/strong>\u00a0\u2013 OTA nur mit Signaturpr\u00fcfung\u00a0<a href=\"https:\/\/circuitlabs.net\/ota-update-security-for-esp32\/#1-authenticity-integrity-digital-signatures\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong>JTAG\/SWD deaktivieren<\/strong>\u00a0\u2013 verhindert Debug-Zugriff<\/li>\n\n\n\n<li><strong>Keine hart kodierten Secrets<\/strong>\u00a0\u2013 Nutze NVS-Partitionen mit Verschl\u00fcsselung<\/li>\n\n\n\n<li><strong>Regelm\u00e4\u00dfige Sicherheits-Updates<\/strong>\u00a0\u2013 und Mechanismen, die sie erzwingen<\/li>\n\n\n\n<li><strong>Anti-Rollback<\/strong>\u00a0\u2013 verhindert R\u00fccksetzen auf alte, verwundbare Versionen\u00a0<a href=\"https:\/\/circuitlabs.net\/ota-update-security-for-esp32\/#1-authenticity-integrity-digital-signatures\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Die Kombination aus Secure Boot und Flash Encryption bietet einen starken Schutz. Wie im vorherigen Artikel zur EMV gilt: Wer von Anfang an sicher entwickelt, spart sich sp\u00e4ter viel \u00c4rger.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">X. Fazit: Vertrauen ist gut, Kontrolle ist besser<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Firmware-Forensik auf ESP32-Ger\u00e4ten ist keine Hexerei. Mit den richtigen Werkzeugen und etwas Geduld kannst du herausfinden, was ein unbekanntes Ger\u00e4t wirklich tut. Die hier vorgestellten Methoden \u2013 vom Auslesen \u00fcber die Analyse bis zur Netzwerkbeobachtung \u2013 geben dir die Kontrolle zur\u00fcck.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Drei Dinge solltest du mitnehmen:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Jedes Ger\u00e4t kann kompromittiert sein<\/strong>\u00a0\u2013 besonders Billigware aus nicht vertrauensw\u00fcrdigen Quellen.<\/li>\n\n\n\n<li><strong>Die Werkzeuge sind frei verf\u00fcgbar<\/strong>\u00a0\u2013 du brauchst kein teures Labor, nur einen Rechner und etwas Neugier.<\/li>\n\n\n\n<li><strong>Wissen sch\u00fctzt<\/strong>\u00a0\u2013 wer die Angriffsvektoren kennt, kann sich besser verteidigen.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">In einer Welt zunehmender Vernetzung ist die F\u00e4higkeit, eigene Ger\u00e4te zu pr\u00fcfen, kein exotisches Hobby mehr, sondern eine grundlegende Kompetenz f\u00fcr jeden Maker. Also: Trau keinem Binary, den du nicht selbst gebaut hast \u2013 oder zumindest gr\u00fcndlich untersucht.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">XI. Quellen und weiterf\u00fchrende Literatur<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Fachartikel und Konferenzen<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Van Beijnum, Wilco<\/strong>: &#8222;Breaking and Remaking ESP32 Devices&#8220; \u2013 OrangeCon 2025\u00a0<a href=\"https:\/\/pretalx.com\/orangecon-2025\/talk\/WFUSHE\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong>MITRE ATT&amp;CK<\/strong>: &#8222;Detection of Module Firmware (T0839)&#8220; \u2013 ICS-Framework\u00a0<a href=\"https:\/\/attack.mitre.org\/versions\/v18\/detectionstrategies\/DET0790\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong>SERMA Safety &amp; Security<\/strong>: &#8222;Behind the Scenes of a Hardware Penetration Test&#8220; \u2013 Blog-Serie 2025\u00a0<a href=\"https:\/\/www.serma-safety-security.com\/en\/blog\/behind-the-scenes-of-a-hardware-penetration-test-part-3-analysis-diving-into-the-inner-workings\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Online-Tutorials und Dokumentationen<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/circuitlabs.net\/\" target=\"_blank\" rel=\"noreferrer noopener\">circuitlabs.net<\/a><\/strong>: &#8222;OTA Update Security for ESP32&#8220; \u2013 Umfassende Anleitung zu signierten Updates\u00a0<a href=\"https:\/\/circuitlabs.net\/ota-update-security-for-esp32\/#1-authenticity-integrity-digital-signatures\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong><a href=\"https:\/\/circuitlabs.net\/\" target=\"_blank\" rel=\"noreferrer noopener\">circuitlabs.net<\/a><\/strong>: &#8222;Secure Boot Implementation in ESP-IDF&#8220; \u2013 Detaillierte Einf\u00fchrung in Secure Boot\u00a0<a href=\"https:\/\/circuitlabs.net\/secure-boot-implementation-in-esp-idf\/#anchoring-trust-in-hardware-the-role-of-efuses\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong>Tarlogic<\/strong>: &#8222;OWASP FSTM, stage 3: Analyzing firmware&#8220; \u2013 Methodik f\u00fcr Firmware-Analyse\u00a0<a href=\"https:\/\/www.tarlogic.com\/blog\/owasp-fstm-stage-3-analyzing-firmware\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/www.tarlogic.com\/es\/blog\/owasp-fstm-etapa-3-analisis-del-firmware\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><strong>CSDN<\/strong>: &#8222;\u5b89\u5168\u542f\u52a8+\u95ea\u52a0\u5bc6\u914d\u7f6e\u5168\u6d41\u7a0b&#8220; \u2013 Chinesischsprachige, aber sehr technische Anleitung zu Secure Boot und Flash Encryption\u00a0<a href=\"https:\/\/wenku.csdn.net\/column\/2kn84qgeao\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Akademische Arbeiten<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Segal et al.<\/strong>: &#8222;UEFI Memory Forensics: A Framework for UEFI Threat Analysis&#8220; \u2013 arXiv 2025. F\u00fcr PC-Firmware, aber die Methodik ist \u00fcbertragbar\u00a0<a href=\"https:\/\/ar5iv.labs.arxiv.org\/html\/2501.16962\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Tools und Repositories<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Espressif<\/strong>: ESP-IDF Programming Guide \u2013 Offizielle Dokumentation zu Secure Boot und Flash Encryption<\/li>\n\n\n\n<li><strong>Ghidra<\/strong>: Offizielle Website mit Xtensa-Plugin<\/li>\n\n\n\n<li><strong>binwalk<\/strong>: GitHub-Repository<\/li>\n\n\n\n<li><strong>YARA<\/strong>: Offizielle Dokumentation und Regeln<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Universit\u00e4re Lehrmaterialien<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Universitatea Politehnica Bucure\u0219ti<\/strong>: &#8222;Laborator 7: Secure Boot \u0219i Autentificarea Codului pentru Aplica\u021bii Mobile&#8220; \u2013 Labor\u00fcbungen zu Secure Boot auf ESP32\u00a0<a href=\"https:\/\/ocw.cs.pub.ro\/courses\/ss\/laboratoare\/07?rev=1740522407\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Hinweis: Dieser Artikel dient Bildungszwecken und der Sicherheitsforschung. Die beschriebenen Techniken an Ger\u00e4ten anzuwenden, die dir nicht geh\u00f6ren, kann gegen Gesetze versto\u00dfen. Handle verantwortungsvoll und im Rahmen der geltenden Rechtsordnung.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung: Misstrauen ist der Anfang guter Sicherheit Du hast ein g\u00fcnstiges IoT-Ger\u00e4t im Internet bestellt. Eine smarte Steckdose, ein WiFi-Thermostat oder ein ESP32-Entwicklungsboard von einem No-Name-Hersteller. Die Hardware sieht solide aus, der Preis war verlockend \u2013 aber dann kommt der Gedanke: Was ist eigentlich auf dem Chip drauf? Die Antwort lautet: Du wei\u00dft es nicht. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,20,33,35],"tags":[],"class_list":["post-396","post","type-post","status-publish","format-standard","hentry","category-aus-dem-bauch-heraus","category-industrie-4-0-sensorik","category-technik-praxis","category-technisch"],"_links":{"self":[{"href":"https:\/\/technodidact.de\/en\/wp-json\/wp\/v2\/posts\/396","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/technodidact.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/technodidact.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/technodidact.de\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/technodidact.de\/en\/wp-json\/wp\/v2\/comments?post=396"}],"version-history":[{"count":0,"href":"https:\/\/technodidact.de\/en\/wp-json\/wp\/v2\/posts\/396\/revisions"}],"wp:attachment":[{"href":"https:\/\/technodidact.de\/en\/wp-json\/wp\/v2\/media?parent=396"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/technodidact.de\/en\/wp-json\/wp\/v2\/categories?post=396"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/technodidact.de\/en\/wp-json\/wp\/v2\/tags?post=396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}