Uuden ohjelmistokehityshankkeen tietoturvavaatimukset punoutuvat yhteen monesta suunnasta yhtä aikaa. Asiakkaalla saattaa olla niistä kattava lista. Kaikkea ei toki tarvitse määrittelyvaiheessa tietää, vaan riskit voidaan käydä yhdessä läpi projektin alkumetreillä. Mitä aikaisemmin tietoturva otetaan mukaan keskusteluun, sitä vaivattomampaa sen huomiointi on järjestelmän suunnittelu- ja toteutusvaiheessa.
Eri tyyppisiin järjestelmiin kohdistuu erilaisia tietoturvavaatimuksia. Erot voivat kummuta muun muassa asiakkaan toimialan lainsäädännöstä. Ohjelmistokehityksen parhaat käytännöt myös päivittyvät jatkuvasti. Jotta tietoturvaosaaminen pysyy ajan tasalla, voi sitä kehittää esimerkiksi täsmäkoulutusten avulla. Lisäksi valmiit listaukset ja työkalut auttavat haavoittuvuuksien tunnistamisessa.
Jokaisella Cinian arkkitehdilla, ohjelmistokehittäjällä ja testaajalla on omat kiinnostuksenkohteensa. Yksi on erikoistunut testausautomaatioon, toinen tietoturvaan ja kolmas palvelumuotoiluun. Hiljainen tieto – myös tietoturvavaatimuksista – leviää eteenpäin taskforce-työskentelyn, kyselyiden, tech-iltojen sekä päivittäisen tiimityön kautta.
Ennen järjestelmän kehittämisen aloittamista on tärkeää analysoida, minkälaisia riskejä kehitteillä olevaan järjestelmään saattaa kohdistua. Riskien analysoinnin avulla voidaan valita sopivat menetelmät järjestelmän tietoturvan toteuttamiseksi. Kokonaiskuva alkaa piirtyä näiden kolmen kysymyksen avulla:
Täysin aukotonta tietoturvaa ei ole olemassa. Puolustus perustuu siihen, että hyökkäämisestä tehdään mahdollisimman kallista hyökkääjälle. Tavoitteena on, että potentiaalisen hyökkääjän voitot jäävät pienemmiksi kuin ne resurssit, joita hyökkääjä joutuu hyökkäyksen toteuttamiseksi käyttämään, jolloin järjestelmä ei ole niin houkutteleva hyökkäyskohde.
The OWASP Foundationin julkaisema OWASP Top 10 -lista toimii tukena web-sovellusten yleisimpien ja kriittisimpien haavoittuvuuksien tunnistamisessa. Kymmenen kärkeen mahtuu myös “helppoja voittoja”, eli asioita, joissa tietoturvan huomiointi ei yleensä ole teknisesti vaikeaa. Tässä kaksi esimerkkiä:
Nykyaikaisten järjestelmien toteuttamisessa hyödynnetään usein valmiita komponentteja ja kirjastoja, jotka tuovat järjestelmään riippuvuuksia. Kirjastoista julkaistaan jatkuvasti uusia versioita, jotka tuovat kirjastoon uusia ominaisuuksia ja korjaavat bugeja. Kirjastoilla on kuitenkin myös omia riippuvuuksia, jolloin oman toteutettavan järjestelmän yhteenlaskettu riippuvuuksien määrä saattaa kasvaa nopeasti hyvin suureksi.
Automaattisten työkalujen avulla voidaan pitää kirjaa riippuvuuksista ja niiden versioista. Ne voivat myös muistuttaa siitä, kun jokin riippuvuus vaatii päivityksiä. Kirjastojen ennakoiva päivittäminen sekä järjestelmän testaaminen päivitysten jälkeen auttavat vahvistamaan tietoturvaa. Järjestelmän potentiaalisen haavoittuvan koodin määrää voidaan vähentää myös poistamalla koodia, kirjastoja ja ominaisuuksia, joita ei enää käytetä.
Sopivasti valitut kirjastot ohjaavat myös toteuttamaan ohjelmistoja hyvien käytänteiden mukaan. Kirjastot voivat ohjata datan hakua tietokannasta tai auttaa autentikaation toteuttamisessa, jotta jokaisen kehittäjän ei tarvitse toteuttaa haastavia toiminnallisuuksia alusta asti itse.
Sovelluksen lokien säilyttämiseen voidaan hyödyntää lokienhallintajärjestelmää, johon lokit voidaan siirtää automaattisesti. Lokienhallintajärjestelmässä voidaan käsitellä lokidataa automaattisesti ja luoda hälytyksiä tapahtumien perusteella. Kun lokien hallinta on kunnossa, on lokituksen toteuttaminen sovellukseen teknisesti helppo ratkaisu tietoturvan vahvistamiseksi. Lokitusta tulisi lisätä riittävästi etenkin auditoitaviin tapahtumiin, kuten sisäänkirjautumiset, epäonnistuneet kirjautumisyritykset ja salasanojen muutokset.
Selkeiden lokitapahtumien avulla automatisoiduilla järjestelmillä voidaan havaita järjestelmään kohdistuvia hyökkäyksiä ajoissa. Näin tietoturvaloukkauksiin pystytään myös reagoimaan nopeasti. Ilman lokitapahtumia mahdolliset hyökkäykset saattavat jäädä huomaamatta pitkäksikin aikaa.
Lue lisää: Tuo tekninen velka päivänvaloon
Vaikka OWASP Top 10 -lista sisältää kattavan kokoelman yleisimpiä haavoittuvuuksia, eivät kaikki listan haavoittuvuudet päde jokaiseen käyttötapaukseen. Listan seuraaminen tukee ongelmakohtien etsimisessä, mutta ei tarjoa valmiita ratkaisuja jokaiseen tilanteeseen.
Näin on esimerkiksi injektiohaavoittuvuuksien kohdalla. Yksi injektiohaavoittuvuustyyppi on, että käyttäjän syöttämää dataa ei validoida riittävästi, jolloin hyökkääjä voi saada ongittua järjestelmästä hänelle kuulumatonta tietoa. Haavoittuvuus ei välttämättä esiinny järjestelmän jokaisessa syötekentässä, vaan validoinnit ovat saattaneet jäädä pois vain yksittäisestä syötekentästä. Tällöin haasteena on löytää järjestelmästä juuri tietyt kohdat, joissa injektiohaavoittuvuus esiintyy.
Osa OWASP Top 10 -listalla ehdotetuista toimenpiteistä taas voi olla hyvin työläitä toteuttaa etenkin jälkikäteen. Muun muassa järjestelmän arkkitehtuuriin liittyvät ongelmat voivat osoittautua työläiksi korjata järjestelmän elinkaaren myöhäisemmässä vaiheessa. Arkkitehtuurin tuominen tähän päivään saattaa vaatia koko sovelluksen uudelleenkirjoittamista.
OWASP Top 10 -lista päivittyy jatkuvasti, kun haavoittuvuudet muuttuvat. Omaa osaamista on myös pidettävä yllä säännöllisesti. OWASP Top 10 -listaa on Cinialla käyty läpi esimerkiksi yhteisten tech-iltojen aikana. Myös erilliset tietoturva-aiheiset koulutukset auttavat pitämään yllä osaamista.
Tietoturvan eteen voi tehdä jälkikäteen yhtä jos toistakin. Parhaiten ongelmia kuitenkin pystytään ehkäisemään, kun tietoturva on kiinteä osa ohjelmistokehityksen koko elinkaarta ohjelmiston suunnittelusta lähtien. Kun tietoturva huomioidaan jo ohjelmiston määrittelyvaiheessa, voi jokainen arkkitehti, ohjelmistokehittäjä ja testaaja osallistua tietoturvan vahvistamiseen alusta asti.