L'analyse des bus de données
L'une des étapes clés en reverse engineering est de comprendre les communications entre les composants d'un appareil. Maîtrisez l'interception et l'analyse des protocoles SPI, I2C et UART.
🛠️ Pourquoi s'intéresser aux bus de données ?
Les bus de communication comme SPI, I2C, et UART sont omniprésents dans les appareils électroniques modernes. Ils constituent souvent le maillon faible de la sécurité car :
- Données sensibles non chiffrées - Mots de passe, clés API, tokens d'authentification
- Commandes de contrôle exposées - Instructions de configuration, modes de debug
- Communications inter-composants - Échanges entre processeur principal et modules périphériques
- Logs et diagnostics - Informations de débogage révélant l'architecture interne
📚 Comprendre les protocoles
🔄 SPI (Serial Peripheral Interface)
Principe : Communication série synchrone, full-duplex avec un maître et plusieurs esclaves.
• MISO (Master In, Slave Out)
• MOSI (Master Out, Slave In)
• SCK (Serial Clock)
• CS/SS (Chip Select)
Vitesse : Jusqu'à 50 MHz
Usage : Capteurs, mémoires flash, écrans LCD
🔗 I2C (Inter-Integrated Circuit)
Principe : Bus série multi-maître avec adressage des périphériques sur 7 ou 10 bits.
• SDA (Serial Data)
• SCL (Serial Clock)
• Résistances de pull-up obligatoires
Vitesse : 100 kHz à 5 MHz
Usage : Capteurs, EEPROMs, horloges temps réel
📡 UART (Universal Asynchronous Receiver-Transmitter)
Principe : Communication série asynchrone point-à-point, souvent utilisée pour le debug.
• TX (Transmit)
• RX (Receive)
• GND (Ground)
• VCC (optionnel)
Vitesse : 9600 à 115200+ bps
Usage : Console de debug, communication série
🔍 Comment capturer et analyser ces communications ?
Identifiez les lignes de bus
Méthodes de reconnaissance :
- Analyse visuelle du PCB
- Recherchez des groupes de 3-4 pins proches
- Traces parallèles reliant plusieurs composants
- Connecteurs de debug non peuplés
- Markings sérigraphiés (TX, RX, SCL, SDA...)
- Documentation constructeur
- Datasheets des processeurs principaux
- Schémas de développement similaires
- Pinouts standards des composants identifiés
- Outils de mesure
- Multimètre - Vérifiez les niveaux de tension (3.3V, 5V)
- Oscilloscope - Observez les signaux lors du fonctionnement
- Sonde logique - Détectez l'activité numérique sur les pins
Utilisez un analyseur logique
Comparaison des outils :
| Outil | Prix | Canaux | Fréquence max | Avantages | Inconvénients |
|---|---|---|---|---|---|
| Saleae Logic | €300-800 | 8-16 | 100 MHz | Logiciel excellent, décodage auto | Prix élevé |
| DSLogic | €80-150 | 16 | 400 MHz | Bon rapport qualité/prix | Logiciel moins intuitif |
| Adaptateur USB | €15-25 | 3-4 | - | Très abordable, portable | Limité à UART principalement |
| Bus Pirate | €25-40 | 5 | 125 kHz | Versatile, communauté active | Vitesse limitée |
| Raspberry Pi Pico | €4-8 | 26 GPIO | Variable | Prix imbattable, programmable | Nécessite programmation |
Configuration type :
- Connexion physique
- Utilisez des sondes avec crochets ou des câbles Dupont
- Respectez les niveaux de tension (3.3V vs 5V)
- Connectez impérativement le GND en commun
- Paramétrage logiciel
- Fréquence d'échantillonnage : 10x la fréquence du signal
- Durée de capture : Suffisante pour couvrir une séquence complète
- Triggering : Déclenchez sur le début d'une transmission
Décodez les signaux
Logiciels de décodage :
- PulseView (sigrok) - Gratuit, open source
- Support de nombreux protocoles
- Décodeurs extensibles
- Compatible avec de nombreux analyseurs
- Logic 2 (Saleae) - Commercial mais excellent
- Interface intuitive
- Décodage en temps réel
- Export vers de nombreux formats
- Outils console pour UART
Minicom(Linux/macOS)PuTTY(Windows)SerialPort Monitor(Multi-plateforme)
Paramètres de décodage courants :
UART
Data bits : 8
Parity : None
Stop bits : 1
I2C
Fast : 400 kHz
Fast+ : 1 MHz
Adressage : 7-bit ou 10-bit
SPI
Mode 1 : CPOL=0, CPHA=1
Mode 2 : CPOL=1, CPHA=0
Mode 3 : CPOL=1, CPHA=1
🛠️ Que faire avec les données capturées ?
Analysez les échanges
Points d'attention :
- Informations sensibles en clair
- Mots de passe d'administration
- Clés de chiffrement ou certificats
- Tokens d'authentification
- Identifiants de session
- Commandes de configuration
- Modes de debug ou de maintenance
- Paramètres de sécurité modifiables
- Commandes administrateur cachées
- Faiblesses cryptographiques
- Algorithmes de chiffrement faibles
- Absence de chiffrement sur données sensibles
- Clés prévisibles ou réutilisées
- Vulnérabilités de protocole
- Absence d'authentification des commandes
- Injection de commandes possibles
- Buffer overflows dans le parsing
strings, hexdump et binwalk pour analyser les dumps de données capturées.
Modifiez les données (Injection)
Techniques d'injection :
- Replay attack
- Rejouez des séquences capturées
- Modifiez certains paramètres pour tester les réactions
- Analysez les réponses du système
- Command injection
- Injectez de nouvelles commandes dans le flux
- Testez des commandes non documentées
- Exploitez les parsers vulnérables
- Fuzzing de protocole
- Générez des données aléatoires ou malformées
- Testez la robustesse du protocole
- Recherchez des crashes ou comportements anormaux
Outils d'injection :
- Bus Pirate - Injection manuelle de commandes
- Arduino/Raspberry Pi - Scripts d'injection automatisés
- UART injection tools - Outils spécialisés pour l'injection série
- Custom scripts - Python avec pySerial, ou autres langages
🔓 Astuces avancées et contournements
Contourner les protections
Protections courantes et contournements :
- Chiffrement des communications
- Protection : Données chiffrées sur le bus
- Contournement : Cherchez les clés en mémoire ou les faiblesses d'implémentation
- Alternative : Analysez avant le chiffrement (entre CPU et crypto-chip)
- Authentification des commandes
- Protection : Signature ou checksum des commandes
- Contournement : Analysez l'algorithme de vérification
- Alternative : Trouvez des commandes non protégées
- Désactivation en production
- Protection : Interfaces debug désactivées
- Contournement : Recherchez des jumpers ou des résistances à modifier
- Alternative : Test pins ou séquences d'activation spéciales
- Obfuscation des protocoles
- Protection : Protocoles propriétaires non documentés
- Contournement : Reverse engineering du protocole par observation
- Alternative : Correlation avec les fonctionnalités utilisateur
Techniques avancées
- Timing attacks
- Analysez les délais de réponse aux commandes
- Exploitez les différences de traitement pour révéler des informations
- Power analysis
- Correlez la consommation électrique avec les activités de communication
- Révélez des opérations cryptographiques ou des états internes
- Injection de fautes
- Perturbez l'alimentation ou l'horloge pendant les communications
- Provoquez des erreurs révélatrices dans le traitement
- Multi-bus correlation
- Analysez simultanément plusieurs bus de communication
- Révélez la logique de traitement interne par corrélation
🎯 Cas d'usage pratiques
Exemples concrets d'exploitations réussies :
- Routeurs Wi-Fi
- Extraction des clés WPA via UART lors du boot
- Commandes de configuration avancées non exposées dans l'interface web
- Backdoors de développement laissées actives
- Caméras IP
- Mots de passe administrateur en clair sur I2C vers l'EEPROM
- Contournement de l'authentification via injection de commandes
- Firmware updates non signés acceptés via interfaces debug
- Objets connectés (IoT)
- Clés API de services cloud hardcodées
- Tokens d'authentification réutilisables
- Commandes de contrôle à distance injectables
- Systèmes embarqués automobiles
- Codes de diagnostic cachés via UART
- Communication CAN bus non chiffrée
- Contournement des protections anti-clonage
📚 Ressources pour aller plus loin
Documentation et références :
- Spécifications officielles
- I2C Specification (NXP)
- SPI Protocol Guide (Analog Devices)
- UART Standards - Various manufacturers
- Outils logiciels gratuits
- Sigrok/PulseView - Suite complète d'analyse de signaux
- Bus Pirate firmware - Firmware open source
- PySerial - Bibliothèque Python pour communications série
- Communautés et forums
- Reddit: r/ReverseEngineering, r/embedded
- Discord: Communities hardware hacking
- GitHub: Projets open source d'analyse de protocoles