You are here: TUTWiki>Tietoturva/Tutkielmat>HimbergS?>2006-17

Markus Osa:

Reiser4-tiedostojärjestelmä tietoturvatarkastelussa

Johdanto ja päätelmät

Tässä työssä tarkastellaan ReiserFS tiedostojärjestelmää ja erityisesti sen neljättä versiota. ReiserFS v4:n ominaisuuksia tullaan lähestymään siitä näkökulmasta, että mitä niillä on tarjottavaa tietoturvan kannalta. Pyrin tarkastelemaan siis millaisia ominaisuuksia tiedostojärjestelmään on toteutettu tietojen luottamuksellisuuden, eheyden ja saatavuuden kannalta. Työn pituuden rajatakseni keskityn tässä tutkielmassa vain kolmeen ReiserFS v4:n ominaisuuteen.

Reiser4 tarjoaa käyttäjälleen tehokkuusparannuksia muun muassa tilankäytön suhteen verrattuna kilpailijoihinsa tai edellisiin ReiserFS-versioihin. Tämän ja muiden parannusten ohella Reiser4 pystyy kiertämään joidenkin toisten tiedostojärjestelmien ongelmat ja sen avulla voidaan tietojärjestelmää alkaa kehittämään tietoturvallisempaan suuntaan. Reiser4 on julkaistu vasta vuonna 2004 [11], joten kestää kuitenkin vielä jonkin aikaa kunnes se saavuttaa isoissa tietojärjestelmissä vaaditun luotettavuusasteen. Tästä huolimatta on mielenkiintoista odottaa mitenkä ReiserFS:n tekemät arkkitehtuuriratkaisut tulevat vaikuttamaan tulevien käyttöjärjestelmien toteutusratkaisuihin, muun muassa tiedostojen hienojakoisempien käyttöoikeusmahdollisuuksien kautta.

Tiedostojärjestelmistä yleisesti

Tiedostojärjestelmä tarjoaa tavan datan tallentamiseen ja järjestämiseen siten, että dataa on helppo löytää ja käyttää. Tiedostojärjestelmä koostuu siis yleisesti tiedostoista, jotka sisältävät tallennettua dataa, hakemistoista tai kansioista, jotka on tarkoitettu tiedostojen järjestämiseen, sekä näihin liittyvistä tiedostojärjestelmäoperaatioista, kuten luku ja kirjoitus. [1]

Jotta tiedostoja ja hakemistoja on helppo löytää, pitää nämä järjestää kiintolevylle johonkin järkevään rakenteeseen. Monet tiedostojärjestelmät käyttävät rakenteena erinäisiä puumaisia tietorakenteita.

Puurakenteet voidaan rakentaa siten, että niihin tallennetun tiedon löytäminen ja sinne tallentaminen on nopeaa ja tehokasta. Puurakenne koostuu osoittimista ja solmuista. Osoittimet ovat yksisuuntaisia yhteyksiä solmujen välillä. Solmuja voi olla yleisesti kolmea eri tyyppiä. [2]

On olemassa yksi juurisolmu, johon koko puurakenne perustuu ja jonka kautta lähdetään käymään puurakennetta läpi. Juurisolmun alapuolella on puurakenteen sisäsolmuja, jotka toimivat muiden rakenteessa olevien solmujen välissä.

Lehtisolmut ovat taas solmuja, jotka ovat aivan puurakenteen päässä ja joiden perässä ei siten ole enää yhtään solmua. Näihin lehtisolmuihin tallennetaan erinäistä dataa, kuten varsinaisista tiedostoista löytyvää dataa, hakemistoissa sijaitsevien tiedostojen nimiä yms.

Lohkokohdistettu tallennustapa

Kiintolevyjä käsitellään usein tietynkokoisissa lohkoissa, joiden koko on selvästi isompi kuin yksi tavu. Tällöin monissa tiedostojärjestelmätoteutuksissa tiedosto jaetaan minimissään käytetyn lohkokoon määrittämiin palasiin, jolloin kukin tiedosto vie vähintään yhden lohkon verran tilaa levyltä. Näin on myös sellaisten tiedostojen kohdalla, joiden todellinen koko olisi lohkokokoa selvästi pienempi.

Tällaista toteutustapaa kutsutaan lohkokohdistetuksi (engl. block-aligned) datan tallennusmenetelmäksi. Syy tämän toteutustavan levinneisyyteen lienee muun muassa toteutuksen yksinkertaisuus verrattuna ei-kohdistettuihin toteutustapoihin. Esimerkkinä voidaan verrata vaikka ext2fs:n noin 6000 koodiriviä ReiserFS:n 30000 koodiriviin tämän osalta. [3]

Tämä tallennusmenetelmä on aiheuttanut sen, että monissa tiedostojärjestelmissä useiden pienten (suhteessa lohkokokoon) tiedostojen luominen ei ole ollut järkevää tai tehokasta.

ReiserFS

Esittely

ReiserFS on Hans Reiser'n arkkitehturoima tiedostojärjestelmä, jonka kahtena päätavoitteena on omata tehokas levytilan käyttö sekä atomisuustoteutus. Näistä tarkemmin lisää myöhemmin. ReiserFS:n yksi vahvuus on sen dynaamisuus, joka perustuu siihen, että mahdollisten tiedostojen määrää ei kiinnitetä alustusvaiheessa, jolloin ainoksi rajoittavaksi tekijäksi muodostuu levytilan määrä [12].

Nämä askeleet on voitu ottaa mm. poistamalla monissa muissa tiedostojärjestelmissä esiintyvä lohkokohdistettu tallennustapa (ks. edellä) sekä kehittämällä aikaisempia atomisuustoteutuksia.

ReiserFS:n kilpailijoita ovat mm. vanhemmistakin linuxeista tutut Ext2, Ext3 ja XFS. Vaikka ReiserFS:n jokainen levyoperaatio on määritelty atomiseksi, on se silti osoittautunut testeissä näitä kilpailijoitaan nopeammaksi. [4]

ReiserFS v4:n tutkittavat ominaisuudet

Tutkin tässä työssä vain kolmea Reiser4:n tarjoamaa ominaisuutta: PlugIn-arkkitehtuuria, vikasietoisuutta sekä tilankäytön tehokkuutta.

Pluginit
Reiser4:n toiminta perustuu plugineihin. Pluginit ovat erillisiä ohjelmistopalasia, joilla on yhtenäinen rajapinta varsinaiseen ohjelmistoon. Käyttäjät voivat luoda omia pluginejaan ja näin laajentaa Reiser4:n tarjoamia ominaisuuksia. Pluginit mahdollistavat ohjelmistokokonaisuuksien paremman hallittavuuden, jolloin ohjelmistovirheiden todennäköisyys pienenee.

Vikasietoisuus
Reiser4:n vikasietoisuusominaisuudet on toteutettu joitakin kilpailijoitaan tehokkaammin. Tämän kautta saavutetaan parempia eheystakeita tiedostojärjestelmään talletettaville tiedoille.

Tilankäytön tehokkuus
Reiser4 tiedostojärjestelmä parantaa myös levytilan käytön tehokkuutta pakkaamalla pieniä tiedostoja samaan levylohkoon. Näin saadaan tehokkuusetuja verrattuna moniin muihin tiedostojärjestelmiin, jotka käyttävät vakiokokoista levylohkoa jokaiselle tiedostolle. Nämä saavutettavat tehokkuusedut parantavat myös mahdollisuuksia toteuttaa tietoturvallisempia tietojärjestelmiä.

ReiserFS v4 ominaisuusanalyysi

Pluginit

Plugineihin perustuvalla arkkitehtuurilla tarkoitetaan ohjelmistoarkkitehtuuria, jossa ohjelmiston ominaisuuksia voidaan laajentaa ja lisätä luomalla erillisiä ohjelman palasia kyseiseen ohjelmistoon. Nämä ohjelman palaset, eli pluginit, ovat yleensä rajapinnaltaan ja toteutukseltaan hyvin tarkasti määriteltyjä yhteensopivuuden takaamiseksi.

Reiser4:ssa plugineilla on toteutettu muun muassa tiedostoille tai hakemistoille tehtävät erinäiset operaatiot (tiedostopluginit ja hakemistopluginit) sekä operaatioille tehtävät tietoturvatarkastelut (turvallisuuspluginit). [5]

Plugineihin perustuvalla arkkitehtuurilla voidaan hallita paremmin suurta ohjelmistokokonaisuutta, kun kokonaisuus voidaan jakaa pienempiin palasiin ja tarkastella näitä palasia erikseen. Näin myös Reiser4:n tapauksessa. Reiser4:n koodia on mahdollisuus hallita paremmin ja näin inhimillisten virheiden vaikutusta voidaan pienentää. Kun ohjelmoija ei enää hallitse kokonaisuutta, voi koodin sekaan jäädä helpostikin bugi tai pari.

Plugineihin perustuva arkkitehtuuri helpottaa myös koodin ylläpitoa jälkeenpäin. Suuriin ohjelmistokokonaisuuksiin tehtävien pienten kooditason muutosten vaikutusta koko ohjelmiston toimintaan on joskus hyvinkin vaikea hahmottaa ilman täydellistä järjestelmän tuntemista. Kun ohjelmisto on jaettu plugineihin, on niihin tehtävien muutosten vaikutukset helpompi ennustaa.

Näin myös muutkin, kuin ohjelmiston alkuperäinen luoja, pystyy lisäämään ohjelmistoon haluamiaan ominaisuuksia. Tämä on yleisesti erittäin tärkeää nimenomaan avoimeen lähdekoodin periaatteeseen perustuvissa ohjelmistoissa, joissa ulkopuoliset voivat muokata ohjelmiston koodia ja levittää sitä eteenpäin.

Plugin-arkkitehtuurilla saavutetaan siis helpommin myös avoimen lähdekoodin periaatteen tietoturvahyöty. Avoimen lähdekoodin periaatteen myötähän on ohjelmiston tietoturvallinen toiminta ainakin periaatteessa helpompi tarkistaa ja verifioida kuin ohjelmistoissa, joista on saatavilla vain suoritettavat binääritiedostot. Kaikki voivat ladata ohjelmiston koneelleen ja tehdä koodin katselmointia, jossa käydään läpi koodia miettien koko ajan mitenkä kutakin kohtaa vastaan voitaisiin hyökätä tai mitä virheitä/bugeja tässä mahdollisesti piilee.

Kun ohjelmisto on jaettu helpommin hallittaviin plugineihin, on tämäkin katselmointi helpompaa ohjelmiston hallittavuuden parannuttua. Plugin-arkkitehtuuri ja avoimen lähdekoodin ajattelutapa auttavat siis toinen toistaan ja luovat ilmeisiä synergiaetuja. Pluginit mahdollistavat avoimen lähdekoodin helpomman katselmoinnin, ja toisaalta pluginien ollessa myös avoimia toisten katselmoinnille, mahdollistaa tämä pluginien toteutuksen tietoturvan tason nousun pitemmällä aikajänteellä. Näin siis myös Reiser4:n tapauksessa.

Vikasietoisuus

Tiedostojärjestelmän vikasietoisuudella tarkoitetaan sitä kuinka hyvin tiedostojärjestelmä pystyy takaamaan talletettavien ja talletettujen tietojen eheyden tietojärjestelmän kaatumistilanteessa.

Vikasietoisuustoteutuksiin liittyy läheisesti myös tiedostojärjestelmäoperaatioiden atomisuuden käsite. Operaation atomisuudella tarkoitetaan sitä, että kyseisen operaation kaikki vaiheet ja alioperaatiot suoritetaan kokonaisuudessaan loppuun asti, tai niitä ei suoriteta ollenkaan. Esimerkiksi atomisessa kirjoitusoperaatiossa tieto kirjoitetaan levylle joko kokonaan, tai sitä ei kirjoiteta ollenkaan. [6]

Erinäisiä tapoja toteuttaa tätä vikasietoisuutta ovat olleet muun muassa tiedostojärjestelmäskannerit ja datan journalointi. [7]

Tiedostojärjestelmänskannerit tarkistavat tiedostojärjestelmän eheyden joka ajokerralla. Näitä skannereita ajetaan tyypillisesti aina järjestelmää käynnistettäessä. Eheyden skannaukseen nojautuvat ratkaisut eivät kuitenkaan pysty toipumaan kaikista mahdollisista virhetilanteista, jolloin järjestelmän eheyttä ei voida taata. Tämän lisäksi nämä skannausoperaatiot vievät runsaasti aikaa ja huonontavat siis järjestelmän käytettävyyttä ja saatavuutta järjestelmän kaatumistilanteen jälkeen. Tämä on erityisesti ongelma suuremmissa järjestelmissä, joissa tietoa on paljon. Skannausoperaation viemä aika kasvaa skannattavan tietomäärän mukaan.

Perinteisissä dataa journaloivissa järjestelmissä taas jokaisesta operaatiosta luodaan loki johonkin kohtaan levyä. Operaatiota ei siis tehdä itse levylle ennen kuin operaatio on kokonaisuudessaan kirjoitettu lokiin. Journaloinnille pyritään näin ollen operaatioiden atomisuuteen. Lokiin kirjoitetaan kaikki tarvittava tieto operaation toistamiseksi. Tällöin myös operaation operoima data kirjoitetaan levylle kahteen kertaan, joka heikentää tiedostojärjestelmän suorituskykyä erityisesti isojen tiedostojen kirjoitusoperaatioiden kohdalla.

Reiser4 kiertää perinteisen datajournaloinnin ongelman siten, että data kirjoitetaan uuteen paikkaan levyä ja päivitetään vain tiedostojärjestelmän puurakenteen osoittimet osoittamaan uuteen paikkaan. Kuitenkin myös nämä osoitinpäivitykset tulee tehdä atomisesti, joten tiedostojärjestelmän puurakenteen sisäsolmut tulee uusine osoittimineen kirjoittaa uuteen paikkaan levyllä. Näitä atomisia osoittimien päivitysoperaatioita jatketaan aina puurakenteen juureen asti. Puurakenteen juuriosoittimen päivittäminen, ja siten koko päivitetty puun haara, voidaan toteuttaa atomisesti kiintolevyn taatessa levysektoreiden kirjoitusoperaatioiden olevan atomisia. Vaikka tässäkin toteutuksessa kirjoitetaan tiedostojärjestelmän puurakenteen sisäsolmuja uudestaan levylle, on uudelleenkirjoitettava tietomäärä kuitenkin keskimäärin pienempi kuin perinteisessä datajournalointitoteutuksissa. Tämä on seurausta siitä, että päästään eroon datan kirjoittamisesta kahteen kertaan. [8]

Tilankäytön tehokkuus

Reiser4, kuten monet muutkin tiedostojärjestelmät, tallentaa datan puurakenteeseen. Puurakenteessa on solmuja ja niiden välisiä yhteyksiä. Lehtisolmut ovat solmuja, joilla ei ole enää lapsisolmuja, ja näihin tallennetaan varsinainen data.

Monissa aikaisemmissa tiedostojärjestelmissä data on tallennettu lohkokohdistettua tallennustapaa noudattaen (ks. edellä "Lohkokohdistettu tallennustapa"). Tämä rajoitus on poistettu Reiser-tiedostojärjestelmissä.

Reiser4 pakkaa useita eri osasia (engl. items) samaan lehtisolmuun, jolloin edellä mainittu lohkorajoitus poistuu ja levytilaa voidaan käyttää tehokkaammin pienille tiedostoille. Reiser4 saavuttaa noin 94% tehokkuuden levytilan käytössä pienien tiedostojen kanssa. [9]

Miten tämä sitten vaikuttaa tiedostojärjestelmän tietoturvallisuuteen? Ei sinällään mitenkään, mutta tämä antaa järkevämpiä mahdollisuuksia rakentaa hienojakoisempia tietoturvamekanismeja sen päälle. Tätä kautta voidaan rakentaa helpommin tietoturvallisempia tietojärjestelmiä.

Joissain aikaisemmissa tiedostojärjestelmissä, kuten tunnetussa ext2fs:ssä, ei useiden pienien tiedostojen luominen ole ollut järkevää tilan käytön kannalta. Tällöin hakemistojen ja tiedostojen pääsyoikeuksia ei ole kannattanut tehdä kovinkaan hienojakoisesti, vaan monien, edes jollain tapaa toisiinsa liittyvien tietojen talletus on keskitetty samaan tiedostoon.

Näin on esimerkiksi Unix-maailmasta tutun passwd-tiedoston kanssa. Tähän tiedostoon on talletettu kaikkien kyseisen järjestelmän käyttäjätunnuksien nimet, ID:t, käyttäjien todelliset nimet ja joissain vanhemmissa Unix-toteutuksissa myös tunnuksien salasanat. Tämän seurauksena, kun käyttäjällä on oikeus tähän tiedostoon, on hänellä oikeus kaikkien käyttäjien kaikkiin tietoihin.

Reiser4:n päälle rakennetussa järjestelmässä voidaan kaikkien käyttäjien tiedot eritellä omiksi tiedostoikseen, tai jopa kunkin käyttäjän tietokentät omiksi tiedostoikseen ilman merkittävää levytilan hukkakäyttöä. Näin voitaisiin kunkin käyttäjän tietoihin luoda toisista käyttäjistä tai tietokentistä riippumattomat käyttöoikeudet. [10]

Näin esimerkiksi voidaan antaa mille tahansa käyttäjälle mahdollisuus muuttaa jotain oman tunnuksensa tietokenttää, mutta ei muita kenttiä, puhumattakaan muiden käyttäjien tietokentistä. Järjestelmän tietoturvallisuus paranee tätä kautta, kun käyttäjille annetaan oikeudet vain niihin tietoihin, joita he oikeasti tarvitsevat.

Tällaisella hienojakoisella toteutuksella saadaan luotua helposti loki kaikista muutoksista aina käyttäjätunnuksen yksittäisen tietokentän tarkkuudella. Näin siis esimerkiksi järjestelmään kohdistuneita hyökkäyksiä tutkittaessa on helpompaa kerätä hyvinkin tarkkoja tietoja tuolloin suoritetuista tiedostojärjestelmäoperaatioista ja niiden sisällöstä.

Lähteet

-- SannamariHimberg? - 21 Sep 2009j
Print version |  PDF  | History: r6 < r5 < r4 < r3 | 
Topic revision: r6 - 15 Nov 2009 - 22:05:21 - SannamariHimberg?
 

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