Mitä on Content Security Policy?

Photo by Matthew Henry on Unsplash

Tietoturva on monesti kilpajuoksua verkkorikollisia vastaan. Ns. script kiddiet ja ammattimaisemmat toimijat skannaavat tauotta läpi internetiä bottiarmeijat aseinaan löytääkseen haavoittuvaisia kohteita: reitittimiä, tulostimia, www-palvelimia ja jääkaappeja. Kohteen tyypillä ei ole väliä, kaikki kelpaa. Kun bottiverkko löytää sopivan kohteen, on vuorossa automatisoitu tietoturva-aukkojen etsintä: kohdejärjestelmille lähetään erilaisia syötteitä ja yritetään saada järjestelmä palauttamaan sensitiivistä tietoa, tai muuttamaan toimintaansa hyökkääjän toiveiden mukaiseksi.

WordPress -sivustojen osalta hyökkääjät yleensä keskittyvät kaivamaan esiin heikkoja salasanoja sekä haavoittuvaisia lisäosia. Yksi yleisimmistä haavoittuvuustyypeistä on Cross-Site Scripting, eli XSS. Käytännössä kyseessä on tilanne, jossa käyttäjä onnistuu syöttämään sivulle omavalintaista koodia, esimerkiksi sivustolle upotetun yhteydenottolomakkeen avulla. Haavoittuvuustyyppi on mukana mm. OWASP TOP10 -listauksessa, joka on ajantasainen listaus vakavimmista verkkopalveluita koskevista uhkaluokista.

Content Security Policy eli CSP estää sivuston kaappaamisen

Pieni virhe sivuston koodissa voikin johtaa sivuston kaappaamiseen. Mikä siis avuksi? Yksi keino on Content Security Policy (CSP), tietoturvastandardi ja -tekniikka, jossa sivusto kertoo vierailijan verkkoselaimelle, mitkä ovat sallittuja resursseja kyseisellä sivustolla, sekä toisaalta voidaan pyytää selainta raportoimaan tietoturvapoikkeamista sivustolle upotetuissa sisällöissä. CSP:n tavoitteena on rajoittaa vieraan koodin ja muiden komponenttien sisällyttämistä sivustolle ja näin ehkäistä muun muassa cross-site-scripting ja ClickJacking -tyyppisiä hyökkäyksiä. Edellytyksenä CSP:n käytölle on, että kävijällä on käytössään moderni verkkoselain (Chrome 25+ ,Edge 14+, Firefox 23+, IE 10+, Opera 15+, Safari 7+).

Tieto sallituista resursseista välitetään palvelimelta selaimelle HTTP-otsakkeena Content-Security-Policy. Sen avulla voidaan määritellä sallitut lähteet esimerkiksi skripteille, tyylitiedostoille, upotetuille fonteille, kehyksille ja muille sisältötyypeille. CSP-säännöllä voidaan sallia joko yksittäisiä tiedostoja, tai kokonaisia verkkotunnuksia tai protokollia. Kokonainen HTTP-otsake voi näyttää esimerkiksi seuraavalta (esimerkin sisältö on muotoiltu helpommin luettavaksi, tarkempi tekninen kuvaus löytyy Mozillan kehittäjädokumentaatiosta):

content-security-policy:
default-src 'self';
script-src 'self' https://www.google-analytics.com https://code.jquery.com https://www.gstatic.com https://www.google.com/recaptcha/api.js https://v2.zopim.com https://platform.twitter.com https://cdn.syndication.twimg.com https://www.googletagmanager.com;
  style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https:;
font-src 'self' data: https://fonts.gstatic.com https://use.fontawesome.com https://v2.zopim.com/widget/fonts/zopim.ttf https://*.bootstrapcdn.com;
frame-src https://www.slideshare.net https://www.google.com https://platform.twitter.com https://syndication.twitter.com https://www.youtube.com;
connect-src 'self' wss://*.zopim.com;
upgrade-insecure-requests;
report-uri https://seravo-cspreports.seravo.fi/receive.php;

CSP on otsaketieto

Yksinkertaistetusti ilmaistuna CSP-otsakkeen avulla verkkopalvelu käytännössä kertoo käyttäjän selaimelle, että ”skriptejä voit lukea ainoastaan palvelimilta A ja B, tyylisivuja palvelimilta A ja C, sekä kuvia palvelimilta A, B, D”. Selain ei suostu avamaan mitään muita resursseja, jolloin esimerkiksi hyökkääjän sivustolle injektoima JavaScript -haittakoodi ei käynnistykään. Mikäli sivusto yrittää tarjota muita resursseja, selain osaa raportoida asiasta sivuston ylläpitäjälle, joka voi välittömästi ryhtyä toimenpiteisiin hyökkääjää vastaan.

CSP:n käyttöönotto

CSP:n käyttöönotto on monivaiheinen prosessi, jossa on tärkeää huolehtia siitä, että koko kehitystyössä otetaan huomioon tekniikan vaikutukset mm. uusien ominaisuuksien käyttöönottoon. Toiminnon tuottamia raportteja on tärkeää seurata aktiivisesti, jotta mahdolliset poikkeamat voidaan havaita. Virheellinen toteutus voi helposti tarkoittaa rikkinäistä verkkosivustoa. Lisähaasteen tekniikan käyttöönottoon tuo WordPress, jonka ytimessä on vielä tällä hetkellä muutamia tiedossa olevia CSP-tekniikan kanssa yhteensopivuutta heikentäviä tekijöitä.

Oikein käytettynä CSP tuo kuitenkin huomattavan lisäsuojan hyökkäysyrityksiä vastaan ja voi toimia pelastavana tekijänä murtoyrityksen osuessa omalle kohdalle. Mikäli tekniikan käyttöönotto kiinnostaa, hyvä tapa päästä aiheessa eteenpäin on tutustua Firefox -selainta kehittävän Mozilla-säätiön kehittäjädokumentaatioon aiheesta.


Tags: