edukativne ranjive web aplikacije

29
Fakultet Elektrotehnike i Računarstva Unska 3, Zagreb Edukativne ranjive web aplikacije Seminarski rad iz kolegija ''Seminar'' Mentor: Student:

Upload: fele

Post on 18-Feb-2016

247 views

Category:

Documents


4 download

DESCRIPTION

Seminar

TRANSCRIPT

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

3

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