--------------------------------------------------------
Backdoors demystified
--------------------------------------------------------
Backdoors demystified
--------------------------------------------------------
Pour commencer cet article, je vais tenter de vous expliquer ce qu'est une backdoor (du point de vue technique) et à quoi elle sert.
Nous verrons ensuite les différents types de backdoors existantes et enfin, je vous donnerais des codes source de backdoor (dossier src/) relativement simples que j'essayerais de commenter au maximum.
So, what is a backdoor ?
Une backdoor est un programme utilisé afin de récupérer un accès root sur un serveur. Quand un pirate réussi à devenir root sur un serveur, il met généralement en place une backdoor qui lui servira a reprendre l'acces quand il le souhaitera. Les fonctions principales d'une backdoor sont de réussir à reprendre l'acces root le plus vite possible tout en laissant le moins de traces possibles (en utilisant un log cleaner integré au programme par exemple) et en faisant attention à ne pas se faire repérer par l'administrateur de la machine cible.
Pour cela, le pirate va chercher plusieurs "failles" dans le systeme ce qui lui permet de toujours avoir un acces même si l'administrateur réussit a détecter la backdoor.
Voilà pour le principe, maintenant, voyons voir les différents types de backdoor existantes, leur descriptions et leur effets sur un serveur vulnérable (ceci est une liste non exhaustive):
1) /etc/passwd Backdoor
--------------------
Cette methode consiste à cracker un mot de passe se situant dans le fichier /etc/passwd/ ou a ajouter une ligne dans ce fichier nous permettant de nous logger en tant qu'user "legal" du systeme.
Cette technique est peu utilisée car souvent la premiere chose qu'un administrateur fait lorsque sont systeme a été attaqué est de vérifier ce fichier.
A ne pas conseiller donc.
2) Rhosts Backdoor
---------------
Cette backdoor consiste à exploiter le systeme d'authentification Rlogin et RSH. Il suffit de modifier le fichier $HOME/.rhosts en y ajoutant un ligne "+ +" ce qui a pour effet que n'importe qui peut se logger a distance sans avoir besoin de fournir de mot de passe, ce qui peut être un inconvenient car n'importe quel crasher qui aura repéré la faille pourra se connecter aussi
(NOTE: Pour eviter ce probleme, il suffit de ne mettre qu'un seul "+" dans le .rhosts mais vous
ne pourrez vous logger qu'en local..).
Encore une fois, c'est une des premieres choses que l'administrateur verifie. Il suffirait dans ce cas de développer un systeme de client/serveur qui permettrait d'ajouter cette ligne lorsque le pirate se connecte au serveur de la backdoor, il n'aurait alors plus qu'a effacer la ligne une fois le controle repris.. mais ceci sera développé
plus loin.
3) Bootblock backdoor
------------------
Cette technique consiste a insérer une sorte de virus dans le secteur de boot du systeme.
Cette technique peut s'avérer très efficace car les administrateurs ne possèdent souvent pas d'outils pour verifier le secteur de boot mais elle est aussi très complexe a mettre en oeuvre.
4) Shell SUID backdoor
-------------------
Consiste a rendre un shell (/bin/bash par exemple) suid root, c'est a dire qu'un user qui utilisera ce shell aura les privileges root lors de son execution.
Il suffit pour cela de copier le shell vers un autre fichier qui representera notre shell suid (ex: cp /bin/bash /bin/shellsuid ) et de le rendre suid root en tapant "chmod 7555 /bin/shellsuid".
Il suffit ensuite d'executer notre "faux" shell pour avoir les privileges root.
5) LKM (Linux Kernel Modules)
--------------------------
Les LKM sont utilisés par le kernel pour lui rajouter ou expandre ses fonctionnalités (modifier les appels systeme par exemple.. ). Ces modules sont chargés dynamiquement, c'est a dire qu'ils ne necessitent aucune compilation du kernel pour fonctionner ! Ils sont la plupart du temps utilisés pour les drivers de materiel. Seul le root peut les installer (normal..).
Pour forcer le systeme a charger un module, tappez ceci dans votre term (vous devez etre root):
#insmod module.o
Pour voir la liste des modules en execution:
#lsmod
Code:
Module Size Used by Tainted: PF nvidia 1672832 10 (autoclean) snd 40868 4 [snd-seq-oss snd-seq-midi-event snd-seq snd-pcm-oss snd-mixer-oss snd-via82xx snd-ac97-codec snd-pcm snd-timer snd-mpu401-uart snd-rawmidi snd-seq-device] cdrom 31648 0 [sr_mod ide-cd] floppy 55132 0 module 1 0
Vous pouvez egalement enlever vos modules avec:
#rmod module
Code:
Module Size Used by Tainted: PF nvidia 1672832 10 (autoclean) snd 40868 4 [snd-seq-oss snd-seq-midi-event snd-seq snd-pcm-oss snd-mixer-oss snd-via82xx snd-ac97-codec snd-pcm snd-timer snd-mpu401-uart snd-rawmidi snd-seq-device] cdrom 31648 0 [sr_mod ide-cd] floppy 55132 0
Vous voyez où je veux en venir ? Eh oui, on peut tout simplement installer une backdoor dans le kernel sans que l'admin s'en apercoive (le module etant invisible). Pour l'aspect programmation c'est un peu plus dur mais pas insurmontable (à voir dans un prochain article).
6) TCP Backdoor
------------
Une TCP Backdoor agit comme un serveur sur la cible. Nous pouvons alors nous y connecter via telnet ou un client specifique. On peut également l'associer a un LKM pour cacher le processus ou cacher l'executable..
Quand le serveur est activée, il agit alors comme une backdoor "normale" (ajout de .rhost, de comptes utilisateurs..) et vous n'avez plus qu'a faire disparaître les logs et a relancer l’exécutable .
Commentaire