Rosvoja ja kunnon kansalaisia

Tehtävän sisältö:

On 15 March. 2001, a Linux honeypot was successfully compromised, a rootkit was download to the / partition and then deleted from the system. Your mission is to find and recover the deleted rootkit. If you are not sure where to begin on conducting this forensic analysis and recover the rootkit, we highly reccommend you start with the Forensic Challenge. The steps you will have to follow for the rootkit recovery are similar to the steps discussed there. We have posted only the / partion for download to keep this challenge simple. The compressed image is 13MB, (honeynet.tar.gz) MD5=0dff8fb9fe022ea80d8f1a4e4ae33e21. Once you have downloaded, untarred, and unzipped the partition image, it will be 255 MB and the checksum should be MD5=5a8ebf5725b15e563c825be85f2f852e.

  1. Show step by step how you identify and recover the deleted rootkit from the / partition.
  2. What files make up the deleted rootkit?

Bonus Question: 
Was the rootkit ever actually installed on the system? How do you know?

Tehtävänanto (lähde) löytyy osoitteesta:  http://old.honeynet.org/scans/scan15/

Lyhyesti suomeksi:

Tarkoituksena on siis löytää saastuneen palvelinkoneen juuresta otetusta levykuvasta rootkit (haittaohjelma) ja selvittää kuka sen on tehnyt ja mitä se tekee.

1. Ennen tehtävän aloitusta

Koska rootkit sanana ei kerro juurikaan, niin lähdin selvittämään hieman teoriapuolta rootkitista ja mitä tarvitaan saastuneen levykuvan analysointia varten.

Rootkit lyhyesti Wikipedian sanoin: Rootkit on ohjelmisto, joka asentuu tietokoneelle hyökkääjän saatua sen hallintaansa. Rootkit on myös usein troijalainen, joka välitetään toisen ohjelmiston avulla asennettavaksi. Yleensä rootkitit pyrkivät piilottamaan itsensä asentumalla itse käyttöjärjestelmään jonkin siinä olevan tietoturva-aukon avulla, sekä tuhoamalla jäljet tartunnasta ja piilottamalla tietokoneella olevat vieraat prosessit tai verkkoyhteydet. Rootkittiin kuuluu usein etähallintamahdollisuus (takaovi).

Luettuani hieman rootkitistä linuxilla, löysin tähän tehtävään sopivaksi ohjelmaksi täysin ilmaisen (open source) Sleuthkit ohjelman ja yhtä sen toiminnoista nimeltä tsk_recover. Sillä oli mahdollista palauttaa annetusta levykuvasta poistettuja ja olemassa olevia tiedostoja tarkempaa tutkimusta varten. (tsk_recover – Export files from an image into a local directory).

Tämän tehtävän tekoon koneena toimi:

HP Elitebook 2560p (kannettava tietokone)
Prosessori: Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
Muistit: 8099 MiB
Kovalevy: 500gt Hitachi (SCSI)

—————————————–

2. Tehtävään vaadittavan sisällön lataus ja ohjelmiston asennus

Koska tehtävänanto jo itsessään vaikuttaa ja kuulostaa hieman epäilyttävältä koneen kannalta, tein sen turvallisuus syistä Xubuntu 32bit (versio 12.04) live cd:n avulla.

2.1 – Aloitin tehtävän lataamalla tehtävään kohdistetun levykuvan honeynet.tar.gz (http://old.honeynet.org/scans/scan15/honeynet.tar.gz) Xubuntun /home/xubuntu/Downloads kansioon. Komento lataamiseen Downloads kansiossa:

$ wget http://old.honeynet.org/scans/scan15/honeynet.tar.gz

2.2 – Tämän jälkeen ennen tarvittavien ohjelmien asennusta päivitin pakettien hallinnan ajantasalle.

$ sudo apt-get update

2.3 – Sleuthkit ohjelmiston asennus. Ohjelma sisältää monia työkaluja, keinoja tutkia järjestelmää ja honeynet.tar.gz levykuvaa.

$ sudo apt-get install sleuthkit

—————————————–

3. Tiedoston honeynet.tar.gz purku ja käsittely

3.1 – Kun tehtävään vaadittava paketti (honeynet.tar.gz) on ladattu ja sen tutkimiseen vaadittava ohjelma Sleuthkit asennettu voidaan lähteä purkamaan honeynet.tar.gz tiedostoa Downloads kansiossa komennolla:

$ tar -xvf honeynet.tar.gz

Jolloin huomataan, että Downloads kansioon on ilmestynyt honeynet kansio. Kansio sisältää honeypot.hda8.dd (levykuva) ja README (tekstitiedosto) tiedostot.

3.2 – Koin, että downloads kansio oli huono paikka honeynet -kansion sisällön tutkimiseen, joten siirsin sen parempaan (tutumpaan) paikkaan komennolla:

$ mv honeynet /home/xubuntu/rosvo

3.3 – Varsinaisten levykuvan honeypot.hda8.dd tutkimisen aloitin Sleuthkitistä löytyvän tsk_recover toiminnon ajamisella levykuvalle. Tsk_recoverilla pystyy palauttamaan ei käytössä (unallocated) ja käytössä olevia (allocated) tiedostoja. Tein tämän /home/xubuntu/rosvo kansiossa, komennolla:

$ tsk_recover ./honeypot.hda8.dd ./unallocated

Jonka jälkeen tuli ilmoitus: Files Recovered: 37 

Tämän jälkeen halusin tietää myös paljonko käytössä olevia (allocated) tiedostoja saan levykuvalta.

$ tsk_recover -a ./honeypot.hda8.dd ./allocated

Jonka jälkeen tuli ilmoitus: Files Recovered: 1614

Huom! Oletuksena ilman -a vaihtoehtoa, tsk_recover palauttaa vain ei käytössä olevia (unallocated) tiedostoja, joten se on hyvä tehdä niin päästään käsiksi myös jaettuihin tiedostoihin.

3.4 – Tästä eteenpäin mielenkiintoni heräsi, että mitä unallocated ja allocated kansiot oikeen sisältävät joten alotin niiden hierarkian tutkimisen komennoilla:

$ ls -l unallocated/ 

Unallocated kansio sisältää: etc kansion, $OrphanFiles kansion, lk.tgz tiedoston 

$ ls -l allocated/

Allocated kansio sisältää kansiot: bin, dev, etc, lib, root, sbin, tmp

Kokeilin myös komentoa $ tree , joka avaa allocated kansion sisällön kaikkien hakemistojen näkymät hienoon “puu” hierarkiaan. Tämä komento ei kuitenkaan kerro mitä näkyville tulevat tiedostot sisältävät, ainoastaan sen mitä tiedostoja löytyy mistäkin hakemistosta, hakemiston alihakemistosta jne. Eli täytyi keksiä hyvä keino tiedostojen tarkempaan syyniin ja mistä lähteä liikkeelle.

3.5 – Epäilyttävien ja silmiinpistävien tiedostojen listalle pääsi ainakin unallocated kansiossa olevat $OrphanFiles kansio, lk.tgz tiedosto joita en ainakaan ennen ole linuxissa tavannut, joten aloitin tutkimalla niitä. Googlettamalla tietoa $OrphanFiles kansiosta sain vastauksen ainakin yhteen kysymykseen.

Mikä on $OrphanFiles kansio ? 

$OrphanFiles on Sleuth Kit ohjelmiston muodostama virtuaalinen kansio, joka sisältää osittainen poistetut, “orvot” tiedostot, joilla ei ole enää hakemistopolkua ja nimeä. “Orpojen” tiedostojen varsinainen data on kuitenkin vielä tallessa, mikäli kyseisiä tiedostojärjestelmän lohkoja ei ole varattu uuteen käyttöön. Tälläisiä tiedostoja voi jäädä levylle kun ohjelmat “kaatuvat” tai kun tiedosto poistetaan, mutta se on vielä avattuna jollakin prosessilla. (lähde: http://eliimatt.wordpress.com/tag/tietoturva/ )

Koska $OrphanFiles kansion tiedostojen voidaan olettaa sisältävän myös rootkitin tiedostoja, aloitin heti tutkimalla niitä:

$ cd \$OrphanFiles/

Kansio $OrphanFiles sisälsi 26 tiedostoa, joista kaikki tiedostot alkoivat OphranFile- (jokin numeropääte).

Alotin tutkimalla tiedostoja yksitellen $ cat komennolla, jolloin paljastui että tiedostot sisälsivät mitä erikoisempia normaaliin ohjelmistoon kuulumattomia komentoja, toimintoja ja sisältöä (tekstiä). 

Huomioni kiinnittyi varsinkin kolmeen tiedostoon:

/OrphanFile-2041 = sisältää viittauksia: rootkittiin, linsnifferiin ym..
/OrphanFile-2047 = # Sorts the output from LinSniffer 0.03 [BETA] by Mike Edulla <medulla@infosoc.com>

/OrphanFile-2059 = tappaa kaikki linsniffer prosessit, poistaa tcp.login, luo tcp.login ja tuo linsnifferin sisällön tcp.logiin.

xubuntu@xubuntu:~/rosvo/unallocated/$OrphanFiles$ cat OrphanFile-2059
killall -9 linsniffer
rm -rf tcp.log
touch tcp.log
./linsniffer >tcp.log &

Kaikissa kolmessa em. tiedostossa oli viittauksia linsniffer nimiseen ohjelmaan.

Jätin hetkeksi $OrphanFiles kansion rauhaan tutkittuani tiedostot ja lähdin tutkimaan lk.tgz.

$ tar -xvf lk.tgz

Joka purki tgz paketista last kansion.

Siirryin last kansioon, jossa aloin tutkimaan tiedostoja tarkemmin. Kansio last sisälsi 23 toimintoa/komentoa, joista silmiinpistävin oli jälleen kerran ilmestynyt linsniffer.

Tein Googlella taustatutkimuksia linsnifferille ja oikeaan osuikin epäilyt.

Powerful Linux ethernet sniffer (http://www.securityfocus.com/tools/223)

“linsniffer is an ethernet sniffer. It sits and listens on a network and
grabs every packet it sees.” (lähde: http://www.mail-archive.com/redhat-list@redhat.com/msg02383.html)

Eli jos oikein käsitin niin linssniffer kuuntelee ja poimii kaikkea ethernet verkossa tapahtuvaa liikennettä (paketteja) ja salasanoja verkkoliikenteestä. Ei kuulosta kovinkaan luotettavalta ohjelmalta.

3.6 – Otin lk.tgz paketista puretun last kansion vielä tarkempaan syyniin

Install scripti sisälsi täysin samat tiedot kuin OrphanFile-2041, tämä herätti hieman epäilyjä ja voisin todeta, että rootkit todellakin oli asennettu koneelle, koska rootkitin asennus scriptiltä tämä minusta näytti. install scriptissä oli vaiheita rootkitin ominaisuuksille, kuten tietojen keräys, lähetys Samassa paketissa oli myös linsniffer.

sense scripti sisälsi samat tiedot kuin OrphanFile-2047

3.7 Koska allocated kansiota en ole vielä tarkemmin katsellut, aloitin sen tutkimisen. Aloitin tutkimisen install scriptissä mainituista kansioista ja tiedostoista, koska oletin että se jos jokin ohjaa koko rootkittiä.

Tässä muutama esimerkki kansio/tiedosto mitä install scriptistä löytyi ja mille install scripti teki omat editoinnit (myös itselle muistiin).

/dev/ida/.drag-on/tcp.log (selvitettynä alempana)
/dev/rpm = Sisältää viittauksia linsnifferiin taas

xubuntu@xubuntu:~/rosvo/allocated/dev$ cat rpm
3 sl2
3 sshdu
3 linsniffer
3 smurf
3 slice
3 mech
3 muh
3 bnc
3 psybnc

/dev/last = sisältää ip-osotteiden alkuja ja portteja?

xubuntu@xubuntu:~/rosvo/allocated/dev$ cat last
1 193.231.139
1 213.154.137
1 193.254.34
3 48744
3 3666
3 31221
3 22546
4 48744
4 2222

/sbin/ifconfig = Sisälsi paljon tietoa, mistä ei saanut selkoa.
/bin/netstat = Samoin netstat sisälsi paljon tietoa, mistä ei saanut erityisesti mitään selkoa.

Lähdin tutkimaan tarkemmin em. kansioita/tiedostoja tcp.logia. Ensimmäisenä huomasin, että /dev/ida/ kansio ei sisältänyt mitään joten myös oletin ettei sielä ole mitään. Oli pakko selvittää milloin ja mihin tuo .drag-on hakemisto menee ja miksi kansion edessä on piste. Wikipedia vastaa näin:  “In Unix-like operating systems a file or directory that starts with a period/full stop character (for example: /home/user/.config) is to be treated as hidden, that is the ls command does not display them. Use ls with the flag -a (ls -a) to include them.” Joten kokeilin sillä, koska näyttää olevan piilohakemisto.

xubuntu@xubuntu:~/rosvo/allocated/dev/ida$ ls -a
.  ..  ..   .drag-on

xubuntu@xubuntu:~/rosvo/allocated/dev/ida$ cd .drag-on/

xubuntu@xubuntu:~/rosvo/allocated/dev/ida/.drag-on$ ls -a
.   linsniffer  mkxfs  sense  ssh_host_key     tcp.log
..  logclear    s      sl2    ssh_random_seed

Ja install scriptissä mainittu tcp.log löytyi vihdoin! katsotaanpa mitä se sisältää.

xubuntu@xubuntu:~/rosvo/allocated/dev/ida/.drag-on$ cat tcp.log

cr272065-a.wlfdle1.on.wave.home.com => asdf1 [21]

—– [Timed Out]

ns2.giant.net => asdf1 [23]
da#da,~daO~daO~daU~ #’da[~dac~!dan~da~?

tcp.log tiedostoa luettua, selvisi että se sisältää ainakin hostin ja salasanan / merkkijonon?

4. Konkluusio

Aikaa tehtävän tekemiseen meni useita tunteja, koska piti ottaa selvää asioista tarkemmin. Myös tietyistä linuxin komennoista, mitkä ei aikaisemmin olleet tuttuja. Vastauksieni oikeellisuudesta, en voi mennä ihan täysin sataprosenttisesti takuuseen, koska tutkiminen oli osittain myös hakuammuntaa. En edelleenkään ole varma miten install scripti toimii täysin, mutta olen varma siitä, että rootkitin asennusscriptiksi se on suunniteltu. Tästä voisin olettaa, että järjestelmässä mistä levykuva on otettu, on ollut rootkit jo asennettuna.

install scriptin sisältämät tiedot oli myös $OrphanFiles kansiossa mihin jo ennalta poistettujen tiedostojen jämät menevät. ($OrphanFiles – Sleuth Kit ohjelmiston muodostama virtuaalinen kansio, joka sisältää osittain poistetut, “orvot” tiedostot, joilla ei ole enää hakemistopolkua ja nimeä). En tiedä voiko tästä tehdä mitään johtopäätöksiä?

Hyvä apu tehtävän tekemiseen löytyi:

Wikipedia

Tehtävä 3. Rosvoja ja kunnon kansalaisia

http://eliimatt.wordpress.com/tag/tietoturva/