Difference: LinuxVServer (r17 vs. r16)

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 osituksen 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]) (LXC[4]) 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 muokattava keskustelemaan isäntäjärjestelmän kanssa kanssa. Tämä kohta estää esim. Windows käyttöjärjestelmien suoran ajamisen, sillä sen ydintä ei voi vapaasti muokata.
  • Täysvirtualisoinnissa virtualisoitua käyttöjärjestelmää ei tarvitse muokata. KJ:n virtualisointi on toteutettu joko ohjelmallisesti tai prosessorin rautatuella, jos kyseessä on esim 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 pieniä, elegantteja, elegantteja rajoitettuja ympäristöjä, ympäristöjä ja hiekkalaatikoita, esim. laboratoriotestaukseen. mikä on hyödyllistä laboratoriotestauksissa.

Eristyksen kohteet ja mahdollistavat tekijät

  • Eristetty prosessiavaruus.
    • Ytimen vserver-laajennus VServer-laajennus lisää ominaisuuden _konteksti_prosesseille (prosessit näkevät vain saman kontekstin muut prosessit) konteksti prosesseille (prosessit näkevät vain saman kontekstin muut prosessit)
  • Pääkäyttäjyyden kaltaiset toiminnot konteksteissa.
    • Linux ytimen kykyjako(capabilities) (capabilities)[2] 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 Chroot, ympäristö, josta ei pääse pois perustuu siihen, että käytetään erityiset Barrier bittiä hakemisto. erityistä Barrier-bittiä VServer-koneen juurihakemistolle. 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 VServer-ympäristöä ympäristöä hallitaan. Ohjelmiston täytyy tietää ytimen vserver VServer-laajennuksesta. laajennuksesta.
  • Käytönrajoitus ja tilastointi (muisti,cpu,levytila, (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. 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. /proc tiedostojärjestelmään syntyy alihakemistot /proc/virtual ja /proc/virtnet tilastointia varten.

Esimerkkiajoja ja ruutukaappauksia rajoitetusta ympäristöstä

Esimerkki: vs1a ja vs1b alla ovat minimaalisia vserver-virtualisoituja 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 _vps_-komennolla, 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. Konteksti 0 on Isäntäkone ja 1 erityinen ALL_PROC konteksti, jolla on pääsy kaikkien kontekstien sisään

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 Jail break tarkoittaa sitä, että virtuaalikoneesta (jail=vankila) 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( _chroot_-sovellus ) muuttaa ajettavan ohjelman näkemäksi tiedostojärjestelmän juureksi uuden hakemiston olemassaolevalle prosessille. (CHange Root) Root.)

Joitain tapoja päästä karkuun tästä uudesta juuresta hyödyntävä hyödyntävät sitä, että

  • avoimet tiedostokahvat jäävät auki ja niihin palataan chrootin sisältä
  • CWD !$CWD (käytössä oleva hakemisto) ei muutu chroot( ) kutsussa. chroot kutsussa, sillä kutsu muokkaa ainoastaan hakemistonselvitysprosessia, ei muuta. Tekemällä peräkkäisiä chroot-kutsuja on mahdollista mahdollista, joskaan ei varmaa, 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. root-käyttäjyys. VServerin VServer tapauksessa root root-käyttäjän käyttäjän kyvyt on rajoitettu, mutta varsinainen ratkaisu ongelmaan on Secure Barrier bitti tiedostossa (hakemistossa). VServer VServer-laajennukset laajennukset tiedostoille sisältävät tämän lisäksi muitakin ominaisuuksia kuten immutable _immutable_-bitin, 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 Barrier-bitti bitti estämässä paluuta. Siinä on samoin immutable (=i) estämässä hakemiston muokkaamista.

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 Sandbox-ajo (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)? ( tcpdump)?
  • Entä UDP tai /dev/random? /dev/random?
  • mitä muuta sen käyttäymistä käyttäytymisestä tiedetään ja jos ei tiedetä, selvitetään virhelogista ja debugataan, kun ohjelma ei toimi

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

Ongelmakohdat

Joissain tapauksissa VServer konteksti ei toimi samoin kuin fyysinen kone. Loopback Loopback-osoite osoite 127.0.0.1 on vain isäntäkoneen käytössä. Jos tarvitaan loopbackia virtuaalikoneen puolella puolella, on käytettävä joko koneen omaa verkko-oso verkko-osoitetta itetta tai johdannaista 127.a.b.c, jossa a.b.c ovat uniikkeja kyseiselle virtuaali virtuaalikoneelle. 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. *, sillä se sen jälkeen muut koneet eivät voi käyttää omissa verkkoliitännöissään tätä porttia. Esimerkiksi ssh-palvelin on aina sidottava käyttämään oman IP-osoitteensa porttia.

Jos sovelluksella on käännöksen yhteydessä määritelty capabilities ominaisuuksia, se ei se toimi virtuaaliserverissä, esim. ohjelma suoraan virtuaaliserverissä. Esim. ftp-palvelinohjelma PureFTPd?. Ohjelman kääntämäinen on käännetty normaalisti hyväksikäyttämään capabilitiesia, joten se on käännettävä uudestaan optiolla --without-capabilities ratkaisee ongelman. Tässä tapauksessa ohjelmisto olisi huolehtinut itse kykyjen pudotuksesta ilman vserver-ympäristöä. --without-capabilities. Tässä tapauksessa ohjelmisto olisi huolehtinut itse kykyjen pudotuksesta ilman VServeriä.

Jos ohjelma tarvii tarvitsee 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. ratkaisujaan.

Tällä hetkellä (2012 syksy) Debian GNU/Linux jakelussa 6.0 on viimeistä kertaa tuettuna vaihtoehtoytimenä mukana vserver [4]. [3]. 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]). (LXC[4]). 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] [5] ja KVM:ään [7]. [6].

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

 
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