mc cap 3
TRANSCRIPT
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
1
3. MECANISMUL PROTEC ŢIEI
3.1. Tipuri de protecţii
Tipuri de protecţii:•••• controlul tipurilor de informa ţii•••• protecţia inter-proces (între utilizatori)•••• protecţia intra-proces (între softul de sistem şi cel de aplicaţii)
Tipuri de mecanisme de protecţie:•••• protecţia intrinsecă gestionării memoriei•••• privilegiile multi-nivel
Algoritm de lucru:
verificare “on chip” →→→→ se semnalează “violarea protecţiei” →→→→
→→→→ se generează o întrerupere soft dedicată →→→→
→→→→ se iniţiază o procedură de răspuns adecvată
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
2
Segment: “cuanta” de memorie cu atribute de protecţie precizate
•segmentare←←←← modularizare programe
•atributul de arhitectur ă pentru un segment este un SELECTOR
•între SELECTOR şi segmentul vizat este un DESCRIPTOR
DESCRIPTOR-ul permite:
�rezervarea unei zone de memorie pentru segment�definirea dimensiunii segmentului în funcţie de cantitatea de informaţii care trebuie stocată�restricţionarea accesului în segment
Proces:
•execuţia a unul sau mai multe programe
•nivelul de privilegiu este dinamic (după programul în curs de rulare)
•atribute: spaţiul adreselor, utilizarea registrelor, stivă, date
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
3
3.2. Protecţia rezultată din gestionarea memoriei
Separarea spaţiului adreselor în:
•adrese globale –TI = 0
•adrese locale –TI = 1
Utilizarea tabelelor de descriptori –GDT şi LDT
Delimitarea segmentelor de lucru –BAZA şi LIMITA
Alocarea de proprietăţi segmentelor de lucru –ACCES; se impun constrângeri de utilizare
Definirea cuantei de informaţie (granularitatea) şi a compatibilit ăţii cu alte procesoare –ALTE_PROPRIETĂŢI
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
4
1. Verificări la încărcarea selectorului:
1.A – Verificarea tipului de segment relativ la registrul segment folosit; câmpuri implicate: S, P/D, ED
1.B – Verificarea existenţei descriptorului pentru segmentul vizat; câmpuri implicate: ACCES
1.C – Verificarea dacă segmentul vizat este în memoria internă; câmpuri implicate: P
1.D – Verificarea respectării regulilor nivelelor de privilegii; câmpuri implicate: DPL, C
2. Verificări la încărcarea descriptorului în registrul cache:
2.A – Verificarea dacă sunt respectate limitele segmentului; câmpuri implicate:LIMITA , ED
2.B – Verificarea dacă segmentul este folosit conform atributelor din octetul ACCES; câmpuriimplicate: W, R
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
5
Observaţii:
GDT nu poate fi accesată de către oricare utilizator – mecanism suplimentar de protecţie; ea conţine informa ţii despre LDT şi deci impune configuraţia segmentelor de sistem şi, implicit, a segmentelorde lucru
GDT şi LDT au, de regulă, dimensiuni fixate indiferent de evoluţia numărului de segmente de lucru pentru un program: ACCES = 00H – „descriptor nul”
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
6
3.3. Protecţia rezultată din mecanismul privilegiilor multi-nivel
Nivelele de protecţie
nivel 0 – cel mai privilegiat; conţine nucleul sistemului de operare:gestionarea memoriei, multiprocesarea, controlul resurselor I/O;
nivel 1 – restul sistemului de operare;
nivel 2 – soft dedicat şi supervizor sistem;
nivel 3 – soft de aplicaţii
Algoritm de lucru:
verificare “on chip” a „autoriza ţiei” de acces în funcţie de „clasificarea” informaţiei vizate →→→→
→→→→ se semnalează “violarea protecţiei” →→→→
→→→→ se generează o întrerupere soft dedicată →→→→
→→→→ se iniţiază o procedură de răspuns adecvată
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
7
Regulile generale de protecţie impuse de privilegiile multi-nivel:
1. Datele pot fi accesate în segmente cu acelaşi nivel de privilegiu sau în segmenteaflate pe nivele mai puţin privilegiate
2. Programele pot fi accesate(CALL, JMP) în segmente cu acelaşi nivel de privilegiu.Accesul prin nivele este restricţionat: se face numai prin PORŢI
Exemplu:
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
8
3.4. Protecţia datelor şi a programelor
Datele pot fi accesate în segmente de date (selectoare în DS, ES, FS, GS, SS)sau în segmente de program citibile (selector în CS)
Indicatori ai nivelului de privilegiu:
DPL : nivelul de privilegiu al descriptorului (bi ţii 5-6 din ACCES); clasifică nivelul de privilegiual segmentului de dateşi autorizează în cazul segmentului de program
RPL : nivelul de privilegiu cerut (bi ţii 0-1 din SELECTOR); este nivelul impusde cel care furnizează selectorul
CPL: nivelul de privilegiu curent (menţinut automat de către procesor);este nivelul de privilegiu al segmentului curent de program care dă autorizaţia de acces.Deci: CPL = DPL al descriptorului accesat cu SELECTORUL din CS, pentru programul curent
a) Accesul datelor
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
9
Regula 1 devine:
max (CPL, RPL) ≤≤≤≤ DPL
EPL = max (CPL, RPL)
EPL ≤≤≤≤ DPL
adică, pentru accesul datelor în segmente de dateşi în segmente de program non-conforme,
programul curent trebuie să fie cel puţin tot atât de privilegiat ca şi segmentul vizat
(autorizaţia programului trebuie să fie mai puternică decât clasificarea segmentului)
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
10
Verific ări :
VERIFICAREA I (tip 1.A şi 2.B):
Se verifică tipul de segment în funcţie de registrul segment în care se încarcă selectorul
şi în funcţie de octetul ACCES
TTiippuurr ii ddee sseeggmmeennttee ppeerr mmiissee RReeggiissttrr uu sseeggmmeenntt
rrss SSeegg..ddaattee““ RROO”” SSeegg..ddaattee““ RRWW”” SSeegg..pprr ooggrr ..““ EEOO”” SSeegg..pprr ooggrr ..““ EERR””
DDSS ddaa ddaa nnuu ddaa
EESS,,FFSS,,GGSS ddaa ddaa nnuu ddaa
SSSS nnuu ddaa nnuu nnuu
CCSS nnuu nnuu ddaa ddaa
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
11
VERIFICAREA a II-a (tip 1.D):
max(CPL, RPL) ≤≤≤≤ DPL
DPL – pentru segmentul vizat (clasificare)
CPL – pentru programul care rulează (autorizaţie)
Excepţii:
a) pentru stivă trebuie ca: DPL = CPL .
b) segmentele de program "conforme"(C=1) sunt exceptate
VERIFICAREA a III-a (tip 2.A):
Se verifică încadrarea în LIMITA indicată de descriptor:
Pentru ED = 0 trebuie ca AE curentă ≤≤≤≤ LIMITA
Pentru ED = 1 trebuie ca AE curentă >>>> LIMITA
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
12
b) Accesul segmentelor de program
•••• Segmente de program care sunt doar executabile (selector înCS).
•••• Instruc ţiunile folosite sunt de tip “JMP”, “ CALL ” şi “ RETURN”
VERIFICAREA I (tip 1.A şi 2.B):
Se verifică tipul de segment în funcţie de registrul segment în care se încarcă selectorul (CS)
şi în funcţie de octetul ACCES ţinând seama că segmentul este de tip “EO”
VERIFICAREA a II-a (tip 1.D) – se aplică Regula 2:
CPL = DPL
DPL – pentru programul vizat (clasificare)
CPL – pentru programul care rulează (autorizaţie)
Excepţie:
segmentele de program „conforme”(C=1) sunt exceptate
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
13
Observaţii:
a) CALL către segmente de program cu nivel de privilegiu mai mare se face numai prin porţi
b) RETURN se poate face la un segment de program cu acelaşi nivel de privilegiu sau mai puţin privilegiat
VERIFICAREA a III-a (tip 2.A):
Se verifică încadrarea în LIMITA indicată de descriptor:
Trebuie ca AE curent ă ≤≤≤≤ LIMITA
Ajustarea (micşorarea) nivelului de privilegiu al selectorului (autorizaţia)
ARPL r16 mem16, r16
operand 1:SELECTORUL procedurii apelate (care se ajustează);
operand 2:SELECTORUL procedurii apelante.
Dacă RPL din operandul 1 este numeric mai mic decât al doilea, ZF←←←←1 şi RPL din operand 1
devine egal cuRPL din operand 2. Altfel, nu se întâmplă nimic
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
14
3.5. Transferul controlului între nivelele de protecţie
Instruc ţiunile folosite sunt de tip “JMP”, “ CALL ” şi “ RETURN”
•Transfer intra-segment: nu se schimbă nivelul de privilegiu
•Transfer inter-segment, la acelaşi nivel de privilegiu: regula 2 este respectată
•Transfer inter-segment la nivele diferite de privilegiu: se folosesc porţi
Porţile sunt descriptori de tip b3
•Porţile reprezintă un nivel suplimentar de adresare indirectă
•SELECTORUL pentru o poartă se încarcă obligatoriu în CS
•Se utilizează pentru:•apelarea programelor la nivele diferite de privilegiu;•răspunsul la cererile de întreruperi;•multiprocesare
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
15
Poarta de apelare
Octetul ACCES al unei porţi :
b0 - b3 : TIP ;
b4 : S = 0 ;
b5 - b6 : DPL al porţiib7 : P ( „prezent”)
PPeennttrr uu II AA1166 ((II nntteell 8800228866))
PPeennttrr uu II AA3322 ((338866,, 448866,, PPeennttiiuumm))
DDeessccrr iieerr ee
44 ((00110000)) 1122 ((11110000)) ppooaarr ttăă ddee aappeellaarr ee
55 ((00110011)) 0055 ((00110011)) ppooaarr ttăă ddee pprr oocceess
66 ((00111100)) 1144 ((11111100)) ppooaarr ttăă ppeennttrr uu îînnttrr eerr uuppeerr ii
77 ((00111111)) 1155 ((11111111)) ppooaarr ttăă ppeennttrr uu „„ ttrr aapp””
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
16
Etapele apelării prin poart ă:
•Din AV care însoţeşte instrucţiunile “ JMP”, “ CALL ” şi “ RETURN” se păstrează doar SELECTOR; OFFSET-ul se ignoră →→→→ se identifică un descriptor de tip b3 – poarta de apelare
•Verific ări:
I. SELECTOR DESTINAŢIE să nu fie nulII. SELECTOR DESTINAŢIE să fie în limita tabelei de descriptori vizatăIII. Descriptorul vizat s ă fie pentru segment de programIV. Segmentul de program să fie prezent şi în LIMITA impusăV. CPL apelant ≤≤≤≤ DPL poartă
•Se determină adresa informaţiei din segmentul vizat folosind mecanismul translaţiei cu AV din poartă, formată din SELECTOR DESTINAŢIE şi OFFSET DESTINAŢIE(RPL din SELECTOR DESTINAŢIE se ignoră)
•Se determină necesitatea schimbării nivelului de privilegiu; se admit:•CPL ≥≥≥≥ DPL pentru CALL•CPL = DPL pentru JMP•CPL ≤≤≤≤ DPL pentru RETURN
•Se face schimbarea nivelului de privilegiu, dacă e necesar
•Se selectează şi se actualizează noua stivă – corespunzătoare noului nivel de privilegiu;pentru a menţine integritatea sistemului :
•în cadrul unui proces, fiecare nivel de privilegiu îşi are propria stivă;•procese diferite, chiar aflate la acelaşi nivel de privilegiu, au stive diferite
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
17
Poarta garantează că toate transferurile la un nivel superior de privilegiu se fac printr-un punct de intrare sigur şi nu în mijlocul unei proceduri sau al unei instrucţiuni sau la o procedură „vulnerabil ă”
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
18
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
19
Schimbările de stivă cauzate de porţile de apelare
Etapele de actualizare a stivei:
•Se selectează o nouă stivă cu nivelul de privilegiu corespunzător noului CPL
•Noua valoare a indicatorului de stivă (SS):(SP) este încărcată din segmentul de stare al procesului (TSS)
•Câmpul NUMĂRĂTOR DE CUVINTE indică numărul de poziţii din stiv ă (de câte 4B pentru IA32)care vor fi copiate din vechea stivă în noua stivă; se realizează transparent pentru utilizator
•Se verifică dacă informa ţiile care urmează a fi copiate au loc în noua stivă
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
20
Explicaţia utilizării instruc ţiunilor de tip CALL :
•Transferul cu instruc ţiunea CALL se face către nivele mai privilegiate pentru ca stiva modulului apelatsă se afle la dispoziţia procesului cu un nivel de privilegiu mai mareşi nu invers
Evident, RETURN se face către nivele cu un nivel de privilegiu inferior
•Este interzis transferul controlului către alte nivele de privilegiu prin instrucţiuni de tip JMP pentru cănu există posibilitatea de a salva selectorul din CS şi nu există posibilitatea de a identifica(din descriptorul aferent selectorului) nivelul autorizaţiei
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
21
Sinteza modalităţilor de transfer al controlului programului – aplicarea Regulii 2:
1. Un modul de program poate apela (CALL ) un modul mai privilegiat (numeric – nivel mai mic)numai prin poartă de apelare
2. Este interzisă apelarea unui modul de program mai puţin privilegiat (numeric – nivel mai mare)
3. Apelul la acelaşi nivel de privilegiu este permis şi poarta de apelare e opţională
4. Este interzis saltul (JMP) către alte nivele de privilegiu
5. Saltul la acelaşi nivel de privilegiu este permis şi poarta de apelare e opţională
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
22
Exemplu:
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
23
Folosirea instrucţiunii “ ARPL ”(Problema „atacului Calului Troian”)
Instruc ţiunea ARPL este inserată în modulul de program de la nivelul 1 de privilegiu;
RPL este ajustat – devine mai mare numeric →→→→ nivelul efectiv de privilegiu se micşorează
max (CPL, RPL) = max (1, 3) = 3 >>>> DPL
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
24
Observaţii
•••• Un modul de program care utilizează RPL = 0, poate fi folosit fără pericol la orice nivel de privilegiu:
max (CPL, RPL) = max (CPL, 0) = CPL
•••• Un program la nivel 3 (neprivilegiat) poate utiliza orice RPL:
max (CPL, RPL) = max (3,RPL) = 3
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
25
3.6. Protecţia paginilor
Protecţia paginilor pentru Intel 386, 486 Pentium:
Elementele dindirectorul de tabele şi tabelele paginilor :
Câmpurile R/W, U/S folosesc pentru protecţia paginilor:
Microcontrolere - Capitolul 3 Corneliu BURILEANU ©
26
U/S = 0 – pagina/tabela supervizorului= 1 – pagina/tabela utilizatorului
•Pagina supervizorului poate fi folosită numai de module de program privilegiate: CPL = 0, 1, 2
•Pagina utilizatorului poate fi folosită la orice nivel
•Dacă U/S = 0 în directorul de tabele , U/S din tabela de pagini la care se face referire nu mai contează
R/W = 1 – supervizorul poate scrie în pagini, dacă are şi permisiunea suplimentarădată de un câmp din CR0