SSTIC 2010 - Jeudi matin : 3ème conf
Quelques éléments en matière de sécurité des cartes réseau
par la team ANSSI de Loic Duflot
Les cartes réseau sont de plus en plus complexes, capables de gérer des cartes réseau virtuelles etc… et contiennent des processeurs indépendants et des firmwares plutôt riches avec des serveurs web embarqués. Bref une machine dans la machine 🙂
La carte réseau prend ses trames physique et les transforme en trames logiques dans la mémoire de la machine au travers d’un accès DMA. L’architecture interne de la carte est particulièrement complexe : elle contient un processeur MIPS dont les usages sont indéfinis (à accès à tout sur la carte) et qui possède son propre bus indépendant du bus PCI (ce qui permet d’avoir un serveur web sur une carte réseau).
Mon autre voisin me signale que la présentation à déjà été effectuée à CanSecWest.
La carte réseau peut communiquer avec l’exterieur à l’aide du protocole ASF pour pouvoir communiquer l’état de la machine sur le réseau (bios HS, DD naze etc…). On peut ainsi demander à la machine son état au travers de ce protocole.
Coté sécurité, la V1 n’était pas sécurisé, aucun contrôle, vous pouviez ainsi redémarrer arbitrairement n’importe quel machine utilisant ce type de carte sur le lien local. Seule la V2 du protocole tourne sur les cartes et utilise le protocole RMCP, protocole avec une crypto symétrique mal implémentée (comme toujours, même dans le challenge du sstic). Bien sûr les piles réseau ne sont pas toutes bien implémentées et parfois crashent quand les paquets sont trop grands o/.
Forcément l’analyse du bug ne fut pas simple, il leur a fallu éplucher la doc Broadcom pour comprendre le fonctionnement de la carte, et utiliser le processeur MIPS pour débugger la carte réseau. Après on a une petite présentation du debugger et du comportement de la carte lorsqu’elle reçoit un paquet malformé (le ping of death version Broadcom). Un démontage/re-montage de la carte permet de tout réinitialiser.
Pour exploiter le BoF, la taille du champ écrasé étant limité, ils ont utilisé les buffers de la carte réseau pour stocker des trames ethernet avec le code d’exploitation. L’exploit se présente sous la forme d’un stager qui va chercher le code à executer dans le buffer de la carte. En jouant sur cette logique il est possible de re-écrire le firmware de la carte et donc de la transformer en backdoor.
Et hop un buffer overflow qui permet de passer root sur n’importe quelle machine et n’importe quel OS en remote… Même si les fonctions d’administration et de reboot à distance sont désactivés sur la carte, comme elle traite malgré tout les trames ASF, elle reste vulnérable, et donc il est possible de déclencher la fonction malgré tout (mais la démo n’a pas fonctionné :/).
Via le DMA il est possible de modifer la mémoire de l’hôte en s’aidant de code que l’ont fait fonctionner sur la carte au travers du BoF (ça va, vous suivez ?). En suite le noyau linux est modifié et la backdoor est activée au travers d’un paquet ICMP magique. Et pour la peine la démo fonctionne.
Les contremesures : désactiver ASF et pas seulement dans le bios, ne pas laisser une carte utilisant ASF directement connecté à internet, mettre à jour le firmware via une MàJ du driver Broadcom.
Le gros problème c’est que beaucoup de matériel contient du code et que ce code n’est pas conçu par des spécialistes de la sécurité. Pour la suite allez donc ici.