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

vagy azt, hogy

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:

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!

Comments

comments