lundi 24 août 2015

Recherche de port série

Inspection visuelle du PCB

L’objet de ce nouvel article est de rechercher un accès au port série sur le PCB (Printed Circuit Board) d’un système embarqué comme un modem routeur.
Inspection visuelle du PCB
PCB d'un système embarqué
L’examen du PCB fait apparaître deux blocs de quatre contacts ressemblant fortement à des points d’accès au port série. Dans l'image ci-dessous, il s'agit de vias qui comportent des points de soudure.
Points de contact de port série ?
Contacts candidats au port série
Mais cela pourrait être de simple vias vides ou pin holes dans lesquels il faudrait souder des headers  (broches) ou utiliser des grip-fils pour connecter les points de contact.
via et broche à souder
Vias et headers à souder
Un via est un trou en métal dans le PCB qui est connecté à des pistes pour établir des liaisons électriques dans les couches de silicium.
via électronique, interconnexion sur la carte
Vias et connectique dans les couches de silicium

Le port série, console ou UART

Un port série possède traditionnellement quatre contacts :
  • GND (masse), 
  • Vcc (alimentation), 
  • Tx (transmission) 
  • Rx (réception). 
Les industriels ont besoin de disposer de ports série pour le reconditionnement ou le débogage de terminaux. Parfois, ces ports sont cachés dans d’autres interfaces physiques (prise jack, péritel, ..) ou disséminés sur le PCB. Le groupement de points de contact par quatre ainsi que la proximité du SoC (System on Chip) font de ces vias des candidats sérieux pour des ports série. Un suivi des traces (lignes métalliques) sur le PCB sur les deux faces du PCB peut confirmer cette supposition à moins que les lignes soient enfouies dans les couches de silicium. Dans ce cas, il faudrait pouvoir faire une radiographie aux rayons X.

L’intérêt d’un port série est d’offrir un port de debug pour accéder au chargeur de démarrage (bootloader), observer les messages du démarrage (bootloader, noyau de l'OS, application) et interagir avec le terminal via un shell ou un menu interactif en ligne de commande. Le port série offre aussi la possibilité d’extraire ou copier la mémoire ou de flasher des images en mémoire non volatile. Le port série est ainsi une cible de choix pour un attaquant.

La méthode de recherche du port série

La recherche du port série, habituellement appelé UART (Universal Asynchronous Receiver Transmitter), est réalisée avec un multimètre numérique.
Multimètre numérique sonore avec fonction hold
Multimètre numérique
La méthode de recherche consiste à procéder par élimination pour identifier le rôles des différents points de contacts possibles, puis leurs caractéristiques.
  1. L’inspection visuelle préalable permet d'identifier des contacts ou vias candidats sur le PCB.
  2. Lorsque des points de contact sont identifiés, il faut rechercher en priorité la masse (GND). Un test de continuité entre la masse sur le PCB (par exemple un shield ou une pièce métallique importante) et chaque point de contact permet de trouver celui qui est directement relié à la masse grâce au bip sonore continue émis par le multimètre.
  3. L'étape suivante consiste à identifier la broche Tx car celle-ci est facile à identifier lorsque des données sont émises. Pour cela, la séquence de démarrage est appropriée car elle génère un flux continu de données sur le port console. Une mesure de l’intensité avec le multimètre permet de détecter des fluctuations du voltage lors du boot, oscillant entre 0 et 3,6 Volts dans notre cas. Cette fluctuation est provoquée par la transmission des données.
  4. Il ne reste plus qu’à identifier Vcc et Rx. Lorsque les paramètres de la connexion UART sont identifiés grâce à Tx, (cf. pragraphe suivant) il suffit d’émettre des caractères vers l’un de ces contacts et vérifier l’écho en retour pour identifier la broche Rx.

L'adaptateur USB série

Pour se connecter au port série du PCB, un adaptateur USB série (FTDI 232) est nécessaire. Un modèle comme celui ci-dessous supporte 3,3V ou 5V et coûte quelques euros.
Adaptateur USB série FTDI
Adaptateur USB série
L'adaptateur série USB se connecte en USB sur l’ordinateur du pentesteur et sur les contacts GND, Tx et Rx du PCB.

Schéma de raccordement série
Schéma de raccordement d'un adaptateur USB série
Strap flexible grip-fil (pince)
Pince grip-fil
Les broches transmission et réception doivent être croisées entre l’adaptateur USB série et les ports sur le PCB du système analysé. Classiquement, les points de contact sont soit des vias destinés à recevoir des broches, soit des headers (broches) déjà présents. Dans le cas étudié, des points de soudure sur des vias étaient présents, mais l'accès au verso de la carte était inexploitable. Il a fallu utiliser des câbles grip-fil (strap flexible muni de pince) pour connecter l'adaptateur série.
Accès port série en action avec grip-fil sur soudure
Accès au port série avec câbles grip-fil

Le programme pilotant la liaison série

L’utilitaire utilisé sur le PC sous Linux de l'auditeur pour établir la connexion avec l’adaptateur USB série est minicom, qui utilise le pseudo périphérique /dev/ttyUSB0 pour communiquer.

$ sudo minicom –o –D /dev/ttyUSB0
Bienvenue avec minicom 2.6.1

OPTIONS: I18n
Compilé le Feb 11 2012, 18:12:55.
Port /dev/ttyUSB0

Tapez CTRL-A Z pour voir l'aide concernant les touches spéciales



Après quelques tentatives de connexion pour déterminer les caractéristiques de la communication, le port console de la carte s’avère utiliser une vitesse de transmission à 115 200 bauds, 8-bits de données, aucune parité et un bit de stop (en abrégé 115200 8N1). Le contrôle de flux matériel doit être désactivé.

L’étape suivante consiste à démarrer le modem routeur lorsque la connexion au port série via minicom est établie. Les séquences de démarrage suivantes s'affichent :
BCM3384A8 0002A080 memsys2g800x16 2p5bld1

SHMOO VER 1.17
MCB

PKID 20131007  050B6000  050B0000  04B4103E  00001C00 

S300001B7 
000011A0 
+00000004  >0000011A 
t00000020  0000003C 
@000000B4  ^0000001B 

RDEN W0 00000020  00000006  00000000 


RDLY W0 00000003 

RDQS W0
[...]
Sync: 0
MemSize:            256 M
Chip ID:     BCM3384Z-B0

BootLoader Version: 2.5.0beta1 Rev01 Release spiboot dual-flash memsys2g800x16 avs linux
Build Date: Sep  9 2014
Build Time: 19:36:18
SPI flash ID 0x010219, size 32MB, block size 64KB, write buffer 256, flags 0x2
Cust key size 128

Signature/PID: d06f


Image 1 Program Header:
   Signature: d06f
     Control: 0005
   Major Rev: 0003
   Minor Rev: 0000
  Build Time: 2015/1/13 08:19:06 Z
 File Length: 5024538 bytes
Load Address: 80004000
    Filename: EMTA62-1_NCC_1.2.3-20150113.bin
         HCS: c6fd
         CRC: 51a22add

Found image 1 at offset 30000

Enter '1', '2', or 'p' within 2 seconds or take default...

Conclusion

Voilà un accès au port série d'un modem routeur réussi. La suite est confidentielle car elle mettrait en péril le produit audité et ne respecterait pas la déontologie du ethical hacking. Sachez néanmoins qu’il a été possible de consulter le mapping de la mémoire non volatile, permettant ainsi de flasher les partitions contenant le firmware (bootloader, kernel et application) et d'extraire la clef indivuduelle du périphérique.

3 commentaires:

  1. Génial!!!
    Enfin un article qui détaille le mode opératoire pour trouver un port console sur une carte.

    RépondreSupprimer
  2. Merci pour l'article, j'ai pu trouver le port série sur un modem du même genre que le votre cependant le port RX semble être inactif ... !

    RépondreSupprimer
    Réponses
    1. Sur certains équipements, le port série est unidirectionnel, il envoie les messages systèmes sur le port TX mais ne reçoit rien.

      Supprimer