A szoftverek szűrőmechanizmusainak megkerülése miatt néha szükséges, hogy egy sebezhetőségen kersztül bejuttatandó shellkód ne tartalmazzon bizonyos karaktereket. Láttunk már olyan shellkódot, ami túléli az Unicode transzformációt, és csak egyszerű alfanumerikus karaktereket tartalmazóról is lehetett hallani.
Négy kutató azonban a perverzió tudomány egy magasasabb szintjére lépett, és kitalálták, hogyan lehet angol nyelvű shellkódot generálni. Igen, jól olvastátok! Bár nem jutottam a doksi végére, a módszer lényege a következő:
Először is megnézik, hogy minek felelnek meg az angol ABC betűinek ASCII értékei az adott platformon (esetünkben sima IA32). Ezek az utasítások egy incializációs utasítássor alapját fogják képezni. Elékszítenek egy kiindulási példányt az inicializációs utasítássorból, majd egy nagymáretű angol szövegtörzsből részleteket választanak, melyeknek annál nagyobb pontszámot adnak, minél hosszabb részletet fednek le az előállítandó utasítássorból. Így az inicializációs rész egy értelmes szöveghalmaz kisebb részeiből fog felépülni. Ez az inicializációs rész aztán kibontja az ún. dekódert, ami hasonló módon "becsomagolva" pihen a memóriába. A kibontás azt jelenti, hogy a dekódert reprezentáló byte-ok értékeit futásidőben megváltoztatják, így elérhetővé téve olyan instrukciókat, melyeket nem fedett le az angol ABC. A dekóder ezután a szintén egy értelmes szövegekből előállított byte-sorozatot dekódol a fentiekhez hasonlóan, ez pedig már maga a "hasznos teher" lesz.
A módszer lényege természetesen nem a különböző szűréseken és transzformációkon történő átjutás megkönnyítése, hanem a minta vagy akár spektrumfelbontás alapú shellkód-detektálási módszerek kijátszása. Egy ilyen módon felépített utasítássort egy számítógép nagy valószínűséggel nem fog tudni megkülönböztetni egy egyszerű szövegtől, pl. egy e-mail tartalmától.
synapse · http://www.synsecblog.com 2009.11.25. 09:56:06
synapse