Automatisoidun istunnonhallinnan tärkeys BurpSuitessa
Tehokkaan tietoturvatestauksen edellytyksenä on lähes aina automatisoitu istunnonhallinta testaustyökalussa.
Autotomatisointi mahdollistaa esimerkiksi sen että voit jättää skannerin yöksi skannaamaan sovelluksen eri toimintoja ja Burp osaa automaattisesti kirjata testikäyttäjän takaisin sisään kun istunto vanhenee.
Automatisoinnin avulla voit myös milloin tahansa ottaa sitemapista requestin, laittaa sen vaikka repeateriin ja lähettää sovellukseen antaen Burpin huolehtia evästeiden, tokenin tai mikä onkaan istunnonhallinnan tapa - päivityksestä.
Automatisoidun istunnohallinnan komponentit
Toteutuakseen, automatisoitu istunnonhallinta vaatii seuraavat komponentit:
- Istuntotietokanta: Mekanismi jolla pitää kirjaa nykyisestä istunnosta.
- Päivitysmekanismi: Mekanismi jolla päivittää HTTP-pyynnön evästeet/headerit/muu (riippuu sovelluksesta) nykyisen istunnon tiedoilla.
- Havaitsemismekanismi: Mekanismi jolla havaita että nykyinen istunto on vanhentunut.
- Tunnistautumismekanismi: Mekanismi jolla kirjautua tarvittaessa sisään.
BurpSuiten kyvykkyys automaattiseen istunnonhallintaan - Session Handling Rules
BurpSuitessa on sisäänrakennettuna kyvykkyys rakentaa istunnonhallintasääntöjä (session handling rules) jotka toteuttavat kaikki neljä yllä mainittua vaatimusta.
Istunnonhallintasäännöt löytyvät Burpin asetuksista ja projektissa on oletuksena valmiina yksi säännöstä joka:
- On nimeltään "Use cookies from Burp's cookie jar".
- On enabloituna.
- On scopetettu pelkästään Scanner -työkaluun.
- Sisältää vain yhden säännön, joka on "Use cookies from Burp's cookie jar".
Miten BurpSuiten istunnonhallintasäännöstöt rakentuvat?
Burpin istunnonhallintasäännöt rakentuvat kuvauksesta, scopesta sekä sarjasta askelia jotka suoritetaan järjestyksessä alusta loppuun, ellei suoritusta katkaista.
Kuvaus (Rule description)
Istunnonhallintasäännöstöllä on kuvaus jonka voi itse määrittää.
Tools scope
Tools scope taas määrittää että mihin Burpin eri työkaluihin istunnonhallintasäännöstöä sovelletaan. Jos haluat esimerkiksi että Repeater -työkalu pysyy automaattisesti kirjautuneena haluamallasi tavalla, aseta Repeater scopeen. Jos se ei ole scopessa, istunnonhallinta ei vaikuta Repeateriin eikä evästeitä tms. päivitetä automaattisesti.
Proxy-työkalu harvoin otetaan scopeen mukaan mutta sillekin on valideja käyttötarkoituksia. Yksi tyypillinen käyttötarkoitus on kolmannen osapuolen testaustyökalun (kuten vaikka sqlmap) ajaminen Burpin läpi, ajatuksena että Burp huolehtii että istunto pysyy validina koko skannauksen ajan.
URL scope
URL scope määrittää että mihin URL-osoitteisiin istunnonhallintasäännöstöä sovelletaan. Tässä tyypillisesti käytetään jompaa kumpaa:
- Use suite scope: Käytä tätä silloin kun olet laittanut Burpin scopeen pelkästään sellaisia URL-osoitteita joihin lähtevät requestit haluat että käsitellään tällä istunnonhallintasäännöstöllä, eikä scopessa ole esimerkiksi montaa kohdetta.
- Use custom scope: Käytä tätä silloin kun Burpin scopessa on esimerkiksi usempi kohde joihin haluat Burpin istunnonhallinta-automaation käyttäytyvän eri tavalla kohteesta riippuen.
On myös vaihtoehto "Include all URLs" mutta sen käyttö ei ole suositeltavaa korkean vahinkoriskin takia (lähettää vaikka vahingossa kohdesovelluksen tunnistautumistiedot johonkin ihan väärälle sovellukselle).
Säännöt (Rule actions)
Säännöstä koostuu yksittäisistä säännöistä jotka suoritetaan jokaiselle scopessa olevalle HTTP-pyynnölle yksi kerrallaan ylhäältä alas, aina loppuun saakka tai kunnes suoritus keskeytyy.
- Use cookies from Burp's cookie jar: Päivittää kaikki HTTP-pyynnön evästeet Burpin evästesäilöstä.
- Set a specific cookie or parameter value: Asettaa tietyn URL-parametrin, body-parametrin tai evästeen.
- Check session is valid: Tarkistaa onko nykyinen istunto validi.
- Vaihtoehto 1: Päättele käsillä olevasta HTTP-pyynnöstä ja vastauksesta.
- Vaihtoehto 2: Aja nauhoitettu HTTP-requesti tai sekvenssi (Macro) nykyisillä istuntotiedoilla ja päättele siitä.
- Prompt for in-browser session recovery: Pyydä burppia manuaalisesti ilmoittamaan jos istunto vanhenee jotta voit manuaalisesti kirjautua sisään uudestaan.
- Run a macro: Aja Macro (joka tosiaan on nauhoitettu läjä jossa on yksi tai useampi HTTP-pyyntö).
- Run a post-request macro: Aja Macro requestin jälkeen.
- Invoke a Burp extension: Käynnistä Burp-laajennus joka implementoi ISessionHandlingAction interfacen.
- Set a specific header value: Asettaa tietyn HTTP-otsakkeen arvon.
Miten Burpin istunnonhallintasäännöstöt toimivat?
Tyypillinen säännöstö voisi toimia esimerkiksi seuraavasti.
- Lähetät HTTP-pyynnön repeaterilla osoitteeseen https://www.example.com.
- Burp tarkastaaa onko enabloituja istunnonhallintasäännöstöjä
- Burp tarkastaa onko enabloitujen istunnonhallintasäännöstöjen joukossa sellaista säännöstöä. jonka Tool scopessa on Repeater.
- Burp tarkastaa näistä säännöistä, onko sellaista jonka URL-scopessa on "https://www.example.com".
- Jos tällainen säännöstö löytyy, Burp alkaa suorittaa sen sääntöjä. Kuvitellaan että säännöt ovat seuraavat:
- Use cookies from the session handling cookie jar
- Check session is valid
- Päätellään käsillä olevan HTTP-requestin HTTP-vastauksen Location -otsakkeesta
- Burp päivittää HTTP-pyynnön evästeet Burpin evästesäilöstä.
- Burp lähettää muunnellun HTTP-pyynnön web-palvelimelle.
- Burp tarkistaa HTTP-vastauksen ja päättelee siitä että onko istunto vielä validi.
- HTTP-vastauksessa on "Location" otsake joka ohjaa kirjautumissivulle, joka tarkoittaa että istunto ei ole voimassa.
- Ajetaan nauhoitettu Macro, joka lähettää POST-pyynnön kirjautumissivulle käyttäjätunnuksen ja salasanan kanssa.
- Otetaan vastauksesta saadut evästeet ja tallennetaan ne Burpin evästesäilöön.
- Palataan ensimmäiseen askeleeseen.
Burpin evästesäilö - Miten evästeet päivittyvät säilöön ja mistä säilön löytää?
Burpin evästesäilöä voi käyttää ja päivittää istunnonhallintasäännöistä käsin.
Evästesäilön voi määrittää myös automaattisesti päivittymään Burpin tiettyjen työkalujen näkemistä HTTP-vastauksista, sekä säilöä voi muokata ja tarkastella käsin. Tämä tapahtuu myöskin Burpin asetuksista "Sessions" (istunnot) kohdasta.
Istunnon voimassaolon tarkastus ("Check session is valid")
Tämä
Session Tracer -työkalu
Istunnonhallintasäännöt voivat käydä monimutkaiseksi ja joskus on hankala sanoa että miksi sääntö ei tahdo toimia halutulla tavalla. Tästä syystä Burpista löytyy (samasta "Sessions" kohdasta asetuksista) "Session Tracer" -niminen työkalu jolla istunnonhallintasäännöstöjen suorittumista voi seurata sääntö säännöltä.
Käytännön esimerkki: Tick a Box
Käytetään seuraavaksi oikeaa sovellusta esimerkkinä ja rakennetaan toimiva istunnonhallintasäännöstö! Jos haluat, voit käynnistää jo tässä vaiheessa tehtävän sivun alalaidasta ja tehdä itse mukana.
Vaihe 1 - Tutkimustyö
Ensin pitää selvittää miten sovellus tunnistaa käyttäjän ja hallitsee istuntoja. Tutkimustyövaiheen päätyttyä tiedät kaikki neljä tarvittavaa komponenttia (istuntotietokanta, päivitysmekanismi, havaitsemismekanismi ja tunnistautumismekanismi).
Aloitetaan avaamalla Burpin selain ja asettamalla scope asianmukaisesti.
Kirjaudutaan sitten sisään ja tarkastellaan HTTP-liikennettä Burpilla.
Kirjautuminen on selvästi tapahtunut POST-pyynnössä /login polkuun.
Pyynnössä on mennyt käyttäjätunnus ja salasana. Takaisin on tullut eväste nimeltä session ja uudelleenohjaus etusivulle.
POST /login HTTP/2
Host: www-qx8lkdutu3.ha-target.com
Content-Length: 47
...
username=john.doe%40example.com&password=s3cr3t
HTTP/2 302 Found
Date: Tue, 05 Dec 2023 18:09:31 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 189
Location: /
Vary: Cookie
Set-Cookie: session=eyJ1c2VybmFtZSI6ImpvaG4uZG9lQGV4YW1wbGUuY29tIn0.ZW9nWw.eEmhY6OJL5xMqCtbJkDltvUfBHU; HttpOnly; Path=/
Strict-Transport-Security: max-age=15724800; includeSubDomains
<!doctype html>
<html lang=en>
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to the target URL: <a href="/">/</a>. If not, click the link.
Seuraavassa GET-pyynnössä etusivulle on mukana eväste "session" ja vastaus on 200 OK.
GET / HTTP/2
Host: www-qx8lkdutu3.ha-target.com
Cookie: session=c9164eb9-186b-4020-8e01-07344c700b38
...
HTTP/2 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 15644
Vary: Cookie
Strict-Transport-Security: max-age=15724800; includeSubDomains
<!DOCTYPE html>
<html lang="en">
<head>
...
Selvitetään seuraavaksi havaitsemismekanismi siihen ettei istunto ole enää validi. Lähetetään tämä viimeisin HTTP-pyyntö repeaterille ja lähetetään se, varmistetaan että vastaus on edelleen 200 OK.
Nyt kirjaudutaan sovelluksessa ulos (joka tyypillisesti vanhentaa istunnon) ja lähetetään sama pyyntö uudestaan. Katsotaan mitä tapahtuu.
Vastaus ei ole enää 200 ja sisältää uudelleenohjauksen kirjautumissivulle Location -otsakkeessa. Uudelleenohjaus kirjautumissivulle on usein mainio tapa tunnistaa vanhentunut istunto.
Kerrataan komponentit:
- Istuntotietokanta: Käytetään Burpin evästevarastoa tallentamaan kulloinkin voimassa oleva session eväste.
- Päivitysmekanismi: Käytetään "Use cookies from the session handling cookie jar" sääntöä päivittämään käsillä oleva HTTP-pyyntö niin, että session -evästeen arvo korvataan evästevarastossa olevalla.
- Havaitsemismekanismi: Käytetään "Check session is valid" sääntöä lukemaan aina lähetetän HTTP-pyynnön vastaus ja päättelemään vanhentunut istunto Location -otsakkeesta jossa on sana "login".
- Tunnistautumismekanismi: Käytetään "Check session is valid" uudelleentunnistautumiseen jos havaitsemismekanismi päättelee että istunto on vanhentunut. Tehdään tämä nauhoittamalla macro joka lähettää POST-pyynnön /login polkuun.
Vaihe 2 - Istunnonhallintasäännöstön rakentaminen
Avataan Burpista asetukset ja sieltä kohta "Sessions".
Evästesäilön konfigurointi
Kuten mainittu, Burp voi päivittää automaattisesti evästesäilöä eri työkaluissa havaituista HTTP-vastauksista. Emme kuitenkaan halua että tätä tapahtuu hallitsemattomasti, koska muuten esim. sovelluksen selailu Burpin proxyn läpi saattaisi sotkea käynnissä olevan skannin tai intruder-ajon.
Poistetaan siis "Proxy" jos se on ruksittuna.
Nyt meillä on istuntotietokanta valmiina.
Poistetaan oletussäännöt
Poistetaan kokonaan oletussäännöstö ja tehdään uusi. Eli klikkaa "Remove" niin että listasta tulee tyhjä.
Luodaan uusi sääntö
Luo sitten uusi säännöstä "Add" napilla. Anna sen kuvaukseksi vaikka "My session handling rules".
Asetetaan scope
Avaa sitten "Scope" välilehti ja aseta työkaluista scopeen "Repeater" ja "Intruder".
URL-scopeen voit valita vaikka "Use suite scope". Huomaa kuitenkin että sinulla tulee olla kohteen URL-osoite lisättynä scopeen kuten käsitelty aiemmin kurssilla.
Ensimmäinen sääntö - Käytetään evästeitä Burpin evästesäilöstä
Lisää sääntö "Use cookies from the session handling cookie jar". Tämä päivittää aina scopessa olevan HTTP-pyynnön evästeet Burpin evästesäilöstä.
Voisit tässä vaiheessa rajoittaa että mitkä evästeet haluat päivittää. Voit jättää nämä tyhjäksi jolloin kaikki evästeet päivitetään.
Nyt meillä on päivitysmekanismikin kytkettynä. Vielä puuttuu havaitsemismekanismi ja tunnistautumismekanismi.
Toinen sääntö - Istunnon validointi
Lisää sääntö "Check session is valid". Tässä ruudussa on jonkin verran näperrettävää, mennään pala palalta.
Make request(s) to validate session: Valitaan ensimmäisenä että:
- Issue current request: Päätellään istunnon tila aina käsillä olevan HTTP-pyynnön HTTP-vastauksesta (sen sijaan että lähetettäisiin joku ihan erillinen HTTP-pyyntö. Joskus tämä on tarpeellista, mutta nyt ei).
- Tarkistetaan tilanne jokaisen HTTP-pyynnön kohdalla: Eli jätetään ruksimatta "Validate session only every N requests".
Inspect response to determine session validity: Sitten valitaan että:
- Location(s): URL of redirection target, eli toisin sanottuna meitä kiinnostava tieto sijaitsee HTTP-vastauksen Location-otsakkeessa.
- Match type: Literal string (ei siis esim. Regex-patterni, vaikka sellaistakin voi joskus haluta käyttää).
- Case-sensitivity: Ei ole kirjainkoolla väliä.
- Match indicates: Invalid session, eli jos tulee kuvatunlainen osuma HTTP-vastauksesta niin se tarkoittaa että istunto ei ole validi. Tämän voisi tehdä käänteisesti jos se olisi kyseisen sovelluksen osalta hepompi.
Define behavior on session validity: Seuraavaksi valitaan että:
- If session is invalid, perform the action below (Jos istunto ei ole validi, tehdään seuraavaa):
- Run a macro (Ajetaan Macro)
Sitten pitää nauhoittaa Macro.
Macron nauhoittaminen
Klikkaa "Add" nauhoittaaksesi uuden Macron.
Avautuva näkymä on käytännössä vain HTTP proxy-historia. Näkymään päivittyy reaaliajassa kun teet lisää HTTP-pyyntöjä Burpin läpi.
Ennen macron nauhoittamista kannattaa yleensä kirjautua sovelluksesta ulos ja tyhjentää selaimesta evästeet sun muut. Silloin saat Macrolle nauhoitettua puhtaan alkutilan.
Sitten voit päivittää sovelluksen sivun ja kirjautua sisään. Tästä pitäisi syntyä vähintään:
- Yksi GET-pyyntö jossa ei mene evästeitä mukana (HTTP-pyynnön Cookie-otsakkeessa) mutta jossa tulee session-eväste takaisin HTTP-vastauksen Set-Cookie otsakkeessa).
- Yksi POST-pyyntö /login -sivulle jossa menee mukana session -eväste (HTTP-pyynnön Cookie -otsakkeessa) ja vastauksena on 302 ja uudelleenohjaus etusivulle.
Valitse nämä kaksi HTTP-pyyntöä listasta. Järjestyksellä on väliä. Paina "Ok".
Nimeä Macro vaikka "Login". Älä paina vielä "Ok" koska Macro pitää sekä konfiguroida että testata ensin.
Valitse ensimmäinen HTTP-pyyntö listasta (GET-pyyntö jossa ei ole evästeitä) ja klikkaa "Configure" (määritä).
On tärkeää ettei evästeitä evästesäilöstä käytetä tässä HTTP-pyynnössä jatkossakaan, ettei vanhentunutta evästettä vahingossa käytetä silloin kun yritetään kirjautua uudestaan.
Jätä ruksi "Add cookies received in responses to the session handling cookie jar" koska sovelluksen ensimmäisellä sivulatauksella palauttama "session" eväste on syytä ottaa heti säilöön.
Sen sijaan ota ruksi pois "Use cookies from the session handling cookie jar" kohdasta koska tarkoitus on luoda tuore, puhdas kirjautuminen eikä käyttää vanhoja evästeitä..
Paina lopuksi "Ok".
Testaa seuraavaksi Macroa.
Jos kaikki menee hyvin, testisekvenssin viimeisen HTTP-viestin pitäisi sisältää uudelleenohjaus etusivulle.
Paina "Ok" ja "Ok" palataksesi takaisin. Macro on nyt nauhoitettu ja kytketty ajettavaksi jos istunto ei ole enää validi.
Lopuksi vain jätä ruksit kohtiin "Update current request with parameters matched from the final macro response" ja "Update current request with cookies from session handling cookie jar".
Paina "Ok" ja "Ok". Säännöstösi on valmis.
Säännöstön kokeilu
Kirjaudu sovellukseen ja klikkaa yhtä rukseista. Katso minkälaisen HTTP-viestin klikkaus jättää ja lähetä sitten HTTP-pyyntö repeateriin.
Lähetä sitten pyyntö repeaterilla. Kokeile poistaa koko cookie-eväste ja lähetä uudestaan pyyntä repeaterilla.
Jos säännöstö toimii, eväste ilmestyy maagisesti aina uudestaan HTTP-pyyntöön ja HTTP-pyyntö menee läpi.
Säännöstön debuggaus session tracerilla
Voit debugata ongelmaa tai vahvistaa ylipäätään että säännöstö toimii odotetulla tavalla aiemmin mainitulla session tracer -työkalulla. Klikkaa "Open sessions tracer".
Näkymä on aina aluksi tyhjä.
Lähetä nyt viesti Repeaterilla. Katso sitten session traceria.
Sinun pitäisi nähdä että:
- Säännöstöä käytetään
- Tarkistetaan onko istunto validi
- Huomataan että se ei ole validi
- ajetaan Macro "Login"
- Lisätään eväste evästesäilöön
- Lähetetään päivitetty HTTP-pyyntö
Istunnonhallintalaajennukset ("Invoke a Burp Extension")
Emme tässä moduulissa käsittele omien laajennusten nikkarointia, mutta lyhyesti niitä voi tehdä Javalla tai Pythonin tapaisella ja ne mahdollistavat monipuolisemmin erilaisten skenaarioiden käsittelyn. Pelkillä Burpin valmiiksi tarjoamilla työkaluilla ei valitettavasti pysty automatisoimaan jokaisen sovelluksen kirjautumista ja istunnonhallintaa.
Harjoittele
Käynnistä tästä itse "Tick a Box" sovellus ja suorita tehtävä.
Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.
Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.