"Čudežna" modra tabletka
O tem, da je virtualizacija velik hit, čivkajo že vrabci na strehi. Prednosti "navideznih okolij" so odkrili tako domači uporabniki kakor tudi podjetja in seveda hekerji. Razvoj jedrnih kompletov (rootkit) namreč kaže, da so virtualni kompleti (VMBR, Virtual Machine Based Rootkit) oz. njihova izpeljanka, kompleti HVM (Hardware-assisted Virtual Machine), naslednja velika prelomnica v razvoju zlonamerne kode.
Virtualizacija je, povedano preprosto, večje število navidezno samostojnih "računalnikov", ki delujejo na skupni strojni opremi. Njen hitri razvoj je v zadnjih letih omogočil prodor posebne programske opreme (MS Virtual PC, VMware Workstation, Xen, MS Virtual Server ...), ki lahko na enem fizičnem računalniku ustvari več navideznih in v programskem delu povsem neodvisnih in samostojnih navideznih okolij. Virtualizacijo lahko izvajamo na več načinov, pri vseh pa ima pomembno vlogo nadzornik navideznih strojev (VMM, Virtual Machine Monitor). Ta sicer lahko operira na različnih ravneh, njegova naloga pa je venomer enaka: razdeljevanje sistemskih virov med virtualnimi okolji.
Programska virtualizacija obsega različne tehnike, ki omogočajo varno izvajanje izoliranega okolja v gostiteljevem sistemu. Različni pristopi omogočajo različne stopnje skalabilnosti (dodajanja novih komponent) in zmogljivosti, predvsem pa število podprtih operacijskih sistemov s katerimi lahko nadzornik navideznih strojev operira. Oglejmo si na kratko nekatere izmed (naj)bolj priljubljenih metod programske izvedbe navideznih okolij ...
Pri popolni virtualizaciji (full virtualization) VMM ustvari popolno navidezno okolje, z (virtualno) strojno opremo vred. Programska oprema torej posnema delovanje strojne opreme. Proces je sicer bolj znan kot abstrakcija strojne opreme (hardware abstraction). Gostujoči operacijski sistem se tako lahko izvaja v navideznem okolju brez vsakršnih modifikacij. Največja prednost popolne virtualizacije je nedvomno prilagodljivost (na primer, gostujoči sistem RISC, ki se izvaja na gostitelju x86), negativna stran pa nekoliko slabša odzivnost zaradi zakasnitve (latency), saj abstrakcija strojne opreme ter binarno prevajanje (binary translation) odščipneta precej procesorskega časa. Popolno virtualizacijo npr. izvajata priljubljena programska paketa MS Virtual PC ter VMware Workstation.
Paravirtualizacija je nastala kot alternativa binarnemu prevajanju ukazov CPU navideznega stroja. Gostujoči operacijski sistem v tem primeru potrebuje določene modifikacije jedra, da lahko tako komunicira z virtualnim nadzornikom prek hiperklicev (hypercalls). Xen, VMware (GSX) Server in MS Virtual Server so tipični predstavniki takega pristopa. Paravirtualizacija precej izboljšuje potratno in počasno binarno prevajanje. Hiperklici, te si lahko predstavljamo kot nekakšne programske prekinitve (software interrupts), namreč omogočajo bistveno učinkovitejše in hitrejše prevajanje problematičnih ukazov x86. Prek hiperklicev pa ima gostujoči sistem tudi neposreden dostop do strojne opreme. Abstrakcija strojne opreme je torej odveč.
Pri virtualizaciji na ravni OS gre dejansko za nizkonivojsko programsko izolacijo različnih procesov in particij posameznih navideznih okolij (v tem primeru pogosto imenovanih jails ali zones), ki se izvajajo znotraj operacijskega sistema. Najbolj znani predstavniki omenjene kategorije so, med drugim, FreeBSD Jails ter Solaris Containers. Tako obliko virtualizacije mnogi imenujejo tudi SKI (Single Kernel Image).
VMM, temelj vsega
Kakor smo že omenili, je osnova virtualizacije VMM. To je proces, ki razdeljuje sistemske vire med navidezne naprave in preklaplja delovanje med virtualnimi okolji. Vsi gostujoči virtualni sistemi se namreč izvajajo v enotnem procesu, vsaka izmed virtualnih CPU enot se izvaja v ločeni niti (thread), vsa programska koda posamezne virtualne postaje pa se izvaja v ločenem kontekstu VMM. Za pravilno in usklajeno delovanje poskrbi VMM. Tu pa se vse skupaj precej zaplete. Večina uporabnikov, pa tudi samih izdelovalcev, namreč (napak) enači t. i. "hypervisor" in VMM. Pogostokrat sicer res govorimo o isti stvari, vendar ne vedno.
Poznamo namreč dve vrsti (no, prav, tri za natančneže) nadzornikov navideznih strojev, ločimo jih glede na obroč CPU, v katerem operirajo: tip 1 (ring -1 VMM) in tip 2 (ring 0 VMM). No, omenimo še tretji, sicer redkeje uporabljen hibridni VMM, nekakšno modifikacijo različice tipa 2. Tipični predstavnik VMM tipa 2 bi lahko bila VMware (GSX) Server in MS Virtual Server, pa tudi Java VM. O "pravem" nadupravitelju dejansko govorimo le v primeru VMM tipa 1. Nadzornik navideznih strojev namreč v tem primeru deluje celo obroč niže kakor samo jedro, je torej nekakšen mikrokernel, ki se izvaja dobesedno na strojni opremi. Strokovnjaki so nemudoma skovali izraz, ki slikovito opiše raven delovanja nadupravitelja: ring -1 (obroč minus 1). Hipervizor tako popolnoma upraviči svoj laskavi naziv. Z vidika pristojnosti je pomembnejši celo od samega jedra, torej supervizorja oz. superupravitelja. Če torej povzamemo, VMM je tudi hypervisor, vendar le, ko se izvaja v ring -1, to pa je možno le ob pomoči strojno podprte virtualizacije (hardware-assisted virtualization).
Nujni ovinki
Razvijalci programske opreme za navidezna okolja so že na samem začetku naleteli na precej trd oreh. Arhitektura x86 namreč ne podpira popolne virtualizacije. Posledično je nekatere procesorske ukaze arhitekture x86 (kritičnih ukazov je natančno 17) nemogoče, ali vsaj izredno težko, "virtualizirati", ne da bi povzročili sesutje sistema ali samega programa. Razvijalci so omenjeno težavo (vsaj delno) odpravili tako, da VMM preprosto "lovi" (trap) problematične ukaze gostujočega sistema in jih ustrezno modificira v ustrezne "varne" ukaze, ki ne povzročajo težav. Metoda je sicer znana kot binary translation. Elegantnejša, predvsem pa veliko hitrejša izvedenka te metode (če izvzamemo hiperklice) je t. i. ring compression, ki omogoča, da se gostujoči sistem izvaja v nekoliko deprivilegiranem obroču ring 1. VMM se v tem primeru seveda izvaja v ring 0. Prestrezanje je tako veliko učinkovitejše, posledično pa tudi sam proces prevajanja in izvajanja ukazov. Slednje najlaže opazimo, ko v MS Virtual PC namestimo navidezne dodatke (VM additions), ki modificirajo operacijski sistem, da lahko uporablja obroč ring 1. Pred namestitvijo navideznih dodatkov se virtualizacija privilegiranih ukazov izvaja največ prek binarnega prevajanja, po namestitvi pa prek hitrejše, čeprav ne vedno izvedljive metode "direct-mode execution", torej neposredno na procesorju.
Strojna podpora
Seveda ima vsakršno spreminjanje in prevajanje svojo ceno. Ta se kaže predvsem v nekoliko počasnejšem odzivu in zakasnitvah navidezne naprave. Težavo sta se Intel in AMD odločila odpraviti s t. i. strojno podprto virtualizacijo. Oba izdelovalca svojim novejšim modelom procesorjev dodala nekaj novih ukazov oz. "navideznih podaljškov" (CPU virtualization extensions) in tako precej olajšala delo razvijalcem programske opreme za virtualna okolja.
Intelova tehnologija je znana kot Intel Virtualization Technology (IVT) z razvojnim imenom "Vanderpool". 32-bitna različica je označena kot VT-x, 64-bitna pa VT-i. AMDjeva tehnologija je znana kot AMD Virtualization (AMD-V) oz. AMD SVM (Secure Virtual Machine extensions), z razvojnim imenom "Pacifica". Pri strojno podprti virtualizaciji igrata pomembno vlogo nadzorni strukturi VMCS (Virtual Machine Control Structure - Intel) in VMCB (Virtual Machine Control Block - AMD), ki vsebujeta seznam ukazov in izjem, ki jih mora VMM prestreči. Konkretno je Intel procesorjem dodal deset novih ukazov, AMD pa osem. Tehnologiji med seboj sicer nista združljivi, vendar ju druži enaka funkcionalnost. Obe namreč omogočata izvajanje upravitelja navideznih strojev v obroču ring -1. Gostujoči OS se tako lahko izvaja popolnoma nespremenjen in s polno hitrostjo. Uporaba načinov "ring compression" ali "binary translation" je pri strojno podprti virtualizaciji v celoti izključena oziroma nepotrebna. Prednosti tega pristopa izkorišča veliko programov: Virtual PC 2007, MS Virtual Server, VMware workstation 5.5 in več, Xen 3.0.2 in več, itd.
Omenili smo že, da ima pri takem načinu virtualizacije nadupravitelj izjemna pooblastila. To, da bi bilo odkrivanje zlonamerne kode s takimi pooblastili izjemo težavno, ni nobeno posebno odkritje. Razlog več, da se jih zlonamerneži lotevajo pisati. Oglejmo si torej hipervizorske korenske komplete (hypervisor rootkits oz. HVM rootkits).
O korenskih kompletih in arhitekturi x86 smo že pisali (Monitor 3/2007), strojno podprto virtualizacijo pa smo podrobneje opisali septembra (Monitor 9/2006).
Virtualni korenski kompleti
Virtualni korenski kompleti delujejo po načelu spremembe zagonske procedure operacijskega sistema in se tako v bistvu "naložijo" pred samim operacijskim sistemom, ki s tem dejansko postane gostujoči sistem. Kot zanimivost, enega izmed virtualnih korenskih kompletov, znanega pod imenom SubVirt, so razvili v Microsoftovih laboratorijih. Seveda pa program ni javno dostopen.
Kompleti HVM so razvoj popeljali še stopnjo niže. Dobesedno. Trenutno sta znana dva korenska kompleta, ki izkoriščata funkcionalnost strojno podprte virtualizacije oz. navideznih podaljškov. To sta Vitriol; MacOS X komplet za Intel VT-x tehnologijo ter Blue Pill; Windows Vista x64 komplet za tehnologijo AMD-V. Slednji je nedvomno veliko bolj znan, predvsem zato, ker je njegova razvijalka (poljska računalniško-varnostna strokovnjakinja Joanna Rutkowska) izjavila, da je Blue Pill nemogoče odkriti. Podobne izjave pa so, tradicionalno, bojni klic hekerjem vsega sveta, da dokažejo nasprotno, in to jim nemalokrat tudi uspe. Kakorkoli, hekerji so Joanno javno izzvali na dvoboj, ki naj bi se zgodil na letošnji konferenci BlackHat USA. Zatrdili so, da so vedno na voljo načini, kako odkriti izvajanje modre tabletke. Joanna je seveda trdila, da lahko razvije različico Blue Pill, ki je ne bo moč odkriti, vendar je za svojo udeležbo v dvoboju zahtevala 416 tisoč dolarjev. Epilog: soočenje je splavalo po vodi in Blue Pill v sedanji obliki je moč odkriti.
Največja prednost "modre tabletke" je nedvomno to, da ne zahteva nikakršne modifikacije zagonske procedure, biosa ali sistemskih datotek. Za razliko od SubVirt tudi ne zahteva predhodne namestitve katerega izmed komercialnih programskih paketov za navidezna okolja (SubVirt namreč deluje le ob predhodni namestitvi Virtual PC ali VMware). Zelo posplošeno je celoten postopek kompromitacije sistema z Blue Pill videti takole: tabletka začne svojo pot v ring 0 kot jedrni modul. Da, so načini, kako lahko neverificiran jedrni modul zaobide t. i. "kernel-patch protection" (PatchGuard) v Vista x64. Hroščati gonilniki certificiranih izdelovalcev (spomnimo se težav, ki jih je Vista imela z gonilniki ATI/nVIDIA) so le ena izmed vstopnic v obljubljeno deželo. Tako pretihotapljen modul preveri, ali procesor premore ukaze AMD SVM, preklopi vrednost nadzornega bita EFER.SVME v registru MSR EFER na 1 in tako omogoči uporabo ukazov SVM, najde del neostranjenega fizičnega pomnilnika (non-paged physical memory) za nadzorno strukturo VMCB (glej zgoraj), najde del neostranjenega jedrnega pomnilnika (non-paged kernel memory), vanj naloži VMM, preda nadzor hipervizorju in se deaktivira. Nato VMM izvede ukaz VMRUN (tega lahko prevedemo kot "preklopi delovanje CPU v navidezni način"), ki se izvaja, dokler ne nastopi pogoj VMEXIT. Blue Pill nadupravitelj seveda poskrbi, da se to ne zgodi nikoli. Rezultat: gostitelj postane gost. Ali z besedami avtorice: "Blue Pill je način, kako lahko gostiteljski operacijski sistem spravimo v Matrico."
Grafični prikaz delovanja Blue Pill (poenostavljeno)
Vendar je, kakor vedno, tudi tu zanka. Program še zdaleč ni tako popoln, kot je videti na prvi pogled. Tabletka ima namreč kar nekaj šibkih točk: ni permanentna in torej "ne preživi" vnovičnega zagona; na sistemu se lahko izvaja zgolj in samo en nad-upravitelj. Če se na sistemu že izvaja legitimni VMM, se Blue Pill torej ne more naložiti. Četudi procesor podpira izvajanje ukazov VM, mora biti (in ponavadi privzeto tudi je) strojno podprta virtualizacija dodatno omogočena (v BIOSu). Tabletka, vsaj trenutno, deluje zgolj na 64-bitni Visti z novejšimi AMDjevimi procesorji, to pa lahko mirne duše vzamemo z rezervo. Izvorna koda Blue Pill je namreč javno dostopna, tako da lahko v prihodnosti, po vsej verjetnosti, pričakujemo različne modifikacije in hibride originala. Tudi za druge operacijske sisteme in Intelove procesorje. Na spletni strani projekta tudi Joanna sama priznava kar nekaj pomanjkljivosti: sesutje operacijskega sistema (moder zaslon) kot posledico hrošča v algoritmu Blue Chicken (glej spodaj); sleparski ukaz RDTSC v Blue Pill uporablja preveč preprosto posnemanje; stalno "sesuvanje" določenih programov ... Verjetno je odveč omenjati, da moramo, kakor pri vseh korenskih kompletih, tudi pred namestitvijo Blue Pill imeti skrbniške privilegije.
Kaj pa zaznavanje? Ali je modro tabletko mogoče odkriti? Kakor smo že omenili, Blue Pill je seveda mogoče odkriti, in to celo na več načinov. Zaznavanje največkrat temelji na t. i. "časovnih napadih" (timing attacks) oz. merjenju odzivnega časa oz. števila ciklov, ki so potrebni, da se izvede določen ukaz. Nekateri ukazi potrebujejo nekaj več procesorskih ciklov, če se izvajajo iz virtualnega okolja. Čeprav je odstopanje dejansko zanemarljivo, pa popolnoma zadostuje za uspešno odkrivanje. Omenjeni pristop se je tudi v preteklosti veliko uporabljal za odkrivanje, ali se program izvaja v virtualnem ali realnem okolju. Celo Joanna Rutkowska sama je pred časom razvila program, ki počne ravno to. Orodje je sicer znano kakor Red Pill (vsaka asociacija s kultnim filmom "Matrica" je zgolj namerna). Raziskovalci iz družbe "Matasano Security" so npr. razvili program, imenovan "Samsara", ki po trditvah avtorjev uspešno odkriva vse znane komplete VMBR/HVM, tudi BluePill. "Matasano Security" sicer zaposluje priznane strokovnjake, ki so bili tudi pobudniki že omenjenega izziva. Čeprav je bil program predstavljen na konferenci BlackHat USA 2007, pa izvorna koda trenutno še ni javno dostopna. Joanna je kmalu spregledala, da zadeva postaja kritična, zato je nemudoma izdala varnostni dodatek za Blue Pill, imenovan Blue Chicken, ki ob zaznavi več zaporedno izvedenih ukazov, ki se uporabljajo v takih časovnih "napadih", delovanje hipervizorja preklopi v t. i. začasno hibernacijo oz. način "chicken mode". Z drugimi besedami, modra tabletka za nekaj milisekund obmiruje. Z izdajo omenjenega dodatka je Joanna, po tihem seveda, priznala, da je Blue Pill mogoče odkriti. Igra mačke in miši bi lahko trajala v nedogled, vendar se je Joanna raje odločila, da izvorno kodo javno objavi, z upanjem, da ji bo svetovna programerska skupnost pomagala pri razvoju idealnega HVM korenskega kompleta. Morda se ji nasmiha sreča, saj je izdelovalec biosov Phoenix pokazal zanimanje za nadaljnji razvoj projekta Blue Pill v zameno za njeno strokovno pomoč pri izvedbi novega hipervizorja HyperCore, ki ga razvija podjetje.
Čeprav Blue Pill še zdaleč ni popoln, predstavlja nov in pomemben mejnik v razvoju virtualnih kompletov. Drži, kompleti HVM trenutno ne predstavljajo realne grožnje končnim uporabnikom, saj nobeden še ni prešel "laboratorijskih okvirov". Po informacijah sodeč, pa programerji že razvijajo t. i. gnezdene (nested) komplete HVM, torej hipervizor znotraj hipervizorja. Vsekakor bo še zanimivo ... Nedvomno imajo hipervizorski kompleti neznanski potencial. Kako tudi ne, le kdo bi lahko "premagal" obroč -1 ...
Zanimive povezave:
invisiblethings.org
www.bluepillproject.org