Ohjelmointi

Linux-kontit vs. virtuaalikoneet: Tietoturvavertailu

Kehittäjät rakastavat kontteja. Niitä on helppo käyttää ja nopea aloittaa. Voit käyttää monia niistä jopa yksinkertaisella laitteistolla. Käynnistyskulut ovat aina olleet kehityksen ja testauksen haittoja, ja tämä yleiskustannus kasvaa vain mikropalveluarkkitehtuureilla. Jos kehittäjä tarvitsee puoli tusinaa palvelua, hän voi helposti tuhlata päivän tai kaksi asennuksella - laitteiston määrityksellä, asentajien suorittamisella ja yhteensopimattomuuksien torjunnalla.

Konttien kanssa, joka romahtaa minuutteihin tai sekunteihin ja voidaan ajaa yhdessä kehitystyöasemassa. Hyödyllisten säilökuvien helposti saatavilla olevat arkistot moninkertaistavat kehittäjien tuottavuuden, aivan kuten avoimen lähdekoodin, mutta ilman vaivaa rakentaa. Toimintaryhmät ovat hitaammin ottaneet kontteja käyttöön. Yksi syy on, että monia sovelluksia, joita heidän on tuettava, ei ole vielä paketoitu. Toinen syy on haluttomuus siirtyä pois virtuaalikoneista.

Opille siirtyminen paljaasta metallista VM: ään oli luonnollista. Yksittäiset virtuaalikoneet näyttävät ja niitä voidaan hallita kuten yksittäisiä järjestelmiä, samoilla työkaluilla ja prosesseilla. Aikaisempia huolenaiheita virtuaalikoneiden tietoturvasta lievitti virtuaalikoneiden pitkä tuotantohistoria keskusyksikkömaailmassa, kyky käyttää samoja ohjauksia kuin paljasmetallijärjestelmissä, laitteiston virtualisointituki ja virtuaalikoneiden hallintatyökalujen kehittyvä kypsyys.

Monet varhaiset turvallisuushuolet tulivat yhteen kysymykseen: Oliko virtuaalikoneita yhtä turvallisia kuin paljas metalli? Nyt vastaavia kysymyksiä nostetaan kontteista. Kuinka turvallisia kontit ovat ja miten ne verrataan virtuaalikoneisiin? Varmasti, jos verrataan säilöissä olevia palveluita samoihin palveluihin, jotka suoritetaan erillisinä prosesseina samassa järjestelmässä, säilöversio on turvallisempi. Linux-nimitilojen ja ryhmien tarjoama erottelu tarjoaa esteitä, joita ei ole olemassa tavallisten prosessien välillä. Vertailu virtuaalikoneisiin on vähemmän selkeä. Katsotaanpa virtuaalikoneita ja säilöjä turvallisuuden näkökulmasta.

Tässä artikkelissa otan kahta erilaista tapaa verrata virtuaalikoneen ja säilön tietoturvaa. Ensimmäinen lähestymistapa on rakenteellisempi tai teoreettisempi, kun tarkastellaan kunkin ominaisuuksia turvallisuusnäkökulmasta. Sitten käytän käytännön analyysiä tarkastelemalla mitä tapahtuu tyypillisessä rikkomuksessa ja miten kontti- ja virtuaalikonearkkitehtuurit voivat vaikuttaa siihen.

Rakennenäkymä

Rakenteellista lähestymistapaa varten verrataan molempien järjestelmien hyökkäyspintaa. Hyökkäyspinta edustaa niiden pisteiden määrää, joissa järjestelmää voidaan hyökätä. Sitä ei ole määritelty tarkasti (esimerkiksi numerona), mutta se on hyödyllinen vertailuissa. Murtovarkajalle 10-ovisella talolla on suurempi hyökkäyspinta kuin yhden oven talolla, vaikka ovet olisivat identtisiä. Yksi ovi saattaa jäädä lukitsematta; yksi lukko voi olla viallinen; ovet eri paikoissa voivat tarjota tunkeilijalle enemmän yksityisyyttä ja niin edelleen.

Tietokonejärjestelmissä hyökkäyspinta sisältää kaiken, missä hyökkääjä (tai hänen puolestaan ​​toimiva ohjelmisto) voi "koskettaa" kohdejärjestelmää. Verkkoliitännät, laitteistoyhteydet ja jaetut resurssit ovat kaikki mahdollisia hyökkäyskohteita. Huomaa, että hyökkäyspinta ei tarkoita, että todellinen haavoittuvuus on olemassa. Kaikki 10 ovea voivat olla täysin turvallisia. Suurempi hyökkäyspinta tarkoittaa kuitenkin enemmän suojattavia paikkoja ja sitä todennäköisemmin hyökkääjä löytää heikkouden ainakin yhdessä.

Hyökkäyksen kokonaispinta riippuu eri kosketuspisteiden lukumäärästä ja niiden monimutkaisuudesta. Katsotaanpa yksinkertaista esimerkkiä. Kuvittele vanhanaikaista järjestelmää, joka palvelee pörssikursseja. Siinä on yksi käyttöliittymä, yksinkertainen sarjaliitäntä. Myös tällä rivillä oleva protokolla on yksinkertainen: Palvelimelle lähetetään kiinteän pituinen varastosymboli, sanotaan viisi merkkiä, joka vastaa kiinteän pituisella hintanoteerauksella - esimerkiksi 10 merkillä. Ei ole Ethernet-, TCP / IP-, HTTP- ja niin edelleen. (Olen itse työskennellyt tällaisten järjestelmien parissa kauan sitten kaukana, kaukana olevassa galaksissa.)

Tämän järjestelmän hyökkäyspinta on hyvin pieni. Hyökkääjä voi manipuloida sarjajohdon sähköisiä ominaisuuksia, lähettää vääriä symboleja, lähettää liikaa tietoa tai muuten muuttaa protokollaa. Järjestelmän suojaaminen edellyttäisi asianmukaisten valvontatoimien toteuttamista näitä hyökkäyksiä vastaan.

Kuvittele nyt sama palvelu, mutta modernissa arkkitehtuurissa. Palvelu on saatavilla Internetissä ja paljastaa RESTful-sovellusliittymän. Hyökkäyksen sähköinen puoli on kadonnut - riittää, että paistetaan hyökkääjän oma reititin tai kytkin. Mutta protokolla on valtavasti monimutkaisempi. Siinä on kerrokset IP: lle, TCP: lle, mahdollisesti TLS: lle ja HTTP: lle, joista kukin tarjoaa mahdollisuuden hyödyntää haavoittuvuutta. Nykyaikaisella järjestelmällä on paljon suurempi hyökkäyspinta, vaikka se näyttää silti hyökkääjältä kuin yksi liitäntäpiste.

Paljaan metallin hyökkäyspinta

Hyökkääjälle, joka ei ole fyysisesti datakeskuksessa, ensimmäinen hyökkäyspinta on verkko palvelimeen. Tämä johti tietoturvan "kehänäkymään": Suojaa sisääntulopisteet datakeskukseen, eikä mitään pääse sisään. Jos hyökkääjä ei pääse sisään, ei ole väliä mitä tapahtuu sisäpuolella olevien järjestelmien välillä. Se toimi hyvin, kun kehärajapinnat olivat yksinkertaisia ​​(ajattele puhelinverkkoyhteyttä), mutta lisäsi heikkouksia sisäisissä rajapinnoissa. Hyökkääjät, jotka löysivät reiän kehältä, huomasivat usein, että palvelintilan sisäinen hyökkäyspinta oli paljon suurempi kuin ulkoinen, ja he voivat tehdä huomattavia vahinkoja sisälle tullessaan.

Tämä sisäinen hyökkäyspinta sisälsi verkkoyhteydet palvelimien välillä, mutta myös prosessien väliset vuorovaikutukset yhdessä palvelimessa. Mikä pahempaa, koska monilla palveluilla on korkeat käyttöoikeudet ("root" -käyttäjä), onnistunut murtuminen merkitsisi tosiasiallisesti esteetöntä pääsyä mihin tahansa muuhun järjestelmässä tarvitsematta etsiä muita haavoittuvuuksia. Palvelimien - palomuurien, haittaohjelmien torjunnan, tunkeutumisen havaitsemisen ja jatkamisen - ympärillä kasvoi koko teollisuus, jonka tulokset eivät ole täydellisiä.

Palvelimia vastaan ​​on myös mielenkiintoisia "sivukanavan" hyökkäyksiä. Tutkijat ovat osoittaneet esimerkkejä tietokoneiden virrankulutuksen, melun tai sähkömagneettisen säteilyn käytöstä tietojen, joskus erittäin arkaluontoisten tietojen, kuten salausavainten, poimimiseksi. Muut hyökkäykset ovat hyödyntäneet paljastettuja rajapintoja, kuten langattomia näppäimistöprotokollia. Yleensä nämä hyökkäykset ovat kuitenkin vaikeampia - ne saattavat vaatia esimerkiksi palvelimen läheisyyttä - joten päälinja "langan viereen" tulemiseen on yleisempi.

VM-hyökkäyspinta

Kun virtuaalikoneita käytetään samalla tavalla kuin paljas metalli, ilman eroja sovelluksen arkkitehtuurissa (kuten ne usein ovat), ne jakavat suurimman osan samoista hyökkäyspisteistä. Yksi lisähyökkäyspinta on hypervisorin, käyttöjärjestelmän tai laitteiston mahdollinen vika eristää resurssit oikein virtuaalikoneiden välillä, jolloin virtuaalikone voi jotenkin lukea toisen virtuaalikoneen muistin. VM: n ja hypervisorin välinen rajapinta edustaa myös hyökkäyskohtaa. Jos virtuaalikone voi murtautua läpi ja saada mielivaltaisen koodin käyntiin hypervisorissa, se voi käyttää muita saman järjestelmän virtuaalikoneita. Itse hypervisori edustaa hyökkäyskohtaa, koska se paljastaa hallintaliittymät.

VM-järjestelmän tyypistä riippuen on muita hyökkäyspisteitä. Tyypin 2 virtuaalikonejärjestelmät käyttävät hypervisoria, joka toimii prosessina taustalla olevalla isäntä-käyttöjärjestelmällä. Näitä järjestelmiä voidaan hyökätä hyökkäämällä isäntä-käyttöjärjestelmään. Jos hyökkääjä saa koodin käyntiin isäntäjärjestelmässä, hän voi vaikuttaa hypervisoriin ja virtuaalikoneisiin, varsinkin jos hän voi käyttää sitä etuoikeutettuna käyttäjänä. Koko käyttöjärjestelmän läsnäolo, mukaan lukien apuohjelmat, hallintatyökalut ja mahdollisesti muut palvelut ja aloituskohdat (kuten SSH), tarjoaa useita mahdollisia hyökkäyspisteitä. Tyypin 1 virtuaalikonejärjestelmät, joissa hypervisor toimii suoraan taustalla olevalla laitteistolla, eliminoivat nämä sisääntulopisteet ja on siksi pienempi hyökkäyspinta.

Kontin hyökkäyspinta

Kuten virtuaalikoneiden kohdalla, kontit jakavat paljaiden metallijärjestelmien perustekijät verkkoon. Lisäksi, kuten tyypin 2 virtuaalikoneet, myös "täyteen ladattua" isäntä-käyttöjärjestelmää käyttäviin säilöjärjestelmiin kohdistetaan kaikki samat hyökkäykset, jotka ovat käytettävissä kyseisen isäntä-käyttöjärjestelmän apuohjelmia ja palveluja vastaan. Jos hyökkääjä pääsee käsiksi kyseiseen isäntään, hän voi yrittää päästä käsiksi juokseviin säiliöihin tai muutoin vaikuttaa niihin. Jos hyökkääjä saa etuoikeutetun ("root") pääsyn, hän voi käyttää tai hallita mitä tahansa säilöä. "Minimalistinen" käyttöjärjestelmä (kuten Apceran KurmaOS) voi auttaa vähentämään tätä hyökkäyspintaa, mutta ei voi poistaa sitä kokonaan, koska jonkin verran pääsyä isäntäkäyttöjärjestelmään tarvitaan konttien hallintaan.

Peruskonttien erotusmekanismit (nimitilat) tarjoavat myös mahdollisia hyökkäyspisteitä. Lisäksi kaikki Linux-järjestelmien prosessien näkökohdat eivät ole nimialueita, joten jotkut kohteet jaetaan säilöjen kesken. Nämä ovat hyökkääjien luontevia alueita koetukselle. Lopuksi, prosessi ytimen rajapintaan (järjestelmäkutsuja varten) on suuri ja paljastettu jokaisessa säiliössä, toisin kuin virtuaalikoneen ja hypervisorin välinen paljon pienempi rajapinta. Järjestelmäkutsujen heikkoudet voivat tarjota mahdollisen pääsyn ytimeen. Yksi esimerkki tästä on äskettäin ilmoitettu haavoittuvuus Linux-avainrenkaassa.

Arkkitehtoniset näkökohdat

Sekä virtuaalikoneissa että säiliöissä sovellusarkkitehtuuri ja tekniikan käyttö voivat vaikuttaa hyökkäyspinnan kokoon.

Monet vanhat virtuaalikoneohjelmat käsittelevät virtuaalikoneita kuin paljas metalli. Toisin sanoen he eivät ole mukauttaneet arkkitehtuurejaan nimenomaan virtuaalikoneisiin tai suojausmalleihin, jotka eivät perustu kehän suojaukseen. He saattavat asentaa useita palveluja samaan virtuaalikoneeseen, suorittaa palveluja pääkäyttöoikeuksilla, ja palvelujen välillä on vain vähän tai ei lainkaan suojausvalvontaa. Näiden sovellusten uudelleensuunnittelu (tai todennäköisempi niiden korvaaminen uudemmilla) saattaa käyttää virtuaalikoneita suojauserotuksen tarjoamiseen toiminnallisten yksiköiden välillä eikä pelkästään keinona hallita suurempaa määrää koneita.

Säiliöt soveltuvat hyvin mikropalveluarkkitehtuureihin, jotka "sitovat yhteen" suuren määrän (tyypillisesti) pieniä palveluita standardoituja sovellusliittymiä käyttäen. Tällaisilla palveluilla on usein hyvin lyhyt käyttöikä, jolloin konttipalvelu aloitetaan tilauksesta, vastataan pyyntöön ja tuhotaan tai joissa palvelut nousevat nopeasti ylös ja alas kysynnän perusteella. Tämä käyttötapa riippuu konttien tukemasta nopeasta ilmentymisestä. Turvallisuuden näkökulmasta sillä on sekä etuja että haittoja.

Suurempi palvelumäärä tarkoittaa suurempaa määrää verkkoliitäntöjä ja siten suurempaa hyökkäyspintaa. Se sallii kuitenkin myös enemmän ohjauksia verkkokerroksessa. Esimerkiksi Apcera-alustalla kaiken konttien ja konttien välinen liikenne on nimenomaisesti sallittava. Väärinkäyttösäiliö ei voi mielivaltaisesti päästä mihinkään verkon päätepisteeseen.

Lyhyt kontin käyttöikä tarkoittaa sitä, että jos hyökkääjä pääsee sisään, hänen on tehtävä jotain aikaa, toisin kuin pitkäaikaisen palvelun tarjoama mahdollisuusikkuna. Haittapuoli on, että oikeuslääketiede on vaikeampi. Kun säiliö on kadonnut, sitä ei voida tutkia eikä tutkia haittaohjelman löytämiseksi. Nämä arkkitehtuurit vaikeuttavat myös hyökkääjän asentamista kontti tuhoamisen jälkeen selviytyvien haittaohjelmien asentamiseen, koska hän saattaa paljaalle metallille asentamalla ohjaimen, joka latautuu käynnistykseen. Säilöt ladataan yleensä luotetusta, vain luku -tietovarastosta, ja ne voidaan edelleen suojata salaustarkistuksilla.

Tarkastellaan nyt, mitä tapahtuu rikkomuksen aikana.

Suojaus rikkomuksia vastaan

Hyökkääjillä on yleensä yksi tai kaksi tavoitetta murtautua palvelinjärjestelmään. He haluavat saada tietoja tai vahingoittaa.

Jos he kaipaavat tietoja, he haluavat tunkeutua mahdollisimman moniin järjestelmiin mahdollisimman korkeilla oikeuksilla ja ylläpitää pääsyä niin kauan kuin mahdollista. Tämän saavuttaminen antaa heille aikaa löytää tietoja, jotka saattavat olla jo olemassa - esimerkiksi huonosti suojattu tietokanta - tai saattaa vaatia hidasta keräämistä ajan myötä, kun se tippuu, kuten kerätä tapahtumia, kun ne tulevat käyttäjiltä. Pitkäaikainen käyttöoikeus vaatii salaa. Hyökkäys vaatii myös tapaa saada tiedot ulos.

Jos hyökkääjä yrittää vain vahingoittaa, tavoitteena on jälleen käyttää mahdollisimman monta järjestelmää ja etuoikeutta. Mutta on olemassa tasapainottava toimenpide: Kun vahinko alkaa, se oletettavasti huomataan, mutta mitä kauemmin hyökkääjä odottaa alkamista (kun haittaohjelma suodattaa järjestelmästä toiseen), sitä suurempi mahdollisuus havaita. Tietojen saaminen on vähemmän tärkeää kuin haittaohjelmien koordinoitu hallinta. Ajatuksena on tartuttaa mahdollisimman monta järjestelmää ja sitten vahingoittaa niitä synkronoidussa pisteessä joko ennalta järjestetyllä tai komennolla.

Rikkomuksiin liittyy useita elementtejä. Katsotaan kutakin ja katsotaan, voivatko virtuaalikoneet ja konttiarkkitehtuurit vaikuttaa jokaisen hyökkäyspintaan.

$config[zx-auto] not found$config[zx-overlay] not found