VERKKOSOVELLUSTEN YLEISIMMÄT HAAVOITTU- VUUDET JA KÄYTÄNTEET NIIDEN EHKÄISEMISEKSI

Samankaltaiset tiedostot
Tech Conference Office 365 tietoturvan heikoin #TechConfFI

Järjestelmäarkkitehtuuri (TK081702)

Action Request System

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

T Hypermediadokumentin laatiminen. Sisältö. Tavoitteet. Mitä on www-ohjelmointi? Arkkitehtuuri (yleisesti) Interaktiivisuuden keinot

Opas verkkopalvelun tietoturvan varmentamiseen

Tekninen suunnitelma - StatbeatMOBILE

MOBISITE-TYÖKALUN SISÄLTÄMÄT TOIMINNOT

Keskustelusivusto. Suunnitteludokumentti

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Uloskirjautuminen Shibbolethissa

10 Nykyaikainen WWW-arkkitehtuuri

Visma Fivaldi -käsikirja Tehtävienhallinta- ohje käyttäjälle

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

KYMENLAAKSON AMMATTIKORKEAKOULU Tietotekniikan koulutusohjelma / Tietoverkkotekniikka. Joni Korjala APACHE WWW-PALVELIN Seminaarityö 2012

Web-palvelut ja niihin kohdistuneiden poikkeavuuksien tunnistamisen. Harri Mäkelä

Web Service torilla tavataan!

OP Tunnistuksen välityspalvelu

Käyttöohje. Ticket Inspector. Versio 1.0. Sportum Oy

3 Verkkopalveluarkkitehtuuri

Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

Tekninen suunnitelma - StatbeatMOBILE

Ohjelmoinnin perusteet Y Python

ProNetti -sähköpostijärjestelmä

HAAVOITTUVUUKSIEN HALLINTA RAJOITA HYÖKKÄYSPINTA-ALAASI

ISACA Finland OWASP The OWASP Foundation. Timo Meriläinen Antti Laulajainen.

The OWL-S are not what they seem

in condition monitoring

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

Digitaalinen haavoittuvuus MATINE Tampere

KRIITTISIMMÄT HAAVOITTUVUUDET WEB-SOVELLUKSISSA

Juricon Nettisivu Joomlan käyttöohjeet

Järjestelmän kriittisimmille toiminnallisuuksille (listattu alla), toteutetaan 1

opiskelijan ohje - kirjautuminen

Webmailin käyttöohje. Ohjeen sisältö. Sähköpostin peruskäyttö. Lomavastaajan asettaminen sähköpostiin. Sähköpostin salasanan vaihtaminen

Pipfrog AS Tilausten hallinta

Microsoft Outlook Web Access. Pikaohje sähköpostin peruskäyttöön

TUTKI OMAT TIETOTURVA-AUKKOSI. ENNEN KUIN JOKU MUU TEKEE SEN PUOLESTASI. F-Secure Radar Ville Korhonen

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

Käyttöohje. Aija. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ilmoitus saapuneesta turvasähköpostiviestistä

BLOGGER. ohjeita blogin pitämiseen Googlen Bloggerilla

Pikaopas. Tietoturva, GDPR ja NIS. Version 3.0

3 Verkkopalveluarkkitehtuuri

Taustaa. CGI-ohjelmointi

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Ravintola Kalatorin tietosuojaseloste

Sähköposti ja uutisryhmät

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0

Entiteetit erotetaan muusta tekstistä & ja puolipiste. esim. copyright-merkki näkyy sivulla

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

Järjestelmäarkkitehtuuri (TK081702) Avoimet web-rajapinnat

Aimo-ohjauspaneelin käyttöohje Sisällys

Ohjelmoinnin perusteet Y Python

EASY Tiedostopalvelin - mobiilin käyttöopas

HTTP-välityspalvelimen käyttö tapahtumien keräämiseen

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Hallintaliittymän käyttöohje

Mikä on internet, miten se toimii? Mauri Heinonen

opiskelijan ohje - kirjautuminen

TermBase NET versio (Beta)

Testidatan generointi

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.

Lyseopaneeli 2.0. Käyttäjän opas

Ohjelmoinnin perusteet Y Python

Luottamuksellinen sähköposti Trafissa

ETÄTERMINAALIYHTEYS SELAIMELLA

Projektinhallintaa paikkatiedon avulla

OnniSMS Rajapintakuvaus v1.1

Amazon Web Services (AWS) on varmaankin maailman suosituin IaaS-tarjoaja. Lisäksi se tarjoaa erilaisia PaaS-kategoriaan kuuluvia palveluita.

Integrointi. Ohjelmistotekniikka kevät 2003

Maventa Connector Käyttöohje

Paikkatietorajapinnat IT arkkitehtuurin näkökulmasta

Tonttihakemuksen tekeminen

Käyttöohje Suomen Pankin DCS2-järjestelmään rekisteröityminen

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS Ti Kandidaatintyö ja seminaari

TimeEdit opiskelijan ohje TimeEdit-instructions for students from this link

KIURU Tietotekniikan sovellusprojekti

OPI-Maksut - Käyttötapaukset

Purot.net Wiki. Tutkielma. Paavo Räisänen. Centria Ammattikorkeakoulu

Javan asennus ja ohjeita ongelmatilanteisiin

FuturaPlan. Järjestelmävaatimukset

OSI ja Protokollapino

Osallistavan suunnittelun kyselytyökalu

TIEDEJUTTUKURSSI FM VILLE SALMINEN

Office 365 palvelujen käyttöohje Sisällys

Poikkeavuuksien havainnointi (palvelinlokeista)

REST an idealistic model or a realistic solution?

Julkinen. Suomen Pankin ja Finanssivalvonnan suojattu sähköposti: ulkoisen käyttäjän ohje

Ylläpitodokumentti Mooan

ALVin käyttöohjeet. Kuvaus, rajaus ja tallennus puhelimella ALVin -mobiilisovelluksen avulla dokumentit kuvataan, rajataan ja tallennetaan palveluun.

Google-dokumentit. Opetusteknologiakeskus Mediamylly

Ohje luottamuksellista tietoa sisältävien sähköpostiviestien lähettämiseen ja vastaanottamiseen

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.3.0

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely.

LOKITUKSEN JA MONITOROINNIN HYÖDYL- LISYYS VERKKOSOVELLUKSIIN KOHDISTU- VIEN HYÖKKÄYKSIEN TUNNISTAMISESSA

KYMP Webmail -palvelu

Web sovelluksen kehittäminen sähkönjakeluverkon suojareleisiin

Transkriptio:

Santeri Kaasalainen VERKKOSOVELLUSTEN YLEISIMMÄT HAAVOITTU- VUUDET JA KÄYTÄNTEET NIIDEN EHKÄISEMISEKSI JYVÄSKYLÄN YLIOPISTO TIETOJENKÄSITTELYTIETEIDEN LAITOS 2018

TIIVISTELMÄ Kaasalainen, Santeri Verkkosovellusten yleisimmät haavoittuvuudet ja käytänteet niiden ehkäisemiseksi Jyväskylä: Jyväskylän yliopisto, 2018, 43 s. Tietojärjestelmätiede, kandidaatintutkielma Ohjaaja: Siponen, Mikko Verkkosovellukset ovat houkutteleva tapa tarjota kuluttajille palveluita, koska selainpohjainen sovellus takaa sen, että yksi ja sama sovellus toimii usealla eri alustalla riippumatta laitteesta tai käyttöjärjestelmästä. Verkkosovellukset ovat kuitenkin alttiimpia kyberhyökkäyksille, koska niiden verkkokäyttöliittymärajapinta on julkisesti avoin. Lisäksi verkkosovelluksien koostuminen suuresta määrästä vuorovaikutuksessa keskenään olevia teknologioita on johtanut tietoturvan toteutumisen hankaloitumiseen, koska kehittäjät joutuvat pitämään silmällä kunkin teknologian haavoittuvuuksille altistavia tekijöitä. Tämän vuoksi on tärkeää tutkia verkkosovellusten mahdollisia haavoittuvuuksia, syitä näihin sekä kuinka ne voidaan ehkäistä. Tutkielmassa käsiteltiin verkkosovellusten rakennetta siltä pohjalta, että kuinka eri teknologioiden läsnäolo johtaa haavoittuvuuksiin. Tutkielmassa käsiteltiin myös verkkosovellusten yleisimpiä haavoittuvuuksia ja kuinka näitä voidaan ehkäistä. Koska verkkosovelluksiin kohdistuvia haavoittuvuuksia on lukuisia, niitä kaikkia on mahdotonta käsitellä tämän tutkielman puitteissa. Siksi tässä tutkielmassa käsitellyt haavoittuvuudet pohjattiin OWASP:n vuoden 2013 top 10 listaukseen verkkosovelluksiin kohdistuvista haavoittuvuuksista soveltuvilta osin. Kirjallisuuskatsauksen perusteella löydettiin verkkosovellusten haavoittuvuuksien syille neljä yläkategoriaa: puutteellinen syötteiden varmistus, puutteellinen istuntotunnisteen hallinta, puutteet verkkosovelluksen loogisessa rakenteessa ja puutteellinen verkkosovelluksen alustan konfiguraatio. Kirjallisuuskatsauksen perusteella, tutkielmassa esitettiin myös kehittämisvaiheen käytänteet, joiden avulla edellä mainituista syistä johtuvat haavoittuvuudet vältetään. Asiasanat: tietoturva, verkkosovellus, haavoittuvuus

ABSTRACT Kaasalainen, Santeri The Most Common Web Application Vulnerabilities and How to Prevent Them Jyväskylä: University of Jyväskylä, 2018, 43 s. Information Systems, Bachelor s Thesis Supervisor: Siponen, Mikko Web applications have become a tempting way to provide services for customers because using an application via web browser provides a way to run it no matter what device or operating system user is using. However, web applications are more prone to cyber-attacks because they accessible through their web user interface. In addition, web applications constitute of many different technologies that are in interaction with each other meaning that developers need to keep an eye on vulnerabilities that are due to using each of technologies. That is a reason for doing research of web application vulnerabilities: what are the reasons that lead to their existence and what are the ways to prevent them. In this paper, web application architecture and how structure of large amount of different technologies leads to existence of vulnerabilities were surveyed. Also the most common web application vulnerabilities and prevention technics were surveyed. Because there exists large amount of different web application vulnerabilities it is impossible to have them all present in this research. That s why vulnerability chapter in this paper have been limited to base on of applicable part of OWASP s top 10 list of the most dangerous web application vulnerabilities from 2013. Four main categories were found to be causes of web application vulnerabilities: lack of input validation, poor session management, shortcoming in application s logical structure and security misconfiguration. Based on literature review, practices to prevent vulnerabilities that occur because those reasons were also presented. Keywords: information security, web application, vulnerability

KUVIOT Kuvio 1 POST- ja GET- metodin eroavaisuus.... 13 Kuvio 2 Istuntotunnisteen sisältävän evästeen asettaminen... 13 Kuvio 3 Esimerkki ohjelmakoodista, joka mahdollistaa SQL-injektion... 17 Kuvio 4 Tuloksena syntynyt SQL-lauseke... 17 Kuvio 5 Esimerkki Session fixation-haavoittuvuuden hyväksikäytöstä... 21 Kuvio 6 Sovelluskehyksen hyödyntäminen määriteltäessä käyttäjäoikeuksien mukaisia sallittuja toimintoja... 33 TAULUKOT TAULUKKO 1 OWASP:n vuoden 2013 top 10 lista vaarallisimmista verkkosovelluksia uhkaavista haavoittuvuuksista. Suomennettu lähteestä OWASP (2013)... 16

SISÄLLYS TIIVISTELMÄ ABSTRACT KUVIOT TAULUKOT 1 JOHDANTO... 7 2 VERKKOSOVELLUKSEN RAKENNE... 9 2.1 Verkkosovelluksen asiakas-palvelin-arkkitehtuuri... 9 2.1.1 Asiakasohjelma (Client-side)... 10 2.1.2 Palvelinpuolenjärjestelmä (Server-side)... 11 2.2 Asiakkaan ja palvelimen välinen kommunikointi... 11 2.2.1 Http-protokolla... 12 2.2.2 Evästeet ja istunnon käsittely... 13 2.3 Verkkosovelluksen alustakomponentit... 14 3 VERKKOSOVELLUSTEN YLEISIMMÄT HAAVOITTUVUUDET... 15 3.1 Syötteiden hyödyntäminen hyökkäyksessä... 16 3.1.1 SQL injektio... 17 3.1.2 Cross-site Scripting (XSS)... 18 3.2 Käyttäjän istuntotunnisteen hyväksikäyttö... 20 3.2.1 Session fixation... 21 3.2.2 Cross-site request forgery (CSRF)... 21 3.3 Haavoittuvuudet loogisessa rakenteessa... 22 3.4 Puutteet alustan päivityksessä ja konfiguraatiossa... 24 3.4.1 Verkkopalvelimen vääränlainen konfigurointi... 25 3.4.2 Sovelluskehyksen vääränlainen konfigurointi... 26 4 KÄYTÄNTEET HAAVOITTUVUUKSIEN EHKÄISEMISEKSI... 28 4.1 Syötteiden turvallisuuden takaaminen... 29 4.1.1 Syötteiden turvallisuuden takaaminen ohjelmointiratkaisuilla 29 4.1.2 Syötteiden analyysi ja testaaminen... 30 4.2 Verkkoistunnon hallinnan takaaminen... 31 4.2.1 Verkkoistunnon hallinnan takaaminen ohjelmointiratkaisuin. 31 4.2.2 Istunnonhallinnan toimivuuden testaaminen... 32 4.3 Loogisen toiminnallisuuden takaaminen... 32 4.3.1 Loogisen rakenteen takaaminen ohjelmointiratkaisuin... 33 4.3.2 Loogisen rakenteen testaaminen ja analysointi... 33 4.4 Oikeanlaiset sovellusympäristön konfiguraatiokäytänteet... 34 4.4.1 Oikeaoppinen konfigurointi... 34 4.4.2 Alustakomponenttien ja niiden konfiguraation testaaminen... 35 5 YHTEENVETO... 37

LÄHTEET... 40

7 1 JOHDANTO World Wide Webin alkuaikoina Internet oli hyvin erilainen paikka, kuin mitä se on nykyään. Se koostui kokonaan staattisista HTML- dokumenteista ja yksittäinen URL-osoite tarjosi saman näkymän jokaiselle verkkoselaajalle. Nykyään tilanne on kuitenkin aivan toisenlainen. Suurin osa nykyajan verkkosivustoista on enemmänkin verkkoselaimella käytettäviä verkkosovelluksia, jotka tarjoavat dynaamisesti mukautuvaa sisältöä käyttäjästä ja käyttäjän toimenpiteistä riippuen. Verkkosovellukset ovat houkutteleva tapa tarjota kuluttajille palveluita, koska selainpohjainen sovellus takaa sen, että yksi ja sama sovellus toimii usealla eri alustalla riippumatta laitteesta tai käyttöjärjestelmästä. Tämä vähentää palveluiden tarjoamisen kustannuksia verrattaessa perinteisiin työpöytäsovelluksiin. Verkkosovellukset ovat kuitenkin alttiimpia kyberhyökkäyksille niiden kaikkien saavutettavissa olevan julkisen verkkokäyttöliittymärajapinnan vuoksi. (Rafique ym., 2015.) Lisäksi dynaamisten sovellusten rakentaminen selaimella käytettäväksi on tietoturvan osalta haastava tehtävä, koska käyttäjät joutuvat kiinnittämään huomioita useiden eri teknologioiden käytöstä aiheutuviin haavoittuvuuksiin. (Stuttard & Pinto, 2011.) Vaadittu tietoturvan tason voidaan kuitenkin saavuttaa käyttämällä sovelluskehityksessä tietoturvan kannalta oikeaksi todettuja käytänteitä. Tämän tutkielman tarkoituksena on tarjota yleiskuva verkkosovelluksia kohtaavista haavoittuvuuksista ja näiden syistä sekä esittää keinot näiden ehkäisemiseksi. Verkkosovellusten tietoturvaa ja haavoittuvuuksia on tutkittu paljon. Tutkielmien aihepiirit käsittelevät yleisesti jotakin tiettyä haavoittuvuutta ja esittävät metodin tämän haavoittuvuuden ehkäisemiseksi. Tämä tutkielma kokoaa yhteen havaintoja useista tieteellisistä artikkeleista. Ensimmäinen käsittelyluku verkkosovelluksen rakenne avaa verkkosovelluksen rakennetta siltä osin, että haavoittuvuuksien syntymiseen johtavat tekijät on helpompi ymmärtää. Verkkosovellusten rakenne koostuu suuresta määrästä eri teknologioita ja tämä tekee sovelluksista tietoturvanäkökulmasta katsottuna haastavia, koska kehittäjät joutuvat ottamaan huomioon kunkin teknologian haavoittuvuuksille altistavat tekijät. Eri teknologioiden määrä on kasvanut suureksi, koska WWW:tä ei suunniteltu alun perin tukemaan nykyaikaisia ominaisuuksiltaan rikkaita verkkosovelluksia ja nykyaikaisiin vaatimuksiin vastaami-

nen on johtanut uusien teknologioiden lisäämiseen vanhaan WWW-standardiin. Lisäksi World Wide Webin alkuajan vaatimuksiin kehitettyjä teknologioita ei suunniteltu toimimaan osana nykyaikaista dynaamista verkkosovellusta mikä on johtanut siihen, että niihin on jouduttu kehittämään lisäominaisuuksia. (Stuttard & Pinto, 2011.) Suuri lukumäärä vuorovaikutuksessa keskenään olevia teknologioita on johtanut tietoturvan toteutumisen hankaloitumiseen, koska kehittäjät joutuvat pitämään silmällä kunkin teknologian haavoittuvuuksille altistavia tekijöitä. Toinen käsittelyluku, verkkosovellusten yleisimmät haavoittuvuudet, selostaa verkkosovelluksia koskevia haavoittuvuuksia ja hyökkäysmenetelmiä. Lin ja Xuen (2014) mukaan verkkosovellusten haavoittuvuudet voidaan jakaa kolmeen tekijään: puutteisiin syötteiden ja istuntotunnisteen käsittelyssä sekä loogiseen virheeseen verkkosovelluksen rakenteessa. Lisäksi OWASP:n vuoden 2013 listauksessa (2013) verkkosovelluksia uhkaavista kymmenestä vaarallisimmista haavoittuvuuksista voidaan erottaa vielä yksi tekijä: verkkosovelluksen alustan puutteellinen konfigurointi. Tässä tutkielmassa käydään läpi jokaista haavoittuvuuskategoriaa siten, että esitetään tapa kuinka haavoittuvuudet realisoituvat ja keinot joidenka avulla hyökkääjä kykenee käyttämään näitä hyväksi. Kolmas käsittelyluku, käytänteet haavoittuvuuksien ehkäisemiseksi, esittää keinot verkkosovellusten turvallisuuden takaamiseen. Kolmannessa luvussa esitellyt tietoturvan varmistavat toimenpiteet pyrkivät ehkäisemään toisessa luvussa esiteltyjä haavoittuvuuksia. Turvallisuuden varmistavat keinoja on käsitelty puhtaasti ohjelmoinnin ja teknisen kehittämisen näkökulmasta ja tutkielmassa ei oteta kantaa esimerkiksi projektivaiheen riskianalyysiin tai vaatimusmäärittelyyn. Tässä tutkielmassa ei myöskään perehdytä verkkosovelluksiin jälkeenpäin liitettäviin ohjelmistoihin joiden tarkoitus on parantaa sovelluksen tietoturvaa. Tämä tutkielma on luotu kirjallisuuskatsauksena ja materiaalin etsinnässä on käytetty hyväksi verkosta löytyviä tieteellisten artikkelien arkistoja. Lisäksi materiaalia on etsitty myös ohjelmistoteknologiaan ja tietoturvaan liittyviltä verkkosivustoilta. Yleisimpiä hakusanoja ovat olleet web application vulnerabilities, input validation, session management, access control, security misconfiguration ja web application testing. Tämän tutkielman tarkoituksena on vastata kirjallisuuskatsauksen perusteella seuraaviin tutkimuskysymyksiin: Mitkä ovat verkkosovelluksia kohtaavat yleisimmät haavoittuvuudet ja mitkä tekijät niihin johtavat? Kuinka nämä haavoittuvuudet kyetään estämään? Kirjallisuuskatsauksen perusteella verkkosovellusten tekniset haavoittuvuudet kyettiin kategorisoimaan neljään eri ydin tekijään: syötteiden puutteellinen käsittely, istuntotunnisteen puutteellinen hallinta, puutteet verkkosovelluksen loogisessa rakenteessa sekä verkkosovelluksen alustan puutteellinen konfiguraatio. Kirjallisuuskatsauksen perusteella löydettiin myös keinot ja ohjeet ehkäistä edellä mainituista tekijöistä johtuvia haavoittuvuuksia. Tähän tutkielmaan on kirjallisuuskatsauksen perusteella kerätty käytänteet, joita noudattamalla yleisimpiä haavoittuvuuksia voidaan ehkäistä. Ohjeistuksen avulla eritoten aloittelevat verkkosovelluskehittäjät kykenevät vähentämään haavoittuvuuksien riskiä ollessaan osana verkkosovellusprojektia.

9 2 VERKKOSOVELLUKSEN RAKENNE Shklarin ja Rosen (2003) määritelmä verkkosovelluksista on, että ne ovat enemmän kuin pelkkiä verkkosivuja. Ne ovat asiakas-palvelin sovelluksia, jotka tarjoavat interaktiivisia palveluita. Tietoa siirretään käyttäjältä palvelimelle ja päinvastoin. Yksinkertaistettuna voidaan ajatella, että verkkosivustot tarjoavat staattisista ja muokkautumatonta sisältöä, kun taas verkkosovellusten tarjoama sisältö muokkautuu dynaamisesti käyttäjän ja hänen toimintansa mukaan. Tässä luvussa käsitellään verkkosovellusten rakennetta siltä osin, että myöhemmin esitettävät haavoittuvuudet ja oikeanlaiset käytänteet on helpompi ymmärtää. Verkkosovellukset ovat hajautettuja järjestelmiä ja ne koostuvat suuresta määrästä erilaisia teknologioita. Teknologioiden suuri lukumäärä on johtanut sovellusten kompleksisuuteen ja täten niiden turvallinen toteutus on monimutkaista, koska kehittäjät joutuvat ottamaan huomioon useita eri tekijöitä, jotka saattavat johtaa sovelluksen turvallisuuden vaarantumiseen. Suuri osasyyllinen haavoittuvuuksien ilmentymiseen on se, että nykyaikaisissakin verkkosovelluksissa käytetään teknologioita, joita ei alun perin suunniteltu verkkosovellusten nykyaikaiseen käyttöympäristöön. Esimerkiksi nykyään verkkomaailmassa suuressa osassa olevat evästeet ovat vain tapa kiertää httpprotokollan tilattomuus. (Stuttard & Pinto, 2008.) Toinen esimerkki WWW:n käyttövaatimusten kasvamisesta ulos sen suunnitellusta käyttötarkoituksesta on selainnäkymän dynaaminen toiminnallisuus. Verkkosovellusten dynaaminen sisältö tuotetaan JavaScriptin avulla ja tämä on johtanut perinteistä työpöytäsovelluksista poikkeaviin hyökkäystapoihin, kuten esimerkiksi 3. luvussa esiteltävään XSS:ään. (Shar & Tan, 2012.) 2.1 Verkkosovelluksen asiakas-palvelin-arkkitehtuuri Verkkosovellukset ovat hajautettuja järjestelmiä. Hajautettu järjestelmä voidaan nähdä järjestelmäkokonaisuudeksi, joka koostuu useista eri laitteista ja sovelluksista, joilla jokaisella on oma tehtävänsä. Yksinkertaistettuna verkkosovellus tarvitsee toimiakseen kaksi eri järjestelmää: asiakas- ja palvelinjärjestelmän.

Verkkosovelluksissa asiakasjärjestelmä on laite, joka verkkoselaimen avulla suorittaa verkkosovelluksen asiakasohjelmaa ja tämän avulla käyttäjä saa käyttöönsä verkkosovelluksen käyttöliittymän. Palvelinjärjestelmä, on alusta, jolla ajetaan verkkosovelluksen palvelimella suoritettavaa osaa. (Shklarin & Rosen, 2003.) Alusta voi olla fyysinen tai virtuaalinen tietokone tai pohjautua konttiteknologiaan. 2.1.1 Asiakasohjelma (Client-side) Asiakasohjelma on verkkosovelluksen osa, joka suoritetaan käyttäjän verkkoselaimessa. Asiakassovelluksen osuus kokonaissovelluksesta on tuottaa verkkosovelluksen käyttöliittymä sekä siihen liittyvä toiminnollisuus. Asiakassovellus koostuu pääpiirteittäin kolmesta eri teknologiasta: HTML JavaScript CSS HyperText Markup Language (HTML) on verkkosivustojen käyttämä merkkauskieli. HTML:n avulla merkitään verkkosivuston sisältö ja sen avulla opastetaan verkkoselainta näyttämään sisältö oikeassa muodossa ja järjestyksessä. HTMLdokumentit koostuvat elementeistä, jotka määrittävät sivustolla esitettävän sisällön merkityksen. Esimerkiksi <p> elementti kertoo verkkoselaimelle, että sen sisällä oleva sisältö on merkitykseltään tekstikappale. (Mozilla Foundation, 2016c.) Kaikkiaan HTML:n uusimassa HTML5-versiossa on käytössä 142 erilaista merkitystä edustavaa HTML-elementtiä. (W3C, 2016.) Tämän tutkielman kannalta ja ylipäätään verkkosovellusten tietoturvan osalta, tärkeimmät elementit ovat script, input ja form. Script-elementti ohjeistaa verkkoselainta käsittelemään sen sisällä olevaa tekstiä JavaScriptinä. Input-elementti tarkoittaa, että verkkoselaimen tulee piirtää syötekenttä. Form-elementti puolestaan tarkoittaa, että kaikkien sen sisällä olevien syötekenttien data tullaan lähettämään palvelinsovellukselle yhdessä. Lisäksi seuraavan verkkosovellusten yleisimpiä haavoittuvuuksia käsittelevän luvun pohjalta voidaan huomata, että verkkosovellusten käyttöliittymien rakenteen pohjautuminen HTML:ään ja HTMLdokumentin mukautuvuus käyttäjän syötteiden pohjalta on haastavaa tietoturvan kannalta. JavaScript on verkkoselaimen ymmärtämä komentosarjakieli, jonka avulla verkkosivustoille voidaan luoda dynaamista sisältöä. Dynaaminen sisältö tarkoittaa, että kun HTML-dokumentin muodostaman näkymän halutaan muokkautuvan, verkkoselain ei nouda palvelimelta uutta muutettua HTMLdokumenttia vaan JavaScript muokkaa jo näkyvillä olevaa. JavaScriptin avulla kehittäjät voivat määrittää verkkosivun dynaamisen mukautuvuuden käyttäjän toimenpiteiden mukaan. JavaScriptin avulla voidaan esimerkiksi tehdä verkkosivustolle toiminnallisuus, joka tarkistaa käyttäjän antaman syötteen oikeellisuutta jo kirjoitusvaiheessa. JavaScript linkitetään esillä olevaan HTMLdokumenttiin, joko erikseen JavaScript-tiedostona tai se merkitään HTMLdokumenttiin script-elementein. (Mozilla Foundation, 2016a.) Lisäksi JavaScript

11 mahdollistaa lähes reaaliaikaisen kommunikaation palvelimen ja selaimen välillä. JavaScriptin avulla verkkosivustoihin kyetään liittämään toiminnallisuutta ja sen avulla niistä voidaan tehdä interaktiivisia hyötysovelluksia. Seuraavassa luvun pohjalta, joka käsittelee verkkosovellusten haavoittuvuuksia, voidaan kuitenkin todeta, että dynaamisuuden lisääminen verkkosovelluksiin ja niiden vahva pohjautuminen JavaScriptiin on tehnyt ne myös alttiiksi erilaisille haavoittuvuuksille. Cascading Style Sheets (CSS) on World Wide Webin käyttämä tyylikieli. Se määrittää, millaisena esitettävänä oleva HTML-dokumentti näytetään. Tyylitiedoston mukaan voidaan määrittää HTML-dokumentin elementtien ulkoinen esitystapa, kuten esimerkiksi käyttöliittymän fontit ja värit. (Lie, Bos & Lilley, 1998). Koska verkkoselain lähettää CSS:n määritysten mukaisesti http-pyyntöjä myös CSS:ää voidaan käyttää hyödyksi verkkosovelluksiin hyökätessä (OWASP, 2016). 2.1.2 Palvelinpuolenjärjestelmä (Server-side) Verkkosovelluksen toinen ydin osa palvelinpuolenjärjestelmä ja se on keskitetysti kaikkien sitä käyttävien asiakasohjelmien yhteisessä käytössä ja tarjoaa asiakasohjelmille verkkosovelluksen tarkoituksen mukaisia palveluita. Useimmiten palvelinpuolella toimii useita sovelluksia, jotka tarjoavat kokonaisuudelle omia palveluitaan, kuten esimerkiksi autentikaatiota, tiedon tallennusta tai välimuistinhallintaa. Haavoittuvuuksien käsittelyn helpottamiseksi, tässä tutkielmassa palvelinpuolenjärjestelmä käsitetään kuitenkin yhdeksi ohjelmistokokonaisuudeksi, joka käsittää kaikki verkkosovelluksen ylläpitäjän palvelimilla toimivat keskenään verkottuneet ohjelmat, jotka ovat osana verkkosovellusta. Palvelinpuolenjärjestelmällä on lukuisia tehtäviä, jotka vaihtelevat sen mukaan mikä on verkkosovelluksen tarkoitus. Esimerkiksi verkkokaupassa tehtäviä olisi tallentaa tietokantaan tieto siitä, että asiakas on tilannut tuotteen tietyllä hinnalla samalla varmistaen, että asiakkaat eivät voi ostaa tuotteita, jos niitä ei ole varastossa, kun taas esimerkiksi suoratoistopalvelun kohdalla palvelinpuolenjärjestelmän tehtävänä on tarjota käyttäjän verkkoselaimelle haluttu videotiedosto samalla varmistaen, että käyttäjä on kirjautunut sisään ja maksanut kuukausimaksun. Molemmat yllä olevat tapaukset ovat yksinkertaisia esimerkkejä palvelinpuolenjärjestelmän sovelluskohtaisista tehtävistä, jotka ovat järjestelmän tarkoituksenmukaista toimintaa. Tietoturvanäkökulmasta palvelinpuolenjärjestelmän tehtävänä on tarjota asiakasohjelmalle verkkosovelluksen tarkoituksen mukaisia palveluita samalla varmistaen, että käyttäjä ei pääse käsiksi sisältöön, joka ei hänelle ole tarkoitettu. (Shklar & Rosen, 2003.) 2.2 Asiakkaan ja palvelimen välinen kommunikointi Tässä alaluvussa käsitellään asiakas- ja palvelinsovelluksen välistä tiedonsiirtomenettelyä siltä osin, kuin se on merkityksellistä verkkosovellusten yleisimpien tietoturvahaavoittuvuuksien osalta.

2.2.1 Http-protokolla Http (Hypertext Transfer Protocol) on WWW:ssä yleisesti käytetty protokolla, jonka avulla verkkoselain ja palvelin kommunikoivat toistensa kanssa. Protokolla on ollut käytössä WWW:n alusta asti ja se kehitettiin alun perin staattisten dokumenttien noutamiseen. Tämän vuoksi siihen on joutunut rakentamaan lisäominaisuuksia, jotta sitä voitaisiin käyttää nykyaikaisissa verkkosovelluksissa. Verkkosovellusturvallisuuden näkökulmasta tärkein myöhemmin lisätty ominaisuus on evästeet ja ne on jouduttu ottamaan käyttöön, koska http on ns. tilaton protokolla tarkoittaen, että jokaista lähetettyä pyyntöä ja vastausta kohdellaan itsenäisenä ja pyynnöt eivät ole kytköksissä toisiinsa. Tämä tarkoittaa, että palvelin ei kykene käyttäjää tunnistamaan pelkästään http-pyyntöjen perusteella, vaan käyttäjän yksilöivää tietoa joudutaan välittämään evästeiden avulla. (Stuttard & Pinto, 2008.) Http käyttää viestipohjaista mallia, jossa asiakas lähettää palvelimelle pyynnön (request) ja palvelin vastaa tähän palauttamalla http-vastauksen (response). Sekä pyynnöt että vastaukset ovat http-protokollan mukaisia viestejä, jotka koostuvat viestikentistä (message headers) jotka sisältävät tietoa kommunikoivien osapuolien välillä. (Fielding.ym, 1999.) Http-pyynnöt ovat protokollan mukaisia viestejä, joidenka avulla asiakasohjelma välittää tietoa palvelinpuolenjärjestelmälle. Asiakasohjelman lähettämät pyynnöt sisältävät aina jonkin protokollan mukaisen metodin, joka määrittää asiakkaan lähettämän http-pyynnön merkityksen. Verkkosovelluksien haavoittuvuuksien näkökulmasta merkittävimmät metodit ovat GET ja POST. (Stuttard & Pinto, 2008.) GET-pyynnöllä tarkoitetaan menettelyä, jossa asiakassovellus siirtää parametrit palvelinsovellukselle, niin että parametrit kulkeutuvat palvelimelle URL-osoitteen mukana. Ohjesääntö GET-pyynnölle on se, että sitä tulisi käyttää silloin, kun halutaan palvelimelta noutaa yksittäinen HTML-dokumentti ja tarkoitus ei ole kirjoittaa tietokantaan. (Fielding.ym, 1999.) Esimerkiksi linkin klikkaaminen saa aikaan http-pyynnön käyttäen GET-metodia. POST-pyynnössä asiakassovelluksen lähettämät parametrit siirretään palvelimelle lähetettävän http-pyynnön viestikentissä. Ohjesääntönä on, että POST-kutsua tulisi kehittäjien käyttää silloin, kun tarkoituksena on kirjoittaa uutta tietoa tietokantaan, päivittää vanhaa tietoa tai lähetettävä syöte sisältää arkaluontoista tietoa, kuten esimerkiksi salasanan. (Fielding.ym, 1999.) Alla olevasta kuvasta voidaan havainnoida POST- ja GET-metodin olennainen ero. Kyseiset http-kutsut lähettävät samat parametrit palvelinpuolenjärjestelmälle, mutta eri metodia käyttäen. GET-metodissa käyttäjän antamat syötteet lähetetään osana haettua URL-osoitetta. POST-metodissa puolestaan parametrit välitetään palvelinsovellukselle http-kutsun viestikentässä.

13 Kuvio 1 POST- ja GET- metodin eroavaisuus. 2.2.2 Evästeet ja istunnon käsittely Http-protokollan tilattomuuden vuoksi kehitettiin evästeet (engl. cookies), jotka ovat palvelimen http-vastauksessaan lähettämiä avain-arvo pareja, jotka tallennetaan käyttäjän verkkoselaimeen. Kun eväste on tallennettu käyttäjän verkkoselaimeen, jokainen kutsu, joka lähetetään samalle palvelimelle, josta eväste on saatu, sisältää myöskin kyseiset evästeet. (Shklar & Rosen, 2003.) Verkkosovelluksissa käyttäjän tunnistamiseen käytetään usein evästettä, joka sisältää käyttäjän yksilöivän istuntotunnisteen (engl. session identifier). Istuntotunniste on palvelimen luoma vaikeasti sattumanvaraisesti löydettävä merkkijono, jonka avulla palvelinpuolenjärjestelmä ymmärtää, että kuka httppyynnön lähettäjänä on. (Shklar & Rosen, 2003.) Tämän tutkielman seuraavan luvun pohjalta voidaan kuitenkin huomata, että käyttäjien yksilöimen istuntotunnisteella tuottaa verkkosovelluskehittäjille haasteita tietoturvan näkökulmasta. Istuntotunnisteen päätyminen hyökkääjän käsiin johtaa siihen, että hyökkääjä kykenee esiintymään käyttäjänä, jolta hän sai istuntotunnisteen käyttöönsä. Kuvio 2 Istuntotunnisteen sisältävän evästeen asettaminen

2.3 Verkkosovelluksen alustakomponentit Tämän tutkielman aihepiirin osalta tärkeitä verkkosovellusten alustakomponentteja ovat verkkopalvelin ja siinä toimiva palvelinohjelmisto sekä sovelluskehys. Verkkopalvelin on Internettiin kytketty tietokone, jossa suoritetaan verkkosovelluksen palvelinpuolenohjelmia. Verkkopalvelimen käyttöjärjestelmä suorittaa laitetekniset operaatiot, kuten esimerkiksi verkkosovelluksen käyttämän datan kirjoittamisen pysyvästi säilyväksi kiintolevylle. Se myös tarjoaa palvelinpuolenohjelman käyttöön yleisesti käyttöjärjestelmien tarjoamia palveluita, kuten hakemistorakenteen jonka avulla verkkosovellus saa käyttöönsä tarvitsemiaan tiedostoja. (Mills, 2016.) Verkkopalvelimella toimivan verkkopalvelinohjelmiston tehtävänä on tulkita saapuneita http-pyyntöjä, ohjata http-pyynnön mukana tuleva data, kuten evästetiedot ja käyttäjän syötteet, prosessoitavaksi oikealle resurssille verkkopalvelimella ja tämän jälkeen palauttaa http-vastaus pyynnön lähettäneelle käyttäjälle. Lisäksi verkkopalvelinohjelmistossa toimii verkkosovelluksien käyttämiä lisäpalveluita, kuten esimerkiksi salaus. (Mills, 2016.) Sovelluskehykset ovat yleisesti verkkosovelluskehittämisessä käytettäviä apuvälineitä. Ne koostuvat ohjelmakirjastoista, joihin on jo valmiiksi ohjelmoitu useita verkkosovelluksen käyttämiä toiminnollisuuksia. Sovelluskehykset helpottavat verkkosovelluskehittäjän työtä, koska hänen ei tarvitse ohjelmoida verkkosovellusta alusta asti vaan yleisesti käytetyt toiminnollisuudet ovat jo valmiina. (DocForge, 2014.) Tämän tutkielman seuraavan luvun pohjalta voidaan todeta, että verkkosovelluksien käyttämien alustakomponenttien puutteellinen konfigurointi verkkosovelluksen ollessa tuotantokäytössä johtaa haavoittuvuuksien ilmenemiseen verkkosovelluksessa.

15 3 VERKKOSOVELLUSTEN YLEISIMMÄT HAA- VOITTUVUUDET Verkkosovellusten yleisuus on kasvanut suuresti muutaman vuosikymmenen aikana. Ne antavat miljardeille ihmisille mahdollisuuden käyttää esimerkiksi verkkopankkipalveluita tai kommunikoida toisten ihmisten kanssa verkon välityksellä käytössä olevasta päätelaitteesta välittämättä. Kuitenkin nämä mahdollisuudet ovat tuoneet mukanaan tietoturvaongelmia ja haasteita. Verkkosovellukset ovat alttiimpia kyberhyökkäyksille niiden kaikkien saavutettavissa olevan julkisen verkkokäyttöliittymärajapinnan vuoksi. (Rafique ym., 2015.) Lisäksi suuri lukumäärä erilaisia teknologioita tekevät verkkosovelluksesta monimutkaisen tuottaen kehittäjille haasteita tietoturvan osalta. Tietoturvan osalta on tärkeää, että verkkosovellukset sisältävät mahdollisimman vähän haavoittuvuuksia. Verkkosovelluksien tapauksessa haavoittuvuus tarkoittaa järjestelmän kykenemättömyyttä vastata hyökkääjän pahantahtoisiin toimenpiteisiin. Järjestelmässä on haavoittuvuus, kun järjestelmä ei kykene estämään ei haluttuja toimenpiteitä. (Grobauer, Walloschek & Stocker, 2011.) Lin ja Xuen (2014) mukaan verkkosovellusten haavoittuvuudet voidaan jakaa kolmeen tekijään: puutteisiin syötteiden ja istuntotunnisteen käsittelyssä sekä loogiseen virheeseen verkkosovelluksen rakenteessa. Lisäksi OWASP:n vuoden 2013 listauksessa verkkosovelluksia uhkaavista kymmenestä vaarallisimmista haavoittuvuuksista voidaan erottaa vielä yksi tekijä: verkkosovelluksen alustan puutteellinen konfigurointi. Verkkosovelluksia kohtaavien tietoturvahaavoittuvuuksien suuren lukumäärän vuoksi kaikkia haavoittuvuuksia ei tämän tutkielman puitteissa voida käydä läpi. Rajoitan täten haavoittuvuusosion kattamaan The Open Web Application Security Project-organisaation (OWASP) vuoden 2013-listauksessa (2013) olleisiin. OWASP:n lista sisältää maailman kymmenen vaarallisinta verkkosovelluksia uhkaavaa tietoturvariskiä ja lista edustaa laajaa yhteisymmärrystä asiantuntijoiden kesken siitä, että mitkä ovat kymmenen vaarallisinta verkkosovelluksia uhkaavaa tietoturvahaavoittuvuutta. The Open Web Application Security Project on maailman laajuinen voittoa tavoittelematon organisaatio, jonka pyrkimyksenä on parantaa verkkosovellusten tietoturvaa levittäen tietoa

sovelluksia kohtaavista haavoittuvuuksista sekä keinoista ehkäistä niitä. OWASP julkaisee tasaisin väliajoin top-10 listauksen kyseisen hetken vaarallisimmista verkkosovelluksia kohtaavista tietoturvahaavoittuvuuksista. Pohjaan tutkielmassani seuraavaksi esitettävät haavoittuvuudet OWASP:n vuoden 2013 top 10 listaan. TAULUKKO 1 OWASP:n vuoden 2013 top 10 lista vaarallisimmista verkkosovelluksia uhkaavista haavoittuvuuksista. Suomennettu lähteestä OWASP (2013) Sija Haavoittuvuuden nimi 1. Injektio 2. Puutteellinen autentikointi ja istuntotunnisteen käsittely 3. Cross-site Scripting 4. Varmistamattomat suorat viittaukset 5. Puutteellinen turvallisuuskonfigurointi 6. Arkaluontoisen tiedon paljastuminen 7. Puuttumaton sallittujen toimintojen tarkistus 8. Cross-site Request Forgery (CSRF) 9. Tunnettujen haavoittuvaisten komponenttien käyttö 10. Varmistamattomat uudelleen ohjaukset 3.1 Syötteiden hyödyntäminen hyökkäyksessä Käyttäjät ovat usein dynaamisessa vuorovaikutuksessa verkkosovelluksen kanssa. Verkkosovellus käyttää esimerkiksi käyttäjän syötteitä osana tiedon etsintää tietokannasta liittäen parametreja osaksi SQL-lausekkeita sekä rakentaa syötteiden pohjalta käyttöliittymänäkymiä liittäen parametreja osaksi HTMLdokumentteja. Verkkosovellusten käyttäjien syötteiden mukaan ohjautuva dynaaminen toiminta avaa hyökkääjälle väylän hyökätä verkkosovellukseen. (Hydara, Sultan, Zulzali & Admodisastro, 2015.) Stuttardin ja Pinton (2008) mukaan verkkosovellusten ydin tietoturvaongelma on juuri se, että käyttäjä voi antaa täysin mielivaltaisen syötteen sovellukselle ja kehittäjät eivät voi tehdä olettamuksia siitä, että minkälaisia syötteitä sovellukselle annetaan. Suurin osa verkkosovelluksia kohtaavista haavoittuvuuksista johtuu heikosta syötteiden validionnista. Haavoittuvuus syntyy, kun verkkosovellus käyttää käyttäjän syötettä osana jotakin tietoturvan kannalta herkkää operaatiota ilman että syöte tarkastetaan kunnolla ja tietynlaisella syötteellä hyökkääjä kykenee saamaan verkkosovelluksen tekemään vaarallisia toimenpiteitä. (Balzarotti ym., 2008.) OWASP:n vuoden 2013 top 10 listauksessa (2013) syötteiden kautta syntyvät hyökkäykset ovat suuresti edustettuna ja tähän kategoriaan voidaan lukea kaksi eri riskiä, koska nämä suoranaisesti käyttävät hyväkseen verkkosovelluksen ohjelmointivirhettä: Injektio (engl. injection)

17 Cross-site scripting Injektio tyypin haavoittuvuus voi liittyä useaan eri teknologiaan, mutta yleisin on SQL injektio. SQL injektio ja Cross-site Scripting ovat yleisesti paljon tutkittuja niiden yleisyyden ja suurien vahinkojen vuoksi (Buja, Jalil, Ali & Rahman, 2014). 3.1.1 SQL injektio SQL-injektio on injektiotyypin hyökkäys, jossa hyökkääjä kykenee saamaan tietokannan suorittamaan SQL-lausekkeen, jota kehittäjät eivät ole tarkoittaneet sallituksi tietokantakomennoksi. Hyökkäysmenetelmä luo vakavan tietoturvauhan, koska se mahdollistaa hyökkääjälle rajoittamattoman pääsyn verkkosovelluksen käyttämään tietokantaan ja täten pääsyn sovelluksen tietokannan tietoihin. (Halfond, Viegas & Orso, 2006.) Seuraavassa kuvasarjassa esitetään esimerkki SQL-injektion syntymisestä tietokannassa, jossa on tietokantataulu nimeltä accounts ja siinä sarakkeet nimeltä name ja password. SQL-injektion mahdollisuus syntyy, kun verkkopalvelun sovelluslogiikka luo dynaamisesti SQL-lausekkeet käyttäjän httppyynnön mukana tulleiden parametrien mukaan käyttäen normaaleja merkkijono-operaatioita. Kuvio 3 Esimerkki ohjelmakoodista, joka mahdollistaa SQL-injektion Yllä olevassa ohjelmistokoodissa query-nimiseen muuttujaan sijoitetaan SQLlauseke, jonka tarkoitus on noutaa tietokannasta accounts-taulusta rivi, jonka name- ja password-sarakkeiden arvot täsmäävät parametrina tulleisiin vastaaviin. Lauseketta käytetään tunnistamaan käyttäjä, joka on aikeissa kirjautua verkkosovellukseen. Ylläolevan autentikointilogiikka voidaan kiertää yksinkertaisella toimenpiteellä. Jos käyttäjä kirjoittaa password-kenttään esimerkiksi OR a = a muodostuu seuraavan kuvan kaltainen SQL-lauseke. Tuloksena syntyneen SQL-lausekkeen avulla verkkosovellukseen voidaan kirjautua ilman, että salasanaa tarkastetaan ollenkaan. Kuvio 4 Tuloksena syntynyt SQL-lauseke SQL-injektion mahdollistavia mekanismeja on löydetty useita. Ne poikkeavat toisistaan väylän suhteen, mitä pitkin injektiossa käytettävä parametri välittyy

tietokantaohjelmalle sekä missä vaiheessa itse hyökkäys realisoituu. (Halfond, Viegas & Orso, 2006.) Hyökkääjä voi toteuttaa SQL-injektion käyttöliittymän syötteiden kautta. Tässä hyökkäysmenetelmässä hyökkääjä lähettää http-pyynnössään palvelimelle merkkijonon, joka kääntyy palvelimen sovelluslogiikassa SQL-lausekkeeksi, jota kehittäjät eivät olleet tarkoittaneet lailliseksi SQL-lausekkeeksi. Hyökkääjä voi lähettää vaarallisen merkkijonosyötteen sisältävän http-pyynnön palvelinpuolenjärjestelmälle tutkien verkkosovelluksen käyttöliittymän muodostavan HTML-dokumentin input-kenttien nimiä ja tämän jälkeen lähettämällä palvelinpuolenjärjestelmälle http-pyynnön, jonka parametrien nimet ovat samoja, kuin käyttöliittymässäkin ja parametrien arvot mahdollisesti muodostaisi SQLinjektion. (Halfond, Viegas & Orso, 2006.) SQL-injektion voi toteuttaa myös evästeiden välityksellä. Tämän kaltainen injektiomekanismi mahdollistuu, jos SQL-lausekkeiden muodostamiseen käytetään, evästeiden arvoja. Evästeiden avulla tapahtuva injektiomekanismi on hyökkääjän näkökulmasta yksinkertainen toteuttaa, koska käyttäjien on helppo muokata palvelimen heille tallentamia evästeitä ja täten muokata myös niiden avulla muodostuvaa SQL-lauseketta. (Halfond, Viegas & Orso, 2006.) Anleyn mukaan (2002) SQL-injektio voidaan toteuttaa myös niin, että itse injektio ja hyökkäys tapahtuvat erillä toisistaan. Tämänkaltaisessa hyökkäysmekanismissa hyökkääjä kykenee toimittamaan sovelluksen tietokantaan merkkijonon, joka vasta myöhemmässä vaiheessa, palvelinpuolenjärjestelmän sitä prosessoidessa, realisoituu vaaralliseksi tietokantakomennoksi. Myöhemmin realisoituvat SQL-hyökkäykset ovat haasteellisia havaita, koska hyökkäyksen vaikutus ja injektiotapahtuma ovat erillä toisistaan. SQL-injektio on verkkosovellusmaailmassa yleisin injektiotyypin hyökkäys. OWASP:in top 10 listalla se on arvostettu maailman vaarallisimmaksi verkkosovellushaavoittuvuudeksi sen yleisyyden ja suurien vahinkojen johdosta. On hyvä myös muistaa, että SQL:n lisäksi injektiohaavoittuvuuksia voi esiintyä myös muissa verkkosovellusten käyttämissä teknologioissa, kuten esimerkiksi XML-dokumenttien tulkitsemiseen käytetyssä Xpathissä. Hyökkääjä voi kyetä myös oikeanlaisella syötteellä muodostamaan ei-toivotun käyttöjärjestelmäkomennon. (OWASP, 2013.) 3.1.2 Cross-site Scripting (XSS) Cross-site scripting (XSS) on hyökkäysmenetelmä, jossa hyökkääjä onnistuu liittämään verkkosovelluksen esittämään HTML-dokumenttiin oman haitallisen JavaScript-elementin, jonka uhrin verkkoselain suorittaa. Hyökkäyksen tekee vaaralliseksi se, että HTML-dokumenttiin liitetyn JavaScript-elementin avulla hyökkääjä voi suorittaa käyttäjän verkkoselaimessa useita haitallisia toimenpiteitä, kuten esimerkiksi uudelleenohjata hänet hyökkääjän haluamalle verkkosivulle tai lähettää hyökkääjälle uhrin evästeet. (Shar & Tan, 2012.) Cross-site Scripting voidaan nähdä suoranaisesti johtuvat sovelluksen puutteellisesta syötteiden tarkistuksesta, koska verkkosovelluksen ei tulisi koskaan sallia tilannetta, jossa käyttäjä kykenee itse sisällyttämään verkkosovellusten näkymiin omia HTML-merkkauksiaan. (Wassermann & Su, 2008.) On havaittu, että vaik-

19 ka kehittäjien käyttäessä uusimpia tekniikoita XSS:n ehkäisemiseksi, Shar ja Tanin (2012) mukaan haavoittuvuus on silti erittäin yleinen. Yleisyyden voidaan nähdä johtuvan hyvin pitkälti siitä, että varmistustekniikoita käytetään väärin sekä XSS:ään johtavien tekijöiden ymmärrys kehittäjien keskuudessa on puutteellista. Vaikka yksittäinen XSS:n mahdollistava haavoittuvuus on helppo paikata, jokaisen haavoittuvuuden korjaaminen verkkosivustolle on haasteellista ja moni verkkosivusto ei ole tähän kyennyt. Lisäksi internetistä on löydettävissä palveluita (esim. xssed.com), jotka listaavat verkkopalveluista jo löydettyjä XSS-haavoittuvuuksia ja täten ne houkuttelevat hyökkääjiä käyttämään näitä hyödyksi. (Bates, Barth & Jackson, 2010.) Hydaran, Sultan, Zulzalin ja Admodisastron (2005) mukaan kirjallisuudessa XSS on yleisesti jaoteltu kolmeen erilaiseen hyökkäysmenetelmään: Heijastettu (engl. Reflected XSS) Tallennettuun (engl. Stored XSS) DOM-pohjaiseen (engl. DOM-based XSS) Heijastetussa XSS-hyökkäyksessä hyökkääjän käyttämää haitallista JavaScriptkomentosarjaa ei tallenneta tietokantaan vaan hyökkääjä pyrkii saattamaan käyttäjän tilanteeseen, jossa hän itse lähettää haitallisen JavaScript-elementin palvelinpuolenjärjestelmälle, joka puolestaan liittää sen osaksi käyttäjälle esitettyä HTML-dokumenttia. Usein tämän kaltaisia haavoittuvuuksia löydetään esimerkiksi verkkosivustojen hakutoiminnoista. Kun hakukenttään kirjoitetaan hakusana ja haku toteutetaan, käyttäjälle näytetään hakutulosten lisäksi käytetty hakusana. Jos palvelimelle lähetetyn hakusanaa edustavan parametrin turvallisuutta ei tarkasteta, voi tämä sisältää esimerkiksi hyökkääjän laatiman haitallisen JavaScript-komentosarjan, jonka palvelin http-vastauksessa liitetään suoraan osaksi käyttäjälle annettua HTML-dokumenttia. Hyökkääjä voi hyödyntää tämänkaltaista haavoittuvuutta esimerkiksi lähettämällä käyttäjälle sähköpostilla hakuparametrin sisältävän URL-linkin, joka johtaa verkkosivuston haavoittuvuuden sisältävälle hakuosiolle. (Vogt.ym, 2007.) Tallennetussa XSS-injektiossa hyökkääjä kykenee tallentamaan haitallisen JavaScript-komentosarjan verkkosovelluksen tietokantaan. Itse hyökkäys tapahtuu myöhemmin, kun hyökkäyksen uhri pyytää palvelimelta HTMLdokumenttia, johon sovellus tulee liittäneeksi hyökkääjän tallentaman JavaScript-komentosarjan. Tämän kaltaisia XSS-haavoittuvuuksia on havaittu useasti esimerkiksi Internetin keskustelupalstoilta, joissa käyttäjän jättämät viestit tallennetaan tietokantaan ja esitetään muille verkkoselaajille. Haavoittuvuuden sisältävissä verkkosovelluksissa hyökkääjä voi viestikenttään kirjoittaa JavaScript-elementin sisään komentosarjan ja lähettää sen. Jos viestin sisältöä ei tarkasteta kunnolla JavaScript-komentosarja suoritetaan muiden käyttäjien verkkoselaimessa. (Galán, Alcaide, Orfila & Blasco, 2010.) Kolmas havaittu XSS-haavoittuvuuden tyyppi on DOM-pohjainen XSShaavoittuvuus. DOM (Document Object Model) on HTML-dokumentista koostettu ohjelmointirajapinta, jota erityisesti JavaScript hyödyntää muokatessaan dynaamisesti esillä olevaa HTML-dokumenttia. DOM on jäsennelty puumalli esillä olevasta HTML-dokumentista, jossa HTML-elementit ovat käsiteltäviä

olioita, joilla on kutsuttavia metodeja ja attribuutteja. (Mozilla Foundation 2016b.) DOM-pohjainen haavoittuvuus syntyy, kun JavaScriptin tekemät ajonaikaiset muutokset DOM-malliin johtavat JavaScript-komentosarjan liittämiseen esillä olevaan HTML-dokumenttiin. Poikkeavan DOM-pohjaisesta haavoittuvuudesta tekee se, että hyökkääjän kirjoittama komentosarja ei ole käyttäjän nähtävillä olevassa HTML-dokumentissa dokumentin lataushetkellä, vaan se liitetään siihen myöhemmin JavaScriptin DOM-malliin tekemien muutosten tuloksena. (Klein, 2005.) DOM-pohjaisten haavoittuvuuksien voidaan nähdä yleistyneen, koska verkkosovellukset ovat siirtäneet paljon toiminnallisuuttaan asiakasohjelman puolelle. Tämän kaltaisen kehityksen voidaan nähdä johtuvan asiakaspuolen teknologioiden, kuten HTML5 ja JavaScript-kirjasto JQueryn suorituskyvyn parantumisesta, joka on tehnyt toiminnollisuuksien suorittamisesta asiakassovelluksessa nopeampaa ja käytännöllisempää. (Stock, Pfistner, Kaiser, Lekies, & Johns, 2015.) Tutkimuksen mukaan jopa 10 % maailman kymmenestätuhannesta suosituimmasta verkkosivustosta kärsii DOMpohjaisesta haavoittuvuudesta (Stock, Lekies, Mueller, Spiegel & Johns, 2014). 3.2 Käyttäjän istuntotunnisteen hyväksikäyttö Istunnon hallinta on elintärkeä osa-alue moderneissa verkkosovelluksissa. Sen avulla verkkosovellus kykenee linkittämään saman käyttäjän verkkoselailun tuottamat http-pyynnöt toisiinsa kyeten tuottamaan interaktiivisen ja käyttäjälle yksilöllisen sovelluksen käytön. Valitettavasti evästepohjainen käyttäjän verkkoistunnon hallintajärjestelmä on helposti virhealtis ja tämän takia OWASP:in top 10 listauksessa (2013) on kaksi verkkosovellusriskiä, joidenka voidaan nähdä johtuvat puutteellisesta istuntotunnisteen käsittelystä: Sijalla 2. Puutteellinen autentikointi ja istuntotunnisteen käsittely (engl. Broken Authentication and Session Management) Sijalla 8. Cross-site Request Forgery (CSRF) Verkkosovellus tunnistaa yksittäisen käyttäjän hänen käyttämällään yksilöllisellä istuntotunnisteella ja tämän istuntotunnisteen tulisi olla ainoastaan käyttäjän hallussa. Jos hyökkääjä kykenee kuitenkin saamaan haltuunsa käyttäjän istuntotunnisteen, hän kykenee esiintymään verkkosovellukselle käyttäjänä, jolta hän sai istuntotunnisteen tai pakottamaan käyttäjän tekemään toimenpiteitä käyttäjätilillään tahtomattaan. (Kolšek, 2002.) Puutteellista istuntotunnisteen käsittelyä on havaittu esiintyvän jopa maailman sadan käyttäjämäärältään suosituimman verkkosivuston joukossa (Calzavara, Tolomei, Bugliesi, Orlando, 2014). Yleisimmät istuntotunnisteen puutteellista turvaamista hyödyntävät verkkosovelluksiin kohdistuvat hyökkäystavat ovat session fixation, joka OWASP:n listauksessa asettuu sijalla 2 olevaan puutteellisen autentikoinnin ja istuntotunnisteen käsittelyn riskiin, ja cross-site request forgery, joka on listalla sijalla 8 (Takamatsu, Kosuga & Kono, 2012).

21 3.2.1 Session fixation Session fixation- hyökkäysmenetelmässä hyökkääjä onnistuu pakottamaan käyttäjän istuntotunnisteen arvon, jonka avulla verkkosovellus tunnistaa käyttäjän. Hyökkäys etenee siten, että hyökkääjä vierailee ensiksi verkkosovelluksessa, jolloin sovellus kirjaa hänelle oman istuntotunnisteen. Tämän jälkeen hän harhauttaa käyttäjän verkkoselaimen käyttämään hyökkääjälle annettua istuntotunnistetta. Tämä voi tapahtua, esimerkiksi URL-linkin välityksellä tai hyödyntämällä XSS-haavoittuvuutta, joka mahdollistaa käyttäjän evästeiden muokkaamisen JavaScriptillä. (Johns, Braun, Schrank, Posegga, 2011.) Useimmat verkkosovellukset eivät enää nykyisin hyväksy istuntotunnisteita välitettäväksi URL-osoitteen parametrien välityksellä, joten realistinen hyökkäysskenario on evästeiden muokkaus (Schrank, Braun, Johns & Posegga, 2010). Kun käyttäjä kirjautuu verkkosovellukseen istunnossa, joka on tunnistettu hyökkääjän istuntotunnisteen avulla, hyökkääjällä on pääsy kyseisessä verkkosovelluksessa käyttäjän tilille, koska käyttäjä on täten kirjautunut istuntotunnisteella, joka on hyökkääjällä hallussa. Kuvio 5 Esimerkki Session fixation-haavoittuvuuden hyväksikäytöstä Session fixation- haavoittuvuuden syyn on nähty johtuvan istunnon käsittelyn hallinnan ja käyttäjien eriävien sallittujen toimenpiteiden välisestä epäsuhdasta. Verkkosovelluksessa käytetty sovelluskehys pitää huolta istuntotunnisteen luomisesta ja validien istuntotunnisteiden kirjanpidosta, kun taas sallituista toimenpiteistä kirjautumisen jälkeen huolehtii kehittäjä itse. (Schrank, Braun, Johns & Posegga, 2010.) 3.2.2 Cross-site request forgery (CSRF) Cross-site request forgery on hyökkäystyyppi, jossa hyökkääjä harhauttaa sisään kirjautunutta käyttäjää siten, että hänen verkkoselaimensa lähettää haavoittuvaiselle verkkosovellukselle hyökkääjän tahdon mukaisen http-pyynnön. Koska uhri on kirjautunut verkkosovellukseen aiemmin, hänen verkkoselaimellaan on hallussa validi istuntotunniste. Tällöin kaikki hänen kauttaan tulevat http-pyynnöt palvelin käsittää tulevan kirjautuneelta käyttäjältä. Hyökkääjä voi käyttää tätä tilannetta hyväksi siten, että hän voi harhauttaa käyttäjän verk-

koselaimen lähettämään hyökkääjän haluaman http-pyynnön ja tällöin hyökkääjä kykenee tekemään verkkosovelluksessa toimenpiteitä käyttäjänä, koska käyttäjän verkkoselain automaattisesti liittää http-pyyntöihin verkkosovellukselta saadun istuntotunnisteen. (Scambray, Shema & Sima, 2006.) Scambrayn, Sheman ja Siman mukaan (2006) CSRF-hyökkäystä on olemassa kahden tyyppistä: Tallennettu CSRF Heijastettu CSRF Tallennettu CSRF-hyökkäys on kyseessä, kun hyökkääjä onnistuu tallentamaan sovellukselle merkkijonon, joka myöhemmässä käsittelyssä realisoituu CSRFhyökkäykseksi. Täten tallennetussa CSRF-hyökkäyksen tapauksessa käyttäjän näkökulmasta tahtomaton http-pyyntö syntyy verkkosovelluksen toiminnan tuloksena. Heijastettu CSRF-hyökkäys tapahtuu, kun hyökkääjä kykenee harhauttamaan sovellukseen kirjautuneen käyttäjän esimerkiksi klikkaamaan linkkiä, joka johtaa siihen, että käyttäjän verkkoselain lähettää hyökkääjän tahdon mukaisen http-pyynnön verkkosovellukselle. Hyökkääjä voi myös johdattaa käyttäjän vierailemaan hyökkääjän hallinnoimalla verkkosivustolla, joka sisältää http-pyynnön lähettämiseen johtavan JavaScript-komentosarjan. Heijastetun CSRF-hyökkäyksen tapauksessa haitallisen http-pyynnön lähetys syntyy toiminnasta jollakin muulla verkkosivustolla tai sovelluksessa, kuten esimerkiksi klikkaamalla linkkiä hyökkääjän hallinnoimalla verkkosivustolla. (Scambray, Shema & Sima, 2006.) Hyökkääjän näkökulmasta yleisimpiä käyttötarkoituksia CSRFhyökkäykselle ovat olleet toimenpiteiden tekeminen käyttäjänä, kuten esimerkiksi keskustelusivustolle kirjoittaminen sekä muutoksien tekeminen käyttäjätiliin, kuten esimerkiksi salasanan vaihtaminen (Lin, Zavarsky, Ruhl & Lindskog, 2009). Palvelinpuolenjärjestelmän kannalta CSRF-hyökkäyksen tunnistaminen on vaikeaa, koska palvelimelle saapunut http-pyyntö näyttää tulevan tunnistetulta käyttäjältä ja täten se on erittäin vaikea todeta hyökkäykseksi (Scambray, Shema & Sima, 2006). 3.3 Haavoittuvuudet loogisessa rakenteessa Verkkosovelluksista on tullut vallitsevin tapa toimittaa palveluita verkon välityksellä. Koska niillä suoritetaan monimutkaisia toiminnollisuuksia, ne ovat myös monimutkaisia rakenteeltaan. Verkkosovelluksen loogisella rakenteella tarkoitetaan sen tarkoitettua toimintatapaa, kuten esimerkiksi toimintajärjestystä verkkosovellusten operaatioiden välillä. Verkkosovelluksissa toiminnot tulee usein tietoturvan kannalta suorittaa juuri oikeassa tarkoituksellisessa järjestyksessä. Esimerkiksi autentikointi tulee suorittaa ennen, kuin voidaan suorittaa operaatioita, jotka vaativat tunnistetun käyttäjän. Se, että käyttäjä kykenisi kiertämään vaaditun kirjautumisen ja suorittamaan operaatioita, jotka ovat luvalli-

23 sia ainoastaan tunnistetuille käyttäjille tarkoittasi, että sovelluksessa on looginen haavoittuvuus. Autentikointi on yleinen haavoittuvuuskohta verkkosovelluksissa, koska se on yleinen toimenpide niissä. Haavoittuvuuskohdat voivat olla myös enemmän sovelluskohtaisia. Esimerkiksi looginen haavoittuvuus verkkokaupassa voi johtaa siihen, että käyttäjä kykenee käyttämään tarjouslipukkeensa useaan kertaan, vaikka se tulisi sallia vain kerran. (Li & Xue, 2011.) OWASP:n top 10 listalta (2013) voidaan tulkita kolme haavoittuvuutta, jotka voidaan nähdä osallisiksi verkkosovelluksen toimimattomaan loogiseen rakenteeseen. Haavoittuvuudet ovat: Varmistamattomat suorat viittaukset (engl. Insecure Direct Object References) Puuttumaton sallittujen toimintojen tarkistus (engl. Missing Function Level Access Control) Varmistamattomat udelleenohjaukset (Unvalidated Redirects and Forwards) Verkkosovelluksen tarkoitettu toimintajärjestys voidaan ohittaa erilaisin keinoin. Ensimmäinen esimerkki tällaisesta on niin sanottu pakotettu selaus (engl. forced browsing). Pakotetussa selailussa hyökkääjä kykenee rikkomaan sovelluksen loogisen rakenteen siirtymällä verkkoselaimella suoraan kohdesivulle sen sijaan, että sinne päädyttäisiin käyttämällä verkkosovellusta siten, kuin sitä olisi tarkoitettu käytettävän. Esimerkiksi, jos kirjautumaton käyttäjä kykenee näkemään kirjautuneille tarkoitettuun sivun siirtymällä verkkoselaimella kyseiselle sivulle suoraan kirjoittamalla sivun URL-osoitteen selaimeen, kyseessä on looginen haavoittuvuus verkkosovelluksessa. Oikea menettely olisi, että jos kirjautumaton käyttäjä yrittää siirtyä kirjautuneille tarkoitetulle sivulle, hänet uudelleen ohjataan kirjautumissivulle niin kauan, kunnes hän on kirjautunut palveluun. (Sun, Xu & Su, 2011.) Alttius pakotetulle selaukselle voidaan nähdä kuuluvan osaksi OWASP:in listauksessa olleeseen puuttumattomien sallittujen toimintojen tarkastukseen. Toinen tapa yrittää kiertää verkkosovelluksen tarkoituksellinen toiminnollisuus on manipuloida http-kutsun parametreja (engl. http-tamper). Usein asiakasohjelma lähettää palvelinsovellukselle valmiiksi asetettuja parametreja, joiden mukaan määräytyy esimerkiksi seuraava suoritettava toimenpide. Esimerkiksi parametrina voi olla seuraavaksi suoritettavan funktion nimi. Hyökkääjä voi kuitenkin halunsa mukaan lähettää http-kutsussa mitä tahansa parametreja palvelinpuolenjärjestelmälle, joten se ei voi varmistamatta suorittaa funktioita käyttäjien lähettämien parametrien mukaan. (Bisht, Hinrichs, Skrupsky, Bobrowicz & Venkatakrishnan, 2010.) Verkkosovelluksen suorittamiin funktioihin ja operaatoihin vaikuttaminen http-kutsun parametreja muokkaamalla voidaan nähdä kuuluvan osaksi OWASP:n listauksessa (2013) olevaa varmistamattomia suoria viittauksia. Kolmas tapa yrittää kiertää verkkosovelluksen loogista rakennetta on muuttaa verkkosovelluksen mahdollisia uudelleenohjauksia siten, että ne osoittavat jollekin muulle sivulle, kuin oli alun perin tarkoitettu ja täten kierretään ohjelmiston tarkoitettu looginen rakenne. Tämä on mahdollista, jos uudel-

leenohjauksen osoitteita on esimerkiksi kovakoodattu selainpuolen lähdekoodiin ja osoitteita ei validoida ennen kuin niihin uudelleenohjataan. Uudelleenohjauksien osoitteisiin vaikuttaminen voidaan tulkita kuuluvan osaksi varmistamattomia uudelleenohjauksia. (OWASP,2013.) 3.4 Puutteet alustan päivityksessä ja konfiguraatiossa Verkkopalvelimen turvallinen konfigurointi näyttelee suurta osaa verkkosovellusten tietoturvassa. Palvelimen, palvelinohjelmiston ja sovelluskehyksen sopimaton konfigurointi verkkosovelluksen toimiessa lopullisessa tuotantoympäristössä saattaa johtaa tietoturvahaavoittuvuuksiin. Verkkosovelluksen käyttämien alustakomponenttien sopimattomat asetukset mahdollistavat sen, että hyökkääjä voi etsiä tehokkaammin verkkosovelluksen sisältämiä haavoittuvuuksia. (Mendes, Neto, Dura es, Vieira & Madeira, 2011). Lisäksi erittäin puutteellinen konfiguraatio voi johtaa myös verkkosovelluksen täydelliseen haltuunottoon (OWASP, 2013). Riskin suuruutta lisää myös se, että yksittäistä palvelinalustaa saatetaan käyttää usean sovelluksen alustana ja tämä saattaa johtaa tilanteeseen, jossa yksittäinen haavoittuvainen sovellus vaarantaa muidenkin ympäristössä toimivien verkkosovelluksien turvallisuuden. (Eshete, Villafiorita & Weldemariam, 2011.) Verkkosovellusten ollessa usein räätälöityen tehtyjä ja jokainen erilaisia, niiden haavoittuvuudetkin ovat yksilöllisiä. Verkkosovelluksien usein kuitenkin yhteisesti jakama komponentti on verkkopalvelin. Verkkosovellukset usein rakennetaan toimimaan jonkin yleisesti käytössä olevan palvelinohjelmiston päälle. Esimerkiksi 50 % maailman verkkosivustoista ja sovelluksista käyttää palvelinohjelmistonaan Apache HTTP-palvelinta (Netcraft, 2015). Tämä mahdollistaa sen, että jos hyökkääjällä on tiedossa sovelluksen alustana toimiva palvelinohjelmisto, hän kykenee kokeilemaan kyseisen komponentin yleisesti tunnettuja haavoittuvuuksia. (Stuttard & Pinto, 2008.) Usein verkkosovelluksen kehittäjät eivät vastaa verkkopalvelimen ylläpidosta ja tämä kuilu heidän välillään on yksi tekijä verkkosovellusten haavoittuvuuksien muodostumisessa. Verkkosovelluksen turvallinen suoriutuminen palvelimella vaatii molemmilta osapuolista ymmärrystä tietoturvasta. (OWASP, 2015.) OWASP:in top 10 listauksessa (2013) voidaan nähdä kolme eri haavoittuvuutta kuuluvan osaksi sopimatonta konfiguraatiota: Sijalla 5 oleva puutteellinen turvallisuuskonfigurointi (engl. Security Misconfiguration) Sijalla 6 oleva arkaluontoisen tiedon paljastuminen (engl. Sensitive Data Exposure) Sijalla 9 oleva tunnettujen haavoittuvaisten komponenttien käyttö (engl. Using Known Vulnerable Components)