Catégories
conférences

SSTIC 2010 – Jeudi matin : 2ème conf

Analyse de l’efficacité du service d’IOMMU

On commence par un petit rappel des bases du DMA, puis sur ce qu’est une IOMMU. C’est un outil de contrôle des accès mémoire pour restreindre l’accès à certaines portion de la mémoire.
Et comme on pouvait s’y attendre, la présentation est techniquement riche 🙂 mais moins rapide que celle sur Virtdbg.

Le système Intel VT permet de gérer les accès DMA virtuel pour les transformer en requêtes DMA physique. Le contrôle de cet accès est effectué par la DRHU et l’IOMMU (ça va vous suivez ? parceque moi non :p).

Le gros des vecteurs d’attaque consistent à contourner ce mécanisme. Certaines attaques permettent de modifier les informations dans certaines tables de pages pour les faire pointer ailleurs, et ainsi modifier la destination de l’accès DMA, lui donnant accès à des portions normalement inaccessibles de la mémoire physique au travers du périphérique PCI.

On retrouve des problèmes de sécurité lié à des mécanismes de rétro-compatibilité PCI et PCI-Express, décidément le legacy ça fout toujours le bordel :).

L’attaque type consiste à utiliser cette manipulation pour accèder l’espace mémoire utilisé par un autre périphérique. En gros si vous branchez un iPod en firewire, il va pouvoir venir modifier l’espace mémoire DMA réservé à un autre périphérique (une carte réseau dans l’exemple). Ainsi il va pouvoir injecter des trames Ethernet depuis l’iPod malgré la protection contre les attaques DMA fournie par l’IOMMU (merci à mon voisin pour le petit coup de main, l’intervention est dense en informations et c’est pas toujours facile de suivre).

Pour les contremesures il faudrait utiliser le jeu d’instruction Intel VT-x et TXT pour gérer la confiance d’accès entre les périphériques (???). Perso, je vous conseille de gluer vos ports PCMCIA et Firewire 😀

Pour le reste, attendez la publication des actes sur le site du SSTIC.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *