Récupérer le mot de passe d’un Mac avec un simple câble FireWire

Honnêtement, je n’y croyais pas trop. Je sais depuis un moment que le FireWire est une potentielle faille de sécurité, lié au fait qu’il est possible de lire la mémoire directement (accès DMA), mais je pensais naïvement qu’il fallait du matériel haut de gamme pour pouvoir effectuer ce genre d’attaque.

L'outil du hacker

En fait, non. Un simple câble FireWire et un Mac permettent de faire un dump de la mémoire d’un autre Mac et de récupérer le mot de passe d’ouverture de session. C’est totalement trivial et très rapide si vous avez un accès physique — comme pas mal de failles, certes —. J’ai testé cet après midi, c’est très efficace.

Concrètement, j’ai pris un vieux MacBook doté d’un port FireWire 400, un MacBook Pro doté d’un port FireWire 800 et un câble FireWire 400 (avec un adaptateur FW800).

J’ai relié les deux machines et lancé un petit script en python qui a fait un dump d’une partie de la mémoire du MacBook Pro (256 Mo). Avec un disque dur correct et du FireWire 400, ça prend moins de 10 secondes.

Marche à suivre :

Installer Xcode depuis le Mac App Store.
Télécharger quelques petits scripts Python (pyfw-20041111.tar.gz)
Installer ce qui est nécessaire avec une ligne :

sudo python setup.py install

Relier les deux machines et lancer une ligne de commande.

sudo python demo_dumpmem.py

Attendre quelques secondes que les données soient écrites.

Chercher le mot de passe (en clair) avec la commande suivante.

strings votre.memdump | grep --after-context=4 longname | grep --after-context=1 password

Et c’est tout. Dans mon cas, ça a fonctionné, ça m’a affiché le mot de passe. On peut visiblement monter la quantité de mémoire à récupérer (au moins jusqu’à 4 Go) et ça fonctionne normalement même si la machine cible est en veille, je teste demain pour vérifier.

Je trouve ça assez hallucinant qu’une faille de ce type soit encore utilisable en 2012, même s’il faut un accès physique à la machine. Pour information, le script Python date de… 2004.

Pour éviter le problème, le plus simple est encore de prendre une machine sans FireWire…