Tehtävänanto -Ratkaise Scan of the Month 15. Käsittele haitallisia ohjelmia turvallisesti. (Karvinen, T. 09.09.2013) Scan of the month on The Honeynet Projectin kuukausittain julkaisema levykuva järjestelmästä, johon on oikeasti joku krakkeri murtautunut. Jokaiseen levykuvaan liitetään tehtäviä, joita ihmisten on tarkoitus tehdä ja nopeimmat ja parhaimmat saavat mainetta ja kunniaa. Scan of the month 15 on toukokuussa 2001 julkaistu tehtävä, jossa järjestelmään oli murtauduttu 15.03.2001 ja järjestelmään asennettiin rootkit ja myöhemmin rootkit poistetiin. Tehtävässä on tarkoitus tehdä step-by-steb ohje kuinka palauttaa ja löytää poistettu rootkit sekä kertoa kaikki rootkittiin liittyvät tiedostot. (The Honeynet Project. 05/2013.) Työympäristö Tein tehtävän koulun labrakoneella. Tietokone: HP Compaq 8200 Elite CMT PC (XL508AV) Tunnus: 1K015 PC 6 Käytin tehtävän tekemiseen Xubuntu 13.04 -käyttöjärjestelmää, jonka asensin koneelle aikaisemmin polttamaltani LiveCD:ltä. Ensimmäisenä annoin komennon sudo apt-get update ja asensin libreofficen komennolla sudo apt-get install libreoffice. Scan of the Month 15 Latasin SotM 15:n levykuvan sisältävän tar.gz-tiedoston wget http://old.honeynet.org/scans/scan15/honeynet.tar.gz. Honeynetin sivuilla mainittiin honeynet.tar.gz-tiedoston MD5-tarkistussumma 0dff8fb9fe022ea80d8f1a4e4ae33e21. Komennolla md5sum honeynet.tar.gz sai MD5-tarkistussumman laskettua. Komento tulosti seuraavan: 0dff8fb9fe022ea80d8f1a4e4ae33e21 honeynet.tar.gz Tarkistussummat täsmäävät joten lataamani honeynet.tar.gz-tiedosto on honeynet projectin tiedosto eikä kukaan muu ole sitä muokannut. Komennolla tar -xf honeynet.tar.gz purin pakatun tiedoston honeynet-hakemistoon. Pakatussa tiedostossa oli levykuvatiedosto honeypot.hda8.dd. Tiedoston md5-tarkistussumma oli honeynetin mukaan 5a8ebf5725b15e563c825be85f2f852e. Md5sum honeypot.hda8.dd komennolla tulostuu seuraava: 5a8ebf5725b15e563c825be85f2f852e honeypot.hda8.dd Tiedosto oli siis oikea.
Levykuva Tein honeynet-hakemistoon hakemiston honey komennolla mkdir honey. Tämän jälkeen mounttasin levykuvan kyseiseen kansioon komennolla sudo mount -o loop,noexec,nodev,ro honeypot.hda8.dd honey/ (Karvinen, T. 11.09.2013.) Loopin avulla voi mountata levykuvia ja noexec,nodev,ro avulla voi turvallisesti mountata saastuneen levykuvan eikä levykuvalla olevat haittaohjelmat pysty tehdä mitään koneelle. Tämän jälkeen aloin tarkastelemaan honey-hakemistoon mountattua levykuvaa. Sudo find wc -l -komennolla sain laskettua tiedostojen määrän. Niitä oli 7040 kpl. find less -komennolla listasin kaikki levykuvalla olevat tiedostot ja katselin läpi mitä kaikkea sieltä löytyi. Tein aika mielenkiintoisen havainnon: Var-hakemisto oli täysin tyhjä. Palvelimen logeja ei ollut ollenkaan levykuvalla. Tree -ohjelmalla sai seuraavan hakemistopuun näkyviin:
Poistetut tiedostot Tunkeutuja oli poistanut asentamansa rootkitin palvelimelta, joten levykuvalta piti palauttaa poistetut tiedostot. Tero Karvisen mainitsemalla The Sleuth Kit -paketissa olevien ohjelmien avulla sai palautettua poistettuja tiedostoja (Karvinen, T. 11.09.2013.) Asensin paketin komennolla sudo apt-get install sleuthkit. Komennolla tsk_recover honeypot.hda8.dd extr/deleted palautin levykuvalta poistetut tiedostot hakemistoon extr/deleted. Komennolla tsk_recover -a honeypot.hda8.dd extr/allocated siirsin kaikki muut tiedostot hakemistoon extr/allocated Tarkastelin deleted-hakemistoa find less -komennolla ja sieltä löytyi oikealla näkyviä tiedostoja. Heti ensimmäisenä näkyy epäilyttävä tar-pakattu tiedosto lk.tgz. Tämä tiedosto kaikkein todennäköisimmin oli rootkit. Tar -tf lk.tgz listasin pakatun tiedoston sisällä olevat tiedostot: Purin tiedoston Tar -xf lk.tgz -komennolla sekä turvallisuuden takia poistin kaikista tiedostoista suoritus oikeudet komennolla chmod a-x *. Nyt pystyin tarkastelemaan tiedostoja:
Rootkit Install -tiedosto oli, yllätys yllätys, rootkitin asentava shell skripti. Less install -komennolla luin mitä kaikkea se tekee: Tyhmänä ihmisenä rootkitin tekijä oli kirjoittanut omalla kielellään tervehdysviestejä itselleen: Google translaten mukaan vieras kieli on romaniaa. Tästä pystyi päättelemään, että rootkitin tekijä oli romanialainen. Echojen jälkeen ensimmäisenä skripti muuttaa kaikkien rootkitin tiedostojen omistajaksi ja ryhmäksi root. Tässä kohtaa skripti korvasi rootkitin top, ifconfig, ps, netstat -ohjelmilla palvelimen omat top, ifconfig, ps, netstat -ohjelmat. Tämän jälkeen palvelimen ylläpitäjä ei voinut havaita rootkittia näitä ohjelmia käyttäen, koska ne poistavat listoilta kaikki rootkitin prosessit.
Oikealla näkyvässä kuvassa on seuraava skriptin kohta. Kyseinen kohta teki tiedostot rpm ja last /dev/-hakemistoon joihin oli listattu prosessien nimiä sekä IP-osoitteita. Nämä todennäköisesti olivat yllä mainittuihin ohjelmiin kuuluvia tiedostoja. Nämä tiedostot kertoivat ohjelmille mitkä tiedot täytyy piilottaa käyttäjältä. Kuitenkin kun tutkin ps ja netstat ohjelmien sisältöä strings ps ja strings netstat -komennoilla, yhtäkään kyseisiin tiedostoihin viittaavaa riviä ei löytynyt vaan vaikutti siltä, että ohjelmat saivat asetukset /dev/dsx (ps) ja /dev/caca (netstat) tiedostoista. Toisin sanoen, skriptin tekijä teki erittäin suuren virheen. String netstat less String ps less
Tarkistin seuraavaksi levykuvalta jos sieltä löytyisi kyseiset hakemistot ja tiedostot ja kappas vain, kyllä löytyi. Tästä pystyi päättelemään, että rootkit oli varmasti asennettu palvelimelle. Lisäksi tarkistin nuo kolme ip-aluetta ja ne kuuluivat romanialaisille palveluntarjoajille. Tämä todisti, että skriptin tekijä oli romanialainen. Seuraavaksi skripti teki hakemistot /dev/ida/.drag-on/ sekä /dev/ida/.. (huomaa välilyönti.. jälkeen) yrittäen piilottaa ne palvelimen ylläpitäjän näkyviltä. Kuitenkin oli tyhmä idea antaa nimeksi pisteellä alkava nimi koska ne näkyi heti ensimmäisenä kun listasi /dev/-hakemiston koko sisällön. Näihin hakemistoihin skripti sitten kopioi rootkitin ohjelmat linsniffer, logclear, sense ja ssh-serveriin liittyviä tiedostoja. Kyseiset hakemistot ja ohjelmat löytyivät palvelimelta. Linsniffer oli verkkoliikennettä kuunteleva ohjelma, joka kaappaa verkossa kulkevat paketit. Tällä ohjelmalla oli tarkoitus kaapata esim. käyttäjien syöttämiä salasanoja, jotka eivät kulje kryptattuna verkon yli. Logclear sisälsi seuraavat rivit:
Logclear skriptin ajattaessa kaikki linsniffer prosessit tapetaan ja tcp.log tiedosto poistetaan. Tämän jälkeen tehdään uusi tcp.log-tiedosto ja linsniffer ajetaan uudelleen ja sen tiedot siirretään tähän uuteen tcp.log-tiedostoon. Sense oli ohjelma, joka muokkaa linsnifferin tuottaman datan järkevämpään muotoon. Strings mkxfs less -komennolla sain tutkittua mitä tiedoston mkxfs sisältä löytyy. Tiedoston sisältö vaikutti todella paljon ssh serveriltä. Mkxfs oli siis ssh-serveri, jonka avulla tunkeutuja pystyi myöhemmin pääsemään järjestelmään käsiksi helposti. Tiedosto s oli muokattu ssh serverin asetustiedosto. Tämä tiedosto aiheuttaa sen, että rootkitin ssh-serveri käyttää rootkitin ssh_host_key ja ssh_random_seed tiedostoja. Sl2-tiedosto oli strings sl2 -komennon perusteella jonkunlainen internettiin liittyvä ohjelma. Kuitenkaan en saanut itse selville mitä se tekee. Päätin tarkistaa Peter Kosinairin tekemästä ratkaisusta mikä tämä ohjelma on. Hän oli havainnut tämän ohjelman olevan Denial of Service -hyökkäysohjelma eli tunkeutuja olisi voinut käyttää palvelinta DoS-hyökkäyksien tekemiseen.(kosinair, P. 25.05.2001). Seuraavaksi skripti kopioi inetd.conf-tiedoston hakemistoon /etc/. Koska komennossa oli -f attribuutti, tiedosto ylikirjoitti sen nimisen tiedoston jos hakemistossa oli sellainen jo valmiiksi. Tässä inetd.conf-tiedossa oli telnet ja pop-3 laitettu päälle. Pop-3 toimi oudosta
hakemistosta /usr/cyrus/bin/pop3d ja oudolla käyttäjällä cyrus. Mikään tässä rootkitissä ei viittannut siihen, että kyseistä hakemistoa tai käyttäjää edes käytettäisiin. Lisäksi skripti kopioi services-tiedoston /etc/-hakemistoon, mutta tällaista tiedostoa ei edes ollut rootkitissä mukana. Tämä vaikutti siltä, että joku muu kuin tämä tunkeutuja oli tehnyt tämän rootkitin ja tunkeutuja itse oli vain muokannut sitä itselleen sopivaksi ja nämä kaksi komentoa olivat jäänteitä alkuperäisestä skriptistä. Tätä päättelyä tuki myös rootkitista löytyvä käyttämätön ohjelma cleaner, jonka oli tehnyt saksalainen henkilö. Seuraavaksi skripti poistaa /usr/bin/lsattr tiedoston ja lisää tiedoston /etc/rc.d/rc.sysinit loppuun rivin /usr/bin/lsattr -t1 -X53 -p. Rc.sysinit-tiedoston on boottauksen aikana suoritettava tiedosto eli boottauksen aikana suoritettiin kyseinen rivi. Tämän jälkeen rootkitin lsattr-tiedosto kopioitiin /usr/bin/lsattr-hakemistoon ja sen oikeuksiksi annettiin 500 eli vain root pystyy lukemaan ja ajamaan tiedoston, mutta ei muokkaamaan. Tämän jälkeen tiedostolle annettiin immutable attribuutti eli tiedostoa ei pystytty muokkaamaan, poistamaan tai siihen ei pystytty tekemään linkkiä. Rootkitin lsattr-tiedoston sisällä oli tällainen shell skripti: Tämä skripti aiheutti sen, että jokaisen boottauksen yhteydessä rootkitin ssh-serveri ajettiin käyttäen s-tiedostoa asetustiedostona sekä linsniffer-ohjelma laitettiin taustalle pyörimään ja keräämään tiedot tcp.log-tiedostoon. Seuraavaksi skriptiin oli laitettu sleep 1-komento eli skripti odotti sekunnin ajan ennen kuin seuraavat komennot ajettiin. Tämä oli lisätty todennäköisesti sen takia, ettei palvelin hidastuisi skriptin takia. Palvelimen hidastuminen voisi paljastaa skriptin. Tämän jälkeen skripti etsi palvelimelta jos siellä olisi apachen tavallisimpia cgi-bin-hakemistoja ja siirsi last.cgi-tiedoston sellaiseen, jos sellainen löytyi. Palvelimelta ei kuitenkaan löytynyt näitä hakemistoja, joten tiedostoa ei siirretty mihinkään. Last.cgi-tiedosto oli todennäköisesti, jonkunlainen selaimen kautta toteutettavaan etäkäyttöön tarkoitettu tiedosto.
Seuraavaksi skripti keräsi koneelta tietoja computer-tiedostoon ja lähetti kyseisen tiedoston sisällön sähköpostilla osoitteisiin last@linuxmail.org ja bidi_damm@yahoo.com. Lopuksi skripti poisti palvelimelta kaikki last, lk.tgz, computer, ja lk.tar.gz -tiedostot/hakemistot yrittääkseen peitellä jälkiään. Rootkit vaikutti todella paljon jonkun romanialaisen scriptkiddien sähläykseltä.
Tiedostojen aikatiedot Sudo find -printf '%T+ M %p\n%a+ A %p\n%c+ C %p\n' sort less -komennolla sain listattua aikajanan kaikista levykuvalla olevista tiedostoista (Karvinen, T. 11.09.2013.) Kirjoittamalla /2001-03-15 sain näkyviin kaikki tunkeutumispäivänä tehdyt muutokset. Kyseisenä päivänä palvelimella oli joku kahteen kertaan käynyt tekemässä muutoksia todella moneen tiedostoon ensin klo 13 jälkeen ja sitten klo 19 jälkeen lisäksi seuraavana päivänä klo 03:45:02 on todella epäilyttävältä kuulustovia tiedostoja. Käytetystä aikavyöhykkeestä ei ollut tietoa. Kuvasta näkee, että skripti ajettiin klo 03:45:02 ja sen ajaminen päättyi klo 03:45:03. Tiedot ovat aakkosjärjestyksessä joten niistä ei saa täysin selvää kuvaa missä järjestyksessä komennot suoritettiin eikä kuvassa ole poistettuihin tiedostoihin liittyviä tietoja. Tsk_gettimes honeypot.hda8.dd > rawtimes -komennolla sai dumpattua levykuvalla olevien poistettujen tiedostojen aikatiedot rawtimes-tiedostoon (Karvinen, T. 11.09.2013.) Mactime -b rawtimes grep deleted less -komennolla pystyin selaamaan dumpattuja tietoja poistetuista tiedostoista
Tässä kuvassa on aikajana kyseiseltä ajalta. Sekunnit eivät täsmänneet täysin ja moni tiedostoista näkyi $OrphanFiles/OrphanFile-xxxx nimisenä. Perässä oleva numero on tiedoston index note. Kosinarin ratkaisussa luki näitä inodeja vastaavat tiedostot. 30188:67 <-> /bin/netstat ; original (clean) version 30191:60 <-> /bin/ps ; original (clean) version 48284:43 <-> /sbin/ifconfig ; original (clean) version 8100:177 <-> /tmp/?/w ; temporary file created by `makewhatis' ; which is regularly called by cron 2039:602 <-> /last/ssh 2040:1 <-> /last/pidfile 2041:4 <-> /last/install 2042:1 <-> /last/linsniffer ; damaged copy of linsniffer 2043:2 <-> /last/cleaner 2044:4 <-> /last/inetd.conf 2045:4 <-> /last/lsattr 2046:12 <-> /last/services 2047:4 <-> /last/sense 2048:1 <-> /last/ssh_config 2049:1 <-> /last/ssh_host_key 2050:1 <-> /last/ssh_host_key.pub 2051:1 <-> /last/ssh_random_seed 2052:1 <-> /last/sshd_config 2053:9 <-> /last/sl2 2054:5 <-> /last/last.cgi 2058:54 <-> /last/top 2059:1 <-> /last/logclear 2060:1 <-> /last/s 2061:622 <-> /last/mkxfs (Kosinair, P. 25.05.2001) Kyseiset Orphanfilesit olivat siis poistettuja rootkitin tiedostoja ja tiedostoja joita rootkit poisti.
Lähteet: Karvinen, T. 09.09.2013. Aikataulu Linux palvelimena ict4tn003-9 ja -10 syksyllä 2013. Luettavissa: http://terokarvinen.com/2013/aikataulu-%e2%80%93-linux-palvelimena-ict4tn003-9-ja-10-syksylla-2013 #comment-19977. Luettu: 16.09.2013. Karvinen, T. 11.09.2013. Forensic File Recovery with Linux Undelete. Luettavissa: http://terokarvinen.com/2013/forensic-file-recovery-with-linux. Luettu: 16.09.2013. Karvinen T. 04.06.2006. Raportin kirjoittaminen. Luettavissa: http://terokarvinen.com/raportin_kirjoittaminen.html. Luettu: 16.06.2013. Kosinair, P. 25.03.2001. Scan of the Month 15. Luettavissa: http://old.honeynet.org/scans/scan15/proj/som32.txt. Luettu: 17.06.2013. The Honeynet Project. Scan of the Month 15. Luettavissa: http://old.honeynet.org/scans/scan15/. Luettu: 16.09.2013. Tietoja: Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html Pohjana Tero Karvisen Linux-kurssi, www.iki.fi/karvinen