TTY / Tietoturvallisuuden jatkokurssi / Harjoitustyö 2012

Antti Kolehmainen

SmartOS Hypervisor

Johdanto

Kun Oracle Sun Microsystemsin oston jälkeen päätti lakkauttaa avoimen lähdekoodin OpenSolaris-projektin kehityksen, päätettiin se yhteisöllisesti forkata viimeisimmästä avoimesta versiosta. Tämän forkkauksen tuloksena syntyi illumos-projekti. Yksi illumos-kerneliä käyttävistä jakeluista on Joyentin SmartOS joka on kehitetty pääasiassa virtualisointiin ja pilvi-infrastruktuurin pyörittämiseen. [1]

Koska SmartOS pohjautuu Solariksen tekniikkaan sisältää se monia hyödyllisiä enterprise-tason ominaisuuksia niin tietoturvan kuin myös virtualisoinnin kannalta. Näitä ovat esimerkiksi Crossbow, Vyöhykeet ja kontit (Zone/Container), ZFS-tiedostojärjestelmä sekä Linuxilta portattu QEMU/KVM. Tässä työssä käsitellään näitä asioita tietoturvanäkökulmasta ja tutkitaan millä tavoin järjestelmän eri komponentit edesauttavat tietoturvallisten virtuaalikoneiden hallinnointia ja käyttämistä. Tässä työssä tarkastellaan SmartOS:n soveltuvuutta hypervisoriksi, eli virtualisointialustaksi ja sitä minkälaisia ominaisuuksia se sisältää varsinkin turvallisuuden ja tiedon eheyden säilyttämisen kannalta.

SmartOS turvamekanismit

Koska illumos, ja näin myös SmartOS, on Solariksen, joka ei siis ole Linux vaan aito alkuperäinen SVR4-pohjainen Unix, jälkeläinen on se perinyt monia enterprise-tason ominaisuuksia itseensä jotka edesauttavat tietoturvallisen järjestelmän rakentamista. Tässä kappaleessa esitellään niistä muutama painottaen asiaa virtualisoinnissa hyödyllisiin.

Yksi SmartOS:n erikoisuuksista muihin jakeluihin verrattuna on sen ajotapa. SmartOS on suunniteltu ajettavaksi Live-imagesta joko netboottina, usb-tikulta tai cd:ltä. Järjestelmä pyörii siis tavallisesti ainoastaan muistista eikä sitä tarvitse asentaa varsinaisille kiintolevyille ollenkaan. Tämä mahdollistaa koko kiintolevykapasiteetin valjastamisen virtuaalikoneille. Konfiguraatiotiedostot säilytetään myös kiintolevyllä joka mahdollistaa SmartOS-järjestelmän päivityksen kirjoittamalla uusi live-image USB-tikulle ja uudelleenkäynnistämällä kone.

Crossbow

Yksi OpenSolariksessa syntyneistä uusista innovaatioista on myös illumokseen siirtynyt Crossbow verkkopino. Tämä virtualisoitu pino mahdollistaa virtuaalisten verkkosovittimien (vnic) ja kytkimien (vswitch) tekemisen. Kaikki virtuaalisovittimet sisältävät täyden TCP/IP-pinon sekä asetuksia joilla mm. niiden nopeuksia ja kaistankäyttöä pystytään rajoittamaan haluttujen parametrien mukaisesti. Crossbowissa on mukana myös QOS-järjestelmä nimeltään ”flow” jolla voidaan määritellä rajoituksia L3 ja L4 mukaisesti. [2] [3]

Crossbow Vnic

Jokainen vnic sidotaan tiettyyn fyysiseen verkkosovittimeen tai -sovittimiin, Crossbow mahdollistaa siis myös linkkien aggregoinnin. SmartOS:n tapauksessa jokainen virtuaalikone saa yhden tai useamman vnicin käytettäväkseen joiden kautta kaikki liikenne ulkomaailmaan hoidetaan. Jokainen fyysinen sovitin tagataan tietyllä tunnisteella (esim. external_nic, backup_nic) joiden perusteella virtuaalikoneet muodostavat omat sovittimensa konfiguraation mukaisesti. Virtuaalikoneiden nic-tageja voidaan myös vaihtaa lennossa jos tulee tarvetta vaihtaa fyysistä sovitinta johon ne ovat kytketty.

Kontit

Kontti on itse asiassa ”sateenvarjotermi” Vyöhykkeiden ja niihin vaikuttavien resurssikontrollien yhteistyölle. Kontteja voidaan verrata esimerkiksi FreeBSD:n jaileihin, eli ne ovat jossain tietyssä hakemistossa sijaitsevia ”emojärjestelmän” klooneja joilla on omat määritellyt resurssinsa eivätkä ne pysty näkemään toisiaan eikä itse emojärjestelmää. Jokaisella kontilla on myös oma tyyppinsä joita on SmartOS:ssä seuraavasti:

  • KVM jossa kaikki KVM:n alaiset virtuaalikoneet pyörivät.
  • Joyent joka on klooni itse SmartOS-järjestelmästä.

Illumoksessa on hieman eroja SmartOS:n ratkaisuun sillä siinä opensolaris-kloonijärjestelmän brändi on ”ipkg” ja se sisältää myös ”s10brand”-brändin jolla voidaan ajaa Solaris 10 ympäristöä. Myös itse emojärjestelmä on oma vyöhykkeensä nimeltään ”global zone”. Jokaisen vyöhykkeen (pl. KVM) voi myös tehdä kevyempänä ratkaisuna jolloin osa tiedostojärjestelmästä mountataan vain lukuna suoraan globaalista vyöhykkeestö. Ongelmana vyöhykkeissä on se, että jotkut ohjelmat, jotka vaativat joitain tiettyjä oikeuksia joihin vyöhykkeiden turva-asetukset eivät anna pääsyä, eivät toimi. Normaalit vyöhykkeet eivät myöskään sisällä omaa kerneliään vaan käyttävät aina globaalia. Edellisten käyttöjärjestelmäversioien binäärit ajetaan translaatiokutsujen kautta.

Kun vyöhykkeisiin otetaan vielä mukaan ZFS:n tarjoamat snapshotit ja varmuuskopio-ominaisuudet, voidaan helposti tehdä järjestelmä jossa on ensin yksi ”vakiovyöhyke” josta pystytään helposti provisioimaan uusia virtuaalikoneita käytettäväksi. Parasta tässä on se, että snapshotit toimivat myös SmartOS:n KVM-vyöhykkeessä jossa käytetään ZFS-tietdostojärjestelmän sijaan taltioita. Tästä kuitenkin lisää seuraavassa kappaleessa.

ZFS

ZFS on alunperin Sun Microsystemsin kehittämä tiedostojärjestelmän ja loogisen taltionhallinnan yhdistelmä. Tavalliseen tiedostojärjestelmään verrattuna se eroaa pääasiassa filosofialtaan. Jokainen fyysinen kovalevy liitetään ensin "storage pooliin" ja näihin pooleihin luodaan varsinaiset tiedostojärjestelmät ja taltiot. ZFS tarjoaa myös samankaltaisia RAID-tasoja kuten standardit rautatoteuksetkin. Lomitus (RAID0), peilaus (RAID1) sekä hajautus pariteetilla (RAID5) voidaan tehdä mihin tahansa pooliin.

Copy on Write

Yksi ZFS:n tärkeimmistä ominaisuuksista tiedon eheyden varmistamisessa on Copy-on-Write -periaate. Tämä tarkoittaa sitä, että kun tietoa kirjoitetaan levylle sitä ei ikinä kirjoiteta olemassa olevan tiedon päälle. Verrattuna tavalliseen RAID5-pakkaan, CoW estää tiedon korruptoitumista kesken kirjoituksen vaikkapa sähkön katkeamisen tai muun virheen seurauksena.

RAID5 Pariteetti

Tarkastellaanpa RAID5:n toimintaa hieman tarkemmin. Tieto A, B ja C kirjoitetaan pakkaan ja niistä muodostetaan pariteetti P. Nyt kun tätä olemassa olevaa tietoa muutetaan, vaikkapa A->Am, lasketaan uuden pariteetin Pm arvo. Jos kuitenkin kirjoitusoperaatio keskeytyy, voi järjestelmä jäädä tilaan jossa uusi tieto on kyllä kirjoitettu, mutta pariteetti ei ole päivittynyt vaan jäänyt vielä edelliseen arvoon.

RAID5 Korruptio

Tällöin tuloksena on kirjoitetun tiedon korruptoituminen. Tätä tilannetta kutsutaan myös nimellä RAID5 Write Hole. Järjestelmä ei mitenkään osaa tunnistaa tiedon virheellisyyttä vaan olettaa kaiken olevan kunnossa. Sitten kun pariteettia tarvitaan, antaa se tulokseksi väärän tuloksen ja näin kirjoittaa korruptoitunutta tietoa tiedostojärjestelmään. [6]

ZFS:ssä tätä ongelmaa ei ikinä pääse syntymään sillä kun tietoa kirjoitetaan, tallentuu se ensin tyhjään tilaan. Alkuperäinen tieto siis pysyy ehjänä kirjoitushetkellä. Vasta kun uusi tieto on saatu kokonaan kirjoitettua levylle päivitetään se vanhan päälle. Jos taas kirjoitus katkeaa kesken, menetetään ainoastaan kirjoituksen alaisena ollut tieto.

Tarkistussummat

Tavallisten tiedostojärjestelmien ongelmana on niiden tarkistussummien tallennustapa. Yleensä tämä tarkistussumma sijaitsee alkuperäisestä tiedosta seuraavana, alla olevan kuvan mukaisesti.

RAID5 Korruptio

Yleisesti määriteltynä tarkistussumma mahdollistaa korruptoituneen tiedon korjaamisen kunhan käytetty summausalgoritmi vain on tarpeeksi vahva muutosten havaitsemiseen. Tarkistussummien tämäntapainen pötkössä sijainti kuitenkin saattaa aiheuttaa ongelmia tietyissä tilanteissa. ZFS:sä tarkistussummat on hajautettu fyysisesti eri paikkoihin pakan levyillä ja itse tieto sisältääkin vain osoittimet tarkistussummien sijaintiin. RAIDZ (eli hajautettu pariteetti) ja peilatuilla ZFS pakoilla pystytäänkin tämän ansiosta havaitsemaan ja korjaamaan kaikki virheellinen tieto kunhan vain itse pakka on ehjä.

Varannot

ZFS mahdollistaa siis kahden eri tyyppisen tietovarannon käytön, tiedostojärjestelmän ja taltion. Näistä tiedostojärjestelmä on kuin mikä tahansa tavallinen Unixin polku. Taltiot taasen ovat "block devicejä" jotka toimivat samaan tapaan kuin fyysiset kovalevyt. Taltioihin voidaan siis formatoida vaikkapa joku toinen tiedostojärjestelmä ja silti saada osa ZFS:n ominaisuuksista käyttöön. Yksi laajempi käyttötapa taltioille onkin esimerkiksi jakaa niitä iSCSI-protokollan avulla taltioverkkoon josta palvelimet ja työasemat niihin pääsevät käsiksi.

ZFS sisältää myös snapshotit jotka ovat niiden ottohetken "kuva" tiedostojärjestelmästä. Snapshoteilla on monia käyttötarkoituksia, esimerkiksi varmuuskopioinnissa tai järjestelmän kloonauksessa. illumos-julkaisut. kuten SmartOS on, sisältää esimerkiksi ominaisuuden jolla järjestelmä voidaan käynnistää tiettyihin snapshotteihin (boot environment). Näin esimerkiksi päivityksen jälkeen järjestelmä voidaan ongelmatilanteessa käynnistää takaisin edelliseen toimivaan kokoonpanoon. SmartOS käyttää snapshotteja myös virtuaalikoneiden nopeassa kloonauksessa. Kaiken tämän lisäksi ZFS-tiedostojärjestelmien snapshotteja voidaan siirtää send/receive -komennoilla vaikkapa verkon yli. Tämä mahdollistaa mm. helpon tavan varmuuskopiointiin tai järjetelmän kloonaukseen verkon yli.

ZFS mahdollistaa myös nopeiden 15k RPM ja SSD -levyjen käytön välimuistina luku- ja kirjoitusoperaatioille. ARC eli Adaptive Replacement Cache sijaitsee keskusmuistissa ja skaalautuu olemassa olevan muistimäärän mukaisesti. ARC pitää kirjaa useasti ja hiljattain käytössä olleista tiedostoista aktiivisten poolien alueelta joiden perusteella se osaa nopeuttaa niihin pääsyä. Yleensä keskusmuistia varataan tälle välimuistille niin paljon kuin mahdollista ja sitä vapautetaan sen mukaan kun ohjelmat tarvitsevat. L2ARC istuu taas poolin ja keskusmuistissa sijaitsevan ARC:n välissä. Sen tarkoituksena on laajentaa keskusmuistia nopealla massamuistilla, tyypillisesti SSD-levyllä, ja näin nopeuttaa tiedostojen käsittelyä varsinkin suurissa levyjärjestelmissä.

ZiL eli ZFS Intent Log taas on kirjoitusvälimuisti. ZiL:n tarkoituksena on helpottaa pyöriville levyille kirjoitusta tallentamalla kaikki tieto ensin nopealle massamuistille jonka jälkeen ne siirretään pyöriville levyille heti kun mahdollista.

KVM

KVM eli Kernel-based Virtual Machine on alunperin Linuxille kehitetty virtualisointilaitos. SmartOS ajaa KVM-pohjaisia virtuaalikoneita konttien sisällä Crossbow-verkolla varustettuna. Tämä tapa lisää tietoturvaa varsinkin siten, että jos KVM:n Qemusta pystytään murtautumaan ulos, tuloksena on vain pääsy vieläkin rajoitetumpaan Konttiin. Kaikki KVM-virtualikoneet omaavat yhden tai useampia ZFS-taltioita, ei siis tiedostojärjestelmiä, jotka määritetään kyseisen virtuaalikoneen fyysisiksi kovalevyiksi. Tämä tuo mukanaan mahdollisuuden snapshotteihin sekä tarkistussummien avulla eheyden tarkkailuun.

Päätelmät / yhteenveto

SmartOS on varsin pätevä vaihtoehto virtualisointiin. Sen ilmaisuus, vapaan lähdekoodin periaate sekä enterprise-tason ominaisuudet pitävät huolen laadukkaasta virtualisointiympäristöstä ja noin joka toisen viikon välein julkaistava uusi versio tietoturvan ja uusien ominaisuuksien ajantasaisuudesta.

Lähteet

SivuTiedotLaajennettu edit

Vaativuus Jatko
Valmius Valmis
Tyyppi Ydin
Luokitus Uhkat
Mitä Luottamuksellisuus
Miltä Ihmisetön uhka
Missä Organisaatio
Kuka Titu-ammattilainen
Milloin Ennakolta
Miksi Hyvä tapa
Print version |  PDF  | History: r8 < r7 < r6 < r5 | 
Topic revision: r8 - 09 Dec 2012 - 22:00:59 - AnttiKolehmainen
 

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