jeudi

Langage assembleur et sécurité

Il n'y a que très peu de cours pour les vrais débutants en sécurité informatique, et les seuls qu'on arrive a trouver facilement sont faits pour ceux qui ont déjà de bonnes bases et qui savent de quoi ils parlent. Comme si la sécurité informatique était un tabou qu'il ne fallait pas rendre accessible au premier qui s'en intéresse.

Notre programme "death_race" en action

Etudions ce petit programme qui nous affiche une phrase secrète si on rentre le bon mot de passe. Nous ne connaissons pas le mot de passe, et pourtant il est possible de faire afficher cette phrase secrète quand même...

otool -Vt death_race nous donne ceci

Bienvenue dans le binaire de ce programme, traduit en hexadecimal et encore traduit en un peu plus clair par un utilitaire (otool -Vt sur Mac Os dans mon cas).

Nous avons les adresses des instructions tout à gauche, le nom des instructions dans la colonne du milieu, suivi des paramètres des instructions dans la colonne de droite. Pas la peine de comprendre chaque ligne pour obtenir ce qu'on veut.

Les lignes importantes :
- df0 : L'affichage de "Please give me a value"
- e1f : Un cmp, une comparaison !
- e21 : Un jump conditionnel vers e49 (ce qui commence par j est presque toujours un jump)
- e36 : L'affichage du secret !
- e49 : L'affichage de "You failed"

Ce qu'il faut faire :
Modifier le jump conditionnel. Il s'agit d'un jne (Jump if Not Equal), le contraire d'un jne c'est le je (Jump if Equal), nous allons donc mettre un je a la place du jne, voir cette page pour les différents jump et leur codes. Je ne détaille pas le pourquoi du comment car je suppose que tout le monde a compris.

Comment le faire :
Ouvrir le binaire avec un éditeur permettant de convertir en hexadécimal et inversement, j'ai utilisé emacs. Repérer l'adresse e21, et simplement modifier le code du jne par celui du je. C'est donc 75 qu'on change en 74 ici.

emacs en hexl-mode

Enregistrer la chose. Exécuter la chose et magie.

Notre programme death_race qui fait moins le malin

N'oubliez pas http://www.unixwiz.net/techtips/x86-jumps.html pour les codes !

Aucun commentaire:

Enregistrer un commentaire