Ohje 1/2011 Verkkopalvelun ohjelmistoalustan valinta ja palvelun turvallinen ylläpito

Viime aikojen tietomurrot ovat nostaneet esille verkkosivujen ja -palvelujen turvallisuuden tärkeyden. Täydellistä turvallisuutta on mahdoton saavuttaa. Kaikki palvelun tietoturvan eteen tehdyt toimet kuitenkin kannattavat. Jo pienellä panostuksella pystyy välttämään valtaosan hyökkäyksistä. Monet tietoturvan parantamiseen tähtäävät toimet ovat tärkeitä myös palvelun yleisen toimivuuden ja luotettavuuden kannalta.

Tämä ohje sisältää tietoa valmiiden ohjelmistopakettien käyttäjille ja niille, jotka haluavat kehittää oman verkkosovelluksensa omaan käyttöönsä.

Sisältö

Turvallisen ohjelmiston valinta
Ylläpidon tietoturva
Web-palveluiden kehittäjille
Ohjeita tietomurron varalle

Turvallisen ohjelmiston valinta

Turvallisuuspäivitykset


Käytettävien valmisohjelmistojen tulisi olla ajan tasalla, sillä uusimmat ohjelmistoversiot sisältävät myös tuoreimmat tietoturvapäivitykset. Valmiiden ohjelmistojen käyttäjille yleensä riittää, että osaa asentaa turvallisuuspäivitykset sovellukseen. Omien sovellusten kehittäjien puolestaan tulee huolehtia myös kehitysalustan turvallisuudesta.

Säännöllinen turvallisuustiedotteiden ja -päivitysten julkaiseminen kertoo siitä, että ohjelmistoa kehitetään aktiivisesti ja turvallisuuteen kiinnitetään huomiota. Useat ohjelmistovalmistajat tiedottavat ohjelmiston tietoturvaan liittyvistä asioista verkkosivuillaan. Tietoturvasivun osoite voi olla esimerkiksi muotoa http://www.verkkosovellus.invalid/security/. Hyvien käytäntöjen mukaisesti valmisohjelmiston kehittäjillä tulee olla selkeät yhteystiedot tuoteturvallisuudesta vastaaville kehittäjille, esimerkiksi muotoa security@verkkosovellus.invalid. Sähköpostiosoite on tarkoitettu ohjelman tietoturvaan liittyvistä asioista viestimiseen. Tietoja ohjelmistohaavoittuvuuksista voi myös etsiä useista haavoittuvuustietokannoista, kuten NIST NVD .

Jos ohjelmistosta on löydetty haavoittuvuuksia, se ei välttämättä tarkoita sitä, että ohjelmisto olisi huonosti tehty. Korjatut haavoittuvuudet kertovat siitä, että ohjelmiston turvallisuutta on tutkittu ja löydetyt ongelmat on korjattu. Tiedotteen avulla valmistaja haluaa varmistaa, että tarjolle saatettu korjauspäivitys otetaan käyttöön. On tärkeää, että löydetyt haavoittuvuudet otetaan vakavasti ja korjataan huolellisesti ripeällä aikataululla. Turvallisuustiedotteesta kannattaa tutkia kommentteja korjausprosessista sekä tietoja siitä, milloin haavoittuvuus on raportoitu ohjelmistovalmistajalle ja koska se on korjattu.

Turvallisuuspäivityksistä sekä päivityksistä ohjelmistoon ja sen lisäosiin saa usein tietoa sähköpostitse. Mahdolliseen postituslistaan ja sinne lähetettyihin viesteihin kannattaa tutustua, jotta saisi kuvan siitä, millaisia mahdollisia ongelmia ohjelmiston käyttäjillä on ollut.

Onko ohjelmiston kehitys jatkuvaa?

Joskus ohjelmistojen kehitys näyttää jatkuneen kiivaana muutaman vuoden ajan ja sen jälkeen pysähtyneen täysin. Seuraamalla mitä ohjelmistovalmistajan sivuilla on tapahtunut viimeisen puolen vuoden tai vuoden aikana, voi saada jonkinlaisen käsityksen siitä, ovatko ohjelmiston kehittäjät vielä mukana kehitystyössä.

Ohjelmiston vaatimukset järjestelmälle tulee tarkistaa. Uusista tai vähintään uudehkoista ohjelmistoista ja laitteistoista kertovat vaatimukset ovat yleensä merkki siitä, että ne ovat yhteensopivia myös uusien ja kehitettyjen ohjelmistojen kanssa. Useat ohjelmistot kuitenkin toimivat myös vanhemmilla käyttöjärjestelmillä, joten käyttöjärjestelmäversion sijaan kannattaa painottaa muiden komponenttien, kuten PHP:n tai web-palvelimen versioihin.

Hankittaessa ohjelmistoa palveluna joltakin siihen erikoistuneelta yritykseltä kannattaa kiinnittää huomiota myös siihen, miten hankittavan palvelun tietoturva on toteutettu, kuinka mahdollisia väärinkäytöksiä tai väärinkäyttöyrityksiä valvotaan ja kuinka niistä tiedotetaan. Osa palveluntarjoajista voi olla myös valmiita kertomaan sovelluksen "roadmapista", eli siitä millaisia päivityksiä käyttöliittymään tai turvallisuuteen liittyviin ratkaisuihin on tulossa.

Aktiivinen käyttäjäkunta

Mahdollisilta ohjelmistovalmistajan keskustelupalstoilta kannattaa tutkia, onko ohjelmistolla aktiivista käyttäjäkuntaa. Hiljainen keskustelupalsta voi kertoa myös siitä, etteivät ohjelmiston lataajat käytä ohjelmistoa pitkään. Aktiivisilta keskustelupalstoilta voit myös tarvittaessa saada apua ohjelmiston turvalliseen konfigurointiin. Aktiiviset käyttäjät saattavat osallistua myös postituslistoilla käytäviin keskusteluihin.

Lisäosat - ketju on yhtä vahva kuin sen heikoin lenkki

Lisäosien päivityksistä ja niiden tietoturvasta tulee huolehtia. Suosittujen verkko-ohjelmistojen kuten PhpBB:n, Joomlan ja ZenCartin lisäosia on useita erilaisia ja erilaisiin tarkoituksiin. Lisäosat eivät kuitenkaan ole useimmiten itse ohjelmiston valmistajan tuottamia, vaan kolmansien osapuolien levitykseen laittamia. Ne ovat usein näppäriä lisätoimintoja tuovia sovelluksia. Lisäosiin ja niiden valintaan pätevät samat periaatteet kuin itse ohjelmiston valintaan. Katso käyttäjien antamia palautteita lisäosista ja tutustu sen kehitykseen ja päivityksiin. Kunkin laajennuksen päivitykset tulee yleensä asentaa erikseen. Lisäosien tietoturvasta voi löytää tietoja myös mahdolliselta ohjelmistovalmistajan tuki- tai keskustelupalstalta.

Jos lisäosa on julkaistu vuosikausia sitten eikä siihen ole tullut päivityksiä sen jälkeen, ei sitä kannata ottaa käyttöön. Varoittavan signaalin antaa myös se, jos ohjelmiston kehittäjän kotisivu ei ole enää toiminnassa. Sen lisäksi, että tällainen lisäosa voi sisältää tunnettuja, korjaattomia tietoturva-aukkoja, se ei välttämättä ole yhteensopiva muun ohjelmiston myöhemmin kehitettyjen turvallisuusominaisuuksien kanssa.

Käyttäjätietojen suojaus ja hyvät käytännöt

Mieti palvelua perustaessasi, mitä käyttäjätietoja haluat käyttäjiltä pyytää ja mitkä niistä ovat olennaisia palvelun toiminnalle. Henkilötunnuksen, kotiosoitteen ja puhelinnumeron pyytäminen ei välttämättä ole tarpeen, jos kyseessä on esimerkiksi lemmikkien tai jonkin muun asian ympärille perustettava keskustelupalsta. Käyttäjätunnus tai nimimerkki, sähköpostiosoite sekä salasana ovat yleensä riittävät tiedot keskustelupalstan käyttämiseen.

Nyrkkisääntönä kannattaakin pitää sitä, että mitä vähemmän tietoja käyttäjiltä kerätään, sitä vähemmän tietoja käyttäjistä leviää verkkoon, jos palveluun murtaudutaan ja tiedot vuodetaan internettiin. Ota säännöllisesti varmuuskopio palvelusi tietokannasta ja säilytä sitä turvallisessa paikassa, mieluiten toisella palvelimella kuin palvelua. Jos murtautujat poistavat kaikki palveluusi rekisteröityneiden tiedot, et saa heihin enää yhteyttä.

Jos kerätyt tiedot muodostavat henkilörekisterin, tulee palvelun tai rekisterin ylläpitäjän laatia rekisteriseloste. Rekisteriseloste on verkkopalveluiden tapauksessa pidettävä saatavilla myös verkkopalvelun yhteydessä. Lisätietoja rekisteriselosteesta, sen koostamisesta ja siihen liittyvistä vaatimuksista löytyy Tietosuojavaltuutetun verkkosivuilta .

Salasanan tallennus

Useimmat ohjelmistot eivät tallenna käyttäjän salasanaa tietokantaan selkokielisenä, vaan esimerkiksi MD5- tai SHA1-tiivisteenä, jonka kanssa on käytetty salt-toimintoa eli salasanaan on lisätty palvelun ylläpidon tiedossa oleva merkkijono, joka vaikeuttaa salasanatiivisteen purkamista. Valmisohjelmistojen käyttäjät eivät useimmiten voi vaikuttaa siihen, miten palvelu tallentaa salasanat tietokantaansa.

Pelkkää MD5+salt yhdistelmää turvallisempia ovat esimerkiksi PHK FreeBSD MD5, scrypt ja Blowfishiin perustuva bcrypt. Niiden turvallisuus perustuu siihen, että salasanan murtaminen tehdään hitaaksi käyttämällä monimutkaisempaa menetelmää tiivisteen muodostamiseen. Salasanojen purkaminen auki niistä muodostetuista tiivisteistä kestää sitä pidempään, mitä monimutkaisempaa menetelmää tiivisteiden muodostamiseen on käytetty.

Salasanan tallentaminen kantaan selkokielisenä voi pahimmassa tapauksessa altistaa käyttäjän identiteettivarkaudelle. Tämä johtuu siitä, että usein ihmiset käyttävät kehoituksista ja varoituksista huolimatta samaa salasanaa sekä sähköpostiin että muihin rekisteröitymistä vaativiinpalveluihin.

Käyttäjiltä kannattaakin vaatia pitkää, yli kahdeksan merkkiä olevaa salasanaa, joka sisältää pieniä ja isoja kirjaimia, numeroita ja ainakin yhden erikoismerkin. Useammasta sanasta koostuvan lauseen käyttäminen on myös turvallista ja se voi olla osalle käyttäjistä helpompaa. Jos järjestelmään päästään murtautumaan, tiivisteen purkaminen salasanaksi kestää murtautujalta pitkään. Kyberturvallisuuskeskuksen Tietoturva nyt! -artikkeleissa Vaihda salasanasi vahvempiin ja [Teema] Salasanalla on väliä on listattu vinkkejä hyvän salasanan valintaan käyttäjän näkökulmasta.

Salasanojen ja tunnistetietojen palveluun tallentamisen sijaan palveluun tunnistautumiseen voidaan käyttää myös erilaisia tunnistautumispalveluita, kuten OAUTHia. OAUTHin tyyppisiä tunnistautumispalveluita tarjoavat useat sivustot.

Ylläpidon tietoturva

Harkitse, onko järkevää kehittää omaa ohjelmistoa vai käyttää jotain valmista pakettia, jonka tietoturvasta ja turvallisuudesta vastaavat ohjelmiston kehittäjät. Harkitse myös, onko tarkoituksenmukaista ylläpitää omaa web-palvelinta vai käyttää web-hostingia tarjoavaa yritystä. Kehittämällä oman verkkopalvelun olet itse vastuussa sen tietoturvasta ja kehittämisestä, kun taas käyttämällä valmiita ratkaisuja tietoturvasta huolehtiminen on yleensä lähinnä turvallisuuspäivitysten seurantaa ja asentamista.

Ohjeita palvelun ylläpitoon

Palvelun asentaminen on kriittinen vaihe järjestelmän tietoturvan kannalta, koska järjestelmien oletusasennusten tietoturva on usein riittämätön. Ohjelmistojen, järjestelmäalustojen sekä web-palvelin- ja ohjelmointikieliympäristöjen turvallisista asetuksista löytyy verkosta runsaasti ohjeita. Järjestelmän oletussalasanat tulee vaihtaa. Verkkosovellusten asennukset voivat sisältää esimerkiksi turvattomasti ohjelmoituja esimerkkisivustoja. Tämän vuoksi ei kannata pitää yleisölle tarjolla sellaisia osia järjestelmästä, joita ei tarvita tavalliseen käyttöön. Järjestelmät on yleisesti hyvä pitää niin karsittuina ja yksinkertaisina kuin mahdollista. Tarjottavia ulkoisia rajapintoja kannattaa rajoittaa ja esimerkiksi tietokantayhteyksiä ei yleensä kannata avata verkkoon.

Tietoturvamielessä palvelun ylläpidossa tärkeää on säännöllisyys. Tietoturvatilanne voi elää viikottain, uusia haavoittuvuuksia ja uhkia etsitään ja korjataan aktiivisesti. Ylläpitäjän olisi hyvä esimerkiksi liittyä käyttämiensä ohjelmistojen kehityksestä tai päivityksistä kertoville postituslistoille. Päivitykset kannattaa asentaa ripeästi. Hyökkääjät alkavat käyttää hyväkseen havaittuja ongelmia pian päivitysten ilmestymisen jälkeen - elleivät olleet tietoisia heikkouksista jo sitä ennen. Järjestelmän tulisi tuottaa tietoturvatilanteen seuraamisen ja tietomurtojen selvittämisen kannalta tarpeeksi lokitietoja. Lokitietoja tulee myös tarkkailla säännöllisesti, jotta ongelmat voidaan havaita mahdollisimman aikaisin. Erilaiset automaattiset järjestelmät, kuten Logwatch ja Splunk, voivat auttaa tärkeiden havaintojen kaivamisessa lokimassasta.

Lokitietojen keräämisestä

Lokitiedot palvelun käytöstä ja palvelun alustasta sekä sen palveluista on suositeltavaa kerätä muualle, esimerkiksi erilliselle lokipalvelimelle. Jos erillistä lokipalvelinta ei ole mahdollista käyttää, tulee lokitiedot siirtää palvelusta talteen muualle säännöllisin väliajoin. Tietomurtojen yhteydessä murtautujat voivat poistaa osan lokitiedoista, tai kaikki lokitiedot peittääkseen jälkensä. Kun lokitiedot tallennetaan erilliselle palvelimelle, niiden poistaminen vaikeutuu tai tulee lähes mahdottomaksi. Tietomurrot havaitaan usein paljon sen jälkeen kun tietomurto on tapahtunut. Kun lokitietoja säilytetään muualla ja kerätään pitkältä aikaväliltä, tietomurron tai poikkeamien selvitystyö helpottuu.

Web-palveluiden kehittäjille

Yleisimmät virheet, jotka vaarantavat verkkopalveluiden tietoturvan, ovat yleisesti tiedossa ja niiden korjaamiseksi löytyy verkosta paljon ohjeita. Omien verkkopalveluiden kehittäjien tulisikin perehtyä näihin ohjeisiin ennen oman palvelun rakentamiseen ryhtymistä. Iso osa tietomurroista tehdään nimittäin käyttämällä hyväksi puutteita web-sivujen syötteentarkistuksessa tai heikkoja salasanoja.

Syötteentarkistuksella turvaa SQL-injektioilta ja tietomurroilta

Syötteentarkistuksella tarkoitetaan sitä, että ohjelmistolle selaimen osoitekenttään tai web-sivulle syötettävä tieto tarkistetaan kiellettyjen merkkien ja muunlaisen odottamattoman syötteen varalta. Sivuston suojaukset on joissakin tapauksissa mahdollista ohittaa syöttämällä sivuston kenttiin tai selaimen osoitekenttään syötettä, jota sovellus ei osaa käsitellä. Sovellus ajautuu virhetilaan, jossa ulkopuolisen on mahdollista saada haltuunsa palveluun korotetut käyttöoikeudet. Näitä hyväksikäyttämällä on mahdollista päästä käsiksi esimerkiksi palvelun käyttäjätietokantaan salasanoineen ja tunnuksineen.

Osa tunnetuista haittaohjelmista leviää suojaamattomien kaavakkeiden kautta niin, että sivustoille murtautuja tai hänen luomansa automaattinen työkalu lisää sivustolle SQL-injektion avulla ohjelmakoodia. Ohjelmakoodi voi olla muokattu sellaiseksi, ettei siitä voi suoraan päätellä, mihin web-osoitteeseen se viittaa. Kun sivuston käyttäjä käy verkkosivuilla, hänen selaimensa suorittaa ohjelmakoodin, joka voi ohjata käyttäjän selaimen hakemaan haittaohjelman tai haittaohjelman lataavan hyväksikäyttömenetelmän jostain muulta sivustolta. Tämän tapainen haitallinen ohjelmakoodi on yleensä toteutettu JavaScriptillä.

SQL-injektiot toimivat siten, että haku- tai osoitekenttään syötetään tietokannan komentosyntaksin mukaisia merkkejä ja se yhdistetään SQL-lauseeseen, jolloin ohjelmiston tietokantaan kohdistama käsky suorittaa sisäisen SQL-lausekkeensa lisäksi myös hyökkääjän lausekkeen.

Syötteentarkistus on tarpeen myös silloin, kun tietokantaa ei käytetä sivuston tietojen luomiseksi dynaamisesti. Sivusto voidaan altistaa niin sanotuille Remote- tai Local File Inclusion -hyökkäyksille sekä perinteisemmille tietomurroille. Remote File Inclusion eli RFI-hyökkäys toimii siten, että sivusto saadaan lataamaan joltain toiselta sivustolta ohjelmanpätkä, jonka avulla hyökkääjä voi päästä palvelimelle. Local File Inclusion -hyökkäyksellä tarkoitetaan tilannetta, jossa hyökkääjä voi saada esimerkiksi tulostettua palvelimen konfiguraatiotiedostoja käyttämällä sivustolla kaavaketta, jonka sisältöä ei tarkisteta.

Sivuston testaaminen

Sivustojen testaamiseksi on useita erilaisia kaupallisia ja ilmaisia työkaluja. Testaamista tekevät myös kaupalliset yritykset. Harrastajakäyttöön tehdyn sivuston testaaminen kaupallisen toimijan avulla voi kuitenkin osoittautua liian kalliiksi.

OWASP (Open Web Application Security Project) on julkaissut useita ohjeita sivuston testaamiseksi SQL-injektioiden ja muiden yleisimpien turvallisuusongelmien varalta sekä kymmenen yleisimmän verkkosovelluksissa esiintyvän riskin luetteloa (niin sanottu OWASP Top Ten). Ohjeisiin tulisi suhtautua enemmänkin vaatimuksina, kuin viitteellisinä ohjeina.

Ohjelmiston testaamiseen käyttöönottovaiheessa kannattaa panostaa, koska myöhemmin siihen ei välttämättä ole mahdollisuutta. Käyttöönottovaiheessa resursseja testaamiseen yleensä löytyy, eikä testauskäytössä olevan sivuston alhaallaolo välttämättä aiheuta taloudellista menetystä, toisin kuin esimerkiksi tuotannossa olevan verkkokaupan testaus ja alasajo määrittelemättömäksi ajaksi.

Tutustu myös vaatimuksiin, joita henkilörekisterin ylläpitäjälle on asetettu .

OWASP:n mini-tarkistuslista sovelluskehittäjälle

  1. Tarkista, että kaikki käyttäjältä tulevat syötteet sisältävät ainoastaan sallittuja merkkejä, mukaan lukien lomakkeet, http-otsikot, evästeet ja url-parametrit (A1 , A2 )
  2. Muuta erikoismerkit turvalliseen muotoon, kun tietoa liitetään verkkosivuun tai taustajärjestelmäkyselyyn (A1 , A2 )
  3. Rajoita samalle tunnukselle tehtävien peräkkäisten epäonnistuneiden kirjautumisten määrää, esimerkiksi CAPTCHA-tunnisteella tai kasvavalla viipeellä (A3 )
  4. Varmista, että istuntotunniste on satunnainen ja riittävän pitkä (suositus 256-bittiä) ja että se vaihtuu jokaisen kirjautumisen yhteydessä ja vanhenee uloskirjauduttaessa (A3 )
  5. Estä heikkojen salasanojen käyttö (A3 )
  6. Tarkista käyttäjän oikeus suorittaa pyyntö jokaisen sivulatauksen tai toiminnon yhteydessä ja vältä globaaleiden id-tunnusten käyttöä (A4 , A3 , A8 )
  7. Lisää kaikkiin pyyntöihin istuntokohtainen satunnainen tunniste varmistaaksesi, ettei pyyntö ole peräisin vihamieliseltä sivustolta (A5 )
  8. Ohjeista selaimen tietovuotoja estävien toimintojen käyttö (cache-control, secure- ja httponly-liput evästeissä, autocomplete="off" lomakkeissa) (A6 )
  9. Varmista, että web-palvelimessa ja käytettävissä ohjelmistoissa sekä kirjastoissa on uusimmat päivitykset ja että ainoastaan web-palvelin näkyy ulkoverkkoon (A6 )
  10. Näytä virhetilanteissa ainoastaan geneerinen virheilmoitus ja estä yksityiskohtaisten virhetietojen näkyminen (A6 )
  11. Suojaa salasanat yksisuuntaisella tiivistefunktiolla ja salasanakohtaisella suola-arvolla (A7 )
  12. Käytä turvallista https-yhteyttä kaikkiin kirjautumista vaativiin yhteyksiin ja salli vain HIGH-tason SSLv3/TLS-salaukset (A9 )
  13. Varmista, että mahdolliset uudelleenohjaukset tapahtuvat ainoastaan sallittuihin osoitteisiin (A10 )

Ohjeita tietomurron varalle

Jos palveluun kaikista varotoimenpiteistä ja suojaustoimista huolimatta murtaudutaan tai sen ylläpitoon käytettävät tunnukset joutuvat vääriin käsiin muilla keinoin, on tärkeää pystyä arvioimaan seuraukset. On myös hyvä muistaa, että joskus hyvin tehdyllä omalla työllään ei voi estää tietomurtoa. Osa myös verkkosovellusten haavoittuvuuksista on luonteeltaan sellaisia, etteivät niiden löytäjät raportoi niitä vastuullisesti ohjelmistovalmistajille, vaan julkaisevat ne verkossa ilman, että niihin on saatavilla korjauskeinoja.

  • Rauhoitu. Muista hengittää. Älä hätäile. Hätiköimällä voit pahentaa tilannetta.
  • Kytke tietoliikenneyhteys pois päältä esimerkiksi vetämällä verkkojohto irti seinästä, tai estämällä liikennöinti sisään ja ulos palomuurin avulla. Palvelimen virtojen sammuttaminen voi tuhota tutkinnan kannalta tärkeitä tietoja.
  • Korvaa etusivu sivulla jossa kerrot tietomurrosta, esimerkiksi ohjaamalla palvelimen internetosoite väliaikaiselle palvelimelle.
  • Korjaa haavoittuvuus ja varmista, ettei palvelimelle ole kopioitu ylimääräisiä tiedostoja, joiden kautta murtautuja voi saada palvelimen takaisin hallintaansa. Tietomurron kohteeksi joutunut palvelin voi olla myös viisasta asentaa alusta asti uudelleen.
  • Tiedota käyttäjiä esimerkiksi sähköpostitse tietomurrosta ja ohjeista tai pakota kaikki käyttäjät vaihtamaan salasanansa palveluun. Hyvä ja ripeä tiedotus voi toimia positiivisena viestinä sen sijaan, että palvelua tai sen ylläpitoa pidettäisiin välinpitämättömänä tai hitaana reagoimaan ongelmiin.
  • Säilytä lokitiedostot mahdollista rikosilmoitusta ja poliisin tutkintaa varten.
  • Tee rikosilmoitus tietomurrosta paikallispoliisille.
  • Tee murrosta tietoturvaloukkausilmoitus Kyberturvallisuuskeskukselle tai lähetä sähköpostia osoitteeseen cert@ficora.fi.

Lisätietoja

  • 28.11.2011 Ohje julkaistu
  • 12.1.2012 Ohje päivitetty versioon 1.1. Lisätty tieto rekisteriselosteesta, salasanojen tallentamisesta ja lokitietojen keräämisestä. Tarkennettu lisäosiin liittyvää kappaletta, sekä ohjeita tietomurron varalle.


Asiasanat: Internet, Tietoturva, CERT, Kyberturvallisuus, Tietosuoja, Ohjeet


LinkedIn Print