mercredi 24 novembre 2010

All your NIC belong to us

Je viens de lire le compte rendu d'une excellente présentation faite par le labo SOGETI/ESEC. Cette présentation concerne l'instrumentation à des fins malicieuses d'une carte réseau: Hack.lu-nicreverse_slides.pdf.

L'idée est simple et lumineuse: dans une carte réseau, nous avons de l'électronique, dit autrement un CPU et de la mémoire, est il possible de l'instrumenter pour lui faire réaliser des actions arbitraires? La réponse est oui, ce qui est préoccupant. Ce travail est bien évidemment à rapprocher de celui-ci: "Can you still trust your network card?", de Y-A Perez, L. Duflot, CanSecWest 2010.

La carte visée est une Broadcam Ethernet Netxtreme, présente dans de nombreuses machines de bureaux et portables. Sont présents un (ou deux) CPU Mips, une EEPROM, de la SDRAM et
des registres de configuration. Étant reprogrammable, c'est bien évidemment l'EEPROM qui sert à accueillir le code malveillant. 48ko sont disponibles partageant le code, la stack et le buffer de trames réseaux. L'auteur va donc reprogrammer un firmware "custom" pour cette carte.

Pour un attaquant, la situation est idéale:
  • Le code ne sera jamais ausculté par un antivirus/ antirootkit
  • Le code peut survivre à un reboot
  • Le code peut lire et/ou modifier tout le trafic de et à destination de l'hôte
  • Le code peut lancer un serveur interagissant avec l'attaquant (lire NICssh, papier très intéressant également, ne manquez pas la bibilo)
  • Le code est sur le bus PCI. Comme on le sait, qui dit bus PCI dit accès total et inconsidéré à la mémoire (et donc compromission de l'OS hôte en vue)
  • Aucune confiance ne peut être donnée à un firewall qui ausculterait les trames. En effet elles peuvent passer d'une carte réseau à l'autre sans jamais être vues par l'OS (Pensez au Jedi trick de NICssh!)
  • Aucune contremesure proposée par l'auteur du papier.
Néanmoins, tout n'est pas encore tout à fait terminé: Rootkit (still in development), et quelques interrogations demeurent.
  • Pour les capacités rootkits, c'est une évidence. Mais si le rootkit veut interagir avec le système hôte, alors un antirootkit/antivirus pourrait le détecter.
  • Pour les accès RAM via le bus PCI, il faut qu'aucun mécanisme d'IOMMU ne soit disponible. Ce point n'est pas abordé dans la présentation.
  • Pour les capacités de serveur permettant à un attaquant distant de se connecter, je veux bien croire que les programmeurs font des miracles avec 48ko, mais l'auteur de NICssh a du mettre à contribution le GPU et la RAM de la carte graphique pour parvenir à ses fins.
  • L'interception (et la forge) de paquets est une réalité. Toutefois, j'ose espérer que la majorité des personnes utilisent des protocoles chiffrés. La carte ne verra donc que du chiffré. Ceci permet à l'attaquant de faire des DoS, mais pas de compromettre la confidentialité des données (bien entendu, l'hôte doit avoir le mécanisme de IOMMU sinon la carte n'a qu'a aller lire la donnée en clair dans la RAM.)
Cette présentation a bien évidemment ramené à mon bon souvenir Qubes OS de Invisible Things Labs. Dans les specs de cet OS, la carte réseau est d'emblée considérée comme compromise ce qui semble être définitivement une bonne idée.

Pour l'historique, il a aussi existé un rootkit de clavier Mac (toujours le même principe, on a un firmware, un CPU et de la mémoire), NICssh utilise le GPU de la carte graphique, un autre emplacement de rootkit pourrait être le firmware d'un disque dur :-) et ksplice avait montré comment une carte PCI peut modifier le BIOS d'une machine et exécuter du code pendant le boot. La sécurité matérielle a encore des beaux jours devant elle.

Comment bâtir un schéma de sécurité sur une machine si le matériel n'est pas de confiance? (Non, je ne pense pas au TPM).

EDIT 30/11/2010:
Je suis allé directement poser la question sur le blog de l'auteur concernant l'IOMMU.
Sa réponse est disponible ici. Il fournit de plus un très bon lien vers le blog d'invisible things labs concernant les problématiques de cartes réseaux trojanisées.