Edukativne Ranjive Web Aplikacije
description
Transcript of Edukativne Ranjive Web Aplikacije
Fakultet Elektrotehnike i RačunarstvaUnska 3, Zagreb
Edukativne ranjive web aplikacije
Seminarski rad iz kolegija ''Seminar''
Mentor: Student:
SADRŽAJ
1. Uvod 3
2. Najčešći načini napada 4
2.1. Umetanje 4
2.2. Slomljena autentifikacija i upravljanje sesijama 5
2.3. Cross site scripting (XSS) 6
2.4. Neosigurane reference na objekt 7
2.5. Sigurnosni propusti sistema 8
2.6. Izloženost osjetljivih podataka 8
2.7. Nedostatak kontrole razine pristupa 8
2.8. Cross site request forgery (CSRF) 9
2.9. Korištenje komponenti s poznatim ranjivostima 9
2.10. Nepotvrđena preusmjeravanja i prosljeđivanja 10
3.Najpoznatije ranjive aplikacije 11
3.1. Vrste ranjivih web aplikacija 113.2. DVWA (Dam Vulnerable Web Application) 113.3. Mutillidae 13
3.4. Hackxor 13
3.5. Exploit KB 14
3.6. OWASP Hackademic Challengles Project 14
4. Mutillidae uputstva 16
4.1. Instalacija 16
4.2. SQL umetanje 16
4.3. Cross Site Scripting (XSS) 17
4.4.Neprovjeravano preusmjeravanje 19
5. Zaključak 21
6. Literatura 22
2
1.Uvod
Svi znamo da ne postoji programski kod koji radi savršeno i bez greške, ali se uvijek
trudimo napisati što bolji programski kod koji uzrokuje najmanje zloupotrijebivih ranjivosti.
Jedna od najvećih ranjivosti web aplikacija su manipuliranje njihovom bazom podataka od
strane napadača ili korištenje aplikacije u neke druge svrhe. Kako bi web programeri
usavršavali svoje znanje i koristili ga u praksi postoje aplikacije koje su napravljene s
određenim sigurnosnim propustima. Svaka ranjiva aplikacija simulira web stranicu s
propustima i omogućuje da potpuno legalno, koristeći propusnosti uzrokujete određenu štetu
web stranici. OWASP (Open Web Application Security Project) sadrži bazu svih poznatih
ranjivih aplikacija namijenjenih učenju.
4
2.Najčešći načini napada
Ovo je deset najčešćih načina napada web stranica u 2013. godini prema OWASP-u.
2.1. Umetanje
Ova kategorija propusta se odnosi na ubacivanje napadačevog, zlonamjernog koda u
kod web aplikacije. Umetanje je lako otkriti istraživanjem koda, ali teško testiranjem.
Najčešća je SQL umetanje, međutim postoje i mnogi drugi tipova napada umetanjem poput
code injection, sa podvrstama PHP umetanje, javascript umetanje. Moguće je ubaciti i
naredbe operacijskog sustava, što je jedan od najtežih oblika umetanja jer daje napadaču
kontrolu nad operacijskim sustavom i samim računalom. SQL umetanje je opasano jer je
napadaču omogućeno kontrolirati bazu podataka. Kod SQL umetanja također postoji nekoliko
vrsta napada poput blind SQL injection, DOM based SQL injection itd. Server side code
umetanje također predstavlja jedan od težih propusta jer se omogućava ubacivanje koda koji
se izvršava na serveru i koji može upravljati svim podacima. Prilikom ovog napada mogu se
ubaciti i kodovi s vanjskih stranica ili preusmjeriti sa stranice na drugu stranicu, uz krađu
sesije ili kolačića.
Rješavanje problema umetanja varira od vrste umetanja na koju je web aplikacija
ranjiva. Jedan od načina rješavanja problema je korištenjem već i implementirane metode
Aplikacijskog programskog sučelja (engl. API) . Ako programsko sučelje nije dostupno,
trebali bi izbjegavati specijalne znakove koristeći rutine izbjegavanja koje nam pruža OWASP
ESAPI (Enterprise Security API). Korisnički unos je potrebno uvijek provjeriti na serverskoj
strani je li potvrđen i sadrži li neki napad, izfiltrirati ga ili odbiti prije bilo kakve daljne
obrade.
Primjeri:
1. Ako je zahtjev unesen na ovaj način, koji je uvijek točan, omogućeno nam je izlistavanje cijele baze podataka.
statement = "SELECT * FROM users WHERE name ='" + userName + "';"
' or '1'='1
5
2. U ovome slučaju je namijenjeno da varijabla a_variable bude broj, koji
predstavlja "id" polje. Ali ako je unesen string umjesto broja, dio koda iza "1;"
se izvršava i u ovome slučaju briše tablicu "users".
statement := "SELECT * FROM userinfo WHERE id =" + a_variable + ";"
1;DROP TABLE users
SQL naredba sada izgleda ovako:
SELECT * FROM userinfo WHERE id=1;DROP TABLE users;
2.2. Slomljena autentifikacija i upravljanje sesijama
Ako sami implementiramo svoj način autentifikacije ili upravljanja sesijom, moramo
biti vrlo oprezni. U ovakvim aplikacijama napadač može obrnutim inženjerstvom doznati
kako radi algoritam i pronaći način kako ukrasti tuđe sesije i identitete. Pronalaženje ovakvih
grešaka je teško jer zavisi od svake implementacije, ali ne i nemoguće. Često se ovakve
greške nalaze u funkcijama za odjavljivanje sa sustava (engl. logout), pamćenje lozinke ili je
sesijski identitet vidljiv u URL-u .
Preproručuje se uvijek koristit radni okvir (engl.framework) ili algoritme koji su već
provjereni za osiguravanje sesija i upravljanje autentifikacijom npr. ESAPI Authenticator and
User API.
Primjeri:
1. Sesijski identitet vidljiv u URL-u.
http://example.com/sale/saleitems?sessionid=268544541&dest=Hawaii
6
2. Korisnik pristupa stranici koristeći javno računalo. Umjesto "odjavi se" korisnik zatvori
pretraživač. Web server korisnika nije odjavio nakon određenog vremena neaktivnosti i
napadač koristi isto računalo neko vrijeme nakon i prijašni korisnik ostaje još uvijek
logiran.
2.3. Cross Site Scripting (XSS)
Cross Site Scripting je moguć na web stranicama koje nisu dobro kodirane i ne
provjeravaju ulazne parametre. Ova vrsta napada se zasniva na umetanju koda u aplikaciju,
najčešće HTML i JavaScript. Pomoću XSS-a moguće je ukrasti kolačiće ili preusmjerit web
stranicu na lažnu stanicu za prijavljivanje ( engl. phishing).
Postoje tri vrste Cross Site Scriptinga:
DOM-temeljen (engl.DOM- based ) XSS
Neustrajni (engl.Non-persistent ) XSS
Ustrajni (engl.Persistent) XSS
DOM- temeljen XSS omogućuje napadaču da zlonamjerni kod izvršava na žrtvinom
računalu. Na računalu se može već nalazit HTML stranica s greškom, sadržana je u instalaciji
operacijskog sustava. Korisnik klikom na link odlazi na napadačevu zlonamjernu web
stranicu. Zlonamjerna web stranica šalje naredbe ranjivoj HTML stranici pohranjenoj na
žrtvinom računalu i pohranjena HTML stranica izvršava naredbe. Na taj način napadač ima
pristup žrtvinom računalu.
Neustrajni XSS napad se najčešće koristi u servisima za pretraživanje web stranice.
Ukoliko se u ranjivu web stranicu unese zlonamjerni kod, on se izvršava. Žrtva najčešće
dobije pop-up prozorčić i pritiskom na link preusmjerava se na napadačevu web stranicu za
lažno logiranje. Korisnik se "logira" u stranicu i na taj način pošalje svoje podatke napadaču.
Ustrajni XSS se koristi kada korisnik ostavlja nekakvu vrstu poruke na web stranici.
Ako web stranica ne vrši provjeru unosa, napadač može ubaciti zlonamjerni kod u stranicu.
Persisten XSS je najopsaniji oblik XSS-a jer ne ugrožava samo jednog korisnika, već sve
posjetitelje te web stranice.
7
Zaštita od Cross Site Scriptinga se može napraviti ukoliko se provjerava unos
korisnika i filtrira.
Primjeri:
http://www.example.com/search.php?text=TEXTTOSEARCH
http:///www.example.com/search.php?text= <script>alert(document.cookie) </script>
JavaScripta se može ubaciti u web stranicu ukoliko tražilica radi na ovaj način. Web
stranica izvršava JavaScript. JavaScript kod se može kodirati u heksadekadske
vrijednosti čime ga napadač čini još manje sumnjivim.
2.4. Neosigurane reference na objekteNeke web stranice pri pristupu određenim objektima u web aplikaciji ne
provjeravaju pravo pristupa korisnika, oslanjajući se na činjenicu da korisnik neće
pristupiti onome što mu nije dostupno preko korisničkog sučelja. Mijenjanjem URL-a
korisnim može zatražiti pristup bilo kojem objektu.
Bitno je provjeravati prava pristupa prilikom svakog pristupa nekom objektu
ili stranici.
Primjer:
http://vunerableSite.com/cms/accountInfo?LoggedIn=True&userID=45674
Vaš korisnički račun.
http://vunerableSite.com/cms/accountInfo?LoggedIn=True&userID=45675
Račun drugog korisnika.
8
2.5. Sigurnosni propusti sistemaWeb aplikacija, kao i server, trebaju biti pravilno konfigurirani. Greška u
konfiguraciji otvara prostor napadaču za različite napade. Ovaj problem napadači
najčešće koriste za mijenjanje vizualnog izgleda stranice i ostavljanje raznih poruka.
Kako bi se izbjegli napadi potrebno je imati ažurirani softver uključujući sav
serverski softver, aplikaciju, kao i biblioteke koje aplikacija koristi te arhitekturu koja
omogućava sigurnu odvojenost između komponenti.
2.6. Izloženost osjetljivih podatakaČest je slučaj da se osjetljivi podaci čuvaju u bazi podataka kao običan tekst.
To zasigurno nije dobar način jer ako napadač dođe u posjed naše baze podataka ima
pristup identiteima svih korisnika. Napadač najčešće ne probije kripciju direktno, već
krađom ključeva ili mijenjanjem komunikacije između korisnika i servera ( man-in-the-
middle attack) (slika 1).
Potrebno se riješiti osjetljivih podataka ukoliko nisu potrebni te ih uvijek treba
kriptirati jakim ključevima i za komuniciranje koristiti HTTPS protokol.
Slika 1. Napadač presreće neki ili sav promet koji dolazi za žrtvinog računala.
Prikuplja podatke i prosljeđuje do destinacije koju je korisnik prvotno želio posjetiti.
9
2.7. Nedostatak kontrole razine pristupaAplikacije ne zaštite uvijek pravilno svoje funkcije. Takvi propusti omogućuju
napadačima pristup neautoriziranim funkcijama, npr. administratorskim.
Svakom korisniku treba dodijeliti prava kojima raspolaže pri pristupu
određenim podacima(slika 1.).
Slika 2. Provjera dozvole pristupa
2.8. Cross Site Request Forgery (CSRF)U ovoj ranjivosti se omogućava napadaču napraviti zahtjev i da ga na neki
način ubaci u web aplikaciju, tako da kada autentificirani korisnik dođe na tu stranicu
pošalje se napadačev zahtjev, ali kao da ga je poslao korisnik. Ovakav način napada
uzrokuje najveću štetu na stranicama online bankarstva te online prodaje. Često je ovaj
napad povezan sa umetanjem, odnosno XSS, kako bi napadaču omogućio da preko
žrtvinog pregledinka pokrene legalan zahtjev.
Kako bi se obranili potrebno je dodati neki token u skriveno polje, koje će se
slati u obliku HTTP zahtjeva i koje neće biti otvoreno preko URL-a. Moguće je
koristiti radne okvire (engl. frameworks) kao na primjer OWASP CSRF Guard koji ovo
radi automatizirano.
Primjer:
http://example.com/app/transferFunds?amount=1500&destinationAccount=4673243243<img src="http://example.com/app/transferFunds?amount=1500&destinationAccount=attackersAcct#" width="0" height="0" />
10
Napadač napravi zahtjev koji prebacuje novac s žrtvinog računa na napadačev i zatim
ga ugradi npr. u zahtjev za sliku. Ako je žrtva autorizirana i za to vrijeme posjeti web
stranicu napadača, krivotvoreni zahtjev automatski postaje dio žrtvine sesije.
2.9. Korištenje komponenti s poznatim ranjivostimaVećina aplikacija ima problem sigurnosti jer programeri najčešće ne održavaju
aplikaciju ažuriranom. Programeri ponekad ni ne znaju koje sve komponente koriste u
svojim aplikacijama. Ako je aplikacija ranjiva, samim time je ugrožena njena
funkcionalnost jer napadač može manipulirati njenom funkcijom.
Kako bi se spriječio ovaj oblik napada potrebno je definirati sve komponente
aplikacije i kontrolirati sigurnost javne baze podataka te držati je ažuriranom.
2.10. Nepotvrđena preusmjeravanja i prosljeđivanjaČest slučaj je da web stranice prosljeđuju korisnike na druge web stranice,
svojih partnera. U prosljeđivanju se često ne provjerava s kojim se sve podacima
prosljeđivanje odvija pa napadač može ubaciti prosljeđivanje do svoje lažne phishing
stranice s kojom može ukrasti podatke sesije.
http://www.example.com/boring.jsp?fwd=admin.jsp
3. Ranjive aplikacije
3.1. Vrste ranjivih web aplikacija
11
1. On-Line aplikacije- stvarne web aplikacije.
Neke od najpoznatijih:
Acunetix (http://testasp.vulnweb.com),
Google Gruyere(Python)( http://google-gruyere.appspot.com/start),
Hack.me (https://hack.me),
Hacking-Lab(https://www.hacking-lab.com/events/registerform.html?
eventid=245),
OWASP Hackademic Challengles Project - Live (PHP - Joomla)
( http://hackademic1.teilar.gr/)
2. On-Line aplikacije- aplikacije koje se instaliraju na operacijski sustav(GNU/Linux,
Windows, MAC OS X, itd.) koristeći web platformu(Apache/PHP, Tomcat/Java,
itd.).
Neke od najpoznatijih:
Damn Vulnerable Web Application - DVWA (PHP),
Mutillidae (PHP),
Google Gruyere (Python),
OWASP Insecure Web App Project (Java)
3. Virtualna okruženja- web aplikacije koje se pokreću s virtualnog stroja.
Neke od najpoznatijih:
Hackxor,
OWASP Broken Web Applications Project - BWA,
PHDays I-Bank,
Virtual Hacking Lab
3.2. DVWA (Dam Vulnerable Web Application)
12
Ranjiva web aplikacija temeljena na PHP jeziku i My SQL bazi podataka. Po upotrebi jedna od najraširenijih ranjivih web aplikacija. Razvijena je od strane Rian Devhursta i dio je
RandomStorm OpenSource projekta. DVWA podržava svih TOP 10 OWASP načina napada. Najlakši način instalacije je pomoću Apache XAMPP web servera. Svaka ranjivost je
izdvojena u posebnoj stranici, iste su nam ponuđene na početnoj stranici (slika 3.). Jedan od razloga tolike popularnosti je i mogućnost odabira razine zaštite u tri razine: slaba, srednja i visoka razina zaštite. Link za download: http://www.papervisions.com/setup-dvwa-lab-on-
xampp-in-windows/
Slika 3. Prikaz ranjivosti Brute Force; ispod svake ranjivosti postoje linkovi za opis ranjivosti te način izvedbe iste.
13
3.3. Mutillidae
Besplatna open source web aplikacija koja se lagano instalira koristeći Apache web poslužitelj XAMPP (slika 4.). Razvijena je od strane Adriana Crenshawe and Jeremy Druin. Također podržane ranjivosti su TOP 10 OWASP ranjivosti. Nakon svakog koraka omogućen je reset baze podataka. Korisnik odabire razine zaštite 0-5 te na početnoj stranici se nalaze linkovi na TOP 10 OWASP ranjivosti u 2007. 2010. i 2013. godini.
Slika 4. Mutillidae početna stranica
3.4. Hackxor
Ova web aplikacija funkcionira kao igra. Igrači moraju pronaći i iskoristiti ranjivosti da bi napredovali kroz priču u kojoj ste vi "blackhat haker" angažiran da pronađe drugog hakera bilo kojim mogućim sredstvima (slika 5.). Haxkxor možete preuzeti na adresi http://hackxor.sourceforge.net/cgi-bin/index.pl
14
Slika 5. Hackxor početna stranica
3.5. Exploit KB
Web aplikacija namijenjena isključivo za testiranje SQL napada (slika 6.). Platforma za upravljanje sadržajem je zasnovana na FCKeditoru. Aplikacija je uključena u knjigu Jeremy Fairclotha BackTrack Linux 5r2-PenTesting Edition lab. Link za preuzimanje http://exploit.co.il/projects/vuln-web-app/
Slika 6. Exploit KB početna stranica
3.6. OWASP Hackademic Challengles Project
Web aplikacija za testiranje znanja o ranjivostima, većinom namijenjena za rad na fakultetima. Omogućava realne napade u sigurnom okruženju. Sastoji se od deset izazova koji su poredani po težini (slika 7.). Kako bi učinili sve zanimljivijim svaki izazov ima priču vezanu uz napad. Najlakši način je instalacija preko XAMPP Apache web servera. Link na preuzimanje projekta https://code.google.com/p/owasp-hackademic-challengles/
15
Slika 7. OWASP Hackademic Project
Podržane ranjivosti SQL umetanje XSS napadi Upravljanje sesijama
TOP 10 OWASP
Damn Vulnarable Web Application
Mutillidae Hackxor
Exploit KB OWASP Hackademic
Project
Tablica podržanih ranjivosti iznad nabrojanih aplikacija.
16
4. Mutillidae uputstva
4.1. Instalacija
preuzeti XAMPP web Apache server sa stranice proizvođača te instalirati u defultnu mapu https://www.apachefriends.org/index.html
preuzeti Mutillidae sa stranice proizvođača http://sourceforge.net/projects/mutillidae/
stvoriti mapu C:\xampp\hotdocs\mutillidaete raspakirati skinuti zip file, koji sadrži stranicu u stvorenu mapu
pokrenuti xampp control panel te pokrenuti module Apache i MySQL ukucati adresu 127.0.0.1/mutillidae u web browser.Moramo navesti port jer
mutillidae dopušta samo takav način pristupa. Ako port nije aktivan otvorimo cmd.exe i unesemo naredbu: port 127.0.0.1
4.2. SQL umetanje
SQL umetanje je jedan od načina kako zaobiči sustav autentifikacije. Kliknemo na stranicu Login/Register. Kako bismo napravili SQL umetanje u polje username unesemo: " ' or 1=1 -- "( prvi razmak je samo radi vidljivosti), a password polje nam nije bitno (slika 8.). Ova naredba će uvijek vratiti istinu jer kažemo ako je username prazan ili ako je 1=1. Razlog zašto nam password polje nije bitno jer znakovi '--' u SQL jeziku označavaju komentar. Na taj smo način zakomentriali drugi dio naredbe. U stranici smo sada prijavljeni kao administrator jer nam naredba vrati prvi zapis koji zadovoljava uvjet, a to je prvi zapis napravljen u bazi podataka; administrator (slika 9.).SQL naredba po kojoj se pretražuje baza podatak izgleda ovako:
statement = "SELECT * FROM accounts WHERE username = ' or 1 --AND password=;
17
Slika 8. Unos upita
Slika 9. Rezultat upita logirani smo kao administrator
4.3. Cross Site Scripting (XSS)
XSS ćemo pokazati na primjeru mijenjanja pozadinske boje. Otvorimo traženu stranicu (slika 10.)
Slika 10. Odlazak na stranicu za prezentaciju XSS napada
18
Svakim unosom boja se postavlja na određenu vrijednost, ne provjerava se da li je unos ispravan heksadekadski niz 6 znakova. Tu ranjivost ćemo iskoristit da gledajući source code stranice ubacimo skriptu.
Unos će nam biti niz znakova: "unos" (slika 11.)
Slika 11. Izgled stranice za unos boje
Sada otvorimo source code stranice (ctrl+U) i pronađemo unos (ctrl+F) (slika 12.).
Slika 12. Rezultat Source code stranice
Naše mjesto umetanja će biti "unos". Moramo unijeti slijed znakova za background color takav da zatvorimo prve navodnike style="bakground-color i tag form, te završetak unosa mora zatvoriti drugi navodnik i završetak taga form: #unos" >
Slika 13. Unos skripte u polje za unos boje. Zaplavljeni dio je naša skripta koja će se izvršiti. Prefiks skripte je zatvaranje navodnika i taga form. Sufiks skripte je zatvaranje drugog
navodnika i zatvaranje ostatka taga form '>' sa tagom span.
19
Slika 14. Rezultat izvršenja skripte
Skripta se izvrši dva puta. Prvi puta pri postavljanju vrijednosti boje, a drugi puta pri njenom ispisu (slika 13.)
4.4. Neprovjeravana preusmjeravanja
Preusmjeravanje ćemo pokazati na sljedećem primjeru. Odemo na stranicu:
Nač cilj je, kao što i opis na stranici kaže da preusmjerimo korisnika na našu stranicu pritiskom pritiskom na "Back button", koji služi za povratak na prethodnu stranicu (slika 15.)
20
Slika 15. Početna stranica za napad
Za taj pothvat će nam trebati presretač proxija da možemo izmijeniti promet između web preglednika i servera. Jedan takav je Burp Suite. Podesimo web preglednik Firefox da sve zahtjeve šalje i prima preko porta na kojem je Burp, tako da možemo manipulirati podacima. Sad osvježimo stranicu i vidimo da paket nije poslan do servera dok ga mi ne proslijedimo kroz burp.
Odemo na stranicu za prijavljivanje na sustav i za ime unesemo bilo što, naprimjer "burp". Sad taj paket pogledamo kroz Burp i vidimo polje Referer koje nam je zapravo link na prethodnu stranicu na koju budemo preusmjereni klikom na "Back button". Tu upišemo našu adresu npr. "https://www.google.com" (slika 16.). Sada korisnik pritiskom na "Back button" nije preusmjeren na prethodno otvorenu stranicu već na našu unesenu.
Slika 16. Pogled na paket kroz Burp Suite i unos naše stranice
21
5. ZaključakSigurnost web aplikacija je bitna ukoliko želimo da naša web stranica služi
svrsi i da ne bude meta napada, pogotov ako sadrži neke bitne podatke. Postoje razni
alati kojima možemo istestirati ranjivosti naše web aplikacije na OWASP TOP 10
ranjivosti u 2013. godini te vodič kako poboljšati web stranicu. Također je bitno
savjetovati korisnika kako se on sam može zaštiti od napada jer u većini slučajeva
napad krađe korisničkih računa je korisnikova pogreška.
22
6. Literatura
Taddong blog, http://blog.taddong.com/2011/10/hacking-vulnerable-web-applications.html
OWASP, http://www.owasp.org
PenTest laboratory, http://pentestlab.org/10-vulnerable-web-applications-you-can-play-with/
Wikipedia, htttp://en.wikipedia.org
OS2-ZEMRIS, http://os2.zemris.fer.hr/
LogRythm, https://blog.logrhythm.com
SourceForge, https://sourceforge.net/projects/mutillidae/
YouTube kanal webpwnized, https://www.youtube.com/channel/UCPeJcqbi8v46Adk59plaaXg
23