UART
Reading time: 10 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.
Informations de base
UART est un protocole série, ce qui signifie qu'il transfÚre des données entre les composants un bit à la fois. En revanche, les protocoles de communication parallÚle transmettent des données simultanément par plusieurs canaux. Les protocoles série courants incluent RS-232, I2C, SPI, CAN, Ethernet, HDMI, PCI Express et USB.
En gĂ©nĂ©ral, la ligne est maintenue Ă un niveau Ă©levĂ© (Ă une valeur logique de 1) pendant que l'UART est dans l'Ă©tat inactif. Ensuite, pour signaler le dĂ©but d'un transfert de donnĂ©es, l'Ă©metteur envoie un bit de dĂ©part au rĂ©cepteur, pendant lequel le signal est maintenu Ă un niveau bas (Ă une valeur logique de 0). Ensuite, l'Ă©metteur envoie de cinq Ă huit bits de donnĂ©es contenant le message rĂ©el, suivis d'un bit de paritĂ© optionnel et d'un ou deux bits d'arrĂȘt (avec une valeur logique de 1), selon la configuration. Le bit de paritĂ©, utilisĂ© pour la vĂ©rification des erreurs, est rarement vu en pratique. Le bit d'arrĂȘt (ou les bits) signale la fin de la transmission.
Nous appelons la configuration la plus courante 8N1 : huit bits de donnĂ©es, pas de paritĂ© et un bit d'arrĂȘt. Par exemple, si nous voulions envoyer le caractĂšre C, ou 0x43 en ASCII, dans une configuration UART 8N1, nous enverrions les bits suivants : 0 (le bit de dĂ©part) ; 0, 1, 0, 0, 0, 0, 1, 1 (la valeur de 0x43 en binaire), et 0 (le bit d'arrĂȘt).
Outils matériels pour communiquer avec l'UART :
- Adaptateur USB-série
- Adaptateurs avec les puces CP2102 ou PL2303
- Outil polyvalent tel que : Bus Pirate, l'Adafruit FT232H, le Shikra ou le Badge Attify
Identification des ports UART
L'UART a 4 ports : TX(Transmettre), RX(Recevoir), Vcc(Tension), et GND(Masse). Vous pourriez ĂȘtre en mesure de trouver 4 ports avec les lettres TX
et RX
Ă©crites sur le PCB. Mais s'il n'y a aucune indication, vous devrez peut-ĂȘtre essayer de les trouver vous-mĂȘme en utilisant un multimĂštre ou un analyseur logique.
Avec un multimĂštre et l'appareil Ă©teint :
- Pour identifier la broche GND, utilisez le mode Test de continuitĂ©, placez la sonde noire sur la masse et testez avec la rouge jusqu'Ă ce que vous entendiez un son du multimĂštre. Plusieurs broches GND peuvent ĂȘtre trouvĂ©es sur le PCB, donc vous avez peut-ĂȘtre trouvĂ© ou non celle appartenant Ă l'UART.
- Pour identifier le port VCC, réglez le mode tension DC et configurez-le à 20 V de tension. Sonde noire sur la masse et sonde rouge sur la broche. Allumez l'appareil. Si le multimÚtre mesure une tension constante de 3,3 V ou 5 V, vous avez trouvé la broche Vcc. Si vous obtenez d'autres tensions, réessayez avec d'autres ports.
- Pour identifier le port TX, mode tension DC jusqu'à 20 V de tension, sonde noire sur la masse, et sonde rouge sur la broche, puis allumez l'appareil. Si vous constatez que la tension fluctue pendant quelques secondes puis se stabilise à la valeur Vcc, vous avez probablement trouvé le port TX. Cela est dû au fait qu'à l'allumage, il envoie des données de débogage.
- Le port RX serait le plus proche des autres 3, il a la fluctuation de tension la plus faible et la valeur globale la plus basse de toutes les broches UART.
Vous pouvez confondre les ports TX et RX et rien ne se passerait, mais si vous confondez le port GND et le port VCC, vous pourriez endommager le circuit.
Dans certains appareils cibles, le port UART est dĂ©sactivĂ© par le fabricant en dĂ©sactivant RX ou TX ou mĂȘme les deux. Dans ce cas, il peut ĂȘtre utile de tracer les connexions sur le circuit imprimĂ© et de trouver un point de rupture. Un indice fort pour confirmer l'absence de dĂ©tection de l'UART et la rupture du circuit est de vĂ©rifier la garantie de l'appareil. Si l'appareil a Ă©tĂ© expĂ©diĂ© avec une garantie, le fabricant laisse des interfaces de dĂ©bogage (dans ce cas, UART) et donc, doit avoir dĂ©connectĂ© l'UART et le reconnectera lors du dĂ©bogage. Ces broches de rupture peuvent ĂȘtre connectĂ©es par soudure ou fils de cavalier.
Identification du débit en bauds UART
Le moyen le plus simple d'identifier le bon débit en bauds est de regarder la sortie de la broche TX et d'essayer de lire les données. Si les données que vous recevez ne sont pas lisibles, passez au débit en bauds suivant possible jusqu'à ce que les données deviennent lisibles. Vous pouvez utiliser un adaptateur USB-série ou un appareil polyvalent comme Bus Pirate pour cela, associé à un script d'aide, tel que baudrate.py. Les débits en bauds les plus courants sont 9600, 38400, 19200, 57600 et 115200.
caution
Il est important de noter que dans ce protocole, vous devez connecter le TX d'un appareil au RX de l'autre !
Adaptateur CP210X UART Ă TTY
La puce CP210X est utilisĂ©e dans de nombreuses cartes de prototypage comme NodeMCU (avec esp8266) pour la communication sĂ©rie. Ces adaptateurs sont relativement peu coĂ»teux et peuvent ĂȘtre utilisĂ©s pour se connecter Ă l'interface UART de la cible. L'appareil a 5 broches : 5V, GND, RXD, TXD, 3.3V. Assurez-vous de connecter la tension comme supportĂ©e par la cible pour Ă©viter tout dommage. Enfin, connectez la broche RXD de l'adaptateur Ă TXD de la cible et la broche TXD de l'adaptateur Ă RXD de la cible.
En cas de non-dĂ©tection de l'adaptateur, assurez-vous que les pilotes CP210X sont installĂ©s sur le systĂšme hĂŽte. Une fois l'adaptateur dĂ©tectĂ© et connectĂ©, des outils comme picocom, minicom ou screen peuvent ĂȘtre utilisĂ©s.
Pour lister les appareils connectés aux systÚmes Linux/MacOS :
ls /dev/
Pour une interaction de base avec l'interface UART, utilisez la commande suivante :
picocom /dev/<adapter> --baud <baudrate>
Pour minicom, utilisez la commande suivante pour le configurer :
minicom -s
Configurez les paramĂštres tels que le baudrate et le nom de l'appareil dans l'option Serial port setup
.
AprĂšs la configuration, utilisez la commande minicom
pour démarrer la console UART.
UART Via Arduino UNO R3 (Cartes Ă puce Atmel 328p amovibles)
Dans le cas oĂč des adaptateurs UART Serial vers USB ne sont pas disponibles, l'Arduino UNO R3 peut ĂȘtre utilisĂ© avec un hack rapide. Ătant donnĂ© que l'Arduino UNO R3 est gĂ©nĂ©ralement disponible partout, cela peut faire gagner beaucoup de temps.
L'Arduino UNO R3 dispose d'un adaptateur USB vers Serial intĂ©grĂ© sur la carte elle-mĂȘme. Pour obtenir une connexion UART, il suffit de retirer la puce microcontrĂŽleur Atmel 328p de la carte. Ce hack fonctionne sur les variantes de l'Arduino UNO R3 ayant l'Atmel 328p non soudĂ© sur la carte (la version SMD est utilisĂ©e). Connectez la broche RX de l'Arduino (broche numĂ©rique 0) Ă la broche TX de l'interface UART et la broche TX de l'Arduino (broche numĂ©rique 1) Ă la broche RX de l'interface UART.
Enfin, il est recommandé d'utiliser l'IDE Arduino pour obtenir la console série. Dans la section tools
du menu, sélectionnez l'option Serial Console
et définissez le baud rate selon l'interface UART.
Bus Pirate
Dans ce scénario, nous allons sniffer la communication UART de l'Arduino qui envoie toutes les impressions du programme au Moniteur Série.
# Check the modes
UART>m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. KEYB
9. LCD
10. PIC
11. DIO
x. exit(without change)
# Select UART
(1)>3
Set serial port speed: (bps)
1. 300
2. 1200
3. 2400
4. 4800
5. 9600
6. 19200
7. 38400
8. 57600
9. 115200
10. BRG raw value
# Select the speed the communication is occurring on (you BF all this until you find readable things)
# Or you could later use the macro (4) to try to find the speed
(1)>5
Data bits and parity:
1. 8, NONE *default
2. 8, EVEN
3. 8, ODD
4. 9, NONE
# From now on pulse enter for default
(1)>
Stop bits:
1. 1 *default
2. 2
(1)>
Receive polarity:
1. Idle 1 *default
2. Idle 0
(1)>
Select output type:
1. Open drain (H=Hi-Z, L=GND)
2. Normal (H=3.3V, L=GND)
(1)>
Clutch disengaged!!!
To finish setup, start up the power supplies with command 'W'
Ready
# Start
UART>W
POWER SUPPLIES ON
Clutch engaged!!!
# Use macro (2) to read the data of the bus (live monitor)
UART>(2)
Raw UART input
Any key to exit
Escritura inicial completada:
AAA Hi Dreg! AAA
waiting a few secs to repeat....
Dumping Firmware with UART Console
Le UART Console offre un excellent moyen de travailler avec le firmware sous-jacent dans un environnement d'exĂ©cution. Mais lorsque l'accĂšs au UART Console est en lecture seule, cela peut introduire de nombreuses contraintes. Dans de nombreux dispositifs embarquĂ©s, le firmware est stockĂ© dans des EEPROM et exĂ©cutĂ© dans des processeurs ayant une mĂ©moire volatile. Par consĂ©quent, le firmware est maintenu en lecture seule puisque le firmware original lors de la fabrication se trouve Ă l'intĂ©rieur de l'EEPROM lui-mĂȘme et tout nouveau fichier serait perdu en raison de la mĂ©moire volatile. Ainsi, le dumping du firmware est un effort prĂ©cieux lors du travail avec des firmwares embarquĂ©s.
Il existe de nombreuses façons de le faire et la section SPI couvre des mĂ©thodes pour extraire le firmware directement de l'EEPROM avec divers dispositifs. Cependant, il est recommandĂ© d'essayer d'abord de dumper le firmware avec UART, car le dumping du firmware avec des dispositifs physiques et des interactions externes peut ĂȘtre risquĂ©.
Dumper le firmware depuis le UART Console nécessite d'abord d'accéder aux bootloaders. De nombreux fournisseurs populaires utilisent uboot (Universal Bootloader) comme leur bootloader pour charger Linux. Par conséquent, obtenir l'accÚs à uboot est nécessaire.
Pour accĂ©der au bootloader, connectez le port UART Ă l'ordinateur et utilisez l'un des outils de console sĂ©rie tout en maintenant l'alimentation de l'appareil dĂ©connectĂ©e. Une fois la configuration prĂȘte, appuyez sur la touche EntrĂ©e et maintenez-la enfoncĂ©e. Enfin, connectez l'alimentation Ă l'appareil et laissez-le dĂ©marrer.
Faire cela interrompra le chargement de uboot et fournira un menu. Il est recommandĂ© de comprendre les commandes uboot et d'utiliser le menu d'aide pour les lister. Cela pourrait ĂȘtre la commande help
. Ătant donnĂ© que diffĂ©rents fournisseurs utilisent diffĂ©rentes configurations, il est nĂ©cessaire de comprendre chacune d'elles sĂ©parĂ©ment.
En général, la commande pour dumper le firmware est :
md
qui signifie "vidage de mémoire". Cela affichera le contenu de la mémoire (contenu EEPROM) à l'écran. Il est recommandé de consigner la sortie de la console série avant de commencer la procédure pour capturer le vidage de mémoire.
Enfin, il suffit de supprimer toutes les données inutiles du fichier journal et de stocker le fichier sous le nom filename.rom
et d'utiliser binwalk pour extraire le contenu :
binwalk -e <filename.rom>
Cela listera les contenus possibles de l'EEPROM selon les signatures trouvées dans le fichier hex.
Cependant, il est nĂ©cessaire de noter qu'il n'est pas toujours vrai que le uboot est dĂ©verrouillĂ© mĂȘme s'il est utilisĂ©. Si la touche EntrĂ©e ne fait rien, vĂ©rifiez d'autres touches comme la touche Espace, etc. Si le bootloader est verrouillĂ© et n'est pas interrompu, cette mĂ©thode ne fonctionnera pas. Pour vĂ©rifier si uboot est le bootloader de l'appareil, vĂ©rifiez la sortie sur la console UART pendant le dĂ©marrage de l'appareil. Il pourrait mentionner uboot pendant le dĂ©marrage.
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.