Tietoturva web-kehityksessä

5.5.2020 14:03

Tietoturva on luonteva osa web-kehitystä 

Tietoturvaa voidaan lähestyä esimerkiksi loppukäyttäjän, kehittäjän tai palvelun tuottajan näkökulmista. Kaikki lähtee siitä, että tunnistetaan kunkin ryhmän ominaispiirteet, ja löydetään jokaiseen tietoturvauhkaan toimivat ja asialliset ratkaisut.

Tässä blogitekstissä tarkastelemme web-kehitykseen liittyvää tietoturvaa kehittäjien näkökulmasta, ja kerromme muutamista tunnetuimmista tietoturvauhkista. SQL- ja XSS-hyökkäysten estäminen, tietojen tallentamisen hyvät käytännöt ja sivustoille tuotujen komponenttien ylläpito varmistavat omalta osaltaan tietoturvan web-sivustoilla.

Injektiohyökkäykset

Injektiohyökkäyksillä tarkoitetaan tietoturvahyökkäyksiä, joissa hyökkääjä lisää omia, haitallisia komentojaan sovelluksen käyttöliittymän kautta. Kyseessä on joukko vanhimpia tietoturvauhkia, jotka häiritsevät käyttäjiä vielä tänäkin päivänä: The Open Web Application Security Project (OWASP) listaa injektiohyökkäykset kriittisimmäksi haavoittuvuudeksi top 10 web-haavoittuvuuksien listallaan.

Injektiohyökkäyksille ovat alttiita verkkopalvelut, joissa käyttäjä voi lisätä omia syötteitään erilaisten toimintojen toteuttamiseksi. Esimerkiksi lomakkeita sisältävät sivustot, verkkokaupat ja muut sisäänkirjautumista edellyttävät palvelut, joiden taustalla hyödynnetään tietokantaa tai palvelinta, ovat kaikki alttiita injektiohyökkäyksille. 

Puutteet ja virheet käyttäjän antaman syötteen tarkistuksessa ja varmennuksessa luovat hyvän maaperän injektiohyökkäyksille ja mahdollistavat haitallisen syötteen suorittamisen ohjelmakoodissa. Tämä voidaan torjua ohjelmallisesti kiinnittämällä huomiota automaattiseen tarkastukseen ja varmennukseen, joka estää haitallisten syötteiden pääsyn palvelimelle ja edelleen tietokantaan. 

SQL-injektiot ja XSS (Cross Site Scripting) lyhyesti

Injektiohyökkäyksistä tunnetuimmat ovat SQL-injektiot ja XSS-hyökkäykset. SQL-injektioissa hyökkääjä hyödyntää sivustojen ja tietokantojen välisiä kytköksiä, ujuttaa käyttöliittymän syötekenttien kautta haitallisia SQL-komentoja sivuston tietokantapalvelimelle, ja pääsee lopulta käsiksi verkkopalvelun tietokannan dataan. 

XSS-hyökkääjät puolestaan iskevät selaimen kautta ja upottavat haitallisia komentoja palvelimella sijaitsevan alkuperäisen lähdekoodin tilalle. Kun käyttäjän selain suorittaa XSS-hyökkääjän koodia, hyökkääjä voi esimerkiksi varastaa uhrinsa tunnisteita, ohjata uhrin haitallisille sivustoille ja turmella alkuperäisen sivuston lisäämällä sinne omia sisältöjään. 

Tunnistautumisen luotettavuus ja tiedon suojaaminen

Käyttäjät ovat tottuneet tunnistautumaan erilaisiin palveluihin, joissa tarjotaan yksilöllistä  vuorovaikutusta. Tunnistautumisen tarkoituksena on myös rajoittaa pääsyä sellaiseen arkaluonteiseen tietoon, jonka tarkasteluun käyttäjällä ei ole oikeutta. 

Puutteellisesti toteutettu tunnistautuminen web-palvelussa avaa hyökkääjälle mahdollisuuden käyttäjän istunnon ja yksilöllisten tunnisteiden kaappaamiseen. Hyökkääjä voi esimerkiksi napata tunnisteet houkuttelemalla käyttäjän klikkaamaan saastuneita linkkejä tai vakoilemalla tunnisteet suoraan salaamattomasta yhteydestä. Kun käyttäjäkohtaiset tiedot ovat hyökkääjän hallussa, hyökkääjä voi tunnistautua palveluun uhrin tietojen avulla.


Tunnistautumisen hyvät käytännöt

Käyttäjän istunnon ja yksilöllisten tunnisteiden kaappauksia estetään tekemällä käyttäjäkohtaisista istunnoista ainutkertaisia. Ainutkertaisuus varmistetaan niin, että jokaista istuntoa kohden luodaan uniikit ja kertakäyttöiset tunnisteet. Kun nämä tunnisteet vanhenevat, hyökkääjä ei voi arvailla tunnuksia enää istunnon jälkeen.

Yksi tapa huolehtia tunnistautumisen tietoturvasta on hyödyntää monitorointia. Kun järjestelmä huomaa tunnettuja hyökkäyksen tuntomerkkejä, monitoroinnilla voidaan aiheuttaa automaattisia hälytyksiä tai hyökkääjään kohdistuvia porttikieltoja. Monitorointi auttaa myös käyttöoikeuksien väärinkäytösten estämisessä. 


Tietosuojaa arkaluontoisille tiedoille

Tietosuoja on yksi tärkeä tietoturvan osa-alue, joka tulee huomioida etenkin tietokantoja suunniteltaessa. Tietoa tallennettaessa on varmistettava, ettei tieto itsessään sisällä mitään tietoturvauhkia.

Web-sovelluksissa liikutellaan myös arkaluontoista tietoa, joihin esimerkiksi käyttäjätilien salasanatkin kuuluvat. Tällaisen kriittisen tiedon tulisi olla joko hajautettu tai salattu riittävän tehokkaalla algoritmilla mahdollisten tietovuotojen vahinkojen minimoimiseksi. On esimerkiksi syytä välttää saman salasanan käyttöä ja suosia ennemmin useita erilaisia salasanoja sekä niiden hallintaohjelmia. 

On tärkeää, että jo suunnitteluvaiheessa huomioidaan kriittisen tiedon tallentaminen ja salaaminen. Käytännössä salaus tulee tehdä niin, että hyökkääjän on mahdotonta purkaa arkaluonteisia tietoja. Arkaluontoinen data voidaan myös anonymisoida käyttötarkoituksesta riippuen.

Komponenttien ylläpito

Web-kehityksessä on tapana hyödyntää ulkoisia komponentteja, joilla tuodaan valmiita osakokonaisuuksia verkkosivustoille. Tällaisia komponentteja ovat esimerkiksi julkaisujärjestelmien käännöslisäosat kieliversioita varten ja kirjautumiseen liittyvät, eri järjestelmien väliset rajapinnat.

Ulkoisten komponenttien käyttöönotossa on oltava huolellinen, koska komponentin virheellinen määritys voi avata sivustolle haavoittuvuuksia. Ulkoiset komponentit eivät myöskään ole ikuisia, vaan vaativat ylläpitoa, seurantaa ja päivityksiä, jotta yksittäisen osan haavoittuvuus ei vaaranna koko sivuston turvallisuutta. Asiantuntevalla sovelluskehittäjällä onkin aina käytössään sopivia työkaluja, joilla voi tulkita tällaisten haavoittuvuuksien potentiaalisia vaikutuksia verkkosivun komponentteihin.


Tietoturva on osa laadukasta koodia

Web-kehityksessä tietoturva ei ole sivujuonne, vaan siihen panostetaan ohjelmistokehityksen kaikissa vaiheissa. Tietoturva itsessään on hyvin laaja aihepiiri, ja kehityksessä mukana pysyminen sekä digitaalisen turvallisuuden kehittäminen vaatii jatkuvaa alan ilmiöiden seuraamista ja yksityiskohtaista osaamista.

Tietoturva on oleellinen asia paitsi web-kehityksessä, myös kaikissa muissa ohjelmistokehityksen palveluissa. Kun yhä useammat ohjelmistot ja niiden taustalla toimivat tietokannat siirtävät tietoa reaaliaikaisesti verkossa, tietoturvaosaamiselta edellytetään huipputasoa ketjun kaikissa vaiheissa. Ei riitä, että kehittäjä hallitsee yhden tietoturvan osa-alueen –  on tärkeää ymmärtää myös kokonaiskuva.