Analyse de T0rn


Par Toby Miller
Traduit par NightBird http://www.nightbird.free.fr/
Mercredi 29 novembre 2000


But

Le but de cet article est d'informer la communauté des administrateurs d'IDS des signatures liées au rootkit T0rn. Cet article ne servira pas de guide d'utilisation du rootkit T0rn; il est plutôt conçu pour identifier des binaires et des ports que T0rn utilise. Cet article fournira également les md5sums des binaires et une analyse sur la façon de détecter T0rn.

Rootkit T0rn

Le rootkit T0rn est conçu pour la vitesse. Par cela je veux dire qu'il a été conçu pour s'installer rapidement sur des machines Linux. T0rn peut faire ceci parce qu'il necessite de faibles compétences pour etre installer et fonctionner. Tous les binaires dont l'attaquant aurait besoin viennent pré-compilé et le procédé d'installation sont aussi simples que ./t0rn. T0rn vient en standart avec un nettoyeur de logs appelé t0rnsb, un sniffer nommé t0rns et un programme d'analyse de logs appelé le t0rnp.

Details Red Hat 6.1

T0rn a beaucoup de détails qui doivent être discutés et analysés afin de le détecter. L'ordinateur qui a été utilisé dans cette analyse est un systeme RH 6.1 sans patches appliqués, le fichier inetd.conf avait été securisé, le mot de passe avait 6 caractères et la machine etait reliée à un réseau interne. Afin d'analyser T0rn, j'ai dû regrouper des données de préinstallation t0rn qui inclus les tailles et les dates de création des binaires de RH et des binaires pré-compilés de T0rn.

D'abord, nous voulons jeter un coup d'oeil sur les binaires de la Red Hat 6.1 (avant l'installation de t0rn) leurs dates, tailles et leurs timestamps. La figure 1 est une liste de certains binaires et de leurs caracteristiques..

Fichier(s) Taille Timestamp
/usr/bin/du 21716 September 24 1999
/usr/bin/find 56564 August 27 1999
/sbin/ifconfig 35964 August 29 1999
/usr/sbin/in.fingerd 7748 July 28 1999
/bin/login 20132 September 9 1999
/bin/ls 49844 September 24 1999
/bin/netstat 58648 August 29 1999
/bin/ps 61244 September 26 1999
/usr/bin/sz 61232 March 21 2000
/usr/bin/top 35636 October 26 1999

Figure 1. Binaires et propietes RH 6.1

Pourquoi cette information est-elle importante? Comme vous verrez dans une minute, la taille des fichiers est un indicateur cle pour la detection de t0rn. Un autre morceau de données que j'ai rassemblées était le md5sums des binaires de la RH 6.1. J'ai pensé que le créateur de ce rootkit pourrait pouvoir masquer le timestamp de taille et de création de fichier qui sont inclus dans ce rootkit avec les bons dans les systèmes d'exploitation. Mais il y aurait peu de chance qu'il ait pu recréer les md5sums. Le schéma 2 illustre les md5sums des binaires de la RH 6.1. qui seraient par la suite remplaces par t0rn.

568623d6e28888799fb62dc57e8af66e  ==========  /usr/bin/du
e7d046008bc8e252b07a775876814ad2  ==========  /usr/bin/find
3ee9c2373742ae5b7ea9fa9846c61668  ==========  /sbin/ifconfig
3beb34844da605ad27ba8cf4daa5e3e5  ==========  /bin/login
c91ecc0dc1e914eb69466b8c9799fe8c  ==========  /bin/ls
b8954aa3c6b142e5533ea4af9389eb29  ==========  /bin/netstat
e70ff99a50ea5c73d5409eb3d300d644  ==========  /bin/ps
cb11ba05f3c2e78d240bed98354295c5  ==========  /usr/bin/sz
e59c618c53fea0fa6962f665b55b1504  ==========  /usr/bin/top

Figure 2. RH 6.1 md5sums (avant t0rn)

J'ai aussi copie la plupart des binaires de la RH 6.1 vers un repertoire different, ainsi je pourrais les utiliser apres que les binaires du trojan soient charges.

Details T0rn

Maintenant que nous avons analysé les binaires de Redhat, jetons un coup d'oeil aux binaires de t0rn avant installation. Après avoir decompresser t0rn, j'ai fait une liste (schéma 3) des binaires de t0rn et de leurs propriétés (n'a pas obtenu l'année mais ce n'est pas important).

Fichier Taille Date
Du 22460 August 22 ,2000
Find 57452 August 22, 2000
Ifconfig 32728 August 22, 2000
In.fingerd 6408 August 22, 2000
Login 3964 August 22, 2000
Ls 39484 August 22, 2000
Netstat 53364 August 22, 2000
Pg 4568 September 13, 2000
Ps 31336 August 22, 2000
Pstree 13184 August 22, 2000
Sz 1382 July 25, 2000
T0rn 7877 September 13, 2000
Top 266140 July 17, 2000

Figure 3. Binaires et propietes t0rn (avant installation)

Après avoir documenté les tailles et les propriétés des fichiers de t0rn, j'ai également exécuté un md5sum sur les binaires de t0rn. Ils apparaissent sur le schéma 4. Ces totaux de contrôle (checksums) peuvent être critiques pour déterminer si t0rn a été installé sur votre Linux.

C42ac93969af2cb36bac9d52cd224cc6  =======  /home/tk/du
3caecec277d533c1d9adb466cd5e6598  =======  /home/tk/find
05f2e91720bb5ca7740d9f0450eab5ae  =======  /homer/tk/ifconfig
3e817f86442711f31e97bc4f3582f9ba  =======  /home/tk/login
5de875f7950f33dc586889f5c8315dc8  =======  /home/tk/ls
572f2d1aecd2fdd18fc7471c7a92901b  =======  /home/tk/netstat
4e45ce616cf302faae24436a70c065ee  =======  /home/tk/ps
f2e3b130a937af92ff507315406589b1  =======  /home/tk/sz
197f0ab0c49d2b377c6e411748ce9299  =======  /home/tk/top

Figure 4. md5sums t0rn

Detecter t0rn

Quand t0rn est installé, plusieurs choses se produisent. D'abord, il crée son propre répertoire /usr/src/.puta. Là vous trouverez tous les fichiers (sniffeur, nettoyeur de logs, ...) nécessaire pour l'exécuter.

Il n'est pas vraiment difficile a détecter dans installation par defaut. La première commande que j'ai exécutée après installation du rootkit était ps -ef. Le resultat de ps -ef était totalement différent du resultat du binaire /bin/ps. La prochaine mesure que j'ai prise était le controle de la taille et le timestamp des fichiers. T0rn est rusé pour cela, les binaires infectes par le trojan ont le même timestamp que les bons binaires. Ce qui sautemt aux yeux est la taille des fichiers. Un exemple de ceci est /bin/ps. Normalement, si vous deviez exécuter ls -al /bin/ps (RH 6.1) vous auriez le resultat suivant:

-r-xr-xr-x 1 root root 61244 Sept 26 1999

Si t0rn est installe, l'utilisateur verra:

-r-xr-xr-x 1 root root 31336 Sept 26 1999

Notons la difference de taille du fichier. Cela est vrai pour tous les binaires de t0rn. Le binaire que j'ai trouve le plus insteressant etait netstat. Pourquoi? parce que la version netstat de t0rn provoque un segmentation fault.

T0rn peut etre detecter en utilsant lsof. (Oui, les gars qui ont ecrit le rootkit t0rn ont oublie de changer cet outil important.) Le lancement de lsof | grep LISTEN montrera que le port 47017 (en rouge) est en ecoute (schema 5).

nscd     107 root    8u  IPv4        110              TCP *:47017 (LISTEN)
inetd    370 root    5u  IPv4        329              TCP *:ftp (LISTEN)
inetd    370 root    6u  IPv4        330              TCP *:telnet (LISTEN)
inetd    370 root    7u  IPv4        331              TCP *:shell (LISTEN)
inetd    370 root    9u  IPv4        332              TCP *:finger (LISTEN)
inetd    370 root   10u  IPv4        333              TCP *:linuxconf (LISTEN)

Figure 5. resultat de lsof | grep LISTEN

Ce port est le port par defaut utiliser par t0rn. En utilisant lsof | grep t0rn, une personne peut voir que tout fonctionne sous en tant que t0rn. La figure 6 nous montre les resultats de lsof -grep t0rn

t0rns    557 root  cwd    DIR        3,1       0    51920 /home/tmiller/tk (deleted)
t0rns    557 root  rtd    DIR        3,1    4096        2 /
t0rns    557 root  txt    REG        3,1    6948    51927 /usr/src/.puta/t0rns
t0rns    557 root  mem    REG        3,1   25034    19113 /lib/ld-linux.so.1.9.5
t0rns    557 root  mem    REG        3,1  699832    64363 /usr/i486-linux-libc5/lib/libc.so.5.3.12
t0rns    557 root  0u    sock        0,0              489 can't identify protocol
t0rns    557 root  1w     REG        3,1       0    51963 /home/tmiller/tk/system (deleted)
t0rns    632 root  cwd    DIR        3,1    4096    36547 /usr/src/.puta
t0rns    632 root  rtd    DIR        3,1    4096        2 /
t0rns    632 root  txt    REG        3,1    6948    51927 /usr/src/.puta/t0rns
t0rns    632 root  mem    REG        3,1   25034    19113 /lib/ld-linux.so.1.9.5
t0rns    632 root  mem    REG        3,1  699832    64363 /usr/i486-linux-libc5/lib/libc.so.5.3.12
t0rns    632 root  0u    sock        0,0              533 can't identify protocol
t0rns    632 root  1w     REG        3,1       0    34668 /usr/src/.puta/system

Figure 6. Resultat de lsof

Ici, nous allons quelques elements cles. D'abord, nous voyans que le fichier /usr/src/.puta/t0rns (sniffer) en execution (en rouge). Nous voyons aussi que /usr/src/.puta, encore une fois, c'est le repertoire cache utiliser par t0rn. Ces deux fichiers peuvent etre des indicateurs cles pour identifier t0rn.

Enfin, j'ai aussi trouve t0rn en lancant nmap et en scannant les ports de destination 45k -48k. Le resultat de nmap ressemble a:

Starting nmap V. 2.54BETA7 ( www.insecure.org/nmap/ )
Interesting ports on  (192.168.1.3):
(The 4000 ports scanned but not shown below are in state: closed)
Port       State       Service
47017/tcp  open        unknown                 

TCP Sequence Prediction: Class=random positive increments
                         Difficulty=3980866 (Good luck!)
Remote operating system guess: Linux 2.1.122 - 2.2.16

Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds

Recommendations

Le detection de t0rn ou de n'importe quel autre rootkit exige une planification en installant les systèmes d'exploitation. Le meilleur moyen d'empêcher ce genres d'attaques est d'utilisant des programmes comme Tripwire, de bonnes sauvegardes et de suivre les derniers patches. Une autre suggestion est d'exécuter md5sum sur des binaires tels que /bin/ps, /bin/ls et beaucoup d'autres et de les garder dans un endroit sur.

Conclusion

T0rn est un toolkit très sneaky et peut être dur a détecter si un administrateur ne sait pas quoi rechercher. Si une personne suit les recommandations indiquées ci-dessus, il ou elle pourrait eviter beaucoup de maux de tete et de temps perdu pour rechercher des programmes comme celui-la.

 

Traduit par NightBird http://www.nightbird.free.fr/