Honlap hackelést felderítő script

A minap Merras írt egy hasznos és tanulságos bejegyzést a blogjára Életveszélyes WordPress SEO spamek, amik kinyírhatják a helyezéseidet címmel, ami szóbakerült egy chat-en mint wordpress, wordpress feltörés, hackelés stb…

E beszélgetés vége az lett, hogy TLoF írt egy nagyon hasznos PHP scriptet (WordPress Hack Detector), mely segít felderíteni, hogy

  • feltörték-e a lapot (módosultak-e fájlok)
  • és ha igen, mely fájlok módosultak

Ezúton is köszönjük neki! :)

A program egyszerű és mindössze egyetlen fájlból áll, melyet fel kell tölteni a tárhelyre (pl. a wordpress root könyvtárába). Persze nem csak WordPress blog kapcsán hasznos, bármilyen más rendszerhez is jó. Emiatt a fájlneve kicsit megtévesztő lehet de most már marad e. :)

A program alapértelmezetten a PHP, INC, TPL, JS és HTML kiterjesztésű fájlokat vizsgálja, ellenőrzi.

A basedir-től számítva a script futtatásakor az összes alkönyvtárat feltérképezi, a bennük található fájlokról pedig fejlegyzést készít az alábbi adatokkal:

  • utolsó módosítás dátuma
  • a fájl md5 összege

A script futtatásakor (amikor meghívod böngészőből) a fájlokról tárolt régebbi adatokat hasonlítja össze az újakkal, jelzi az új fájlokat és azokat, melyek megváltoztak.

A törölt fájlokkal nem foglalkozik, hiszen ha azok eddig sem hiányoztak, biztonsági kockázatot biztos nem jelentenek.

A script futtatása

Első ugye mindenképp le kell legalább 1x futtatni a scriptet, hogy az a szükséges adatokat el tudja menteni.

Utána jöhetnek a frissítő – ellenőrző futtatások, amikor már tényleges csekkolja, hogy történt-e vmi gubanc a fájlokkal.

A kódban van egy ilyen részlet:

$password   = '';

Itt tetszőleges jelszó adható meg. A példa kedvéért most legyen a jelszó a “tutorialponthu”, szóval ez esetben a scriptet majd így kellene meghívni:

1
wphackdetector.php?write=on&password=tutorialponthu

Miután megadtad az új jelszót, azt értelemszerűen a link végére, az egyenlőségjel után be kell írnod amikor futtatod a scriptet a böngésződben.

Az adatokat gyűjti egy fájlba amit maga mellett hoz létre rkh.data néven.
Ehhez a file-t üresen létre kell hozni, és ideiglenesen irás jogot adni a file-ra a webszervernek. Egy átlagos WordPress honlapnál kb 100-200 kbyte körüli fájl jön létre.

Önellenőrző rész

Mvel készülni kell arra, hogy a progi adatbázisát is megpiszkálhatják, ezért erről is készül egy ellenörző md5 összeg.

Ezt az értéket mindig kiírja a rendszer az éppen aktuális file alapján, illetve amikor frissülnek az adatok a file-ban az új érték is megjelenik a képernyőn. Ezt ajánlott elmenteni valahova, és a következő futáskor megnézni, hogy változott-e.

A script eredménye

A script futtatásakor 2 fajta eredményt lehet kapni.

Amikor minden rendben

Ha minden rendben van, akkor képernyőn kb ennyi információ fog megjelenni:

1
2
3
4
RKH MD5
226671f4f5d4e374za2csi94b7c3621e
New files:
Changed files:

Tehát nincs új fájl és nem is módosult semmi.

Amikor valami változott

1
2
3
4
5
6
7
RKH MD5
226671f4f5d4e374za2cfc94b7c3621e
RKH DATA UPDATED
NEW MD5 HASH: 69a5a8c7b43dad40cf90391b37cdebab
New files:
Changed files:
./olvasdel.html :: 2011-02-24 10:04:35

Mint látható, egyből látszódik, hogy módosult (+ hogy mikor) az olvasdel.html fájlom.

Letöltés

A WordPress Hack Detector php script itt tölthető le: wphackdetectorv2.zip

A ZIP-ben 1db PHP fájl van.

Kérdés, kérés, javaslat szívesen látott dolog.

9 HOZZÁSZÓLÁS

  1. Köszi a scriptet, igen hasznos. :]

    Találtam viszont pár bugot:

    – A bejegyzésben rhk.data a kért filenév, viszont a script rkh.data nevű filet vár. (Érdekesség, hogy a kódban konzisztensen function rhk(); van, de ettől még működik, valamint az egyik szöveg is “RHK DATA UPDATED”. Minden más esetben rkh.)

    – Ha nem adsz meg jelszót, akkor sohasem menti el a filet. Ez azért van, mert a fileba mentés függvénye ellenőrzi a jelszó egyenlőségét, viszont előtte a kód az üres jelszót kicseréli egy véletlenszerű md5-re.

  2. Köszi a visszajelzést! Ahol tudtam, módosítottam most az rkh vs rhk-t illetve tettem default jelszót is a scriptbe, majd módosítottam a cikk szövegét. :)

  3. Azért ha már fájlokat módosítanak, akkor azt is igazán megtehetik, hogy egyszerűen átírják a scriptet (önellenőrzést kiszedik, bármi). De szerintem ahol ilyen előfordul, ott már régen nagyobb bajok vannak :-).

  4. @mad
    De ha webroot fölött van a script és cronból hívkálod már jó is lehetsz :)

  5. No és ez csak WP-hez működik, más honlapokhoz nem használható?

    Ebből a kérdésből is látszik, hogy nem tudom, hogy működik, de ha nem tároljuk a tárhelyen sem magát a scriptet, sem a korábbi ellenőrzés eredményét, akkor gondolom nincs esély arra, hogy egy esetleges támadás esetleg felülírja. Vagy nem lehet ezeket csak úgy egyszerűen visszamásolgatni?

  6. Mint ahogy azt a cikk is tartalmazza: “Persze nem csak WordPress blog kapcsán hasznos, bármilyen más rendszerhez is jó.” :P
    Ha lemented magadnak azt a fájl, ami az eredményeket tárolja és a köv. ellenőrzés előtt visszamásolod, akkor tökmindegy, hogy a támadás során felülírták-e vagy sem.

  7. No igen, gondoltam, hogy ez a második így lesz (a visszamásolgatós módszerrel kapcs.), az első kérdésemre pedig köszi a választ és bocsi, tényleg nem olvastam el figyelmesen a posztot! (Igazából csak átfutottam, mert én nem WP-t használok.)

  8. Én joomlás oldalt néztem meg vele, és tökéletesen működött! Köszönet a fejlesztőnek! Meg is találtam a módosított php állományt. Lehet hogy még hasznos lenne egy olyan változata amivel egy adott időintervallumot vizsgál a script. Mert ha tudom a betörés időpontját akkor csak azt szeretném tudni hogy mely állományok változtak akkor. Nekem speciel egy áttelepítés miatt az összes, hónapokkal korábbi állományt is kilistázta.

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét