You are here: TUTWiki>Tietoturva/Tutkielmat>Tutkielmat?>SmartOSHypervisor (revision 6)

TTY / Tietoturvallisuuden jatkokurssi / Harjoitustyö 2012 / Luonnosvaihe

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, Zone/Container-tekniikka, 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 reboottaamalla 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]

RAID5 Korruptio

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.

Containerit

Container on itse asiassa ”sateenvarjotermi” Zonejen ja niihin vaikuttavien resurssikontrollien yhteistyölle. Containereita 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 Containerilla on oma tyyppinsä joita on SmartOS?:ssä seuraavasti:

  • KVM jossa kaikki KVM:n alaiset virtuaalikoneet pyörivät.
  • Joyent joka on SmartOS? ilman KVM:ää.

Illumoksessa on hieman eroja SmartOS?:n ratkaisuun sillä siinä opensolaris-kloonijärjestelmän brand on ”ipkg” ja se sisältää myös ”s10brand”-brandin jolla voidaan ajaa Solaris 10 ympäristöä. Myös itse emojärjestelmä on oma Zonensa nimeltään ”global zone”. Jokaisen Zonen (pl. KVM) voi myös tehdä kevyempänä ratkaisuna jolloin osa tiedostojärjestelmästä mountataan read onlynä suoraan global Zonesta. Ongelmana Zoneissa on se, että jotkut ohjelmat jotka vaativat joitain tiettyjä oikeuksia joihin Zonejen turva-asetukset eivät anna pääsyä eivät toimi. Normaalit Zonet eivät myöskään sisällä omaa kerneliään vaan käyttävät aina global zonessa pyörivää. Edellisten käyttöjärjestelmien binäärit ajetaan translaatiokutsujen kautta.Kun Zoneihin otetaan vielä mukaan ZFS:n tarjoamat snapshotit ja varmuuskopio-ominaisuudet, voidaan helposti tehdä järjestelmä jossa on ensin yksi ”vakio-zone” josta pystytään helposti snapshottaamaan uusia virtuaalikoneita käytettäväksi. Parasta tässä on se, että snapshotit toimivat myös SmartOS?:n KVM-zonessa jossa käytetään ZFS-tietdostojärjestelmän sijaan Volumeita. Näistä 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 volumet. 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ärjetelmä 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. Kun tietoa kirjoitetaan, tallentuu se ensin tyhjään tilaan, alkuperäinen tieto siis pysyy samana 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 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 volumen. Näistä tiedostojärjestelmä on kuin mikä tahansa tavallinen Unixin polku joka voidaan mountata mihin tahansa sitä tarvitaankaan. Volumet taasen ovat "block devicejä" jotka toimivat samaan tapaan kuin fyysiset kovalevyt. Volumeihin voidaan siis formatoida vaikkapa joku toinen tiedostojärjestelmä ja silti saada ZFS:n ominaisuudet käyttöön.

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. Näin esimerkiksi päivityksen jälkeen voidaan bootata ongelmatilanteissa takaisin 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.

ZFS mahdollistaa 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 data 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 Containereiden sisällä virtuaali-verkoilla 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 Containeriin. Kaikki KVM-virtualikoneet omaavat yhden tai useampia ZFS-volumeita, ei siis tiedostojärjestelmiä, jotka määritetään kyseisen virtuaalikoneen kovalevyiksi. Tämä tuo mukanaan mahdollisuuden snapshotteihin sekä checksummauksen avulla tiedostojen eheyden tarkkailuun.

Päätelmät / yhteenveto

// FIXME

SmartOS? pwnz vmware lolz! Asentakaa ja testatkaa, ette tule pettymään! \o/

Lähteet

SivuTiedotLaajennettu edit

Vaativuus Jatko
Valmius Kehitteillä
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 < r4 | 
Topic revision: r6 - 07 Dec 2012 - 02:42:24 - 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