Tietoturva-aukon anatomia

Baarimikko näkee ikkunasta Maken ja alkaa kaataa kaljaa. Ainahan Make tähän baariin tulee ja juo aina ison kolmosen. Baarimikko optimoi, hienosti sanottuna ”suorittaa spekulatiivisesti”.

Jos Make meneekin ohi tai juo vaihteeksi muuta, ei ole tullut isoakaan vahinkoa. Tietotekniikassa optimointi voi kuitenkin joskus olla pahasti haitaksi. Kuvitellaan ohjelma, joka tarkistaa onko salasana oikein. Olkoon oikea salasana ”TERVA”, ja käyttäjä yrittää sanaa ”TESTI”. Ensimmäiset kirjaimet ovat samoja, T on T. Samoin toiset, mutta kolmannet eivät, R ei ole S. Käyttäjän ruudulle tulee ilmoitus väärästä salasanasta, loppuja merkkejähän on turha tarkistaa. Kaikki hyvin?

Ei ole. Jos mitataan tarkasti aikaa joka kului tarkistukseen, voidaan päätellä että pari ensimmäistä merkkiä oli oikein. Pahimmillaan riittää hakea salasana kirjain kerrallaan.

Hiljakkoin kerroituista tietoturva-aukoista yhdessä on kyse nimenomaan optimoinnista ja spekulatiivisesta suorituksesta.

Tietokone optimoi mm. niin, että nopeaa mutta kallista muistia on vähän, hidasta mutta halpaa paljon. Kun jotain tietoa on juuri käsitelty, sitä luultavasti käsitellään kohta uudelleen. Siksi hitaasta muistista viimeksi haetut tiedot tallennetaan nopeampaan, ja usein tieto löytyykin siitä. Näin arkielämässäkin tehdään, viimeksi luetut kirjat ovat työpöydällä eikä tiedekunnan kirjastossa jne.

Toiseksi tietokone optimoi kuin alun baarimikko. Kun ohjelma haarautuu kohta useampaan mahdolliseen suuntaan, oletetaan että tullaan valitsemaan sama suunta kuin viimeksi. Kaadetaan kalja valmiiksi Makelle.

Miten tästä syntyy tietoturva-aukko?

Oletetaan ohjelmassa olevan käskyn ”Hae muistipaikan 123+X sisältö.”, jossa X on luku, jota ei saa paljastaa ohjelman ulkopuolelle. Joskus tällainen käsky suoritetaan spekulatiivisesti niin, ettei tuota sisältöä oikeasti tarvitakaan. Tarpeeton muistihakuhan ei haittaa mitään.

Kuvitellaan yksinkertaisuuden vuoksi, että X on joko 1 tai 2. Nyt toinen ohjelma mittaa tarkan kellonajan ja hakee muistipaikan 124 sisällön.  Jos tämä tapahtui nopeasti, oli muistipaikka 124 nopeassa muistissa, ja tällöin toisen ohjelman X oli 1; jos haku kesti kauemmin, oli 124 vain hitaassa muistissa, ja X siis 2.

Joteensakin näin ohjelma voi saada toiselta tietoa jota sen ei saisi saada. Todellinen kuvio on hieman monimutkaisempi, mutta vain hieman.

***

Jos luit tähän saakka ja ymmärsit, kannattaa pohtia hakisiko opiskelemaan tietojenkäsittelytiedettä. Lisätietoja LUO-tiedekunnasta. 🙂

Be Sociable, Share!