Egy kísérlet arra, hogy mi az a legkisebb méret, amiben egy működő keylogger írható
Ez a poszt meglehetősen technikai lesz, a gépi kód és a Windows API bugyraiban fogunk kalandozni.
Tehát mi is az a keylogger?
forrás: bash.hu/959
Röviden tehát: egy program, ami megjegyzi a lenyomott billentyűket. Kérdezőnk elég frappáns választ kapott, hiszen a Microsoft Word teljesen alkalmas arra, hogy a lenyomott betűket rögzítse, ámbár csak akkor képes erre, ha ő az aktív program.
A keylogger ennél sokkal mélyebben helyezkedik el a rendszerben: nem csak akkor képes a lenyomott billentyűket (és nem csak betűket) érzékelni, amikor aktív, hanem akkor is, amikor rejtve van és valamilyen más program van az előtérben.
A működésének alapja az, hogy ráakaszkodik (hook) a rendszer azon funkciójára, amelyik a billentyűzetet kezeli (igen, a billentyűzetet az operációs rendszer kezeli szoftverszinten, nem a program, amelyik előtérben van, ő csak megkapja az operációs rendszertől, ha annak olyan kedve van, hogy továbbítsa). Ilyen módon, a keylogger alapjában véve nem egy ártalmas szoftver, mindenkinek a rendszerében van egy-két olyan program, ami ezt a hookot alkalmazza. Például az Intel videokártyákhoz szállított beállítóprogram, ami a CTRL+ALT+jobbra gomb lenyomásakor elforgatja a képernyőt - többekkel láttam előfordulni és telefonálni, hogy "most akkor ezzel mit csináljak?!". Ez a program végig a háttérben várakozik és csak akkor reagál, ha egy speciális kombinációt nyom le a felhasználó.
Tehát a rendszerben találhatók olyan programok, amik figyelik éppen most, nálad is a billentyűzetet. Keyloggernek viszont az olyan típusú szoftvereket nevezzük, amik a lenyomott billentyűket rögzítik egy naplóba (akár fájl, akár adatbázis), innen a neve: key (billentyű) - logger (naplózó).
A keyloggert azért kriminalizálják, mert az összes billentyűlenyomás rögzítése és tárolása csak nagyon-nagyon ritka esetben a normális felhasználás része. Ezt a típusú programot legtöbbször arra használják, hogy adatot lopjanak felhasználótól, miközben a számítógépet használja. Csak, hogy két elég erős példát mondjak: jelszavak és bankkártyaadatok.
"Tudta-e?" - hogy a keyloggernek nem kell még csak rendszergazda jogosultság sem a hatékony működéshez?
Mi ez a kísérlet?
Láttam én már sok számítógépes vírust addig és azóta is, érdeklődve figyeltem a működésüket, reakciójukat, felépítésüket. Nevezzük ezt maximum műkedvelésnek, még a boncolásig sem jutottam el sok esetben - csak azonosítottam és eltávolítottam.
Ami viszont mindig megdöbbentett: a vírus mérete. Óriásiak voltak, nem lehetett őket nem kiszúrni és ez szerintem probléma (a vírusoknak, mármint). Ha csak megnézzük a scene versenyeken milyen kis méretben milyen bámulatos dolgokat tudnak összehozni a versenyzők: https://youtu.be/1NW8lBa29NY?t=89.
Ezeket a munkákat kevesebb, mint egy bekezdésnyi karakterrel megalkották. Ahogy már egy korábbi bejegyzésben is taglaltam, szenvedélyem az optimalizálás, a minél kevesebb erőforrásból minél többet kihozni. Ezért ütött szöget a fejembe, hogy "dehát miért kell egy keyloggernek ilyen nagynak lennie?".
Szóval nekiláttam, megnéztem, mi kell ahhoz, hogy billentyűleütéseket tudjak figyelni: 10 karakter - ezt még megjegyezni is egyszerű lenne! Persze önmagában ez a 10 karakter még nem képes érzékelni és rögzíteni a leütött billentyűket, de 10 karakterrel megoldható, hogy a keylogger megkapja mindet.
10 karakter
Ezzel a 10 karakterrel indult tehát a program, ami a következő "funkciókat" hivatott még szolgálni:
- minden rendszerben leütött billentyűt megkap
- a billentyűket, ha azok nem olvashatók (pl. nem betűk/számok/jelek), akkor olvasható szöveget társít hozzájuk (pl. a shift billentyű lenyomásakor csak egy kódot kap a program, a naplóba viszont már azt kell írni, hogy "shift", hogy érthető legyen)
- a naplófájlt álcázza olyan névvel, amivel egy gyakorlott rendszergazda is átsiklik fölötte
- figyeli azt is, hogy melyik program van előtérben és szintén rögzíti a váltást a naplóba (pl. a word-ről a böngészőre váltotta a felhasználó és a böngésző címsorában milyen weboldal van megnyitva)
- az elkészült naplót időnként feltölti egy internetes tárhelyre
A legutolsó változat működő magja már 1000 karakteres volt (+ a 2-es ponthoz szükséges lista, amig még kb. 300 byte, illetve pár szükséges sallang).
Tehát 1500 karakterből sikerült egy teljesen működőképes keyloggert írnom. Viszonyításképpen: ez a poszt eddig a pontig 4100 karakter körül van.
Az üröm az örömben sajnos az, hogy a Windows-on futó legkisebb program mérete 4096 byte lehet (legalábbis a fordító ekkorát generált egyetlen parancs miatt is). Elég pazarló, de ez van. Így, bár a szoftver lényegi része minden szükséges toldalékkal együtt maximum 1500 karakter volt, a Windows miatt ez fel volt kerekítve 4096-ra és ki lett töltve ürességgel.
A programot a mai napig nem ismerik fel a népszerű vírusirtók (persze, igazából nem terjed - de attól még kártékony is lehet).
Forráskód a githubon.
(A program utoljára Windows 98-on működött és csak a saját gépemen teszteltem.)