Virtuális memóriakezelés Védelem
Memória védelem Intel x68
Izsó Tamás
2013. október 18.
Izsó Tamás
Memória védelem/ 1
Virtuális memóriakezelés Védelem
Section 1 Virtuális memóriakezelés
Izsó Tamás
Memória védelem/ 2
Virtuális memóriakezelés Védelem
Operációs rendszer hardver szintu˝ támogatása Hardver szinten támogatott operációs rendszer feladatok: memória kezelés; szoftver modul védelem; multitaszk szervezés; kivételkezelés és interrupt hívás; multiprocesszoros (több magos processzorok) kezelés; gyorsítótár alkalmazás; ˝ ˝ hardver eroforrások és tápfeszültség ellenorzése; program futásának a nyomkövetése és teljesítményfigyelés.
Izsó Tamás
Memória védelem/ 3
Virtuális memóriakezelés Védelem
Windows memória kiosztás FFFFFFFF
Windows OS Supervisor terület 80000000 7FFFF000
Processz 3. Processz 2. Processz 1. User terület User terület User terület
00000000 Logikai cím Izsó Tamás
Memória védelem/ 4
Virtuális memóriakezelés Védelem
Lapozás elve (elnagyolva) Present 1 1 0 0 0
Fizikai memória
0 0 1 0 0 1 0 0
osztott memória
A processz
Fix méretű lapok
Present 0 1 0 0 0 0 0 0 0 1 0 0 0
B processz Izsó Tamás
Memória védelem/ 5
Virtuális memóriakezelés Védelem
Intel x86 processzor memóriakezelése szegmentálás lapozás Logikai cím Szegmes szelektor
offset
Lineáris címtartomány
Globál destriptor table GDT
Dir
Lineáris cím Offszet Tábla
Szegmens Szegmens Leíró Lin. cím
Fizikai címtartomány
Page Table Page directory
Lap Fizikai cím
Entry Entry
Szegmens bázis cím
Lap
Lapozás
Szegmentálás
Izsó Tamás
Memória védelem/ 6
Virtuális memóriakezelés Védelem
Szegmentálás feladata
A taszkok memória területének elkülönítése. A címtartományon kívül program hibából adódó hivatkozások megakadályozása. A rendszer és a felhasználói programok címtartományának a szétválasztása. ˝ ˝ Adat vagy kód kezdocímének az áthelyezhetosége. Osztott memóriaterület szabályozott úton történo˝ elérése. Osztott kódrészek hívása. Szegmens hozzáférések korlátozása.
Izsó Tamás
Memória védelem/ 7
Virtuális memóriakezelés Védelem
Szegmens regiszter 15
3 2 1 0
INDEX
T RPL I
TÁBLA INDIKÁTOR 0 = GDT 1 = LDT Requested Priveleg Level (RPL)
szegmens szelektor látható rész
takart rész
szegmens szelektor
bázis cím, méret, hozzáférési információk
CS SS DS ES FS GS
szegmens regiszterek Izsó Tamás
Memória védelem/ 8
Virtuális memóriakezelés Védelem
Flat modell Szegmentálást nem lehet kikapcsolni, csak a lapozást. Ugyanakkor be lehet állítani a szegmenseket úgy, mintha nem is léteznének. Egy-egy szegmensleíró a kódra és adatra. Báziscím 0-tól. Méret (limit) 4GByte Lineáris címtartomány Szegmens regiszterek CS DS SS ES
kód Kód és adatszegmens leíró
FFFFFFFFH
nincs mem.
Access Limit Base Address
adat és stack
Izsó Tamás
Memória védelem/ 9
FS GS
0H
Virtuális memóriakezelés Védelem
Védett flat modell
Segmens leíró Szegmens regiszterek CS
Access Limit Base Address
Lineáris címtartomány Kód
FFFFFFFFH
nincs mem.
DS SS ES
Access Limit Base Address
FS
Mem. I/O adat és stack
GS
0H
Izsó Tamás
Memória védelem/ 10
Virtuális memóriakezelés Védelem
Többszegmenses modell Szegmens regiszterek
Szegmens leírók
CS
Access Limit Base Address
SS
Access Limit Base Address
DS
Access Limit Base Address
ES
Access Limit Base Address
FS
Access Limit Base Address
GS
Access Limit Base Address
Lineáris címtartomány Stack
Kód
Adat Adat
Adat
Access Limit Base Address Access Limit Base Address
Adat
Access Limit Base Address Access Limit Base Address
Izsó Tamás
Memória védelem/ 11
Virtuális memóriakezelés Védelem
Az x86 lapozási módok
32 bites Ebben az üzemmódban a lineáris cím és a fizikai cím egyaránt 32 bites. PAE Ebben az esetben a 32 bites lineáris címet 32 bitnél szélesebb vagy azzal egyenlo˝ fizikai címre képezzük. Ez egy egzotikus címzési mód, mégis a Windows/XP az SP2-ben már ezt használja, ˝ kitérünk. ennek az okára késobb IA-32e 64 bites üzemmód esetén használatos.
Izsó Tamás
Memória védelem/ 12
Virtuális memóriakezelés Védelem
32 bites lapozás 4KB lapmérettel
Izsó Tamás
Memória védelem/ 13
Virtuális memóriakezelés Védelem
Section 2 Védelem
Izsó Tamás
Memória védelem/ 14
Virtuális memóriakezelés Védelem
Védelem A védelem megszervezésnél a következo˝ dolgokat kell átgondolni: védelem tárgya Információ aminek a hozzáférését egyeseknek megengedjük, korlátozzuk, vagy megtiltjuk. ˝ aki az információhoz a védelem alanya Aktív résztvevo, hozzáférést kezdeményezi. tevékenység Aktív résztvevo˝ tevékenységi sorozata az információ megszerzésére. hozzáférési szabályok Leírják, hogy az egyes alanyok mely objektumokhoz férnek hozzá és melyekhez nem.
Izsó Tamás
Memória védelem/ 15
Virtuális memóriakezelés Védelem
Hozzáférési szabályok DAC: Access Control — tetszés szerinti hozzáférési jog biztosítása: Minden egyes felhasználó számára külön rendelkezhetünk a hozzáférési jogokról. Az információ birtokosa adja a jogokat. A DAC-ot rugalmassága miatt az operációs rendszerek ˝ eloszeretettel használják DAC hátránya Nehéz globális szabályokat megkövetelni. Nem biztos forrásból származó program a felhasználó jogosultsága alapján megváltoztathatja a hozzáférési jogokat. Nem biztonságosan megírt program gyengeségeit ˝ kihasználva lehetoséget kap a támadó, a DAC szabályainak a módosítására. Izsó Tamás
Memória védelem/ 16
Virtuális memóriakezelés Védelem
Hozzáférési szabályok
MAC: Mandatory Access Control Rendszer szintu˝ adathozzáférési szabályokat, a felhasználó nem tudja megváltoztatni. A rendszerre van bízva a jogok hozzárendelése.
Izsó Tamás
Memória védelem/ 17
Virtuális memóriakezelés Védelem
˝ Szereplok
védelem tárgya Memória, regiszterek, I/O eszközök védelem alanya Az azonosításhoz a felhasználó user ID vagy processz ID lenne a legalkalmasabb, de ezeket az operációs rendszer definiálja, és az alatta lévo˝ ˝ semmit sem tud. Ezért itt a futó hardver ezekrol processz kódszegmensére fogjuk a védelmet alkalmazni. tevékenység gépi utasítások sorozata. hozzáférési szabályok hogyan fogalmazzuk meg a szabályokat, hol tároljuk, hogy kényszerítsük ki a betartatását
Izsó Tamás
Memória védelem/ 18
Virtuális memóriakezelés Védelem
Védelmi szintek (gyur ˝ uk) ˝ MAC terminológiában címkéket jelent. 0. szint a legmagasabb szint, bár a legkisebb érték tartozik hozzá. Általában az operációs rendszer kernel programja használja, például memória lapozás, taszkok ütemezése stb. 1. szint a nagy prioritású készülék meghajtó programok futnak ezen a szinten. 2. szint az alacsonyabb prioritású meghajtó programok részére van fenntartva. 3. szint a felhasználói programok futtatásához.
Izsó Tamás
Memória védelem/ 19
Virtuális memóriakezelés Védelem
Szegmentálás védelmi megoldások
31
24 23 22 21 20 18
Base 31:24
D A G / L V B L
31
16 15 14 13 12 11
SEG. Limit 19:16
P
D P L
S
0
8 7
TYPE
16 15
BASE ADDRESS 15:0
0
Segment Limit 15:0
Szegmensleíró
Izsó Tamás
4
BASE 23:16
Memória védelem/ 20
0
Virtuális memóriakezelés Védelem
Szegmensleíró tartalma ˝ Segment Limit szegmens méret (20 bit) függ G-tol. ˝ Base address Szegmens báziscíme, 4 GByte címezheto. S Hivatkozott szegmens kód, adat, vagy rendszerleíró tábla. ˝ Type Szegmens típusa, értelmezése függ S-tol. DPL Szegmens privilégium szintje. P érvényes szegmensleíró van a memóriában D/B Kódnál operandus mérete, adatnál címtartomány iránya (expand down). G Szegmens méretének a mértékegysége byte/4Kbyte. L A szegmens 64 bites utasításokat tartalmaz. AVL Operációs rendszer számára fenntartott flag. Izsó Tamás
Memória védelem/ 21
Virtuális memóriakezelés Védelem
Szegmens típusa típus értéke Decimálisan 11 10 E 0 0 0 1 0 0 2 0 0 3 0 0 4 0 1 5 0 1 6 0 1 7 0 1 C 8 1 0 9 1 0 10 1 0 11 1 0 12 1 1 13 1 1 14 1 1 15 1 1
9 W 0 0 1 1 0 0 1 1 R 0 0 1 1 0 0 1 1
8 A 0 1 0 1 0 1 0 1 A 0 1 0 1 0 1 0 1
szegmens típus
leírás
Data Data Data Data Data Data Data Data
Read-Only Read-Only, accessed Read/Write Read/Write, accessed Read-Only, expand-down Read-Only, expand-down, accessed Read/Write, expand-down Read/Write, expand-down, accessed
Code Code Code Code Code Code Code Code
Execute-Only Execute-Only, accessed Execute/Read Execute/Read, accessed Execute-Only, conforming Execute-Only, conforming, accessed Execute/Read, conforming Execute/Read, conforming, accessed
Izsó Tamás
Memória védelem/ 22
Virtuális memóriakezelés Védelem
Általános védelmi eljárások ˝ Szegmens tartomány ellenorzés ( Base address, Limits) ˝ Szegmens típus ellenorzés (read, write, executable, stb.). Továbbá végrehajtható segmens nem írható, és olvasni is csak akkor lehet, ha az engedélyezve van. Szegmens regiszterek használata: CS végrehajtható, SS írható szegmensre hivatkozhat. DS, ES, FS, GS -be nem olvasható végrehajtható vagy ˝ rendszer szegmens nem töltheto.
Utasítás szintu˝ rendelkezések. Például call és jmp csak kód szegmensre, call gate, task gate, vagy TSS-re történhet. Privilegizált utasítások, stb. CS és SS regiszterbe nem töltheto˝ a 0 szegmens szelektor érték, a többibe igen, de ha hívatkozunk rá kivételdobás történik. Izsó Tamás
Memória védelem/ 23
Virtuális memóriakezelés Védelem
Védelmi eljárások különbözo˝ privilégium szintek között CPL Current Privilege Level (aktuális privilégium szint) ami a védelem alanyához tartozó címke. CPL-t az SS és a CS szegmens regiszterek nem látható része tartalmazza. CPL az aktuálisan futó processzhez tartozó privilégium szint. Normál állapotban a CPL megegyezik az aktuális utasítást tartalmazó kódszegmen DPL-jével. CPL változik, ha a program olyan kódszegmensen fut tovább, amelynek más a privilégium szintje.
DPL Descriptor Privilege Level a védelem tárgyának a privilégium szintje. DPL-t a szegmensleíró tábla bejegyzésének a 13, és 14-ik bitje tartalmazza. Izsó Tamás
Memória védelem/ 24
Virtuális memóriakezelés Védelem
Nagyobb privilégiummal futó kód kihasználása
1
Kis privilégium szinttel rendelkezo˝ U kód átad egy olyan címet rendszerhívásnál S kódnak, amelyet meg akar változtatni, de neki nincs elég privilégiuma oda írni.
2
A meghívott S nagy privilégiummal (0 érték) futó kódnak joga van a megadott címre írni, így véghezviszi U kártékony kód kérését.
Hogyan védekezhetünk ez ellen?
Izsó Tamás
Memória védelem/ 25
Virtuális memóriakezelés Védelem
RPL Request Privilege Level
RPL-t az operációs rendszer állítja be. Adjust RPL Field of Segment Selector utasítás két paramétere a forrás és a cél segmens szelektora. A cél szegmens RPL-jét a forrás szegmens RPL-jéhez igazítja, ha az kisebb. Forrás szegmens a hívó eljárás szegmens szelektorának az RPL-je, a cél az adatot címzo˝ szegmensregiszter RLP-je. Hozzáférés engedélyezett, ha max(CPL, RPL) ≤ DPL. Tehát ha a hívónak joga volt az adott területre írni, akkor ez a nagyobb privilégiummal rendelkezo˝ kódnak is engedélyezett.
Izsó Tamás
Memória védelem/ 26
Virtuális memóriakezelés Védelem
˝ Privilégium ellenorzése adat hivatkozáskor
Kisebb privilégium futó kód (CPL) nem fér hozzá nagyobb privilégium szinttel rendelkezo˝ adathoz (DPL) Csak a DS, ES, FS, GS vagy SS regiszterek megváltoztatásánál kell erre figyelni. Ezeket a regisztereket csak a MOV, POP, LDS, LES, LFS, LGS, LSS utasításokkal lehet módosítani. Szabály: max(CPL, RPL) ≤ DPL.
Izsó Tamás
Memória védelem/ 27
Virtuális memóriakezelés Védelem
Miért nem hívunk meg kisebb privilégiummal rendelkezo˝ kódot
Könnyu˝ átmenni az alacsonyabb privilégiummal rendelkezo˝ kódba, de nehéz onnan visszatérni. Áttérés után a kód nem érheti el a saját adatait, mivel CPL numerikus értéke nagyobb, mind a kód DPL értéke. Valóban szükség van erre?
Izsó Tamás
Memória védelem/ 28
Virtuális memóriakezelés Védelem
Miért nem ugorhatunk nagyobb privilégiummal rendelkezo˝ kódba
Biztonsági okokból nem tehetjük meg. Valóban szükség van rá? Igen, a device drivereknél, például hogy az USB eszközt lássa a felhasználói program. Megoldás call gate-tel, amit a következo˝ fejezetben tárgyalunk.
Izsó Tamás
Memória védelem/ 29
Virtuális memóriakezelés Védelem
Kódszegmens váltás ˝ A privilégium ellenorzésénél felhasznált adatok. CS regiszter CPL
Kód szegmens szegmens szelektora (Ez tartalmazza a hívó kódot) RPL
Privilégium ellenőrzés
Cél kódszegmens szegmens leíró DPL
C
Izsó Tamás
Memória védelem/ 30
Virtuális memóriakezelés Védelem
Szegmens conform típusának a felhasználása
Nem conform(nem alkalmazkodó) kódszegmenst csak akkor lehet meghívni, ha CPL = DPL. Ebben az esetben RPL-nek kisebb szerepe van, csak arra kell figyelni, hogy az értéke kisebb vagy egyenlo˝ legyen a CPL-lel. Conform tulajdonságú kódszegmens CPL ≥ DPL feltétel mellett meghívható. Ilyenkor az RPL nem számít. A függvény meghívása után a CPL értéke nem változik, ez az egyetlen olyan eset, hogy a CPL és az utasításokat tartalmazó szegmens DPL-je nem biztos, hogy azonos ˝ értéku. ˝ Nem jön létre stack váltás. Felhasználási lehetoség például a matematikai könyvtári függvények céljára.
Izsó Tamás
Memória védelem/ 31
Virtuális memóriakezelés Védelem
OS meghívása
Nagyobb privilégiummal rendelkezo˝ kódszegmenst, egyszeru˝ call utasítással biztonsági okokból nem hívhatunk meg. Különbözo˝ interface-k léteznek, hogy a hívások minél ˝ ellenorzöttebben történjenek. call gate szoftver interrupt SYSENTER/SYSEXIT
Izsó Tamás
Memória védelem/ 32
Virtuális memóriakezelés Védelem
Call gate A call gate leiró is a GDT vagy a LDT-ban található.
Izsó Tamás
Memória védelem/ 33
Virtuális memóriakezelés Védelem
call gate leíró adatai
Meghívandó kód szegmens szelektora. Szegmensen belül az eljárás belépési címe. A hívó kódtól megkövetelt DPL privilégium szint. Stack váltás esetén: átadandó paraméterek száma, ˝ teszi, hogy 32 bites stack adatának a mérete. Lehetové alkalmazás 16 bites programot hívjon meg.
Izsó Tamás
Memória védelem/ 34
Virtuális memóriakezelés Védelem
˝ Call gate ellenorzés CS regiszter CPL
Call gate szelektor
Privilégium ellenőrzés
RPL
Call gate (leíró) DPL
Cél kódszegmens leíró DPL
Izsó Tamás
Memória védelem/ 35
Virtuális memóriakezelés Védelem
Call gate hozzáférési szabályok CPL ≤ DPLGATE RPL ≤ DPLGATE CALL utasítás végrehajtása csak a DPLcél ≤ CPL szabály esetén lehetséges, Nem conform szegmensbe ugrás JMP utasítással csak akkor lehetséges, ha DPLcél = CPL. Conform szegmensbe ugrás JMP utasítással csak akkor lehetséges, ha DPLcél ≤ CPL. Miért nem megengedett a kisebb privilégiummal rendelkezo˝ függvény hívása? Azért mert akkor a visszatérésnél lennének problémák.
Izsó Tamás
Memória védelem/ 36
Virtuális memóriakezelés Védelem
Lapszintu˝ hozzáférési szabályok ˝ ˝ A 4 privilegium szint a következoképpen képzodik le a lap U/S bitjére: CPL = 0,1,2 érték supervisor mód. CPL = 3 felhasználó mód Típus védelem lap esetén csak írásra/olvasásra terjed ki. PAE és 64 bites lapozásnál végrehajtás letíltás (execute disable NX) is lehetséges. Csak olvasás van megengedve, ha R/W = 0 Írás és olvasás is engedélyezett, ha R/W = 1 Inicializálás miatt a supervisor minden lapot írhat és olvashat, de csak akkor, ha a CR0 regiszter WP bitje 0. Különben neki is be kell tartani a játékszabályokat. Supervisor módú lapokat a user módú program sem írni sem olvasni nem tudja. Page Directory Table, és Page Table esetén az R/W és a U/S bitek használata azonos a fent leírtakkal. Izsó Tamás
Memória védelem/ 37