Skip to content

Így történik a WP vírusok elemzése

    A WebShield ügyfélkör bővülése hozta magával azt a tényt is, hogy egyre több a mintavételezési lehetőségem, sokkal könnyebb újabbnál újabb támadási minták és vírusok begyűjtése. Igazából mindegy is lehetne számomra, hogy egy-egy kártevő mit csinál, mi a célja.

    Ennek ellenére mindig van bennem valami gyermeki kíváncsiság, tudni akarom mi történik a kártevő futásakor. Persze időm nem mindig engedi, hogy azonnal foglalkozzak az új mintákkal, ezért szorgosan pakolom őket egy mappába a gépemen, hátha egyszer lesz időm elemezgetni őket. Amikor aztán rámjön az elemezhetnék, kiveszek találomra egy mintát és megpróbálom visszafejteni a működését.

    Obfuscation is not security

    Mivel a kártevőnek valahogy le kell futnia, nem igazán lehet titkosítani. Titkosítás helyett az úgynevezett obfuszkációt szokták használni. Az obfuszkáció gyakorlatilag azt jeleni, hogy az eredeti kód parancsait úgy cserélgetjük / helyettesítjük, hogy a végén egy emberi szem számára olvashatatlan katyvaszt kapjunk. Leegyszerűsítve olyan, mintha a 12 helyett azt írnám, hogy 3+3+7-1. Ha ez utóbbit kiértékelem, ugyanúgy 12 lesz az eredmény, mint ahogyan az eredetiben is.

    Ez a tény magával vonja azt is, hogy ezek a kártevők bizony visszafejthetők. Ugyanakkor vannak olyan szinten, több körben obfuszkált kártevők is, aminél már azt mondom, hogy ehhez nincs türelmem, nem ér annyit.

    Egyszerűbb példák

    Régebben volt jellemző, hogy a kártékony kód egy egyszerű encode-olással (pl base64), vagy tömörítéssel volt „rejtve”, ezek a legkönnyebben megfejthető vírusok. Van, hogy ennél összetettebb módon obfuszkálvt a kód. Viszont a végén van egy „eval” parancs. Az eval lefuttatja a paraméterként kapott kódrészt. Ha ezt az eval parancsot echo-ra vagy print-re cseréli az ember, akkor futtatás helyett szépen kiírja a kártevő a futtatandó kódot. Ezzel a módszerrel néhány lépésben vissza lehetett fejteni az eredetit.

    A neten fellelhető néhány eszköz, amivel ezeket az egyszerűbb kártevőket több-kevesebb sikerrel vissza lehet fejteni. Ilyen az unphp.net, vagy a ddecode.com/phpdecoder.

    Aztán jöttek a bonyolultabb minták, amelyek létrehoznak egy halom értelmezhetetlen nevű változót, hogy utána egymásra hivatkozva építsék fel a kódot. A fenti eszközöknek általában már beletörik a bicskája az ilyen kártevők visszafejtésébe.

    Hogyan fogok neki?

    Az obfuszkált kódokban nincs sortörés, ezzel is nehezítve a megértést. A PHP nyelvben viszont a pontosvessző, illetve kapcsos zárójelek után tipikusan szokás sortörést tenni. Egy egyszerű search and replace művelet segít ezen. Ha megvan a sorokra tördelt kód, akkor felmérem, hogy a kód visszafejtéséhez mi lehet a legjobb módszer.

    Lehetséges, hogy van benne egy „eval” valahol, akkor a feljebb említett módszerrel a vírust veszem rá, hogy dekódolja önmagát. Ha esetleg hosszabb, összefüggő encode-olt részeket találok, akkor célszerű ezeket dekódolni először, és behelyettesíteni a kódba. Ez több körben kell eljátszani, de lépésről lépésre egyre tisztább lesz a kód.

    A végén szinte garantált, hogy lesz pár függvénydefiníció, értelmetlen névvel, a vírus fő részében pedig ezek a függvények kerülnek meghívásra. Ezeknek a függvényeknek a kódját megnézve viszonylag egyszerű megfejteni hogy mit csinál, és lehet neki egy értelmes nevet adni. Nem mindegy értelmezhetőség szempontjából, hogy azt látom egy sorban, hogy

    lghrsv(tthdsy($url),$f);

    vagy azt, hogy

    save_file(open_url($url), $f);

    Ez utóbbiból rögtön látszik hogy a netről tölt le valamit maga mellé a kártevő.

    Egy debugger mindig jól jön…

    Ha éppen bonyolultabb a kártevő, vagy csak gyorsan akarok ránézni valamire, akkor jó ha van kéznél egy fejlesztőeszköz, amivel lehet vizsgálni a programokat futás közben. Ebben régimódi vagyok, NetBeans-t használok. Erre a célra viszont tökéletes.

    A kódban megfelelő helyre elhelyezett töréspontokkal a felesleget (változók létrehozása, bitbűvészkedés) át lehet ugrani. Elég arra a részre fókuszálni, ahol a vezérlés van. Ezen a ponton nem fog zavarni, hogy ha ilyet látok:

    $Ge.$g10($D21($g10($D21($g10($D21($g10($D21("53")).$g10($D21($g10($D21("53"))."1")))).$g10($D21("50")))).$g10($D21("55")))).$O1c

    A debugger képes arra, hogy ha ezt a részt az egérrel kijelölöm, akkor visszafejti nekem, hogy mit is jelent pontosan ez a karaktersorozat:

    Érdekel a téma?

    Május 25-én tartok egy előadást, ahol többek között erről is fogok beszélni. A fő tematika a kártevők evolúciója, azaz hogy miként változtak meg az elmúlt években, és milyen lépéseket kell megtenni ahhoz, hogy a WordPress oldalad továbbra is védett legyen. Az újabb vírusokat egyre nehezebb felismerni is, visszafejteni is.

    Az esemény Facebook oldalát itt találod: https://www.facebook.com/events/1951959148365999/

    További információért katt ide: https://www.webshield.hu/termek/eloadas-wordpress-kartevok-evolucioja/

    Köszönöm, ha eljössz!

    1 thought on “Így történik a WP vírusok elemzése”

    Hozzászólás a(z) here bejegyzéshez Válasz megszakítása

    Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük