Joka päivä saamme kuulla ja lukea erilaisista tiedotusvälineistä, kuinka siitä ja siitä verkkosovelluksessa on löytynyt haavoittuvuus (engl. vulnerability). Ammattilaiset seuraavat esimerkiksi Securityfocuksen bugtraq-listaa tai haavoittuvuustietokantaa, jotkut tärkeimmät pääsevät CERT-FI:in listoille ja joistakin saa lukea jopa Helsingin Sanomista tai teksti-TV:stä. Vauhti on aikamoinen, tänään 28.8.2006 ilmestyi Bugtraq-haavoittuvuustietokantaan 29 uutta haavoittuvuutta tai haavoittuvuusryvästä, eikä tämä päivä ole kovin suuri poikkeus. Tämän päivän haavoittuvuuksia löytyi esimerkiksi Linuxin ytimestä, Mozilla-tuoteperheestä (myös siis Firefoxista), Ciscon verkkotuotteista sekä Microsoftin Internet Explorerista.
Mutta mikä oikeastaan on haavoittuvuus? Haavoittuvuus on jonkinlainen virhe, joka antaa uhalle mahdollisuuden toteutua. Haavoittuvuuteen liittyy yleensä myös käsite hyökkäysvektori (engl. attack vector), joka on se konkreettinen reitti, jonka kautta haavoittuvuutta käytetään hyväksi. Hyväksikäyttäjästä yleensä tietoturvapuolella käytetään nimitystä hyökkääjä, tosin sen ei tarvitse välttämättä olla ihminen, joissakin tilanteissa hyökkäys voi tulla esim. luonnonvoimien taholta.
Selvennetään termejä parilla esimerkillä. Otetaan ensin esimerkki varkausuhasta. Uhka on siis se, että voro vie kannettavan tietokoneen. Nyt jos minä jätän kannettavan tietokoneen näkyville autoon, haavoittuvuus on siinä, että tiiliskivi tekee aika pahaa jälkeä auton ikkunan kohdatessaan ja fyysinen turvallisuus murtuu. Varas huomaa tilaisuuden, iskee sivulasin mäsäksi ja kävelee läppärin kanssa vihellellen pois. Tässä tilanteessa hyökkääjä oli varas, haavoittuvuus oli lasien murtumisalttius kiven kohdatessaan ja hyökkäysvektori sivuikkuna. Hyökkäysvektori olisi voinut myös olla takaikkuna.
Samaan tapaan verkkoturvallisuudessa. Viime vuodenvaihteen WMF-haavoittuvuus, josta ei kohusta huolimatta koskaan tullut isoa epidemiaa, oli ongelma WMF-kuvatiedostojen käsittelyssä, joka salli ulkopuolisen koodin suorittamisen kohdejärjestelmässä. Tässä tapauksessa hyökkääjä olisi voinut olla kuka tahansa ulkopuolinen ilkiö, mutta mielenkiintoisinta oli se että tätä haavoittuvuutta olisi voinut käyttää hyväkseen usean hyökkäysvektorin kautta. Riitti, että sai käyttäjän esikatselemaan haittakoodia sisältävää kuvaa, esimerkiksi lähettämällä kuva sähköpostilla tai pistämällä sen web-sivulla tai vaikka antamalla se levykkeellä. Hyökkäysvektoreiksi kelpasi siis lähes mikä tahansa menetelmä tahansa näyttää kuva kohteen tietokoneella.
Jotta uhasta tulisi todellinen tietoturvaongelma, tarvitsemme epäpyhän kolmiyhteyden: hyökkääjän, haavoittuvuuden sekä hyökkäysvektorin. Minkä tahansa näistä eliminoimalla voimme olla turvassa tältä kyseiseltä uhalta. Kuulostaa periaatteessa helpolta, eikö? Mutta ei se ole. Ensinnäkin hyökkääjien eliminointi ei nykyaikaisessa verkostoituneessa liiketoiminnassa onnistu, tai vaikka voisimmekin sulkea ulkopuoliset pois järjestelmästämme, meidän on kuitenkin sallittava käyttö omalle henkilöstöllemme. Toiseksi, haavoittuvuuksien eliminointi on vaikeaa, erityisesti kun tyypillisesti kehittäjä kuulee moisesta vasta kun joku on sen jo löytänyt. Kolmanneksi jää hyökkäysvektoreiden eliminointi, mitä onkin kovasti harrastettu esimerkiksi ovien lukitusten ja palomuurien avulla. Toisaalta tyypilliset verkkosovellushaavoittuvuudet löydetään usein juuri niistä sovelluksen osista, jotka ovat auki maailmalle eli joiden hyökkäysvektori on vapaa. Esimerkkinä erilaisten webbisovellusten haavoittuvuudet nimenomaan webbiyhteyden kautta. Joten tämäkään ei kovin pitkälle auta.
Mikä sitten avuksi? Tässä palaisin oikeastaan tähän kevyesti sivuuttamaani haavoittuvuusten eliminointiin. Niitä on todella hankala eliminoida siinä vaiheessa kun ohjelmisto on jo käytössä, mutta parhaat tulokset saadaankin kun ohjelmiston tietoturvatarpeet määritellään jo ohjelmiston rakennusvaiheessa. Kokemukseni mukaan samantapaiset tekniikat kuin aikaisemmassa kolumnissani mainitut uhka- ja riskianalyysi, auttavat myös ohjelmistojen tietoturvapiirteiden suunnittelussa ja varmistavat sen, että toteutettava tietoturvatoiminnallisuus kohdistuu juuri oikeisiin asioihin eikä järjestelmään rakenneta näennäisturvallisuutta.
Ota yhteys yhteystietosivun kautta jos aihealue kiinnostaa enemmän!