Les badges d’accès « HID ProxII » sont utilisés pour l'accès à des bâtiments et à des zones restreintes. Ils fonctionnent en répondant par un signal RFID basse fréquence, à une requête émise par un lecteur. Le lecteur traite alors la réponse, pour évaluer si le numéro du badge est présent ou pas, dans sa liste de badges autorisés à accéder à la zone protégée. Les attaques par brute-force, consistant à essayer tous les numéros de badge possibles, sont parmi les plus couramment utilisées pour compromettre la sécurité de ces systèmes. 

 

Notre lead pentester a implémenté ce type d’attaque en développant un code pour le Proxmark3. C’est ce code, correspondant à un mode Standalone nommé «Prox2Brute», que nous allons examiner dans l’article.

 

Dans un premier temps, la fonction « StandAloneMode() » est appelée afin de faire basculer le Proxmark3 dans le mode « standalone », pour pouvoir l’utiliser sans passer par le client sur ordinateur. Ensuite, le FPGA du Proxmark3 est initialisé de façon à pouvoir effectuer des opérations radio à basse fréquence, grâce à l’appel à la fonction «FpgaDownloadAndGo(FPGA_BITSTREAM_LF)».

 

Ensuite, entre les lignes 74 et 101, le code implémente la logique du brute-force en itérant sur des valeurs allant de CARDNUM_START (par default : 0x0000), jusqu’à CARDNUM_END (par default : 0xFFFF). 

Boucle de brute-force

 

Pour chaque itération, la boucle appelle la macro "WDT_HIT()", qui rafraîchit l’horloge (watchdog timer), puis le code génère le message de réponse, à renvoyer au lecteur, de la façon suivante :

Message à renvoyer

 
High correspond aux 32 bits de poids forts du message et a une valeur fixée par la norme (0x20). Et Low est construit comme suit :
 

Construction de « low » (32 bits de poids faibles du message)

 

Cardnum correspond au numéro du badge que l’on cherche, qui varie donc à chaque itération. Facility code est le code du bâtiment, qui est, d’après notre expérience généralement fixé à la valeur 2. 

Ce message est ensuite renvoyé au lecteur grâce à la fonction “CmdHIDsimTAGEx()". Cette fonction répond à une demande du lecteur, en simulant le comportement d’un badge d’accès « HID ProxII » grâce aux paramètres fournis.

Afin de lancer l'attaque, une fois le Proxmark3 flashé avec une image ayant le mode standalone « Prox2Brute » activé, il faut appuyer sur le bouton du Proxmark3 pendant un certain temps pour lancer le mode standalone, puis une fois que ce dernier est chargé (quand les LEDs arrêtes de clignoter), il faut rappuyer une fois (au moins 200 ms), pour lancer le « brute force ». Il est possible d’y mettre fin à tout moment en lui fournissant des commandes par USB (cf. lignes 59 et 77) ou en maintenant le bouton pendant plus d'une seconde (cf. ligne 80).

Le code utilise les LEDs du Proxmark3 pour donner une indication visuelle sur l’avancement de l’attaque (ligne 93-100).
 
Il est important de noter que l'utilisation de ce genre de code, sans l’autorisation explicite du propriétaire du système d’accès, est bien sûr illégale. Il ne doit donc être utilisé que dans un environnement de test ou dans le cadre d’un audit de sécurité.

En résumé, l'attaque par brute-force sur les badges « HID ProxII » est un moyen de compromettre la sécurité des systèmes d'accès basés sur ces badges. Elle n'est possible que grâce à la vulnérabilité des systèmes d'accès basés sur les badges « HID ProxII », qui ne disposent pas de mécanisme de protection efficace. En effet, le nombre de valeurs possibles est 65535 donc choisir aléatoirement les numéros de badges ne serait pas suffisant. Il est donc important de limiter aussi le nombre de lectures faites par le lecteur pour accéder à une zone protégée, afin de minimiser le risque de réussite d'une attaque par brute-force
 
Partager cet article