You are here: TUTWiki>Tietoturva/Tutkielmat>Tutkielmat?>LinuxVServer (revision 16)

TTY / Tietoturvallisuuden jatkokurssi / Harjoitustyö 2012

Riku Itäpuro

Linux VServer eristäjänä

Johdanto

VServer[1] on Linux-ympäristön eristysteknologia, joka perustuu koneen osittamiseen turvakonteksteihin. Voidaan myös puhua virtualisoinnista, sillä ositetuksen sisällä järjestelmä näyttäytyy kuin virtualisoitu järjestelmä. Se on kevyt, sillä käytössä on vain yksi ydin, joka suorittaa ytimelle kuuluvat tehtävät. Virtuaalikoneiden kesken jaetaan muisti, verkko ja tiedostojärjestelmä eristetysti toisistaan. Se on myös nopea, koska laitteistoa ei emuloida.

VServerin kaltaisia tekniikoita ovat tavallinen chroot, BSD-jail, Solaris Containers sekä Linux Containers (LXC[5]) Samankaltaisesta nimestä huolimatta VServer ei ole Microsoft Virtual Server eikä Linux Virtual Server Project (LVS). VServer ei käytä paravirtualisointia tai täysvirtualisointia
  • Paravirtualisoinnissa ajetaan isäntäkoneen alla virtualisoituja käyttöjärjestelmiä, joiden ydin on modifioitava keskustelemaan isäntäjärjestelmän kanssa
  • Täysvirtualisoinnissa virtualisoitua käyttöjärjestelmää ei tarvitse muokata. KJ:n virtualisointi on toteutettu joko ohjelmallisesti tai prosessorin rautatuella, jos kyseessä on esim AMD-V tai Intelin VT-x.

Vserverin käyttökohteiksi sopii mainiosti esim. webpalvelun massavirtualisointi, jossa asiakkaille voidaan myydä yhdestä ja samasta palvelimesta turvallisia, mutta nopeita osioita, sillä virtualisoinnin tuoma nopeuden menetys on luokkaa <1% eli huomattavasti pienempi kuin kokonaisvirtualisointiratkaisuissa, kuten para- tai hypervisorvirtualisoinneissa. Sillä saadaan myös pieniä ja elegantteja rajoitettuja ympäristöjä, hiekkalaatikoita, esim. laboratoriotestaukseen.

Eristyksen kohteet ja mahdollistavat tekijät

  • Eristetty prosessiavaruus.
    • Ytimen vserver-laajennus lisää ominaisuuden _konteksti_prosesseille (prosessit näkevät vain saman kontekstin muut prosessit)
  • Pääkäyttäjyyden kaltaiset toiminnot konteksteissa.
    • Linux ytimen kykyjako (capabilities) tarjoaa hienojakoisemman oikeusten jaottelun kuin perinteisesti käytössä olevan kaksijakoisen etuoikeutetut tai muut. Kykyjako tuo mahdollisuuden jakaa pääkäyttäjälle kuuluvia oikeuksia tiettyä operaatiota varten ilman, että tarvitsee antaa itse pääkäyttäjyyttä prosessille.
  • Jailbreakin esto
    • Chroot ympäristö, josta ei pääse pois perustuu siihen, että käytetään erityiset Barrier bittiä hakemisto. Lisäksi tiedostojärjestelmä liittää tiedostoille tunnistekentän (tag-optio), joka kertoo, mille kontekstille tiedosto kuuluu. Tiedostojärjestelmän alin kerros ottaa tämän huomioon perustuen kykyjakoon.
  • varusohjelmisto, jolla VServer ympäristöä hallitaan. Ohjelmiston täytyy tietää ytimen vserver laajennuksesta.
  • Käytönrajoitus ja tilastointi (muisti,cpu,levytila, jne).
    • rajoitukseen Linuxissa on jo valmiina rlimit ja dlimit. VServer tuo vielä näihin laajennuksia tiedostojärjestelmän osalta. Muutoksia voidaan tehdä ilman koneen uudelleenkäynnistystä vspace ohjelmalla konteksteille.
    • /proc tiedostojärjestelmään syntyy alihakemistot virtual ja virtnet tilastointia varten.

Esimerkkiajoja ja ruutukaappauksia rajoitetusta ympäristöstä

vs1a ja vs1b alla ovat minimaalisia vserver-virtualisoituja Debian-jakelun käyttöjärjestelmiä. Ne pyörivät siis yhteisen kernelin alla, mutta eristettynä toisistaan. Ne ovat muuten identtisiä, mutta ensimmäiseen asennettiin oletusasetuksilla www-palvelimeksi Apache2.2 ja jälkimmäiseen kevyempi Lighttpd. Verrataan isäntäkoneesta konteksteja vs1a ja vs1b.
root@manaatti:~# vserver-stat CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME 40000   61 479.4M  13.3M   0m42s21   1m31s78  48m35s25 vs1a 40001   8   37.4M   8.6M    0m25s27   0m37s96  48m40s26 vs1b 
VSZ ja RSS ovat käytössä oleva virtuaalimuisti ja kiinteässä RAMissa oleva osuus sivuina. Sivukoko on 4KiB x86-arkkitehtuurissa. Molemmat ovat olleet käynnissä yhtä kauan.

Prosesseilla on ennestäänkin rajoitettu avaruus, nyt kuitenkin kukin konteksti näkee pelkästään itselleen kuuluvat prosessit. Hallinnoivalta isäntäkoneella kääritään halutut ohjelmat ajettavaksi erityiskontekstissa numero yksi, joka pystyy lukemaan muiden kontekstien tietoja.

Esimerkki: Kaikki prosessit vps komennolla, joka on ps komento kääritty ajettavaksi kontekstissa 1. Sarake CONTEXT eroaa normaalista ps komennosta. Kontekstissa 40000 on vs1a niminen eristetty kone ja 40001:ssa vs1b.

root@manaatti:~# vps axu USER       PID CONTEXT             %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND root         1     0 MAIN           0.0  0.0   2208   744 ?        Ss   19:18   0:01 init [2]   root         2     0 MAIN           0.0  0.0      0     0 ?        S    19:18   0:00 [kthreadd] root         3     0 MAIN           0.0  0.0      0     0 ?        S    19:18   0:00 [migration/0] root         4     0 MAIN           0.0  0.0      0     0 ?        S    19:18   0:00 [ksoftirqd/0] ... root      3975     1 ALL_PROC       0.0  0.0    152    36 ?        S+   21:06   0:00 vps axu root      3976     0 MAIN           0.0  0.0   5244   852 ?        S+   21:06   0:00 less root      3977     1 ALL_PROC       0.0  0.0   5964  1144 ?        R+   21:06   0:00 ps axu ... konteksit 0 = Isäntäkone, 1 = erityinen ALL_PROC, jolla on pääsy kaikkien kontekstien sisään ... root     19110 40001 vs1b           0.0  0.0  19504  1460 ?        Sl   20:10   0:00 /usr/sbin/rsyslogd -c5 root     19133 40001 vs1b           0.0  0.0   2176   784 ?        Ss   20:10   0:00 /usr/sbin/cron root     19279 40000 vs1a           0.0  0.0  19508  1464 ?        Sl   20:10   0:00 /usr/sbin/rsyslogd -c5 root     19300 40000 vs1a           0.0  0.0   2176   788 ?        Ss   20:10   0:00 /usr/sbin/cron root     22031 40000 vs1a           0.0  0.0   5924  2948 ?        Ss   20:34   0:00 /usr/sbin/apache2 -k start www   22038 40000 vs1a           0.0  0.0   5712  2052 ?        S    20:34   0:00 /usr/sbin/apache2 -k start www   22041 40000 vs1a           0.0  0.1 227476  3256 ?        Sl   20:34   0:00 /usr/sbin/apache2 -k start www   22042 40000 vs1a           0.0  0.0 227232  2548 ?        Sl   20:34   0:00 /usr/sbin/apache2 -k start root     22739 40001 vs1b           0.0  0.0   3032  1692 ?        Ss+  20:51   0:00 /bin/bash -login www   23723 40001 vs1b           0.0  0.0   6804  1596 ?        S    20:52   0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf ... 

Kontekstissa vs1b ajettu ps-komento, joka tulostaa kaikki ajossa olevat prosessit. Huomaa, että ytimen prosesseja (vuorontaja, keskeytykset, laiteajurit ym) ei näy, koska ne kuuluvat isäntäkoneelle.
root@vs1b:/# ps -ef UID        PID  PPID  C STIME TTY          TIME CMD root         1     0  0 17:18 ?        00:00:01 init [2]   root      3853 22739  0 18:10 pts/4    00:00:00 ps -ef root     19110     1  0 17:18 ?        00:00:00 /usr/sbin/rsyslogd -c5 root     19133     1  0 17:18 ?        00:00:00 /usr/sbin/cron root     22705 18795  0 17:59 ?        00:00:00 login                                                 root     22739 22705  0 17:59 pts/4    00:00:00 /bin/bash -login www   23723     1  0 18:00 ?        00:00:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf 

Jail break

Jail-Break tarkoittaa sitä, että virtuaalikoneesta olisi pääsy isäntäkoneelle kulkemalla tiedostojärjestelmässä juureen asti ja jopa siitä yli. Samoin viittaus isäntäkoneen prosesseihin tässä tarkoittaa murtoa. Virtuaalikoneen ei pidä nähdä Isäntäkoneen tiedostoja, mutta toiseen suuntaan toimi pätee. chroot( ) muuttaa juureksi uuden hakemiston olemassaolevalle prosessille. (CHange Root)

Joitain tapoja päästä karkuun tästä uudesta juuresta hyödyntävä sitä, että
  • avoimet tiedostokahvat jäävät auki ja niihin palataan
  • CWD (käytössä oleva hakemisto) ei muutu chroot( ) kutsussa. Tekemällä peräkkäisiä chroot-kutsuja on mahdollista päästä ulos.
  • kutsu muokkaa hakemistonselvitys prosessia, ei muuta.

Yleiset haavoittuvuudet, joihin perustuu normaalista chrootista poismurtautuminen edellyttävät, että käyttäjällä on hallussaan root käyttäjyys. VServer tapauksessa root käyttäjän kyvyt on rajoitettu, mutta varsinainen ratkaisu ongelmaan on Secure Barrier bitti tiedostossa (hakemistossa). VServer laajennukset tiedostoille sisältävät tämän lisäksi muitakin ominaisuuksia kuten immutable bitin, joka tarkoittaa, että tiedostoa ei voi muuttaa, mutta sen voi poistaa.

Esimerkeissä käytetty chroot-hakemisto on /var/lib/vservers. Sen alla olevissa hakemistoissa on Barrier bitti estämässä paluuta.
root@manaatti:/var/lib/vservers# showattr /var/lib/vservers ----BuiX /var/lib/vservers ----buiX /var/lib/vservers/lost+found ----buiX /var/lib/vservers/vs1a ----buiX /var/lib/vservers/vs1b 

Sandboxing

Sandboxing (hiekkalaatikko) on ohjelman ajamista hallitusti rajoitetussa ympäristössä. VServerin avulla voidaan saada sovellukselle käyttöympäristö vieläkin pienemmäksi kuin minimaalinen, ydinvapaa käyttöjärjestelmä. Jos halutaan hiekkalaatikoida sovelluksia, täytyy sovelluksen käyttäytyminen tuntea.

  • Tarvitseeko se pääsyn laitetiedostoihin?
  • Tarvitseeko se NET_RAW kykyä (tcpdump)?
  • Entä UDP tai /dev/random?
  • mitä muuta sen käyttäymistä tiedetään ja jos ei tiedetä, selvitetään virhelogista ja debugataan, kun ohjelma ei toimi

Tämä selvitys on tehtävä myös jos tehdään normaali KJ:n mukainen chroot, jossa tarkistetaan mitä tiedostoja ohjelma tarvitsee ja missä vaiheessa sen tulisi luopua etuoikeuksista.

Ongelmakohdat

Joissain tapauksissa VServer konteksti ei toimi samoin kuin fyysinen kone. Loopback osoite 127.0.0.1 on vain isäntäkoneen käytössä. Jos tarvitaan loopbackia virtuaalikoneen puolella on käytettävä joko koneen omaa verkko-oso itetta tai johdannaista 127.a.b.c, jossa a.b.c ovat uniikkeja kyseiselle virtuaali koneelle. Samoin käy, jos ohjelma ryhtyy kuuntelemaan porttia osoitteessa *, sillä se sen jälkeen muut koneet eivät voi käyttää omissa verkkoliitännyissään tätä porttia.

Jos sovelluksella on käännöksen yhteydessä määritelty capabilities ominaisuuksia, se ei toimi virtuaaliserverissä, esim. ohjelma PureFTPd?. Ohjelman kääntämäinen optiolla --without-capabilities ratkaisee ongelman. Tässä tapauksessa ohjelmisto olisi huolehtinut itse kykyjen pudotuksesta ilman vserver-ympäristöä.

Jos ohjelma tarvii tiettyä etuoikeutusta, täytyy tämä määrätä isäntäkoneen puolelta sallituksi. Esi.m ICMP paketin lähetykseen vaaditaan CAP_NET_RAW kyky ja wireshark, nmap ja ids voivat tarvita sitä myös.

Teknologian tulevaisuus

VServerin tulevaisuus on hämärä. Toisaalta tuote on kypsynyt tasaisesti, mutta rinnalle on tullut muita tuotteita ja laajemmin kehittäjiä, jotka ovat toteuttaneet omia uusia ratkaisuja.

Tällä hetkellä (2012 syksy) Debian GNU/Linux jakelussa 6.0 on viimeistä kertaa tuettuna vaihtoehtoytimenä mukana vserver [4]. Tämä tarkoittaa 2.6-sarjan ytimiä. 3.2-sarjan ytimistä tämä puuttu. Syynä on se, että erillisien ytimien ylläpitoon ei riitä voimia eikä yhteistyökään ole aina sujunut Debianin ohjeiden mukaisesti. Toisaalta samankaltaista toiminnallisuutta tarjoaa Linux Container (LXC[5]). VServer-tuettu ydin toki voidaan kääntää itse tai noutaa valmiina muualta.

Debianin suositus korvaavaksi on siirtyä joko KVM- tai XEN-virtualisointiin tai Linux Containereihin (LXC)[debian-alt]. Näistä ainoastaan Linux Container on lähellä Linux Vserveriä, mutta harmillisesti kuitenkin vielä melko tuore vuonna 2012 verrattuna VServerin 10 vuoden ikään eikä sisällä kaikkea sitä, mitä VServerissä on. Varsinkin user-space työkalut ovat kehittymättömiä. Muut vaihtoehdot ovat täysvirtualisointiratkaisuja. Migrointipolkuja on tehty vservereistä LXC:ään [6] ja KVM:ään [7].

Päätelmät / yhteenveto

Vserver on kevyt ja kypsä eristysjärjestelmä, joka vaatii kuitenkin jonkin verran erityisosaamista käyttökuntoon laittamisessa. Huolestuttavaa on se, että VServer näyttäisi hitaasti hiipuvan oman aikansa BETA-tallennusjärjestelmäksi. Toisaalta sille on kuitenkin ehtinyt kerääntyä paljon käyttäjiä, vaikka se tulee saamaan kilpailijan varsinkin LXC:stä. Todennäköisesti vserver tullee häviämään 5 vuoden sisällä. Yksi syy sen harvinaistumiseen voi olla täysvirtualisointiratkaisun yleistyminen, joka ovat hyvin erilainen tekniikaltaan.

Lähteet

SivuTiedotLaajennettu edit

Vaativuus Jatko
Valmius Valmis
Tyyppi Arviointi
Luokitus Atk
Mitä Muu
Miltä Useita
Missä Järjestelmä
Kuka Tite-ammattilainen
Milloin Rakennettaessa
Miksi Hyvä tapa
Print version |  PDF  | History: r19 | r17 < r16 < r15 < r14 | 
Topic revision: r16 - 06 Dec 2012 - 01:09:32 - RikuItaepuro
 

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