Master ISC- CSSE Programmation défensive
TD/TP 3
Mise en place d’un exploit « Race Condition »
1- Préambule
Vous trouverez sur moodle un document1 expliquant le principe d’une attaque basée sur une
Race Condition. Dans le cadre de ce TP, nous allons nous en inspirer pour mettre en place
notre exploit.
ATTENTION : avant de faire toute modification dans un fichier système faites en une
sauvegarde pour pouvoir tout remettre en ordre après vos tests !!!!
Vous risqueriez de perdre votre travail (voir plus) !
Nota bene- Nombre des questions de ce TP vont vous demander d’avoir des connaissances en
C, en shell… ne perdez pas de temps, et soyez efficace dans vos recherches si vous en avez
besoin. Les documents sur moodle peuvent vous apporter des informations utiles, voir
importantes.
2- Comprendre et exploiter une Race Condition
Une situation de compétition (ou race condition en anglais) est un défaut dans un système
caractérisé par un résultat différent selon l'ordre dans lequel agissent les acteurs du système.
Une telle situation peut survenir dès que plusieurs acteurs tentent d'accéder au même moment
à une ressource partagée (fichier, imprimante, etc.) et qu'au moins l'un d'entre eux est
susceptible de modifier son état.
Dans un programme informatique qui aurait besoin d'une authentification avant d'effectuer
une action, il s'écoule un laps de temps entre la réussite de l'authentification et l'action
proprement dite. C'est dans ce laps de temps qu'une situation de compétition ToC-ToU (Time
of Check - Time of Use) peut se produire.
Nous vous proposons dans ce TP de mettre en place une telle attaque, dans deux situations
différentes.
Cas d’étude 1 : Exploiter une race condition simple
Dans ce premier code, vous devez compléter les codes .c et .sh pour exploiter une race
condition.
Le principe est simple : insérer un délai dans le code RaceCond_exploit.c pour pouvoir
modifier un fichier passwd. Pour ce faire le script shell [Link] va lancer plusieurs fois les
programmes jusqu’à obtenir la modification voulue dans le fichier passwd.
- Modifiez le fichier RaceCond_exploit.c pour pouvoir exploiter la race condition.
- Expliquez en détails le fonctionnement de l’attaque.
1
Extrait d’un cours de Syracuse University (USA)
Master ISC- CSSE Programmation défensive
Cas d’étude 2 : Exploiter une race condition pour faire de l’élévation de privilège
Votre objectif sera de modifier le mot de passe root de votre système. Sur moodle vous
trouverez un code dont l’objectif est de sauvegarder des données dans un fichier utilisateur.
Ce programme va donc en premier lieu vérifier que le fichier appartient bien à la personne
ayant lancé le programme et qu'il ne s'agit pas d'un lien symbolique qui pourrait pointer vers
un fichier système. En effet, le programme en question doit appartenir à root, il disposera
donc potentiellement de toutes les autorisations pour modifier n'importe quel fichier de la
machine.
Le programme commence par effectuer toutes les vérifications nécessaires avant d’ouvrir le
fichier et d’effectuer l'écriture du message. C'est dans ce laps de temps (peut-être infime)
entre la lecture des attributs du fichier avec stat() et son ouverture avec fopen() qu’un
attaquant va placer son attaque pour modifier les caractéristiques du fichier, et/ou avoir accès
à des fichiers root. Au final cela s’apparente à de l’élévation de privilèges.
Objectif : modifier le fichier /etc/shadow contenant (entre autre) le mot de passe root de votre
machine, pour en modifier le contenu et le remplacer par "root::1:99999:::::"
Pour ce faire, vous devez pouvoir avoir au moins les droits sudoer sur votre machine linux
(donc à priori pas sur les PC de la faculté pour cette année, sauf si vous disposez d’une VM
incluant ces droits).
ATTENTION : avant de faire toute modification dans un fichier système faites en une
sauvegarde pour pouvoir tout remettre en ordre après vos tests !!!!
Vous risqueriez de perdre votre travail (voir plus) !
Questions (réponses dans votre rapport) :
- Faites un backup du fichier etc/shadow. En tant qu’utilisateur classique (ie. Non
root) vous ne devriez pas pouvoir modifier (ni lire ?) ce fichier.
- Analysez la chaine "root::1:99999:::::", à quoi correspondent ses différents
constituant (lisez les pages du manuel de shadow) ? Quel est l’impact de ces
modifications ?
- Comment pouvez-vous modifier le code C proposé pour pouvoir exploiter plus
facilement la race condition observée ?
- Compilez le code et modifiez-en les droits et les attributs pour obtenir ceci après
une commande ls –l
-rwsrwsr-x 1 root root ………… ex1
A partir de ce point, tout est en place pour que vous puissiez lancer l’attaque.
- Créez un fichier et utilisez le pour écrire la chaine vue plus haut dans celui-ci avec
l’exécutable que vous venez de générer.
Master ISC- CSSE Programmation défensive
- Pendant la race condition, trouvez une façon de supprimer votre fichier et de le
remplacer par un lien (symbolique ou physique peu importe) vers le
fichier /etc/shadow. Vous avez pour cela le temps de la race condition…
- Vérifiez que le fichier /etc/shadow a bien été modifié.
- Restaurez votre fichier etc/shadow originel !!
- Proposez une contre-mesure et validez quelle fonctionne.
Cas d’étude 3 : Etudes de failles potentielles
Pour chacun des codes proposés dans cette partie, proposez une façon de les exploiter.
Décrivez votre approche dans votre rapport.