Porte dérobée via l’écran d’accueil Windows
Divulgâchage : Pour vous montrer qu’un accès physique, c’est un accès administrateur… Voici un petit exemple de comment permettre de lancer un invite de commande à partir de l’écran d’accueil de Windows. On va monter la partition Windows dans un système Linux et ajouter une porte dérobée à l’écran d’accueil de Windows. Celle-ci nous fournira une invite de commande pour changer un mot de passe ou activer l’administrateur.
Un défaut souvent rencontré chez les informaticiens débutants dans l’analyse de risque, c’est de se focaliser sur les problèmes informatiques : Logiciels, systèmes et réseaux. Au détriment d’autres composantes pourtant essentiellement évidentes comme l’accès physique aux machines.
Avec un tout petit peu d’expérience, tous les consultants et experts vous diront la même chose :
Un attaquant ayant un accès physique est de facto administrateur de la machine.
Un expert cyber
Mais entre le dire et ressentir vraiment cette implication, il y a encore de la marge.
Aujourd’hui, nous allons donc tenter de la combler en vous montrant un exemple de ce qu’il est possible de faire, lorsque l’on dispose d’un accès physique à un ordinateur sous Windows 10.
Monter le disque dur
Puisqu’on part du principe que vous avez un accès physique à la
machine, et que vous êtes plutôt pressé, on va passer par un
Live CD. N’importe lequel dans notre cas puisque nous n’utiliserons que
des outils de bases (fdisk
, mount
et
cp
).
Comme vous allez le voir, cette technique marche à l’identique si vous prenez le temps de débrancher le disque pour le brancher sur une machine spécifique. Dans le cadre d’expertises, nous l’utilisons parfois sur des clones de disques.
Repérer le disque
Pour monter le bon disque, il faut d’abord savoir à quel fichier de
périphérique il correspond. Pour ça, on utilise fdisk
.
sudo fdisk -l
Un disque dur SATA ou SSD sera dans dev/sd…
, un disque
IDE /dev/hd…
. Pour être sûr que c’est le bon, vous pouvez
vérifiez le nom du disque (i.e. Windows en toutes lettres), la
taille ou toute autre information utile.
Une fois que vous avez le disque, il faut trouver quelle est la partition principale. Pour ça, servez vous du système de fichier (i.e. NTFS) et de la taille. Les petites partitions (500 Mo à 1Go) ne nous intéressent pas. Mis à part cas rarissime, l’espace global ne sera réparti que sur une seule (c’est la bonne) ou deux (la première est alors souvent la bonne, la deuxième servant pour les fichiers persos).
Avec un disque de 50 Go et via un Live CD, voici ce que me retourne
fdisk
.sudo fdisk -l [...] Disque /dev/sda : 50GiB, 53687091200 octets, 104857600 secteurs Unités : secteur de 1 x 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0xf20716a0 Périphérique Amorçage Début Fin Secteurs Taille Id Type /dev/sda1 * 2048 1026047 1024000 500M 7 HPFS/NTFS/exFAT /dev/sda2 1026048 103149588 102123541 48,7G 7 HPFS/NTFS/exFAT /dev/sda3 103151616 104853503 1701888 831M 27 WinRE masqué
Le disque
/dev/sda
est un bon candidat. Sa taille correspond (50GiB) et son nom est évocateur (dos). Sur ses trois partitions, deux sont trop petites, c’est donc/dev/sda2
qui nous intéresse.
Monter le disque
Pour faire les choses proprement lorsqu’on monte un disque, il faut
généralement créer un répertoire pour servir de point de montage. Dans
un soucis de propreté et d’automatisation, on utilise généralement le
fichier fstab
…
Ici, on va aller au plus rapide et monter directement le disque dans un répertoire existant compatible (vide et ne servant pas à quelque chose d’utile). Si vous hésitez, vous pouvez aussi créer votre propre répertoire.
sudo mount <peripherique> <repertoire>
Pour revenir à notre exemple du disque de 50GiB et notre Ubuntu, on va directement utiliser
/media
.sudo mount /dev/sda2 /media
Problèmes courants
Dans l’idéal, les lignes précédentes marchent toute seules sans problèmes. Mais comme le monde n’est pas toujours juste, voici quelques problèmes courants et leur solution.
Hibernation
Si Windows n’était pas éteint mais en veille lorsque vous avez démarré sur le live CD, i.e. il est en hibernation. Conséquence : Linux refusera de monter votre disque en Lecture/Ecriture. Vous obtiendrez alors le message d’erreur suivant :
The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
Falling back to read-only mount because the NTFS partition is in an
unsafe state. Please resume and shutdown Windows fully (no hibernation
or fast restarting.)
Pour faire simple, vous pouvez arrêter votre live CD, redémarrer sous Windows et l’éteindre proprement. Le système étant alors dans un bon état, vous pourrez monter le disque.
Sinon, vous pouvez aussi utiliser ntfsfix
sur le
périphérique pour qu’il corrige lui-même les problèmes. Il faudra
démonter la partition avant mais à part ça, c’est facile à
utiliser :
sudo ntfsfix <peripherique>
Enfin, malgré tout ce que vous pourriez lire dans les pages de man,
l’option remove_hiberfile
de mount
ne
marche pas avec Windows 10. Vous êtes prévenu.
Unsupported reparse point
Depuis la mise à jour 14393 de Windows 10, le pilote NTFS libre NTFS-3G utilisé pour monter ces partitions n’est plus compatible et a un bug. Au lieu de permettre d’accéder à tous les fichiers de la partition Windows, certains fichiers sont en erreur (indiquée par «unsupported reparse point»).
ls -l /media/Windows/System32/cmd.exe
ls -l Windows/System32/cmd.exe
lrwxrwxrwx 2 .. .. 23 Aug 15 12:21 Windows/System32/cmd.exe -> unsupported reparse point
Vous devrez alors remplacer vos drivers par une version à jour.
Installer la porte dérobée
Pour faire simple, on va remplacer un des exécutables utilisables via l’écran d’accueil par l’invite de commande. On a le choix.
Les options d’ergonomie qui lancent le binaire
C:\Windows\System32\Utilman.exe
via l’icone suivante (une chaise roulante ?).
La loupe, pour être un peu plus furtif, laissez les
options d’ergonomies inchangées et préférez changer la loupe (qui se
lance via les options d’ergonomies). Son binaire est
C:\Windows\System32\Magnify.exe
.
Par précaution, il peut être intéressant de sauvegarder les binaires originaux en les copiant ailleurs (utile pour restaurer en cas de besoin).
Ensuite, il s’agit juste de remplacer le binaire que vous avez choisi par celui de l’invite de commande.
cp \
<pointdemontage>/Windows/System32/cmd.exe \
<pointdemontage>/Windows/System32/Utilman.exe
Et voilà ! Dorénavant, à partir de l’écran d’accueil, en cliquant sur les options d’ergonomie, vous obtiendrez une invite de commande.
Et ensuite ?
Vous pourriez vous dire qu’une invite de commande, ça n’est pas très utile. Voici donc quelques petites idées de choses à faire pour aller plus loin.
Modifier le mot de passe
Tout au moins, ceux des utilisateurs locaux. Pour usurper leurs sessions ou les empêcher de se connecter. Si le poste fait partie d’un domaine, il y a même des chances qu’un compte local existe mais ne soit jamais utilisé (autant de gagné pour la furtivité). Pour ça, une ligne de commande on ne peut plus simple :
net user <utilisateur> *
Activer l’administrateur local
Car par défaut, Windows crée un utilisateur administrateur mais par sécurité le désactivé. En le réactivant, vous pourrez l’utiliser pour vos connexions ultérieures. La commande n’est pas bien plus compliquée…
net user administrateur /active:yes
Dans l’écran d’accueil, vous pourrez alors utiliser ce compte pour vous connecter…
Tout remettre en état
Vous avez modifié votre Windows, vous avez un compte administrateur actif et vous lui avez changé son mot de passe. La porte dérobée ne vous sert plus vraiment et vous pourriez la supprimer.
Via Windows, remplacer le binaire par sa sauvegarde est pénible parce qu’il y a des protections (trusted installer) avec lesquelles il faut jouer. C’est possible, mais pénible.
Notre conseil, repassez sous linux, remonter le disque et faite la copie comme précédemment.
Et après ?
Si vous pensez que mettre un mot de passe sur votre BIOS pour interdire le démarrage sur un autre système, vous faites fausse route car pour peu que votre attaquant aient un peu de temps, il peut très bien ouvrir la tour et ensuite, au choix :
- Monter le disque sur sa propre machine,
- Retirer le cavalier CLEAR CMOS qui réinitialisera le BIOS.
Les deux seules solutions pour éviter qu’un attaquant n’accède à vos systèmes sont donc de contrôler l’accès et chiffrer le contenu.
- Contrôle d’accès au bâtiment ou à la pièce dans laquelle se trouve le poste, pour que seul le personnel autorisé puisse y accéder. Clés, badges, digicodes, reconnaissance biologique,… Par contre, inenvisageable en itinérance.
- Chiffrer le disque pour que, même avec un accès physique, il ne puisse être ni lu ni modifié. Il faudra alors activer Bitlocker s’il est disponible (i.e. Windows 10 professionnelle) ou utiliser des outils tiers (e.g. TrueCrypt ou VeraCrypt).
Notez que ces mesures ne rendent pas le système inexploitable (il y a toujours une petite porte quelque part) mais, en élevant le niveau, vous éliminez de plus en plus d’attaquants.
Personnellement, j’utilise ces portes dérobées sur des copies de disques dur effectuées à partir de scellés judiciaires, car il est rare que je dispose du mot de passe du mis en examen. Je suis donc bien contente que le chiffrement de disque dur ne soit pas un automatisme.