Arvutiteaduse instituut
  1. Kursused
  2. 2017/18 kevad
  3. Andmeturve (LTAT.06.002)
EN
Logi sisse

Andmeturve 2017/18 kevad

  • Pealeht
  • Loengud
  • Praktikumid
  • Referaat
  • Kirjandus
  • Uudised
  • Lingid

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.

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. Praktikumi käigus paigaldatav tarkvara töötab ka teistes linuxi distributsioonides ning ka Windowsi operatsioonisüsteemides (testitud, et töötab Windows 8.1 peal).

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

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

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:

Ü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 praktikumijuhendaja käest, või kasutage Hints ja muid interaktiivseid võimalusi ülesannete juures. Aga proovige võimalikult vähe "Hints" funktsionaalsust kasutada.

Arvestuse saamiseks lahenda järgmised ülesanded:

  1. Parameter Tampering
    1. Exploit Hidden Fields
    2. Bypass HTML Field Restrictions
  2. Code Quality
    1. Discover Clues in the HTML
  3. 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
    1. String SQL Injection (Vaadake praktikumi lisamaterjalide all olevaid linke SQL päringute ning SQL injection kohta)
    2. Database backdoors
  4. Cross-site-scripting (XSS)
    1. Reflected XSS Attacks
    2. Stored XSS Attack
  5. Denial of Service
    1. Denial of Service from Multiple Logins
  6. Improper Error Handling
    1. 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

Tagasiside

Praktikumi lõpus palume anda tagasisidet, sest see võimaldab meil antud praktikumi ja ka järgmisi praktikume paremaks muuta. Tagasiside on anonüümne ja tagasiside vormi leiate järgneva lingi abil: tagasiside ankeet.

Praktikumi ülesanded

Praktikumi ülesannete lahendamine annab kaks punkti. Praktikumi ülesanne võiks valmis saada praktikumi lõpuks, aga juhul kui see ei õnnestu, siis on võimalik lahendust esitada nädala jooksul.

  • Praktikumi arvestuseks esita:
    • Ekraanipilt järgmiselt WebGoat leheküljelt:
      • Admin Functions -> Report Card
    • Enne ekraanivaate tegemist kirjuta tekstifaili oma täisnimi ja paigutage see nii, et see oleks ekraanivaatelt näha. Soovitame teha mitu pilti kuna ühele pildile ei mahu tulemused ära.

Boonuspunktid: Tudengid, kes lahendavad täiendavaid keerukamaid WebGoat ülesandeid võivad teenida kuni 1 täiendava lisapunkti. Boonusülesannete osas ei arvesta me neid ülesandeid, millel oli WebGoat keskkonnas täielik lahendus olemas. Boonusülesande lahenduseks peab esitama nii ekraanitõmmised kui ka selgitava raporti.

Lisaks on oodatud konkreetsed parandus-ettepanekud uuteks praktikumiülesanneteks või olemasolevate kaasajastamiseks (kehtib kõikide praktikumide kohta).

Lisapunktide andmine on iga praktijuhendaja otsustada ja ei kuulu vaidlustamisele, mis ühtlasi ka tähendab, et te ei tea mitut ülesannet te peate lisaks sooritama, et boonuspunkte teenida.

14. 14. WebGoat - praktikumi ülesanne
Sellele ülesandele ei saa enam lahendusi esitada.

Koduülesanne:

Koduse ülesande lahendamine annab ühe punkti. Lahendus tuleb esitada hiljemalt 2. juuniks.

  • Laadige alla uus WebGoat versioon (webgoat-server-8.0.0.M14.jar) ning avage ülesanne "Injection flaws" -> "XXE".

Teie eesmärgiks on aru saada, milles seisneb XXE tüüpi turvaprobleem ning lahendada ära kaks esimest XXE ülesannet. Valisime just 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 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.

 Lahenduseks tuleb esitada kahe esimese ülesande ekraanitõmmised, millelt peab olema näha lahendatud ülesanne koos rohelise taustaga ning teie nimi, mis on kirjutatud brauseri aadressiribale.

Juhul kui lahenduseks on lühike tekst, siis saate lisada selle kommentaarina. Sellisel juhul on lahenduse esitamiseks vaja lisada tühi fail, sest antud vorm nõuab lahenduse esitamisel faili esitamist. Koduse ülesande lahendus tuleks esitada aine kodulehelt. Korraga saab esitada ainult ühe faili, korduv lahenduse esitamine kirjutab eelmise lahenduse üle ning seetõttu tuleb vajaduse korral lahendus kokku pakkida üheks failiks. Lahendusi võtame vastu järgmistes failiformaatides: .txt, .pdf, .zip.

29. 14. WebGoat - kodune ülesanne
Sellele ülesandele ei saa enam lahendusi esitada.

Lisamaterjalid

  • SQL käskude dokumentatsioon
    • SELECT - Querying data
    • UPDATE - Modifying data
    • INSERT - Adding data
  • SQL injection näide:
    • SQL Injection Example
  • Same-origin policy
    • https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
  • Google Analytics veebikülastajate jälgimise süsteemi kirjeldus
    • https://developers.google.com/analytics/resources/concepts/gaConceptsTrackingOverview
  • Detailsemalt 'Same-Origin Policy' kohta:
    • http://blogs.msdn.com/b/ieinternals/archive/2009/08/28/explaining-same-origin-policy-part-1-deny-read.aspx
    • http://blogs.msdn.com/b/ieinternals/archive/2012/04/03/explaining-same-origin-policy-part-2-limited-write.aspx
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused