You are here: TUTWiki>Tietoturva/Tutkielmat>TyoLuettelo?>NoSQLSecurity

TTY / Tietoturvallisuuden jatkokurssi / Tutkielma 2013

Mika Mäenpää

NoSQL-tietokantojen tietoturva

Johdanto

NoSQL-tietokannat ovat kasvattaneet suosiotaan viime vuosina. NoSQL terminä käsitetään tarkoittavan Not Only SQL, eli niiden katsovan täydentävän perinteisiä relaatiotietokantoja [1]. NoSQL-tietokannat yleensä keskittyvät johonkin tiettyyn ominaisuuteen, jonka ne toteuttavat paremmin kuin relaatiotietokannat. Suurimman osan suunnittelussa ei ole keskitytty tietoturvanäkökulmiin, vaan keskitytty muihin ominaisuuksiin. NoSQL terminä käsittää kaikki erilaiset tietokannat, jotka eivät ole relaatiotietokantoja. Tämän vuoksi tutkielmassa keskitytään kolmeen tietokantatyyppiin ja erityisesti jokaisen tyypin suosituimpaan edustajaan. Tutkielmassa verrataan näiden tietokantojen tietoturvaominaisuuksia relaatiotietokantojen tarjoamiin ominaisuuksiin.

Relaatiotietokantojen tietoturvaominaisuudet

Relaatiotietokannat tarjoavat yleensä mahdollisuuden salata tietoliikenne. Sen lisäksi, että tietoliikenne asiakkaan ja palvelimen välillä voidaan salata, voidaan myös salata liikenne palvelinten välillä. Myös itse data voidaan salata. Data voidaan salata joko asiakkaan päässä, tietokannan toimesta läpinäkyvästi tai tiedostojärjestelmän tasolla.

Relaatiotietokannat antavat hyvän tuen asiakkaiden autentikointiin, pääsynvalvontaan ja auditointiin. NoSQL-tietokannoissa nämä ovat voineet jäädä vähemmälle huomiolle. Koska NoSQL-tietokannat eivät yleensä käytä SQL:ää, ei SQL-injektiota voi tapahtua. Tietokannoilla on kuitenkin jokaisella jokin oma kieli, jolla kyselyitä voi tehdä. Tämä saattaa mahdollistaa injektiohyökkäyksen. Mahdolliset injektion torjuntamekanismit ovat yksi tutkittava kohde.Myös tietokantojen oletusasetukset ovat tutkimisen aiheena. Turvalliset oletusasetukset vähentävät tietoturvaongelmia.

NoSQL-Tietokantatyypit

Yleisesti ottaen NoSQL-tietokannat eivät tue relaatiotietokannoista tuttuja ACID-ominaisuuksia. Toisaalta taas suorituskyky ja skaalautuvuus ovat yleensä paremmat. ACID-omaisuuksilla tarkoitetaan, että transaktio täyttää seuraavat ominaisuudet.
Atomicity Transaktio joko onnistuu tai epäonnistuu kokonaisuutena
Consistency Mikätahansa transaktio siirtää tietokannan laillisesta tilasta toiseen
Isolation Rinnakkaiset transaktiot siirtävät järjestelmään tilaan, johon olisi päästy myös suorittamalla transaktiot peräkkäin
Durability Kun transaktio on hyväksytty, se myös pysyy sellaisena

ACID-ominaisuuksista erityisesti Durability liittyy tietoturvaan. Eri NoSQL tietokantojen ACID-ominaisuuksia ei kuitenkaan käydä läpi, koska ne ovat tarkoituksella jätetty osittain tai kokonaan toteuttamatta. [2]

Dokumenttipohjaiset tietokannat säilövät tietoa dokumenteissa. Relaatiotietokannan tauluihin verrattuna dokumentit ovat joustavampia, koska eri dokumenteilla ei ole pakko olla samoja alkioita. Dokumentit voivat olla esimerkiksi JSON- tai XML-pohjaisia. Dokumenttipohjaiset tietokannat antavat joustavuutta datan käsittelyyn ja yleensä hyvän skaalautuvuuden. Huonona puolena monimutkaisten kyselyiden tekeminen on vaikeaa tai mahdotonta. Suosituin dokumenttipohjainen tietokanta on MongoDB. [3][4]

Graafipohjaisessa tietokannassa tieto säilötään graafin solmuissa attribuutteina ja suhteet ilmaistaan graafin kaarina. Myöskään graafipohjaisissa tietokannoissa ei ole kiinteää skeemaa. Graafipohjaiset tietokannat ovat nopeampia sellaisen tiedon käsittelyyn, joka pystytään helposti mallintamaan graafina. Suosituin graafitietokanta on Neo4J. [3][4]

Sarake-pohjaiset tietokannat ovat lähimpänä tavallista relaatiotietokantaa. Ne ovat tarkoitettu säilömään ja käsittelemään suuria määriä dataa hajautettuna monelle eri koneelle. Suurin ero relaatiotietokantaan on pyrkimys säilöä data denormalisoituna. Suosituin saraka-pohjainen tietokanta on Apache Cassandra. [3][4]

Okman ja muut ovat tutkineet Apache Cassandra ja MongoDB tietokantojen tietoturvaominaisuuksia. Julkaisu on kuitenkin vuodelta 2011, jonka jälkeen erityisesti Apache Cassandrassa on tapahtunut kehitystä tietoturvaominaisuuksien kannalta. Julkaisu antaa kuitenkin pohjan sille, mitä ominaisuuksia kannattaa tutkia. [5]

MongoDB

MongoDB on avoimen lähdekoodin dokumenttipohjainen tietokanta, joka on julkaistu GNU AGPLv3 lisenssillä. Myös kaupallinen lisenssi on saatavilla. MongoDB:tä kehittää MongoDB Inc. Ensimmäinen julkinen julkaisu tapahtui 2009. Vuonna 2010 julkaistu versio 1.4 oli ensimmäinen, jota pidettiin tuotantokäyttöön sopivana [6]. Tutkittava MongoDB:n versio on 2.4. Esimerkkejä MongoDB:tä käyttävistä sivuista ovat eBay, SourceForge ja The New York Times. [7]

MongoDB on hajautettu tietokanta, joka koostuu monista eri solmuista. MongoDB:tä suositellaan ajettavaksi luotetussa ympäristössä, jossa vain asiakasohjelmilla ja toisilla MongoDB-instansseilla on pääsy toistensa verkkoliitäntöihin. Oletuksena kuitenkin kaikki verkkoliitännät ovat avoinna kaikkialle.

MongoDB ei tue peruskokoonpanossa salausta tietokannan tasolla. Data pitää salata joko asiakasohjelmiston tai tiedostojärjestelmän tasolla. MongoDB tarjoaa kuitenkin yhteistyössä Gazzangin kanssa maksullisen lisäosan, joka mahdollistaa datan läpinäkyvän salauksen. Tällöin data salataan MongoDB:n ja tiedostojärjestelmän välillä.

MongoDB käyttää kahta eri protokollaa tietoliikenteeseen. Tiedonsiirto tapahtuu käyttäen binääristä TCP-protokollaa. Lisäksi on olemassa HTTP-pohjainen REST-rajapinta tietokantaan, mutta sen käyttöä ei suositella tuotantokäytössä. Se onkin oletuksena pois päältä. MongoDB tarjoaa mahdollisuuden käyttää SSL-salausta TCP-protokollan kanssa. SSL-salaus on kuitenkin oletuksena pois päältä ja sen saa päälle ainoastaan kääntämällä koko MongoDB:n itse.

Asiakkaiden autentikointiin MongoDB tarjoaa salasanapohjaisen autentikoinnin. Salasana tallennetaan tietokantaan MD5-hajautusfunktiolla. MongoDB-instanssien välinen autentikointi toteutetaan esijaetun salaisuuden avulla. Oletuksena kumpikaan autentikointityyppi ei ole käytössä.

MongoDB:ssä käyttäjien pääsynvalvonta tapahtuu tietokantatasolla. Pääsyä yksittäisiin dokumentteihin ei pysty rajoittamaan. Käyttäjille tarjotaan kaksi roolia. Read-rooli antaa lukuoikeuden tietokantaan ja ReadWrite-rooli antaa luku- ja kirjoitusoikeuden tietokantaan. Lisäksi on erikseen jaottelu admin- ja tavallisten käyttäjien välillä. Tietokantaoperaatioiden auditointiin MongoDB ei tarjoa mitään tukea. Loki-tiedostoihin ei tule mitään merkintöjä kyselyistä, lisäyksistä tai päivityksistä.

Sisäisesti MongoDB käyttää paljon Javascriptia. Myös kyselyissä voidaan käyttää Javascriptiä. Tämä voi mahdollistaa injektiohyökkäyksen tietokantaa vastaan. Tämän takia suositellaan, että sisääntulevat tiedot sanitoidaan huolellisesti.[5][8]

Apache Cassandra

Apache Cassandra on avoimen lähdekoodin sarakepohjainen hajautettu tietokanta, joka on julkaistu Apache License 2.0 lisenssillä. Apache Cassandran ensimmäinen julkaisu tapahtui 2008. Cassandraa kehittää Apache Software Foundation ja DataStax. DataStax tarjoaa myös maksullista versiota DataStax Enterprise, jossa on muiden ominaisuuksien ohella parannettu tietoturvaa. Apache Cassandra on alunperin Facebookin kehittämä tietokanta. Facebook on kuitenkin myöhemmin korvannut Cassandran Apache HBase tietokannalla. Tunnettuja sivustoja, jotka käyttävät Cassandraa ovat Netflix, Reddit ja Twitter. Tutkittu Cassandran versio on 1.2. [9]

Cassandra ei tue peruskokoonpanossa salausta tietokannan tasolla. Data pitää salata joko asiakasohjelmiston tai tiedostojärjestelmän tasolla. Apache Cassandra tarjoaa kuitenkin yhteistyössä Gazzangin kanssa maksullisen lisäosan, joka mahdollistaa datan läpinäkyvän salauksen. [10]

Apache Cassandra tukee SSL-salausta asiakasohjelmien ja Cassandran solmujen välisessä kommunikaatiossa. Myös Cassandran solmujen välisessä kommunikaatiossa voi käyttää SSL-salausta.

Käyttäjien autentikointiin Apache Cassandra tarjoaa vakiona salasanapohjaisen autentikoinnin. Salasanat tallennetaan tietokantaan käyttäen bcrypt-hajautusfunktiota. Cassandra mahdollistaa myös omien autentikointimenetelmien toteuttamisen.

Pääsynvalvontaan Cassandran mukana tuleva toteutus tarjoaa SQL-tietokantoja vastaavat oikeudet. Käyttäjälle voidaan antaa oikeus muuttaa (ALTER), muuttaa muiden käyttäjien pääsynvalvontatietoja (AUTHORIZE), luoda uusia tauluja (CREATE), poistaa tauluja (DROP), muokata taulujen sisältöä (MODIFY) ja tehdä hakuja (SELECT). Cassandra tarjoaa myös mahdollisuuden kirjoittaa täysin oma autorisointijärjestelmä.

Auditointiin Apache Cassandran ilmainen versio ei tarjoa suoraan tukea. Auditointia varten tarvitsee kirjoittaa oma versio autentikointi- ja pääsynvalvontarajapinnoista. Maksullinen DataStax Enterprise tarjoaa mahdollisuuden auditointilokien kirjoittamiseen.

Kyselykielena Cassandra käyttää omaa kieltä Cassandra Query Language eli CQL, joka on läheistä sukua SQL:lle. Tästä johtuen myös injektiohyökkäykset voivat olla mahdollisia. Cassandra tarjoaa mahdollisuuden käyttää parametrisoituja kyselyitä, joiden pitäisi taata turva injektiota vastaan.[5][11][12]

Neo4J

Neo4j on graafitietokanta, jonka on kehittänyt Neo Technology. Neo4j on saatavilla sekä avoimena lähdekoodina GPLv3 lisenssillä että kaupallisella lisensillä. Huomattavana erona muihin tässä käsiteltyihin NoSQL-tietokantoihin Neo4j tukee ACID-ominaisuuksia. Toisin kuin MongoDB ja Apache Cassandra, Neo4J tarjoaa mahdollisuuden käyttää tietokantaa sulautettuna osana asiakasohjelmaa normaalin palvelinmallin lisäksi. Neo4J on myös lähempänä perinteistä relaatiotietokantaa, koska palvelinmallissa se toimii yhtenä palvelimena, eikä hajautettuna kuten Apache Cassandra ja MongoDB. Neo4J:n tutkittava versio on 1.9.5. [13]

Tietokantatasolla Neo4J ei tarjoa mahdollisuutta salaukseen. Salaus tarvitsee tehdä joko tiedostojärjestelmän tai asiakasohjelman tasolla. Käytettäessä Neo4J:tä palvelimena, tarjoaa se HTTP-pohjaisen REST-rajapinnan. Oletuksena palvelin kuuntelee yhteyksiä vain paikallisesta osoitteesta. Neo4J tukee HTTPS-liikennöintiä ja se on oletuksena päällä.

Neo4J ei tarjoa vakiokokoonpanossa tukea autentikoinnille. Autentikointia varten tarvitsee kirjoittaa palvelimelle Java-plugin. Saatavilla on kuitenkin valmis plugin, joka tarjoaa salasana-käyttäjänimi autentikoinnin.

Pääsynvalvontaan Neo4J tarjoaa mahdollisuuden kirjoittaa palvelimelle Java-plugineja, joilla voidaan rajoittaa käyttäjien ja sovellusten pääsyä tietokantaan. Auditointia varten Neo4J ei tarjoa suoraa tukea. Ainoastaan HTTP-pyynnöt pystyy kirjoittamaan lokiin. Monipuolisempaa auditointia varten täytyy kirjoittaa oma toteutus.

Neo4J käyttää kyselyihin omaa kyselykieltä. Injektiot ovat mahdollisia, jos kyselyt luodaan suoraan merkkijono-operaatioilla. Neo4J suositteleekin parametrisoitujen kyselyjen käyttöä, joilla pystytään suojautumaan injektiohyökkäyksiä vastaan. [14]

Yhteenveto tietoturvaominaisuuksista

Nimi MongoDB Cassandra Neo4J
Datan läpinäkyvä salaus Maksullinen Maksullinen Ei
Asiakas-Palvelin liikenteen salaus Ei vakioasennuksessa mahdollinen Kyllä Kyllä
Palvelin-Palvelin liikenteen salaus Ei vakioasennuksessa mahdollinen Kyllä Ei hajautettu tietokanta
Autentikointi Salasanapohjainen mahdollinen Salasanapohjainen. Mahdollisuus kirjoittaa omia autentikointilisäosia Itse lisättävä
Pääsynvalvonta Tietokantatasolla Taulutasolla. Mahdollisuus kirjoittaa omia pääsynvalvontalisäosia. Itse lisättävä. Tietokanta-alkio tasolla
Auditointi Ei Maksullinen tai itse lisättävä Itse lisättävä
Injektio-suojaus Ei Parametrisoidut kyselyt Parametrisoidut kyselyt

Päätelmät / yhteenveto

Tutkittujen NoSQL-tietokantojen tietoturvaominaisuudet vaihtelevat suuresti. Toisaalta taas tietokannat ovatkin tarkoitettu eri käyttötarkoituksiin. MongoDB on tarkoitettu käytettäväksi luotetussa ympäristössä ja siinä onkin heikoimmat tietoturvaominaisuudet. Apache Cassandra puolestaan on käyttötarkoitukseltaan lähimpänä tavallista relaatiotietokantaa, joten sen tietoturvaominaisuudet ovat myös hyvällä tasolla. Neo4J puolestaan tarjoaa hyvän pohjan tietoturvalle. Valitettavasti vain käyttäjän tarvitsee toteuttaa itse suurin osa tietoturvaominaisuuksista. Tutkittujen NoSQL-tietokantojen tietoturvassa olisi Apache Cassandraa lukuunottamatta vielä parantamisen varaa, sillä ne eivät vielä pysty korvaamaan relaatiotietokantoja tietoturvaltaan.

Lähteet

SivuTiedotLaajennettu edit

Vaativuus Jatko
Valmius Valmis
Tyyppi Ydin
Luokitus Toimet
Mitä Useita
Miltä Useita
Missä Järjestelmä
Kuka Tite-ammattilainen
Milloin Ennakolta
Miksi Hyvä tapa
Print version |  PDF  | History: r4 < r3 < r2 < r1 | 
Topic revision: r4 - 29 Nov 2013 - 01:47:31 - MikaMaeenpaeae?
 

TUTWiki

Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TUTWiki? Send feedback