a backdoor in the firmware

Il est toujours important de se tenir au courant des recherches en cours dans le domaine de la sécurité et l’un des endroits parfait pour y parvenir est la conférence du SANS Institute. Tous les sujets dont on entend parler dans  les différentes mailling lists nous sont présentés par différents chercheurs avec à la clef de nombreuses démonstrations. Mais de temps en temps, certains sujets impressionnent plus que d’autres et c’est précisément l’objet de ce post. Je viens d’assister à la présentation (en exclusivité mondiale s’il vous plait) des travaux d’Arrigo Triulzi intitulés « A backdoor in the firmware ».

Je pense que l’intitulé de la conférence vous donne une bonne idée du sujet couvert mais le plus impressionnant reste à venir. Arrigo a mis au point un firmware « hacké » pour carte réseau Broadcom (mais on peut imaginer le même scénario sur la plupart des cartes réseau du marché) qui lui permet d’exécuter un certain nombre d’actions lorsque la carte réseau reçoit un « magic packet » avec le type IP 0xbeef (quel humour).Cette carte réseau étant connectée sur le bus PCI de la machine, elle a la possibilité d’accéder à la mémoire de la machine, de communiquer avec d’autres périphériques, … sans que le système d’exploitation et donc un quelconque anti-virus puisse s’en apercevoir. La belle affaire me direz-vous, une carte réseau a des capacités de calcul et de mémoire très limitées et ne peut donc pas faire grand-chose. Mais Arrigo a poussé le concept beaucoup plus loin puisque grâce à Vista et son bureau « Aéro » qui nécessite que la moindre machine portable ait maintenant un processeur graphique (GPU) digne d’une formule 1, il a trouvé une autre source de puissance de calcul et de mémoire qui échappe au contrôle du système d’exploitation: la carte graphique. Il a donc « hacké » cette fois le firmware d’une carte graphique pour lui fournir la puissance et la mémoire dont il avait besoin.

Je pense que vous commencez à comprendre le scénario :

  1. l’attaquant envoie un « magic packet » à la carte réseau de la machine infectée
  2. à la réception de ce paquet, celle-ci communique avec la carté graphique via le bus PCI
  3. la carte graphique lance une sorte de mini serveur SSH et communique via la carte réseau infectée
  4. l’attaquant prend ainsi le contrôle de la machine distante

Le mini serveur SSH en question est déjà fonctionnel et s’appelle « nicssh ». Il permet de faire des choses diverses et variées comme rebooter la machine à distance, lire la mémoire de la machine (qui contient le mot de passe de votre volume TrueCrypt chiffré par exemple), … et tout ça sans passer par le CPU de la machine et donc de manière complètement indétectable. Autant dire que les choses commencent à faire peur…

Se pose maintenant le problème de l’infection de la machine cible. Pour être capable de prendre le contrôle de cette machine, il faut être capable de mettre à jour le firmware de la machine en question. Connaissant la propension de nombreux utilisateurs à cliquer sur tous les mails qu’ils reçoivent, je pense que ce n’est pas un réel problème. Cependant, sur tout système d’exploitation moderne qui se respecte, les comptes utilisateurs ont de moins en moins de droits alors qu’installer un nouveau firmware nécessite des droits administrateurs. Le problème est donc réglé me direz-vous ?

Et bien non, c’était sans compter sur la ténacité d’Arrigo qui a découvert une autre porte d’entrée. Afin d’optimiser les temps de production des machines et des composants sur les chaines de production, les constructeurs de carte réseau ont ajouté à leurs chipset une fonctionnalité très intéressante. Lorsqu’une mise à jour du firmware d’une carte réseau est annoncée par son constructeur, les fabricants de PC se doivent de livrer des machines globalement à jour. Ainsi, pour éviter aux fabricants de démarrer les 500 machines déjà produites avec un lecteur de disquette connecté pour mettre à jour le firmware de la carte réseau, les constructeurs de chipsets offrent la possibilité de le faire par le port Ethernet. Pour que la carte se mette à jour, il suffit donc lui envoyer un paquet particulier qui est un paquet UDP et donc routable (cette attaque ne se cantonne ainsi pas au LAN de l’entreprise)!

La boucle est donc bouclée puisque nous avons maintenant un « ultimate rootkit » capable de s’installer à distance sur une machine et de s’exécuter sur celle-ci sans utiliser à un seul instant le CPU de la machine et donc en fermant toute possibilité pour le système d’exploitation de le détecter. La chose fait froid dans le dos.

Arrigo ne s’est pas arrêté là et a imaginé une autre attaque elle aussi fort sympathique: actuellement, la majorité du marché de la sécurité est constituée d’appliances qui sont pour la plupart des PC utilisés en temps qu’IDS/IPS ou en tant que firewall. Dans ce contexte, une attaque possible serait d’envoyer le paquet de mise à jour à la carte réseau et d’upgrader son firmware à distance. Ceci étant fait et partant du principe que la machine a au moins deux cartes réseau, cette première carte infectée envoie sur le bus PCI le paquet de mise à jour de la seconde carte qui se met elle aussi à jour avec un firmware infecté. L’attaquant contrôlant alors les deux cartes réseau, il lui est possible de faire passer des paquets d’une carte à l’autre via le bus PCI en évitant le logiciel de filtrage installé sur la machine, que ce soit un firewall ou un IPS. La encore, on frise le cauchemar.

La seule bonne nouvelle dans tout ça est que bien évidemment, le proof of concept qui a été développé est très dépendant du hardware présent sur la machine attaquée. Il faut donc développer un firmware par modèle de carte réseau attaqué. Cependant, à bien y réfléchir, les constructeurs de chipsets réseau se comptent sur les doigts d’une main.

Je ne sais pas pour vous, mais moi j’ai maintenant l’œil rivé sur la LED d’activité de la carte réseau de mon portable…

 

Nicolas Jacquey
Brice Renaud

nsp