Praktikum 13 - Veebirakenduse turvalisus - WebGoat näitel
Selles praktikumis tegeleme veebilehtede turvalisusega, et illustreerida millised vead võivad eksisteerida veebirakendustes, mis annaksid ründajale ligipääsu infosüsteemis hoitavatele andmetele. Praktikumis paigaldame virtuaalmasinasse veebirakenduse WebGoat
, mis on õppe eesmärgil spetsiaalselt loodud ebaturvaliseks ning kuhu on lisatud ülesanded, mis aitavad selgitada erinevaid turvaprobleeme. Teie eesmärgiks selles praktikumis on teha läbi meie poolt valitud WebGoat ülesanded, et tutvuda erinevate turvaprobleemidega. WebGoat põhineb OWASP Top 10 turvaprobleemide nimekirjal, mille eesmärk on kaardistada levinud turvaohtusid ja neist arendajaid teavitada.
Lisaks WebGoat'le kasutame ka OWASP ZAP
tarkvara, mis võimaldab "kinni püüda" ja modifitseerida HTTP
päringuid. See lihtsustab oluliselt veebirakenduste turvatestimist.
Virtuaalmasina seadistamine
Soovitame kasutada 12. praktikumis paigaldatud Kali Linux
virtuaalmasinat. Praktikumi käigus paigaldatav tarkvara töötab ka teistes Linuxi distributsioonides (Andmeturve Mint) ning ka Windowsi operatsioonisüsteemides. Kui praktikumis 12 seda ei teinud, siis ekraani dünaamiliseks suuruse muutmiseks on vaja paigaldada Devices
-> Insert guest additions CD image
-> ja käivitada käsurealt sudo sh VBoxLinuxAdditions.run
(CD kaustas) ning reboot
Vahetame JAVA
tagasi uusimale sudo update-alternatives --config java
sisestage JAVA 11
vastav number 1
vms (vajalik teha Linux Mint
kasutades).
java -version #peaks olema java 11 wget https://github.com/WebGoat/WebGoat/releases/download/v8.1.0/webgoat-server-8.1.0.jar chmod 755 webgoat-server-8.1.0.jar java -jar webgoat-server-8.1.0.jar
Eelnev laadib alla 8.1.0
WebGoat versioon (webgoat-server-8.1.0.jar) ning avage veebilehitsejas aadress http://127.0.0.1:8080/WebGoat/
NB! WebGoat 8 on vaja kasutada http://127.0.0.1:8080/WebGoat/
mitte http://localhost:8080/WebGoat/
.
Firefox ja Web Developer laiendus
Paigaldage Firefox ESR
käsuga sudo apt install firefox-esr
ning veebilehitsejale Web Developer
laiendus (Add-on
), mis võimaldab täpsemalt uurida veebilehtedes olevate vormide väljasid ning neid ka modifitseerida. Pärast Web Developeri
installeerimist tekib teile kontekstimenüüsse täiendav valik, mille alt valige Forms
ja te leiate sealt erinevaid võimalusi saadetava vormi muutmiseks.
OWASP ZAP
OWASP ZAP
võimaldab modifitseerida kõiki GET
, PUT
või POST
tüüpi HTTP
päringuid. Selle abil on võimalik kõrvale hiilida veebilehtede HTML
ja JavaScript
abil seatud piirangutest HTML vormide
väljadele, mis on osades WebGoat
ülesannetes vajalik.
Tõmmake alla ZAP 2.10.0
aadressilt: https://www.zaproxy.org/download/ ja paigalda tarkvara, mida Kali Linux
is on mugav teha käsuga
sudo apt install zaproxy
ZAP töötab man-in-the-middle proxy'na
. Selle esimesel käivitamisel võite saada veateate, et proxy't ei ole võimalik 8080 pordi peal jooksutada, kuna WebGoat juba kasutab seda porti. Juhul kui tekib vastav probleem, siis modifitseerige ZAP lokaalse proxy seadistust:
Tools
->Options
->Local Proxy
Address
:localhost
Port
:8081
Modifitseerige FireFox kasutama ZAP lokaalset proxy't 8081 pordi peal:
FireFox
->Preferences
->Advanced
->Network
->Settings
->Manual proxy configuration
- HTTP Proxy:
localhost
- Port:
8081
- Tavaseadistusena proxy ei tööta
localhost
korral. SeegaFirefox
aadressiribale kirjutageabout:config
->Accept the Risk and Continue
-> otsigelocalhost
->network.proxy.allow_hijacking_localhost
muutketrue
.
Täiendavalt tuleb ZAP
-> Tools
-> Options
-> HUD
-> Enable when using ZAP Desktop
eemaldada linnuke. Viimane aitab olukorra vastu, kus muidu võiks teil tekkida vead ühendumisel.
Nüüd on ZAP
võimeline pealt kuulama kõiki Firefox
poolt tehtud HTTP
päringuid, ning seda saab seadistada meile vajalike päringute nii öelda kinni püüdmiseks ja modifitseerimiseks.
HTTP POST päringute modifitseerimise sisse lülitamine ZAP'is:
Tools
->Add a custom HTTP break point
- Location:
Request Header
- Match:
contains
- String:
POST
- Location:
Kui mõne ülesande juures ei õnnestu nii päringut kinni püüda, siis proovige muuta HTTP breakpoint'i
nii, et otsingu (String:
) väärtuseks panna mõni modifitseeritavas HTTP vormis leiduva välja nimi (näiteks Submit) ning asukoha (Location:
) väärtuseks Request Body.
Selle tulemusena püüab ZAP kinni kõik proxy't läbivad POST päringud ning lubab neid modifitseerida nagu näidatud järgmisel pildil:
Testimiseks on soovitatav lahendada ülesanne:
General
->HTTP Basics
- Kui olete ebakindlam arvutikasutaja soovitame läbi lugeda ja ära lahenda ka teised General tunnid näiteks:
HTTP Proxies
, mis seletab kuidas kasutada Owasp ZAP tarkvara,Developer Tools
(tuntud ka kuiF12
nupp veebilehitsejas).
Ülesanded arvestuse jaoks
Arvestuse saamiseks lahenda järgmised ülesanded (lahendamiseks on lubatud kasutada interneti
, youtube
jne abi, eesmärk ei ole et te peast oskaksite ründeid sooritada vaid et te leiaksite lahenduse tuntud ründe probleemile ja seda suudaksite iseseisvalt korrata):
Client side
->HTML tampering
- Vihje: kasutaOwasp ZAP
võiWeb Developer
veebilehitseja laiendustClient side
->Bypass front-end-restrictions
- Kõik harjutused (Vihje: kasutaOwasp ZAP
võiWeb Developer
veebilehitseja laiendust)Client side
->Client side filtering
- Kõik harjutused (Vihje: lahendused peituvad koodis)- Alamülesanne
3
lahenduse leiate siit videost, kui ise välja ei mõtle
- Alamülesanne
(A3) Sensitive Data Exposure
-Insecure Login
(Vihje: kasutaOwasp ZAP
)General
->Crypto Basics
- Ülesanded2
,3
,4
, Ül 6 ja 8 on keerulisemad ja pole vaja lahendada(A1) Injection
->SQL Injection (intro)
(Näidislahendus: https://gitlab.com/BlackSheepSpicy/WebGoat/-/blob/master/WebGoat%20SQL%20Injection%20(Introduction).pdf Teie ülesanne on käsud sisestada ja kaasa mõelda. )(A7) Cross-Site Scripting (XSS)
->Cross Site Scripting
- Leidke ülesanne
(A4) XML External Entities
->XXE
.
- Teie eesmärgiks on aru saada, milles seisneb XXE tüüpi turvaprobleem ning lahendada ära kaks esimest XXE ülesannet (alamosad 4 ja 7). Vihje: Teises ülesandes (nr 7) ründe kood ei muutu, aga muuta tuleb päringus oleva parameetri väärtust. Kolmanda ülesande kirjelduses on viga ning seetõttu me selle lahendust ei nõua.
- Teie eesmärgiks on aru saada, milles seisneb XXE tüüpi turvaprobleem ning lahendada ära kaks esimest XXE ülesannet (alamosad 4 ja 7). Vihje: Teises ülesandes (nr 7) ründe kood ei muutu, aga muuta tuleb päringus oleva parameetri väärtust. Kolmanda ülesande kirjelduses on viga ning seetõttu me selle lahendust ei nõua.
- Lahendage ära
(A5) Broken Access Control
->Insecure Direct Object References
ja esitageÜlesanne 5
võõra profiili vaatamine ekraanipilt edukast lahendusest. Eelnevad ülesanded on soovitatav ka ära lahendada, kuid nende kohta pilti ei pea esitama. Abiks on video ning internetist leiab näitelahendusi kui ise hätta jääta. Ülesande puhul idee kuidas teha olulisem konkreetsest lahendusest.
Esitada Praktikum13:
Praktikumi ülesande lahendamine annab neli punkti ja esitamiseks on umbes kaks nädalat alates praktikumi toimumisajast ( kuni 19. mai tähtajani).
Lahenduseks tuleb esitada ekraanitõmmised
järgmiste harjutuste kohta, millelt peab olema näha lahendatud ülesanne koos rohelise taustaga. Iga harjutus on väärt 0.5p ja kokku on võimalik teenida 4p.
Client side
->HTML tampering
Client side
->Bypass front-end-restrictions
Client side
->Client side filtering
General
->Crypto Basics
- Ülesanded2
,3
,4
(A1) Injection
->SQL Injection (intro)
-> kõik(A7) Cross-Site Scripting (XSS)
->Cross Site Scripting
(A4) XML External Entities
->XXE
->4
ja7
(A5) Broken Access Control
->Insecure Direct Object References
->5
Lisamaterjalid
- SQL käskude dokumentatsioon
- SQL injection näide:
- Same-origin policy
- Google Analytics veebikülastajate jälgimise süsteemi kirjeldus
- Detailsemalt 'Same-Origin Policy' kohta:
Vanem WebGoat versioon 7 (vabatahtlik)
Vanem WebGoati versioon 7 sisaldab veidi teistsuguseid ülesandeid ja lahendusi. Kui on huvi võite ka neid vaadata.
Java 8
Kõigepealt paigaldage Java 8, mis kahjuks enam ei ole paljudes vaikimisi määratud tarkvara repositooriumides saadaval. Java 8 paigaldamiseks lubame ajutiselt virtuaalmasinas DEBIAN repositooriumi uuendused (KALI põhineb Debianil), paigaldame apt java ning muudame Java vaikimisversiooni.
$ echo "deb http://security.debian.org/debian-security stretch/updates main" | sudo tee -a /etc/apt/sources.list.d/debian.list
$ sudo apt update
$ sudo apt install openjdk-8-jre
$ sudo update-alternatives --config java
sisestage JAVA 8
ehk java versioonile 1.8
vastav number 2
vms.
$ java -version
WebGoat 7.1 paigaldamine
Seadistame WebGoat
veebirakenduse töötama virtuaalmasinas. Selleks käivitage käsureal järgmised käsud:
wget https://github.com/WebGoat/WebGoat/releases/download/7.1/webgoat-container-7.1-exec.jar java -jar webgoat-container-7.1-exec.jar
Nüüd avage Firefoxis
aadress http://localhost:8080/WebGoat
et ligi pääseda käivitatud süsteemile. Võite kasutada kasutaja guest
ja parooli guest
Ülesanded (vanad, vabatahtlik harjutamine)
Logige sisse aadressil http://localhost:8080/WebGoat/
kasutajaga guest
ja tehke iseseisvalt läbi järgmised ülesanded. Kui vajate lisainformatsiooni või abi siis küsige praktikumijuhendaja käest, või kasutage Hints
ja muid interaktiivseid võimalusi ülesannete juures. "Hints" funktsionaalsust kasutamine on lubatud ja kiirendab praktikumi ülesannete sooritamist.
Katsetamiseks võib lahenda järgmised ülesanded:
- Parameter Tampering
- Exploit Hidden Fields
- Bypass HTML Field Restrictions
- Code Quality
- Discover Clues in the HTML
- Injection Flaws
Paremaks arusaamiseks lahendage kõigepealt ülesanded ühel kahest järgnevast lehest:- SQL Injection Example
- Võite proovida ka interaktiivset demo, aga see nõuab nime sisestamist (telefoninumbri kontrollist läheb ka paar suvalistu numbrit läbi): https://free.codebashing.com/free-content/python/sql_injection
- String SQL Injection (Vaadake praktikumi lisamaterjalide all olevaid linke SQL päringute ning SQL injection kohta)
- Database backdoors
- Cross-site-scripting (XSS)
- Stored XSS Attack PS! Selle jaoks, et XSS ründed edukalt uusimate veebilehitsejatega töötaksid on vaja
HttpOnly
lipp küpsise seadetest ära keelatatrue
->false
(või HTTP headerist ära kustutada). Rohkem infot siin https://medium.freecodecamp.org/session-hijacking-and-how-to-stop-it-711e3683d1ac - Reflected XSS Attacks
- Stored XSS Attack PS! Selle jaoks, et XSS ründed edukalt uusimate veebilehitsejatega töötaksid on vaja
- Denial of Service
- Denial of Service from Multiple Logins
- Improper Error Handling
- Fail Open Authentication Scheme
- Proovi kas saad hakkama järgmiste ülesannetega:
- AJAX Security -> Insecure Client Storage
- Challenge -> The CHALLENGE!
- Soorituste ülevaadet näeb järgmiselt WebGoat leheküljelt:
-
Admin Functions
->Report Card
(peab sisaldama rohelisena juhendis olevate ülesannete ridu)
-