Ochrana paměti - Memory protection

Ochrana paměti je způsob, jak řídit přístupová práva k paměti na počítači, a je součástí většiny moderních architektur instrukčních sad a operačních systémů . Hlavním účelem ochrany paměti je zabránit procesu v přístupu k paměti, která mu nebyla přidělena. Tím se zabrání tomu, aby chyba nebo malware v rámci procesu ovlivňovaly jiné procesy nebo samotný operační systém. Ochrana může zahrnovat všechny přístupy do určené oblasti paměti, přístupy pro zápis nebo pokusy o spuštění obsahu oblasti. Pokus o přístup k neautorizované paměti má za následek hardwarovou poruchu , např. Poruchu segmentace , výjimku narušení úložiště , obecně způsobující abnormální ukončení procesu, který porušuje pravidla. Ochrana paměti pro zabezpečení počítače zahrnuje další techniky, jako je randomizace rozložení adresního prostoru a ochrana spustitelného prostoru .

Metody

Segmentace

Segmentace znamená rozdělení paměti počítače na segmenty. Odkaz na umístění v paměti obsahuje hodnotu, která identifikuje segment a posun v tomto segmentu.

Architektura x86 má více funkcí segmentace, které jsou užitečné pro používání chráněné paměti v této architektuře. Na architektuře x86 lze k odkazu na segmenty v paměti počítače použít tabulku globálního deskriptoru a tabulky lokálního deskriptoru . Ukazatele na paměťové segmenty na procesorech x86 lze také uložit do registrů segmentů procesoru. Zpočátku měly procesory x86 4 segmentové registry, CS (kódový segment), SS (segment zásobníku), DS (datový segment) a ES (další segment); později byly přidány další dva segmentové registry - FS a GS.

Stránkovaná virtuální paměť

Při stránkování je adresní prostor nebo segment paměti rozdělen na bloky stejné velikosti, které se nazývají stránky . Pomocí hardwaru virtuální paměti může každá stránka pobývat na libovolném místě na vhodné hranici fyzické paměti počítače nebo může být označena jako chráněná. Virtuální paměť umožňuje mít lineární adresní prostor virtuální paměti a používat jej k přístupu k blokům fragmentovaným přes adresní prostor fyzické paměti .

Většina počítačových architektur, které podporují stránkování, také používá stránky jako základ pro ochranu paměti.

Tabulka stránek mapuje virtuální paměť na fyzickou paměť. V závislosti na architektuře a operačním systému může existovat jedna tabulka stránek, tabulka stránek pro každý proces, tabulka stránek pro každý segment nebo hierarchie tabulek stránek. Tabulky stránek jsou pro proces obvykle neviditelné. Tabulky stránek usnadňují přidělování další paměti, protože každou novou stránku lze přidělit odkudkoli ve fyzické paměti.

Některé operační systémy nastavují pro každý proces jiný adresní prostor, který poskytuje hranice ochrany pevné paměti. Pro neprivilegovanou aplikaci není možné získat přístup ke stránce, která jí nebyla výslovně přidělena, protože každá adresa paměti buď ukazuje na stránku přidělenou této aplikaci, nebo generuje přerušení zvané chyba stránky . Nepřiřazené stránky a stránky přidělené jakékoli jiné aplikaci nemají z hlediska aplikace žádné adresy.

Chyba stránky nemusí nutně znamenat chybu. Chyby stránky neslouží pouze k ochraně paměti. Operační systém může spravovat tabulku stránek takovým způsobem, že odkaz na stránku, která byla dříve odložena na disk, způsobí poruchu stránky. Operační systém zachytí chybu stránky, načte požadovanou stránku paměti a aplikace pokračuje, jako by nedošlo k žádné chybě. Toto schéma, známé jako virtuální paměť , umožňuje data v paměti, která se aktuálně nepoužívají, přesunout na diskové úložiště a zpět způsobem, který je pro aplikace transparentní, aby se zvýšila celková kapacita paměti.

V některých systémech se mechanismus poruchy stránky používá také pro ochranu spustitelného prostoru, jako je W^X .

Ochranné klíče

Mechanismus klíče ochrany paměti (MPK) rozděluje fyzickou paměť do bloků určité velikosti (např. 4 KiB), z nichž každý má přidruženou číselnou hodnotu nazývanou ochranný klíč. Ke každému procesu je také přiřazena hodnota klíče ochrany. Při přístupu do paměti hardware kontroluje, zda se klíč ochrany aktuálního procesu shoduje s hodnotou spojenou s přístupovým blokem paměti; pokud ne, dojde k výjimce. Tento mechanismus byl představen v architektuře System/360 . Je k dispozici na dnešních sálových počítačích System z a je hojně využíván operačními systémy System z a jejich subsystémy.

Výše popsané ochranné klíče System/360 jsou spojeny s fyzickými adresami. To se liší od mechanismu ochranného klíče používaného architekturami, jako jsou Hewlett-Packard / Intel IA-64 a Hewlett-Packard PA-RISC , které jsou spojeny s virtuálními adresami a které umožňují více klíčů na proces.

V architekturách Itanium a PA-RISC mají překlady ( položky TLB ) přiřazeny klíče (Itanium) nebo přístupová ID (PA-RISC). Běžící proces má několik registrů klíčů ochrany (16 pro Itanium, 4 pro PA-RISC). Překlad vybraný virtuální adresou má svůj klíč ve srovnání s každým z registrů ochranných klíčů. Pokud se některý z nich shoduje (plus další možné kontroly), přístup je povolen. Pokud se žádná neshoduje, je generována chyba nebo výjimka. Obslužný program softwarových chyb může v případě potřeby zkontrolovat chybějící klíč na větším seznamu klíčů spravovaných softwarem; registry ochranných klíčů uvnitř procesoru tedy mohou být považovány za softwarově spravovanou mezipaměť většího seznamu klíčů spojených s procesem.

PA-RISC má 15–18 bitů klíče; Itanium nařizuje minimálně 18. Klíče jsou obvykle spojeny s ochrannými doménami , jako jsou knihovny, moduly atd.

V x86 architektura ochranných klíčů umožňuje označovat virtuální adresy pro uživatelské stránky kterýmkoli ze 16 ochranných klíčů. Všechny stránky označené stejným ochranným klíčem tvoří ochrannou doménu. Nový registr obsahuje oprávnění spojená s každou z domén ochrany. Operace načítání a ukládání jsou kontrolovány na základě oprávnění k tabulce stránek i oprávnění ochranných klíčů spojených s doménou ochrany virtuální adresy a jsou povolena pouze v případě, že obě oprávnění umožňují přístup. Oprávnění ochranných klíčů lze nastavit z uživatelského prostoru, což umožňuje aplikacím přímo omezit přístup k datům aplikace bez zásahu operačního systému. Vzhledem k tomu, že ochranné klíče jsou spojeny s virtuální adresou, jsou ochranné domény na adresní prostor, takže procesy běžící v různých adresních prostorech mohou každý použít všech 16 domén.

Ochranné kroužky

V Multics a systémech z něj odvozených má každý segment ochranný prstenec pro čtení, zápis a provádění; pokus o proces s vyšším číslem vyzvánění, než má počet prstenů pro segment, způsobí poruchu. Existuje mechanismus pro bezpečné volání procedur, které běží v nižším kruhu a vrací se do vyššího kruhu. Existují mechanismy pro rutinní běh s nízkým číslem vyzvánění pro přístup k parametru s větším z jeho vlastního vyzvánění a prstenu volajícího.

Simulovaná segmentace

Simulace je použití monitorovacího programu k interpretaci instrukcí strojového kódu některých počítačových architektur. Takový simulátor sady instrukcí může poskytovat ochranu paměti pomocí schématu podobného segmentaci a ověřováním cílové adresy a délky každé instrukce v reálném čase před jejich skutečným provedením. Simulátor musí vypočítat cílovou adresu a délku a porovnat to se seznamem platných rozsahů adres, které uchovává v souvislosti s prostředím vlákna , jako jsou například všechny bloky dynamické paměti získané od počátku vlákna, plus jakékoli platné sloty sdílené statické paměti. Význam „platného“ se může během života vlákna měnit v závislosti na kontextu. Někdy může být povoleno změnit statický blok úložiště, a někdy ne, v závislosti na aktuálním režimu provádění, což může, ale nemusí záviset na klíči úložiště nebo stavu správce.

Obecně není vhodné používat tento způsob ochrany paměti tam, kde na CPU existuje odpovídající zařízení, protože to vyžaduje cenný výpočetní výkon z počítače. Obecně se však používá pro účely ladění a testování k poskytnutí extra jemné úrovně zrnitosti k jinak obecným porušením úložiště a může přesně naznačovat, která instrukce se pokouší přepsat konkrétní část úložiště, která může mít stejný klíč úložiště jako nechráněné úložiště.

Adresování založené na schopnostech

Adresování založené na schopnostech je metoda ochrany paměti, která se v moderních komerčních počítačích nepoužívá. V této metodě jsou ukazatele nahrazeny chráněnými objekty (nazývanými schopnosti ), které lze vytvořit pouze pomocí privilegovaných instrukcí, které může provádět pouze jádro nebo jiný proces k tomu oprávněný. To efektivně umožňuje jádru řídit, které procesy mohou přistupovat ke kterým objektům v paměti, aniž by bylo nutné používat oddělené adresní prostory nebo kontextové přepínače . Zabezpečení založené na schopnostech používalo jen několik komerčních produktů: Plessey System 250 , IBM System/38 , architektura Intel iAPX 432 a KeyKOS . Přístupy ke schopnostem jsou široce používány ve výzkumných systémech, jako je EROS a Combex DARPA prohlížeč. Používají se koncepčně jako základ pro některé virtuální stroje , zejména Smalltalk a Java . V současné době projekt CHERI financovaný z DARPA na University of Cambridge pracuje na vytvoření moderního strojního zařízení, které také podporuje starší software.

Dynamické barvení

Dynamic tainting je technika pro ochranu programů před nelegálním přístupem do paměti. Když je alokována paměť, za běhu tato technika zablokuje paměť a odpovídající ukazatel pomocí stejné značky nakažení. Znečištěné značky jsou poté vhodně šířeny během provádění programu a jsou kontrolovány pokaždé, když je adresa paměti m přístupná přes ukazatel p ; liší -li se značky nákazy asociované s m a p , provádění se zastaví a je nahlášen nelegální přístup.

Procesory SPARC M7 (a vyšší) implementují dynamické barvení v hardwaru. Společnost Oracle uvádí tuto funkci na trh jako Silicon Secured Memory (SSM) (dříve označovaná jako Application Data Integrity (ADI)).

LowRISC Design CPU zahrnuje dynamickou tainting pod názvem Tagged paměti.

Opatření

Úroveň ochrany konkrétní implementace lze měřit podle toho, jak úzce dodržuje zásadu minimálních oprávnění .

Ochrana paměti v různých operačních systémech

Různé operační systémy používají různé formy ochrany nebo oddělení paměti. Ačkoli ochrana paměti byla běžná na většině sálových počítačů a mnoha minipočítačových systémech od 60. let minulého století, skutečné oddělení paměti nebylo v operačních systémech domácích počítačů používáno, dokud nebyl v roce 1987 vydán OS/2 (a v RISC OS ). Na dřívějších systémech takový nedostatek ochrany byl dokonce použit jako forma meziprocesové komunikace odesláním ukazatele mezi procesy. Procesy mohou přistupovat k systémové paměti v řadě operačních systémů Windows 9x .

Některé operační systémy, které implementují ochranu paměti, zahrnují:

Na Unix-like systémech, mprotect systémové volání se používá k ochraně řídicí paměti.

Viz také

Reference

Poznámky

externí odkazy

  • Intel Developer Manuals  -podrobné informace o ochraně paměti pro architektury založené na procesorech Intel