Rød pille

Red Pill  er en implementering af en form for virtualiseringsdetektionsmetode implementeret af Blue Pill -programmet . Red Pill er baseret på x86 -opkaldshåndteringssporing . Begge programmer (både Blue Pill og Red Pill) er udviklet af Joanna Rutkowska .

Navnet "Red Pill" er en reference til en scene i filmen The Matrix , hvor hovedpersonen tilbydes et udvalg af røde og blå piller . Valget af den røde pille giver helten mulighed for at indse virtualiteten i sin velkendte verden og komme ind i den virkelige verden. På samme måde gør brugen af ​​Red Pill det muligt for operativsystemet at detektere brugen af ​​en hypervisor , det vil sige at detektere virtualisering. Dette giver både systemadministratoren og operativsystemet mulighed for at træffe passende handlinger, såsom at blokere hypervisoren eller tage kontrol over den. Det er her parallellen med filmen drages, og Blue Pill , til gengæld antyder brugen af ​​den blå pille, som følge af, at styresystemet ikke forstår, at der bliver brugt virtualisering og vurderer, at arbejdet kommer naturligt. til det.

Mekanisme

x86-arkitekturen bruger pointere til allokeret hukommelse. Hukommelsen er typisk organiseret som en tabel over hukommelsesadresser med adresser og forskydninger, hvor ældre poster har en mindre forskydning fra basisadressen.

Operativsystemet skal have adgang til den såkaldte interrupt vektor-tabel for at kunne fungere . Fra og med 80286-processoren gemmes den fysiske hukommelsesadresse for denne tabel i 48 - bit IDTR- registeret .

Da registret (Interrupt Descriptor Table Register, forkortelse IDTR ) er under kontrol af operativsystemet, oprettes en alternativ tabel, som hypervisoren arbejder med. Denne nye tabel tildeles en separat hukommelsesplacering på en højere adresse end den oprindelige tabel, og denne højere adresse skrives til IDTR . Rutkowska fandt, at en IDTR -adresse med en høj byte større end 208 (eller D0 i hexadecimal) indikerede, at IDTR var blevet overskrevet med en højere adresse for interrupt-tabellen, det vil sige ved at sammenligne værdien af ​​den høje byte af IDTR-markøren med D0 kunne man konkludere, at hypervisor var til stede. Pointerværdien fra IDTR blev læst ved hjælp af SIDT- kommandoen .

Rutkowska-koden for denne kontrol så således ud:

int swallow_redpill() { usigneret tegn m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3"; *((usigneret*)&rpill[3]) = (usigneret)m; ((void(*)())&rpill)(); retur (m[5]>0xd0) ? ti; }

Værdien \x0f\x01\x0d\x00\x00\x00\x00 er en SIDT- kommando , som har formatet 0F010D<adresse>, \xc3er en RETN-kommando. Resultatet af at udføre kommandoen er at skrive pointerværdien fra IDTR til den angivne adresse . Et interessant træk ved denne kommando er, at den kan kaldes med ikke-privilegeret klientkode (3. beskyttelsesring ).

I princippet fungerede denne tilgang godt på systemer med én processor, men Rutkowska mente, at den også kunne bruges til systemer med flere processorer eller kerner, hvor der er behov for mere komplekse kontroller, ved at kontrollere de relevante sammenhænge.

Ulemper

Desværre havde programmets funktionalitet alvorlige begrænsninger, så programmet var mere en demonstration af de bagvedliggende ideer end fuldgyldig software. Dette var en af ​​grundene til, at udviklingen af ​​programmet blev indstillet.

Betydning

Efter udgivelsen af ​​programmet fulgte en del kritik, og ganske berettiget. Men på samme tid vakte programmet interesse hos specialister. Efter at Joanna stoppede med at støtte programmet, blev selve idéen med programmet brugt i andre projekter udviklet af andre forskere.

Links