SU trojan : Keep It Simple Stupid

Simple is beautiful comme disait le grand sage discordien de la confrérie LOTFREE.

Dans les précédents numéros de LOTFREE on a vu comment simuler un écran de login console sous Linux, faire un trojan SU capable d'intercepter le mot de passe au vol (programme malheureusement peu efficace d'une distrib à une autre)... mais pourquoi se prendre la tête ?

Imaginons que vous ayez accès à la session d'un utilisateur non privilégié mais que ce dernier connaisse le mot de passe root et exécute de temps à d'autres des commandes d'administration via su.

Alors la partie est gagnée d'avance pour vous : il suffit qu'une fois passé root la personne exécute un exécutable de votre composition qui nous ouvrira les portes du système.

Impossible ? Pas du tout ! Quand l'utilisateur tape la commande su, il obtient les droits root mais l'environnement par défaut (et donc le PATH) reste inchangé. Voici un exemple avec un user non-privilégié pour vous montrer :

dereck@www:~> echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/X11R6/bin
dereck@www:~> PATH=/tmp/test:$PATH
dereck@www:~> echo $PATH
/tmp/test:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/X11R6/bin
dereck@www:~> su
Mot de passe :
root@www:/home/dereck # echo $PATH
/tmp/test:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/X11R6/bin

Ici on voit que le chemin /tmp/test rajouté dans la session de dereck s'est propagée à la session ouverte pour root. Si on a placé au préalable un programme de notre composition avec un nom de commande fréquente (comme ls) et que la victime tape cette commande après su alors notre accès est assuré :)

Bien sûr il faut faire attention à ce que notre version de ls donne le résultat auquel s'attend le root... Pour celà on pourra utiliser le binder Linux présent dans le magazine ou encore le virus infR3.s de jolmos (attention, détecté par les AV).

Comment se prémunir de cette attaque ? Tout simplement en appelant su de cette façon : "su -". On obtient alors une session root où l'environnement a précédent est entièrement vidé.

Malheureusement ce n'est pas très pratique quand on souhaite juste lancer une commande en root sans quitter de dossier, par exemple pour faire un make install après un configure et make... A ma connaissance il n'y a pas encore de solutions (d'option de su) permettant de vider l'ancien PATH tout en restant dans le répertoire en cours :(