Tietoturvan hallinta ohjelmistokehityksessä on maailmanlaajuisesti surkealla tasolla. Silverskin on testannut yli 400 verkkopalvelua pankeista keskustelupalstoihin ja lähes jokaisesta sovelluksesta löytyi tietoturva-aukko. Vaikka tietoturvaongelmat havaitaankin ensin teknisellä tasolla, juurisyy on usein hallinnollinen. Johtopäätös on, että tietoturvaan panostetaan liian vähän ja liian myöhään.

Tietoturvallinen ohjelmisto on kaikkien tavoite

Tietoturvallisuus on yksi ohjelmiston laatutekijöistä. Muita tekijöitä ovat esim. helppokäyttöisyys, suorituskykyisyys, ylläpidettävyys ja laajennettavuus. Laatutekijät eivät kuitenkaan ole keskenään samanarvoisia: siinä missä heikko ylläpidettävyys tekee muutostöistä kallista ja virhealtista, heikko tietoturva mahdollistaa arkaluonteisen tiedon vuotamisen, järjestelmän väärinkäyttämisen tai jopa sen tuhoamisen. Tietoturvattoman järjestelmän omistajaa voi pahimmillaan odottaa jopa vankeustuomio.

Tietoturvallinen ohjelmisto on monen sidosryhmän yhteinen tavoite: toimittaja haluaa tarjota laadukasta ohjelmistokehitysosaamistaan, tilaaja haluaa tehostaa toimintaansa ohjelmiston avulla ja loppukäyttäjä haluaa käyttää toimintavarmaa ohjelmistoa, joka pitää henkilökohtaiset tiedot visusti tallessa.

Tietoturva ja ohjelmistokehitysmallit

Vesiputousmallin mukaan ohjelmistotuotantohankkeet koostuvat selkeistä toisiaan seuraavista vaiheista, joissa ohjelmisto realisoituu abstrakteista määritelmistä sen konkreettisesti toteuttavaksi koodiksi. Vesiputousmalli painottaa alkupään suunnittelun tärkeyttä, sillä myöhemmissä vaiheissa havaittavat virheet tai puutteet ovat kalliita korjata. Malli toimii oletuksella, jossa heti tiedetään mitä ollaan tekemässä eli vaatimukset eivät muutu kovinkaan paljoa tai kovinkaan usein. Harvoissa projekteissa kuitenkaan tiedetään alusta lähtien, mitä tarkalleen ollaan tekemässä. Tämän tosiseikan pohjalta ovat syntyneet iteratiiviset ja ketterät kehitysmallit.

Tietoturvallisuuden tuottamisen ja varmistamisen osalta ollaan kuitenkin jämähdetty vanhoihin kaavoihin, joissa tekeminen on tiukasti vesiputousmallin mukaista: ensin suunnitellaan, sitten koodataan ja testataan. Olemme Silverskin Information Security Oy:ssä kehittäneet lähestymistavan, jolla kuvataan tietoturvan huomioimiseen liittyviä toimenpiteitä. Toisin sanoen, mallimme kuvaa millaisista palasista tietoturvallisuuden tuottaminen ohjelmistokehityshankkeissa koostuu, oli sitten kehitysmallina perinteinen vesiputous tai modernimpi Agile tai DevOps.

Tietoturva on riskienhallintaa

Tietoturvan hallinnan tulee perustua tunnistettuihin vaatimuksiin ja uhkiin myös ohjelmistokehityksessä. Kun relevantit uhkat on tunnistettu, voidaan keskittyä niihin liittyvien riskien arviointiin ja hallintaan sekä panostaa siihen kustannustehokkaasti.

Tietoturvavaatimukset johtavat turvallisen järjestelmän rakennustöitä tarjoamalla kehittäjille suuntaviivat, joita noudattaa. Ketterissä kehitysmalleissa uusia toiminnallisuuksia lisätään pitkin matkaa, jolloin täydellistä listaa tietoturvavaatimuksista ei voi projektin alussa olla vielä olemassa. Uhka-analyysin avulla voidaan kuitenkin ymmärtää, miten kokonaisuus on muuttumassa ja millaisia uusia uhkia on mahdollisesti syntymässä. Uusien vaatimusten riskit ja vaikutukset tulee myös arvioida.

Teknisestä näkökulmasta katsoen tietoturvakontrollit ovat niitä tekijöitä, jotka varmistavat riittävän korkean tietoturvallisuuden tason ohjelmistoissa. Kontrollien tehtävänä on vastata tunnistettuihin uhkiin ja ne jakautuvat kolmeen kategoriaan:

  • SUOJAAVA KONTROLLI: Suojaavat kontrollit pyrkivät ennakoivasti estämään riskiä realisoitumasta. Nämä kontrollit on suunniteltu estämään oikeudetonta pääsyä tietoon tai toiminnallisuuteen. Lisäksi suojaavat kontrollit suojaavat ohjelmistoja tahalliselta tai tahattomalta vahingolta, muutokselta tai paljastumiselta.
  • TUNNISTAVA KONTROLLI: Tunnistavat kontrollit pyrkivät havaitsemaan mikäli tietoturvahaavoittuvuutta hyödynnetään tai järjestelmää väärinkäytetään. Kontrollit monitoroivat järjestelmän, laitteiden tai tietoverkon tilaa havaitakseen epänormaalia aktiviteettia tai merkkejä hyökkäyksestä. Kun hyökkäys tai tietovuoto havaitaan, tunnistavat kontrollit tuottavat hälytyksen, johon reaktiiviset kontrollit reagoivat.
  • REAKTIIVINEN KONTROLLI: Reaktiivinen tai korjaava kontrolli on vaste havaittuun tietoturvatapahtumaan eli tyypillisesti tunnistavan kontrollin raportoimaan tapahtumaan. Reaktiiviset kontrollit pyrkivät palauttamaan järjestelmän takaisin turvalliseen tilaan. Reaktiiviset kontrollit perustuvat tyypillisesti enemmän prosesseihin kuin teknologiaan.

Vaikka olisi ihanteellista pystyä havaitsemaan kaikki uhkat ja torjumaan hyökkäykset ohjelmistoa vastaan, tärkeintä on kuitenkin pystyä havaitsemaan ne. Ohjelmistoja ja niiden toimintaympäristöä suunniteltaessa pitää siis varautua toimimaan, kun tietoturvahaavoittuvuus tai tietomurto havaitaan.

Tietoturvallisuus on testausprosessi

Tietoturvatestauksen tavoitteena on löytää tietoturvan vaarantavia virheitä. Tietoturvavirheitä voidaan jakaa karkeasti kolmeen eri kategoriaan:

  • SUUNNITTELUVIRHEET liittyvät ohjelmiston rakenteeseen eli arkkitehtuuriin. Suunnitteluvirhe voi olla puuttuva kontrolli tai kontrollin väärä kokonaisuuteen liittyvä sijoittelu. Esimerkiksi ainoastaan selaimessa tapahtuva lomakeparametrien tarkastaminen on suunnitteluvirhe: parametrit tulee aina tarkistaa (myös) palvelinpuolella.
  • TOTEUTUSVIRHEET liittyvät sovelluksen tietoturvakontrollien tai toiminnallisuuden toteutukseen. Toisin sanoen kontrolli on olemassa, mutta se ei toimi kaikissa tilanteissa oikein. Esimerkiksi syötteenkäsittelykontrolli ei suodata haitallisia merkkejä kun ne lähetetään URL-enkoodattuna.
  • OPERATIIVISET VIRHEET liittyvät ohjelmiston ja sen toimintaympäristön konfigurointiin ja ohjelmistopäivityksiin. Esimerkiksi tunnettuja haavoittuvuuksia sisältävät varusohjelmistojen versiot, vanhentuneet kirjastot tai oletussalasanan käyttö tuotantoympäristössä ovat operatiivisia virheitä.

Suunnitteluvirheet löydetään tyypillisesti ohjelmiston arkkitehtuuri- ja koodikatselmoinneissa, vaikka esimerkkivirhe voidaankin todeta myös ajoympäristöä testaamalla.

Toteutusvirheet ovat samanlaisia ”bugeja” kuin muutkin ohjelmistosta löydettävät virheet. Syötteenkäsittelyyn liittyviä virheitä löydetään myös automaattityökaluilla, mutta toimintalogiikan virheet ovat toistaiseksi ainoastaan manuaalisesti löydettävissä. Logiikkavirheiden löytäminen edellyttää testaajalta hyökkääjän mielentilaa eli kykyä miettiä miten ohjelmisto saataisiin toimimaan vastoin tarkoitustaan. Väärinkäyttötapauksia voidaan tunnistaa jo suunnitteluvaiheessa ja perustaa testi niille.

Operatiiviset virheet ovat lähes täysin automaattisesti löydettävissä. Erityyppiset haavoittuvuusskannerit löytävät puutteet parhaimmillaan sekunneissa. Tämän vuoksi toimintaympäristöjen päivittäminen on erittäin tärkeää, sillä valtaosa tietomurroista perustuu tunnettujen haavoittuvuuksien hyödyntämiseen päivittämättä jääneissä ympäristöissä.

Mitä aikaisemmin ohjelmiston rakenteeseen tai toimintaympäristöön vaikuttavat virheet löydetään, niiden korjauskustannukset pienenevät ja ohjelmisto on mahdollisimman hyvin varautunut kohtaamaan jatkuvasti muuttuvan, vihamielisen kybermaailman.

Tietoturvallisuuden ylläpito on muutoksenhallintaa

Järjestelmän tietoturvan ylläpito on prosessi, joka perustuu suunnitelmallisuuteen. Ylläpidettävyyden kannalta tietoturvadokumentaatio on keskeisessä roolissa: järjestelmää ei voida suojata ilman ymmärrystä mistä kaikesta se koostuu ja mihin kaikkeen se liittyy. Tietoturva-aukkoja voi syntyä, kun sinänsä turvallisia järjestelmiä kytketään huolimattomasti toisiinsa.


Jani Kirmanen, Kyberhyökkäysasiantuntija, Silverskin Information Security Oy