Introduction
Dans les systèmes Linux et basés sur Unix, les permissions de fichiers sont un aspect fondamental de la sécurité. Un type de permission spécial est le bit SUID (Set Owner User ID). Lorsqu'un fichier binaire possède le bit SUID, il s'exécute avec les privilèges du propriétaire du fichier, plutôt qu'avec ceux de l'utilisateur qui l'a lancé.
Bien que cela soit nécessaire pour certaines fonctions système légitimes (comme la commande passwd, qui nécessite un accès root pour mettre à jour votre mot de passe), cela devient un risque de sécurité majeur en cas de mauvaise configuration. Si un administrateur système définit accidentellement le bit SUID sur un utilitaire standard comme find, vim ou bash, un attaquant peut tirer parti de ces outils pour exécuter des commandes en tant qu'utilisateur root, menant à une compromission complète du système, appelée élévation de privilèges.
Ce qui rend le SUID dangereux, c'est qu'il modifie le contexte de privilège de l'exécution du programme lui-même. Si le programme peut ensuite lancer d'autres commandes ou des shells, ce privilège peut se propager vers l'extérieur.
Dans ce laboratoire, vous vous mettrez dans la peau d'un chercheur en sécurité. Vous analyserez un système de fichiers Linux pour localiser les binaires avec le bit SUID activé, identifierez une mauvaise configuration vulnérable et utiliserez les techniques du célèbre projet GTFOBins pour élever vos privilèges jusqu'au niveau root.
Rechercher des binaires SUID (find)
Dans cette étape, vous apprendrez à rechercher sur le système de fichiers Linux les binaires ayant le bit de permission SUID activé.
Pour trouver ces fichiers, nous utilisons la commande intégrée find. La commande find est extrêmement puissante et nous permet de rechercher des fichiers en fonction de leurs permissions spécifiques. Nous rechercherons des fichiers à partir du répertoire racine / qui ont le bit SUID (représenté par la valeur octale 4000) activé.
L'énumération des fichiers SUID est une habitude standard en matière d'élévation de privilèges, car elle révèle rapidement les programmes qui s'exécutent avec des privilèges élevés pour le compte d'utilisateurs ordinaires.
Exécutez la commande suivante dans votre terminal pour rechercher les binaires SUID et enregistrer les résultats dans un fichier texte nommé suid_results.txt dans votre répertoire de projet :
find / -perm -4000 -type f 2> /dev/null > ~/project/suid_results.txt
Analysons cette commande pour que vous compreniez exactement ce qu'elle fait. Le / indique à la commande de commencer la recherche depuis tout en haut du système de fichiers. L'option -perm -4000 recherche spécifiquement les fichiers avec le bit SUID activé. L'option -type f garantit que nous ne recherchons que des fichiers réguliers, et non des répertoires. Enfin, 2>/dev/null est une astuce pratique qui prend tous les messages d'erreur "Permission denied" et les envoie dans un trou noir (/dev/null), gardant ainsi notre sortie propre. Le symbole > redirige la sortie propre vers notre fichier texte.
Maintenant, visualisons le contenu du fichier que vous venez de créer pour voir quels binaires ont le bit SUID activé :
cat ~/project/suid_results.txt
Vous verrez une sortie similaire à celle-ci :
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/bin/chfn
/usr/bin/find
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/mount
/usr/bin/umount
Examinez attentivement la liste. Beaucoup d'entre eux, comme passwd et su, sont censés avoir le bit SUID activé. Cependant, l'un de ces binaires semble très inhabituel et potentiellement dangereux.
Identifier les binaires exploitables (GTFOBins)
Dans cette étape, vous analyserez les résultats de votre recherche et identifierez quel binaire peut être exploité.
En regardant la sortie de l'étape précédente, vous remarquerez peut-être /usr/bin/find dans la liste. La commande find est un utilitaire standard utilisé pour rechercher des fichiers, et elle n'a absolument pas besoin de privilèges root pour fonctionner normalement. Le fait qu'elle ait le bit SUID activé est une erreur de configuration de sécurité majeure.
Cette évaluation est importante. Tous les binaires SUID ne sont pas exploitables, mais les plus inhabituels méritent une attention particulière car ils peuvent offrir des capacités que leurs concepteurs n'avaient jamais prévu d'exposer avec des droits élevés.
Pour comprendre comment nous pouvons exploiter cela, les professionnels de la sécurité utilisent une ressource appelée GTFOBins. GTFOBins est une liste organisée de binaires Unix qui peuvent être utilisés pour contourner les restrictions de sécurité locales dans des systèmes mal configurés. Si vous visitiez le site web de GTFOBins et recherchiez "find", vous découvririez que find possède une fonctionnalité qui lui permet d'exécuter d'autres commandes.
Comme notre binaire find a le bit SUID activé, toute commande qu'il exécute sera lancée avec les privilèges du propriétaire du binaire (qui est root).
Pour confirmer votre découverte, créez un fichier nommé vulnerable_binary.txt et écrivez-y le nom du binaire exploitable. Exécutez la commande suivante :
echo "find" > ~/project/vulnerable_binary.txt
Vous pouvez vérifier le contenu du fichier en l'affichant dans le terminal :
cat ~/project/vulnerable_binary.txt
La sortie devrait simplement être :
find
En identifiant cette mauvaise configuration, vous avez trouvé le point d'entrée pour votre attaque d'élévation de privilèges.
Préparer la commande d'exploitation
Dans cette étape, vous préparerez la charge utile (payload) spécifique nécessaire pour exploiter la mauvaise configuration SUID sur le binaire find.
Selon GTFOBins, la commande find possède un paramètre -exec. Ce paramètre est normalement utilisé pour exécuter une action spécifique sur chaque fichier que find localise. Cependant, les attaquants peuvent abuser de ce paramètre pour exécuter un shell système (/bin/sh).
La charge utile d'exploitation standard ressemble à ceci : find . -exec /bin/sh -p \; -quit.
Analysons pourquoi cette charge utile fonctionne. Le . indique à find de commencer à chercher dans le répertoire actuel. L'option -exec lui dit d'exécuter la commande suivante. Nous fournissons /bin/sh pour lancer un shell. L'option -p est cruciale ; elle indique au shell de conserver les privilèges avec lesquels il a été lancé (dans ce cas, les privilèges root accordés par le bit SUID). Le \; signifie la fin de la commande que nous voulons exécuter. Enfin, -quit indique à find d'arrêter la recherche immédiatement après avoir exécuté la commande une fois, plutôt que de la répéter pour chaque fichier du répertoire.
Pour préparer l'exécution finale, enregistrons cette charge utile d'exploitation dans un fichier de script shell nommé exploit.sh. Exécutez la commande suivante :
echo 'find . -exec /bin/sh -p \; -quit' > ~/project/exploit.sh
Vous pouvez visualiser le script que vous venez de créer pour vous assurer que la charge utile est correcte :
cat ~/project/exploit.sh
La sortie affichera votre charge utile conçue :
find . -exec /bin/sh -p \; -quit
Vous disposez maintenant de la commande exacte requise pour piéger le binaire find et obtenir un shell root.
Exécuter l'élévation de privilèges
Dans cette dernière étape, vous exécuterez l'exploit et prouverez que vous avez réussi à élever vos privilèges jusqu'à l'utilisateur root.
Au lieu de passer directement dans un shell interactif (ce qui peut être délicat à vérifier dans un environnement de laboratoire automatisé), nous modifierons légèrement notre charge utile pour exécuter une seule commande en tant que root et enregistrer la sortie. Nous utiliserons la commande whoami, qui affiche le nom d'utilisateur de l'utilisateur effectif actuel.
Exécutez la commande suivante pour exécuter whoami via le binaire vulnérable find et rediriger la sortie vers un fichier nommé root_proof.txt :
/usr/bin/find . -exec whoami \; -quit > ~/project/root_proof.txt
Notez que nous avons utilisé le chemin absolu /usr/bin/find pour nous assurer que nous exécutons le binaire spécifique que nous avons identifié précédemment. La commande find s'exécute, déclenche l'option -exec, exécute whoami avec les privilèges root (grâce au bit SUID) et enregistre le résultat.
Maintenant, vérifions le contenu de votre fichier de preuve pour voir si l'exploit a réussi :
cat ~/project/root_proof.txt
Si l'exploit a fonctionné correctement, la sortie sera :
root
Félicitations ! Vous avez réussi à exploiter un binaire SUID mal configuré pour exécuter des commandes en tant qu'utilisateur root.
Si vous souhaitez faire l'expérience d'obtenir un véritable shell root interactif, vous pouvez exécuter la charge utile que vous avez conçue à l'étape précédente directement dans votre terminal :
/usr/bin/find . -exec /bin/sh -p \; -quit
Votre invite de commande changera pour un symbole #, indiquant que vous opérez désormais en tant qu'utilisateur root. Vous pouvez taper exit pour quitter le shell root et revenir à votre invite d'utilisateur normal.
Résumé
Dans ce laboratoire, vous avez appris avec succès comment identifier et exploiter les mauvaises configurations SUID sur un système Linux. Vous avez commencé par utiliser la commande find pour rechercher des binaires avec le bit de permission SUID activé. Après avoir identifié /usr/bin/find comme une anomalie, vous avez appris comment des ressources comme GTFOBins peuvent être utilisées pour découvrir des charges utiles d'exploitation. Enfin, vous avez conçu et exécuté une commande qui a détourné le paramètre -exec du binaire find, vous permettant d'exécuter des commandes avec les privilèges root.
Cet exercice souligne l'importance cruciale d'une gestion appropriée des permissions sous Linux. Les administrateurs système doivent régulièrement auditer les binaires SUID pour s'assurer que les utilitaires standard ne fournissent pas par inadvertance une voie vers l'élévation de privilèges.



