Kako je otkrivena provala u firewall računalo

Dobrica Pavlinušić <dpavlin@rot13.org> 1998-11-27

Početak je jednostavan kao i svaki drugi. Nakon logiranja u računalo rutinski sam pokrenuo komandu ps ax da vidim koji se procesi izvršavaju i da na taj način steknem dojam kako računalo "diše". Pažnju krajička oka privukao je proces koji se zvao ./passbnc. Najmanje dvije stvari su bile čudne:

  1. ne postoji program passbnc koji se treba izvršavati na firewall računalu i
  2. pokrenut je iz trenutnog direktorija (zato onaj početak ./) što je zapravo i bio razlog da mi je zapeo za oko.
Nekoliko trenutaka nakon toga uslijedila je panika: proces passbnc izvršavao se s root privilegijama.

Iako sam pročitao mnogo tekstova o provalama u računalske sustave, moram priznati da se ponašam kao valjda i svi ostali: to je nešto što se meni ne može desiti. Međutim, stvarnost je bila okrutna: imamo uljeza na firewall računalu koji posjeduje root privilegije.

Prva i najvažnija stvar je ne paničariti (svi serveri trebali bi imati napisano velikim prijateljskim slovima DON'T PANIC na sebi). Dakle, prvo je trebalo provjeriti da li je uljez još uvijek na računalu i što je uopće taj proces passbnc koji se izvršava. Kako se radilo o linux serveru, logičan slijed stvari je pisanje locate passbnc. Program je nađen na neobičnom mjestu: u /dev direktoriju postojao je direktorij kojemu je ime bilo tri točke (...) i sadržavao je spomenuti program.

Ukoliko je ikada postojala sumlja da je to možda neki od validnih programa ili da mašina nije kompromitirana, sve su one u taj trenutak nestale. Primjetio sam još jednu zanimljivu stvar: ušavši u direktorij /dev/... i napisavši ls našao sam samo dvije datoteke od kojih niti jedna nije bila passbnc. Zapravo, prva stvar prije nego što sam ušao u direktorij je bilo pokretanje less /dev/.../passbnc čime sam se uvjerio da je program tamo, i da se radi o binary programu (šteta, za skriptu bih lakše otkrio što radi). Kako to onda da se datoteke ne ispisuju? Što li je napadač učinio sa ls komandom? Kako bih se uvjerio da je u pitanju problem sa ls-om, iskoristio sam stari trik kada ls ne radi: echo * ispisao je više datoteka, za moj ukus čak i previše.

Ako je do tada postojala privlačnost imanja nepoznatog procesa na računalu, ona je isčeznula. Kako je bio petak navečer, bilo je relativno jednostavno isključiti firewall računalo iz mreže preko vikenda. Korisnici će nekako preživjeti taj jedan vikend bez pristupa modemom. Računalo je spušteno u jednokorisnički način rada, prije svih password-a dodana je zvjezdica (da bi se zabranilo daljnje logiranje na potencijalno provaljene račune) i daljnja analiza je prepuštena za slijedeći tjedan.

Potpuni sadržaj direkorija /dev/... je izgledao ovako:

root@tower:/dev/...> ls -al
total 5046
drwxr-xr-x   2 root     root         1024 Jun 24 01:28 .
drwxr-xr-x   3 root     root        20480 Oct 28 10:39 ..
-rw-r--r--   1 root     root         3290 Dec  1  1996 bcast.0321
-rw-r--r--   1 root     root          277 Jun 25 19:09 bnc.conf
-rwx------   1 root     root       937627 Dec  1  1996 bx
-rwx------   1 root     root         7769 Dec  1  1996 fix
-rwx------   1 root     root        10171 Dec  1  1996 imap
-rwx------   1 root     root         1066 Dec  1  1996 install
-rws--S---   1 root     root         5964 Dec  1  1996 land
-rwx------   1 root     root         7105 Dec  1  1996 linsniffer
-rw-r--r--   1 root     root       272611 Dec  1  1996 nmbd
-rwx------   1 root     root        10280 Jun 22 06:29 passbnc
-rw-r--r--   1 root     root       378657 Dec  1  1996 smbd
-rwx------   1 root     root         8174 Dec  1  1996 smurf4
-rwx------   1 root     root        47432 Jun 24 01:15 sniffit
-rw-r--r--   1 root     root      3409920 Dec  1  1996 stuff.tar
-rws--S---   1 root     root         6784 Dec  1  1996 teardrop
-rw-------   1 root     root         3280 Dec  1  1996 wted.c
-rw-------   1 root     root         2000 Dec  1  1996 z2.c
Kako je trenutan datum bio 19. rujan, a datum kreiranja direktorija 24. lipanj da li je moguće da je uljez neopažen bio u računalu već tri mjeseca? Kako to da nije bio primjećen do sada? Što je još radio? Negativna strana tako dugug vremena je u tome što su log-ovi već davno bili rotirani, tako da se na njih nije moglo osloniti.

Pregled datoteka nije bio previše smirujuć: sniffit je poznati program za pregled mrežnog prometa, imap je scanner za poznate imap rupe, linsniffer je još jedan program za pregled mreže, z2 je program za prikrivanje tragova, itd. Jedine dvije datoteke koje su odudarale (i ujedno dvije koje su se pojavile kod naredbe ls) su bile nmbd i smbd, dva daemona iz samba paketa koji služe za dijeljenje diskova CIFS protokolom (kompatibilinim sa Windows Networking-om). Međutim, naše firewall računalo (zbog sigurnosnih razloga, dakako) ne izvršava sambu! Napadač je također ostavio i stuff.tar kojem su se nalazili slijdeći programi:

-rw-r--r-- root/root      3290 1998-03-27 22:10 bcast.0321
-rwx------ root/root    937627 1998-03-27 22:11 bx
-rwx------ root/root    116352 1997-08-08 21:11 chfn
-rwx------ root/root    115828 1997-08-08 21:11 chsh
-rwx------ root/root    137420 1997-08-08 21:11 dir
-rwx------ root/root    100904 1997-08-08 21:11 du
-rwx------ root/root      7769 1997-12-03 22:34 fix
-rwx------ root/root     19840 1997-08-08 21:12 ifconfig
-rwx------ root/root     10171 1997-12-04 15:56 imap
-rwx------ root/root    137820 1997-08-08 21:04 inetd
-rws--S--- root/root      5964 1997-12-03 22:34 land
-rwx------ root/root      7105 1997-12-03 22:34 linsniffer
-rwx------ root/root     22969 1997-08-08 21:11 login
-rwx------ root/root    137415 1997-08-08 21:11 ls
-rwx------ root/root     30968 1997-08-08 21:12 netstat
-rw-r--r-- root/root    272611 1998-03-28 20:45 nmbd
-rwx------ root/root    126600 1997-08-08 21:11 passwd
-rwx------ root/root     36970 1997-08-08 21:02 ps
-rwxr-xr-x root/root    273360 1998-03-27 22:45 rh-login
-rwx------ root/root    170460 1998-03-27 22:25 rshd
-rw-r--r-- root/root    378657 1998-03-28 20:45 smbd
-rwx------ root/root      8174 1997-12-03 22:34 smurf4
-rwx------ root/root    235516 1997-08-08 21:13 syslogd
-rwx------ root/root     19681 1997-08-08 21:13 tcpd
-rws--S--- root/root      6784 1997-12-03 22:34 teardrop
-rwx------ root/root     57059 1997-08-08 21:03 top
-rw------- root/root      3280 1998-03-27 22:21 wted.c
-rw------- root/root      2000 1998-03-27 22:21 z2.c
Mnoge stvari postale su nakon toga jasnije: "tuđi" procesi nisu do sada bili otkriveni jer je napadač imao zamjenske programe za ps i top. Na kraju je otkriven zbog toga što je nekoliko tjedana prije otkrića bio instaliran update procps-a. Kako je onda moguće da napadač nije to primjetio? Možda je postao neoprezan? Proces passbnc bio je pokrenut ručno (provjera startup skripti i testno dizanje računala bez priključka na mrežu je to potvrdilo). Činjenica da je firewall računalo zadnji puta bilo boot-ano prije dva tjedna pokazivala je da je napadač bio logiran od tada na ovamo, da je upravo tada pokrenuo passbnc i da nije primjetio promjenu procps alata. Inače, passbnc je proxy za IRC. Kako osobno ne cijenim naročito ljude koji mnogo vremena provode na IRC-u, počeo se formirati moj stav prema napadaču. Donesena je i odluka: popraviti će se samo oni programi koji su nužni za praćenje njegovih aktivnosti (syslog; zajedno sa logiranjem na drugo računalo -- promjenu syslog.conf datoteke vjerojatno neće zamjetiti, ali bi same log-ove mogao pobrisati), tcpd (da bi se moglo pratiti od kuda dolaze pristupi -- provalnik je instalirao zamjenski in.rshd, pa je zbog toga hosts.allow datoteka podešene tako da ne sprečavaju logiranje korištenjem rsh-a. To je rizično, ali ako je već imao pristup na računalo sa root ovlastima nisam mislio da će sada pokazati nasilan karakter i početi uništavati podatke.)

Također otkrio sam da install skripta kreira još datoteka i to: /dev/ptyp, /dev/ptyq, /dev/ptyr i /dev/ptys. Datoteke su redom:

/dev/ptyp: Koriste je programi ps i top za prikrivanje procesa

1 p0
1 p1
2 in.telnetd
3 linsniffer
4 sniffit
/dev/ptyq: netstat, tcpd za prikrivanje mrežnih veza
1 207.92
1 206.152
2 207.92
2 206.152
1 134.71
2 134.71
/dev/ptyr: dir, du, ls za prikrivanje datoteka. U njoj se nalaze sva imena datoteka iz ovoga paketa (koji, kako ću kasnije otkriti, postoji na mreži pod nazivom rootkit, pa ću ga tako dalje i zvati) osim datoteka smbd i nmbd koje su se i pojavile pri pokušaju ispisivanja sadržaja direktorija naredbom ls.

/dev/ptys: netstat, tcpd, također za prikrivanje

207.92
206.152
mind
mcmem
134.71
Kako brojevi u datotekama (pretpostavljao sam da su to počeci IP adresa) nisu bili previše korisni, odlučio sam još dodatno aktivirati process accounting [zabluda da process accounting troši jako puno diskovnog prostora jednostavno nije točna -- ako je imalo potreban treba ga koristiti -- isto vrijedi i za tripwire!] i čekati.

Postojala je realna opasnost da je napadač dobio neke od administratorskih ili korisničkih passworda do kojih je mogao doći korištenjem jednog od DVA sniffer-a koja je imao u paketu. Svi korisnici uljudno su (expire-anjem) zamoljeni da promijene svoje passworde, a svi administratorski su promijenjeni. Međutim, kako je skeniranjem samo toga mrežnog segmenta i korištenjem root passworda mogao dobiti pristup na najmanje još jedno računalo (koje se doduše nije koristilo u to doba za ništa osim za routanje), a na njemu nije nađen nikakav trag promjene datoteka kao na firewall-u, zaključio sam da je jednostavno koristio naš firewall za "pranje" veza prema IRC serverima.

To je okarakteriziralo napadača kao ne pretjerano stručnog, koji je vjerojatno koristio gotove alate nađene na mreži (primjetiti da su također bili i tri mjeseca stari) da bi se IRC-ao. Postojalo je još pitanje kako je zadobio root privilegije na našem računalu? Iako je to pitanje na koje ne mogu biti siguran u točan odgovor, pretpostavljam da je iskoristio neku od poznatih rupa u jednom od naših servera. U doba provale vrtili smo: nfs za koji se znalo da ima sigurnosnih problema, named za koji također postoje overflow-ovi, sendmail i wu-ftpd.

Sada je preostalo samo čekati da napadač ponovno dođe, da bismo naučili još ponešto o njemu i njegovom načinu rada.

Na sreću (?) nisam morao dugo čekati, 21. rujna pojavio se čudan pokušaj logiranja iz domene madcrew.net za koju je ovlašten administrator iz domene mindcryme.com.

Sep 21 04:38:01 tower in.telnetd[3501]: refused connect from root@madcrew.net
Sep 21 04:58:19 tower in.telnetd[3564]: refused connect from egg@195.139.254.3
Uz pretpostavku da se radi o provaljenom računalu -- uvjek je neobično vidjeti pokušaj logiranja root-a sa nekog drugog računala (iako ime domene baca sumnju na tu pretpostavku) poslan je mail slijedećeg sadržaja administratoru koji se javio nevjerojatnom brzinom.
Date: Mon, 21 Sep 1998 18:10:42 -0400 (EDT)
From: blah 
To: Dobrica Pavlinusic 
Subject: Re: Possible breakin attempt from your host

I will take look into this and get back to you with what I find. Thank you
for bringing this to my attention.

Melen

On Mon, 21 Sep 1998, Dobrica Pavlinusic wrote:

>
> Someone from hosts under your authority tried to connect to our firewall.
> That service is deppriciated and considered a breakin attempt. Please
> do whatever you see appropriate.
>
> Dobrica Pavlinusic                    dpavlin@foi.hr, dpavlin@jagor.srce.hr
> Unix addict. Internet consultant.                http://www.foi.hr/~dpavlin
>
> Security Violations
> =-=-=-=-=-=-=-=-=-=
> Sep 21 04:38:01 tower in.telnetd[3501]: refused connect from root@madcrew.net
> Sep 21 04:58:19 tower in.telnetd[3564]: refused connect from egg@195.139.254.3
Nešto kasnije došao je još jedan mail od istog administratora sa detaljnijim opisom.
Date: Tue, 22 Sep 1998 02:18:17 -0400 (EDT)
From: blah 
To: Dobrica Pavlinusic 
Subject: Re: Possible breakin attempt from your host

It appears the this system was compromised and that root was obtained. The
logs appear to have been cleaned and I haven't been able to find the ip of
the person who compromised it. We will be keeping an eye out and
monitoring our network to see if we can catch this person.

If you need anything else or have any other questions, please feel free to
write back.

Melen
Dakle, nikakva velika pomoć od toga! Naknadnim razgovorima s Hrvatskim CERT-om (da, ta služba je u to vrijeme postojala i bila aktivna :-) otkrio sam da oni već imaju negativna iskustva s provalama iz te domene.

Međutim, odlučio sam podijeliti svoja znanja (ako je provalnik stvarno dolazio iz te domene, to je već znao, a ako nije možda pomogne administratoru), pa sam poslao zadnji mail na koji nikada nisam dobio odgovor:

Date: Tue, 22 Sep 1998 09:09:43 +0200 (MET DST)
From: Dobrica Pavlinusic 
To: blah 
Subject: Re: Possible breakin attempt from your host

Thanks for respoding so quickly. We have also a break-in to root account,
however, we don't beleve that attacker found our root password. It is more
likely that he used some well-known hole in one of our servers (sendmail,
wu-ftpd or named -- we hardly run anything else on machine in question).
It also leaved rootkit toolkit (known exploits and scanners) in
/dev/.../ directory. Look up for it. It also installs replacement ls,
ifconfig, syslog, ined and some more commands.
Ostavio sam još dva tjedna firewall računalo pod strogim nadzorom (koji je uključivao logiranje promjena svakih nekoliko sati) da bih vidio da li će se napadač vratiti, a onda zaključio da je dosta, zamjenio sve prije spomenute servise novijim vezijama ili sigurnijim zamjenama i odlučio napisati ovaj članak (na koji je, priznajem, trebalo čekati jako dugo).

Što zaključiti na kraju? Možda samo da se napadi ne dešavaju nekome drugom (nažalost, praksa me previše često podsjeća na to) i da administratori zapravo nikada ne mogu biti dovoljno paranoidni. Ako Vam se napad već nije desio, možda jednostavno niste dovoljno pažljivo gledali...

pravni mumbo-jumbo:
Naknadno objavljivanje u bilo kojem obliku dopušteno samo uz dogovor sa autorom. Original objavljen na firewall listi http://www.cc.foi.hr/firewall/