Veebirakenduse turvalisus - WebGoat näitel
Selles alamteemas tegeleme veebilehtede turvalisusega, et illustreerida millised vead võivad eksisteerida veebirakendustes, mis annaksid ründajale ligipääsu infosüsteemis hoitavatele andmetele. Tunnis 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 tunnis on teha läbi meie poolt valitud WebGoat ülesanded, et tutvuda erinevate turvaprobleemidega.
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 olemasolevat Linux Mint
virtuaalmasinat. Tunni käigus paigaldatav tarkvara töötab ka teistes linuxi distributsioonides ning ka Windowsi operatsioonisüsteemides.
Paigaldage Firefoxi
Web Developer
laiendus, 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.
WebGoat
Kõigepealt paigaldage java jre käsuga sudo apt install openjdk-8-jre
ja sudo update-alternatives --config java
sisestage JAVA 8
ehk java versioonile 1.8
vastav number 2
vms.
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.
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.7.0 Core
aadressilt: https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project - pakkige see lahti ja käivitage teises terminaliaknas:
cd Downloads tar -xf ZAP_2.7.0_Core.tar.gz cd ZAP_2.7.0 ./zap.sh
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
- No Proxy for:
eemalda 127.0.0.1 and localhost
(Kui ei ole juba eemaldatud)
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
Ülesanded
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 juhendaja käest, või kasutage Hints
ja muid interaktiivseid võimalusi ülesannete juures. "Hints" funktsionaalsust kasutamine on lubatud ja kiirendab ülesannete sooritamist.
Arvestuse saamiseks 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 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 veebilehtsejatega 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 veebilehtsejatega töötaksid on vaja
- Denial of Service
- Denial of Service from Multiple Logins
- Improper Error Handling
- Fail Open Authentication Scheme
Lisaülesanded
- Proovi kas saada hakkama järgmiste ülesannetega:
- AJAX Security -> Insecure Client Storage
- Challenge -> The CHALLENGE!
- Vaata ülejäänute seast, mis sulle huvitavad tunduvad
Ettevalmistus (paigaldame uusima java): https://liberty-shell.com/sec/2019/01/29/webgoat/
sudo add-apt-repository ppa:linuxuprising/java sudo apt update sudo apt install oracle-java11-installer sudo apt install oracle-java11-set-default java -version echo $JAVA_HOME wget https://github.com/WebGoat/WebGoat/releases/download/v8.0.0.M25/webgoat-server-8.0.0.M25.jar chmod 755 webgoat-server-8.0.0.M25.jar java -jar webgoat-server-8.0.0.M25.jar
Eelnev laadib alla uue WebGoat versioon (webgoat-server-8.0.0.M25.jar) ning avage veebilehtisejas aadress http://127.0.0.1:8080/WebGoat/
NB! WebGoat 8 M25 on vaja kasutada http://127.0.0.1:8080/WebGoat/
mitte http://localhost:8080/WebGoat/
Leidke ülesanne Injection flaws
-> XXE
.
Teie eesmärgiks on aru saada, milles seisneb XXE tüüpi turvaprobleem ning lahendada ära kaks esimest XXE ülesannet (alamosad 3 ja 4). Valisime selle ülesande, sest see on uus tulija OWASP Top 10 turvaprobleemide nimekirja ning asub juba neljandal kohal. Rohkem infot XXE kohta leiate siit: https://www.owasp.org/index.php/XML_External_Entity_%28XXE%29_Processing.
Vihje: Teises ülesandes (nr 4) 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.
Täiendavalt lahendage ära Access Control Flaws
-> Insecure Direct Object References
ja esitage ÜL5 võõra profiili vaatamine ekraanipilt edukast lahendusest. Eelnevad ülesanded on soovitatav ka ära lahendada, kuid nende kohta pilti ei pea esitama. Abiks on video
Injection flaws
->XXE
->3
ja4
Access Control Flaws
->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: