Ma egy rendkívül érdekes és tanulságos történetet osztok meg veletek. Az egyik ügyfelem arra panaszkodott, hogy a weboldalán minden éjszaka átírnak egy PHP-fájlt. Ez azt jelenti, hogy: az éjszaka során az oldalra érkező látogatókat átirányítják egy másik, hasonló tematikájú site-ra.
Mit lehet tenni?
Hol lehet a hiba?
Hogy tehetik ezt meg?
Az első gondolatom az volt, hogy ez bizonyára egy sérülékeny weboldal, úgyhogy elkezdtem átvizsgálni. Tudni kell, hogy ez egy egyedi fejlesztésű rendszer volt, amelybe azért bele lehet írni néhány hibát. A lényeg: célirányosan kerestem bizonyos függvényhívásokat, amivel ez kivitelezhető lehet. Azt tapasztaltam, hogy maga a kód nem tartalmaz olyan részt, ahol felület érné önmaga alatt a fájlokat.
Jó. Menjünk tovább!
Elkezdtem átvizsgálni az admint. Beléptem és megnéztem, hogy van-e ott olyan funkcionalitás, amivel ezt el lehet érni.
De ott sem találtam semmit…
A következő lépés: lekértem a naplófájlokat a webszerverről az adott időszakra vonatkozóan, hogy megnézzem, milyen hívások voltak. Hátha kiderül valami. Hátha van egy backdoor, vagy egy spéci hívást küldenek el az oldalon. Átnyálaztam a naplókat, de ugyanaz lett az eredmény: semmi.
Hogyan találtam meg végül a hibát?
Jött az újabb ötlet. Tipikus probléma szokott még lenni az FTP, ezért elkértem az FTP-naplókat is. Azt gondoltam: biztosan az FTP-jelszót törték fel, és ezen keresztül fertőzik az oldalt. De nem! Az FTP-napló patyolattiszta volt. Nézzük csak, mi lehet még! Azt már tudtam, hogy ez egy saját szerver, így adott volt a kérdés: kinek van hozzáférése? Volt egy Root és egy adminisztrátori hozzáférés. Itt már azért pislogtam. A mai világban nem az az iránymutató, hogy Root-felhasználóval férjünk hozzá egy szerverhez. Sokkal inkább alacsonyabb privilégiumú felhasználókat használnak, akik később tudnak szintet lépni. Na, de a lényeg, hogy miután kaptam hozzáférést, szétnéztem a szerveren. Azt gondoltam: ha Rootként be lehet lépni, talán valaki más is így tett. Megnéztem az összes naplót erre vonatkozóan, de nem volt belépés.
Vizsgálódtam tovább. Ekkor tűnt fel, hogy bár FTP-szinten tök jól el voltak szeparálva a weboldalak, itt azt láttam, hogy az összes szerveren lévő weboldal ugyanazzal a csoporttal, ugyanazzal a felhasználóval fut.
Mit eredményez ez? Azt, hogy ha az egyik weboldalt feltörik, akkor azon keresztül az összes többi weboldal is fertőzhető. Gyakorlatilag a weboldalak egymás fájljait tudják írni, olvasni, módosítani. Lássuk be, ez nem túl jó. Ez hiba. Ilyet ne kövessetek el! Mindig ellenőrizzétek le, hogy az oldalak ne tudják egymást keresztülfertőzni. Megvolt a probléma. Már csak a megoldásra volt szükség.
Mi volt a teendő?
Leszűrtem az összes naplófájlt az összes site-ra vonatkozóan az adott időszakra, és kinyertem belőle az IP-címeket. Megnéztem, hogy az IP-címek milyen országokból jöttek. Ami magyarországi volt, azt már első körben kizártam, csak a külföldiekkel foglalkoztam. Illetve elvégeztem még egy szűrést, hogy finomítsam a találatokat. Elég gyorsan rájöttem, mi okozza a gondot. Több hívást is találtam a kérdéses időpontban a naplóban. Íme: (kép)
Ez bizony egy úgynevezett webshell. Ha a támadó fel tud tölteni a szerverre egy ilyet, akkor viszonylag szabadon tud garázdálkodni. Fájlokat tud létrehozni, módosítani és szerkeszteni, onnan továbbfertőzni az oldalt, esetleg bizalmas információkat kinyerni. A lényeg: meglett a tettes. Ezen keresztül fertőzték át az oldalt.
Az első tanulság: ha szervert üzemeltetsz, a weboldalak mindig legyenek egymástól teljesen elszeparálva! Külön Group, külön User ID, ahogy futnak, és ehhez így kell beállítani a webszervert is. Így véletlenül sem tudják egymást keresztülfertőzni. A második tanulság: a hiba nem mindig ott van, ahol először keresed. Ebben az esetben az elsődlegesen megfertőzött weboldal nem a célpont volt, csak egy eszköz. A hackerek pedig minden eszközt bevetnek. Ha kell, 5 site-on fognak keresztülmenni, hogy elérjék a céljukat.