Kohustustest loobumine: ma lähen suhteliselt kõrgel tasemel arusaamisele. Kui soovite üksikasjalikku juhendit, ei kuulu see reguleerimisalasse. Lisaks on virtuaalmasinate juurutamiseks muid võimalusi (täielikult tarkvaraliselt), millele see ei kehti. Samuti keskendun "väljamurdmisele" ainult virtualiseerimismehhanismide kaudu - st mitte nendele, mis võivad juhtuda arvutite vahel tegelike võrguhaldurite kaudu.
Mulle meeldivad detailid, nii et siin me minge koos. Esiteks on koodiprojektil mõned suurepärased viited komplekteerijatele x86 protsessori erinevatele režiimidele (reaalne, kaitstud ja pikk) ja virtualiseerimise kasutamisele. Seal on Inteli VT ajaveeb (ma pole kindel, kas Intel seda kirjutas) ja lõpuks on Rootkit Arsenali esimene osa pühendatud x86 selgitamisele ja on suurepärane lugemine. koos ülevaadete ja kena skeemidega. Selle kõigest aru saamine nõuab kannatlikkust, seega annan siin väga lühikese sissejuhatuse selle toimimiseks.
Kuidas me DOS-i käivitades raputasime
DOS-i ja varajase 16-bitise reaalrežiimi süsteemid töötavad segmenteeritud mälumudeliga. Segmentide suuruse üle puudub kontroll ja ühelgi neist segmentidest pole kaitselülitit. Kood laaditakse mälu segmenti ja see töötab; see võib kaugele hüpata teistesse segmentidesse, nii et mis tahes kood, ükskõik kus, võib muuta midagi, sealhulgas luua TSR-koodi (lõpetada ja jääda residendiks) koodijupi, mis osutab lihtsalt ühele IVT-kirjetest (katkestusvektoritabel) oma ruumis olevale aadressile, enne originaali täitmist. Põhimõtteliselt pole kaitset. Puudub. Nada.
32-bitise kaitstud režiimi tõus
Kaitstud režiim muutub kiiresti keerukaks. Sellel on kolm osa - segmentimine, lehitsemine ja PAE. Igaüks nõuab andmetabelit, mis räägib protsessorile selle segmendi, lehe kohta või aitab laiendada aadressiruumi (PAE). Nende hulka kuuluvad kuulsad helilipud (need kehtivad segmentide ja lehtede kohta), mis rakendavad protsessi isoleerimist. Lehekülgede otsimine on viis, kuidas laadida andmeid RAM-ist välja ja kettale ning luua uhkeid asju nagu virtuaalne mälu (vaadake sõna virtuaalne! Me jõuame sinna!)
Pikk režiim
Pikk režiim loob segmenteerimisest ja lihtsalt kohustab PAE / Paging struktuure. Jällegi, et OS-i rakendamine oleks täiesti triviaalne, juhivad Paging mälus olevad struktuurid, mis seejärel seadistatakse spetsiaalsete juhiste abil. Voila, protsesside isolatsiooni saab saavutada õigete seadistustega. Jällegi trivialiseerin veidi ...
Andke mulle virtualiseerimine!
Olgu. Virtualisatsioon on sama üldmõiste . Virtuaalmasinad seadistatakse virtuaalmasina juhtimisstruktuuride abil, mis dikteerivad, kuidas nende mälu kaardistatakse tagasi füüsilisse mällu, suht nagu lehitsemine . Oluline on, et teatud tingimustel peab virtuaalmasin hostilt opsüsteemilt midagi küsima, nagu protsesside eraldamine, nagu tarkvara katkestamine . Need viitavad VM-i väljumistele ja pakuvad hostile teavet, näiteks registrite olek väljumisel. Kinda nagu süsteemikõne .
Kas mõni pahavara võib virtuaalmasinast välja murda?
Nii nagu mis puutub VM-i, siis host-OS-il on kogu oma mäluruum ja see võib nakatuda / kahjustuda / hävitada vastavalt oma soovile.
Mis puutub hostimälu otsesesse mõjutamisse, siis virtuaalne masin seda ei näe, sest ta ei näe seda. Host peab kaardistama vajaliku mälu virtuaalmasinaruumi. Samuti peab ta selles mäluruumis rakendama kõike alates BIOS-ist. Teatud ülesannete jaoks teatud hostiseadmetega suhtlemiseks peab hostimasin seadistama need VM-i väljumistingimused ja siht-VM need käivitama. Kui see juhtub, viiakse kontroll hostile üle.
Seetõttu on kaks võimalikku riskipiirkonda:
- toimingud, mida host võtab vastuseks VM-ile väljumine. Kui selles käitluses on vigu, võib olla võimalik veenda hostit käivitama midagi, mida ta ei peaks.
- Igasugune host juurdepääs külalismasina mäluruumile. Pidage meeles, et ringis 0 töötav hostimasina kood võib valsi sisse lükata ja partei kokku lüüa, kui see nii meeldib. Nii juhtub, et saate külalise mälu seada külaliselt (üllatuslikult).
See viib teid oma ärakasutamise mehhanismi juurde. VM-i väljumisrutiinis on vaja viga, seejärel peate suutma veenda seda koodi mõne mälu käivitamiseks, ideaaljuhul kood, mille sisestasite lihtsalt külalise vm-i lehele. Kui see on tehtud, öelge Kansasele.
Nagu Tom Leek ütleb, on VM-id kahvlipommide eest kaitsmisel uskumatult tõhusad. Sarnaselt sellele, kuidas operatsioonisüsteem saab piirata, kui palju mälu protsess eraldab, nii et see võib piirata ka seda, kui palju mälu on VM-iga kaardistatud. Otsas ja külaline OS usub, et see on füüsilisest mälust otsas; host ei eralda seda rohkem kui te ei kasuta selleks VM-i väljumist, mis oleks natuke ohtlik ja ma ei usu, et seda tehakse.
Kuidas tõenäoliselt on see?
Mitte eriti. See sõltub täielikult nendest VM-i väljundrakendustest või hostis oleva külalise mälu lugemisest, kus teie lugemiskoodis on kena viga. Samuti nõuab see, et nimetatud viga võimaldaks teil krahhi juhtida nii, et saaksite sundida käivitamist teie hostil olevale mäluaadressile. VM-i väljund peab sellele mälule juurde pääsema.
Mida ma pole käsitlenud?
- Rünnakud olemasolevatele tarkvara korstnatele, näiteks TCPIP. Haavatavused on siin samad, kui teil oleks nagunii kaks tegelikku füsikalist arvutit.
- Tarkvaraga on täielikult virtualiseeritud.
- virtualiseerimine mis tahes muud tüüpi kiipidel. See kehtib Inteli VT-ga ühilduvate seadistuste kohta.
Lõpuks olen varem väitnud, et protsessi eraldamine on liivakasti vorm. Seda ja seda vastust lugedes peaksite nüüd saama aru, miks ma neid nii defineerin. Protsessiisolatsiooni ja virtuaalsete masinate vahel on x86-s märkimisväärseid sarnasusi.
Uuenda
Niisiis olen sellest veelgi rohkem uurinud, eriti siniste pillide uurimine. See, mida ma kirjeldasin, on väga lihtsustatud kõrgel tasemel vaade. Olen leidnud rohkem üksikasju. Siin on nähtamatute asjade labori kogu sellele pühendatud paber. Selgub, et nende kaitsemehhanismide jutt hõlmas kontseptsiooni keelata kasutajarežiimi lehtedele juurdepääsu sooritamine helinast 0, takistades seeläbi virtuaalse masina mällu paigutatud andmete otsest käivitamist. Selgub, et seda rakendatakse Inteli protsessorites ja Linuxi kernelis on praegu plaastreid. Niisiis, olenevalt sellest, kuidas see läheb, võib juhtuda, et seda laadi rünnakud muutuvad palju raskemaks, isegi kui ekspluateerimine on olemas.