Pääsynhallinta - Monesti Sovellusturvallisuuden Heikoin Lenkki
Kinkkinen ongelma
Monesti haavoittuvuuksien välttämiseksi löytyy yksinkertainen ratkaisu. SQL-injektiot voi välttää käyttämällä turvallista kirjastoa SQL-kyselyiden tekemiseen. XXE:n voi välttää alustamalla XML-käsittelijän turvallisesti. Ja lukuisia muita esimerkkejä.
Mutta pääsynhallinta ei lukeudu tähän joukkoon. Sovelluksen pääsynhallinta ei yleensä ole erityisen vaikeaa, mutta sen kanssa on hirvittävän helppo tehdä yksi, kriittinen virhe, ja koko sovelluksen turvallisuus on vaakalaudalla. Pääsynhallintaan liittyvä ongelmia on myös helppo hyökkääjän löytää ja hyväksikäyttää.
Mitä on pääsynhallinta?
Tunnistaminen tarkoittaa sitä, että käyttäjältä pyydetään jonkinlainen tunnistetieto, esimerkiksi käyttäjätunnus ja salasana, jonka avulla voidaan todentaa, että käyttäjä on kuka sanoo olevansa.
Istunnonhallinta taas tarkoittaa sitä, että kun käyttäjä on kerran tunnistettu, käyttäjän identiteettiä kuljetetaan turvallisessa muodossa selaimen ja palvelimen välillä, jotta käyttäjän ei joka kerta sivulla jotain klikatessaan tarvitse uudestaan kirjoittaa käyttäjätunnusta ja salasanaansa.
Pääsynhallinta, tai auktorisointi, tarkoittaa sitä, kun sovellus tekee päätöksen, että saako tietty käyttäjä tehdä/nähdä jotain, vai ei.
Seuraavat esimerkit ovat pääsynhallintapäätöksiä:
- Saako käyttäjä X nähdä käyttäjän X tiedot?
- Saako käyttäjä X poistaa käyttäjän Y tiedot?
- Saako käyttäjä X käyttää toimintoa Y?
Ulkonäkö voi pettää
On tärkeää muistaa, että sovelluksen käyttäjä ei ole rajoittunut sovelluksen käyttöliittymään. Sovelluksen käyttäjä on rajoittunut sovelluksen tarjoamaan HTTP-rajapintaan, jonka käyttämistä helpottamaan on tehty käyttöliittymä.
Tämä tarkoittaa sitä, että jos sovelluksen on äärimmäisen tärkeä huolehtia pääsynhallinnasta palvelimen, ei pelkästään selaimen päässä. Ei ole minkäänlaista merkitystä pääsynhallinnan kannalta siinä, että mitä valikkoja sovelluksessa on visuaalisesti valittavana. Ainoa millä on väliä on, että mitä palvelimen päässä oleva koodi tekee HTTP-pyynnölle joka käyttäjältä tulee.
Harjoitus
Avaa sovellus, ja kokeile tehdä tilisiirto. Löydät IBAN-osoitteita mihin siirtoja voi tehdä “Contacts” välilehdeltä. Miltä HTTP-pyyntö näyttää? Pystytkö käyttöliittymästä valitsemaan tilisiirron lähettäjäksi IBAN-numeron joka ei kuulu sinulle? Entä jos yrität muuttaa numeron suoraan HTTP-pyynnössä?
Koska pääsynhallintakontrolleissa inhimillisen virheen mahdollisuus on niin suuri, on tärkeää että yksikkö- ja integraatiotesteissä testataan pääsynhallinnan toimivuus. Esim:
- Pystyykö toiminnon suorittamaan jos ei ole tunnistautunut lainkaan?
- Pystyykö toiminnon suorittamaan jos on kirjautunut käyttäjällä jolla ei pitäisi olla oikeuksia tietoon?
- Pystyykö toiminnon suorittamaan jos on kirjautunut käyttäjällä jolla ei pitäisi olla oikeuksia toimintoon?
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ä.