Protected Mode security mechanisms support in DosBox

10

Click here to load reader

description

Advanced Microprocessor's Project - University of Patras - Electrical and Computer Engineering

Transcript of Protected Mode security mechanisms support in DosBox

Page 1: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

1

“Μειέηε ππνζηήξημεο κεραληζκώλ

αζθάιεηαο Protected Mode ζην DosBox”

ζην κάζεκα

“Πποηγμένοι Μικποεπεξεπγαζηέρ”

Σςμμεηέσονηερ:

Σθξεπεηόο Δεκήηξηνο, 7380

Παπαδόπνπινο Γεώξγηνο Μάξηνο, 7356

Εξάμηνο: 9o

Ακαδημαικό Έηορ: 2013-2014

Page 2: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

2

Σκοπόρ

Η δνθηκή ηωλ παξαθάηω εξωηεκάηωλ ζην DOSBOX:

1. Μεηάβαζη από Code Segment ζε άλλο με ηο ίδιο privilege level (ζηο παπάδειγμα

και ηα δύο μηδέν).

2. Μεηάβαζη από Code Segment ζε άλλο με ςτηλόηεπο privilege level (ζηο

παπάδειγμα από μηδέν ζε ηπία).

3. Μεηάβαζη από Code Segment ζε άλλο με σαμηλόηεπο privilege level (ζηο

παπάδειγμα από ηπία ζε μηδέν).

4. Μεηαθοπά Data Segment ζε Code Segment.

5. Μεηαθοπά Code Segment ζε Data Segment.

6. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Code Segment.

7. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Data Segment.

8. Μεηάβαζη μέζυ Call Gate ζε σαμηλόηεπο privilege level.

9. Έλεγσορ δςναηόηηηαρ εκηέλεζηρ πποζηαηεςμένυν ενηολών από privilege level 3.

Page 3: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

3

Χπηζιμοποιούμενα Επγαλεία

DOSBOX

Notepad ++

Intel Manual 386

1. Μεηάβαζη από Code Segment ζε άλλο με ηο ίδιο privilege level (ζηο

παπάδειγμα και ηα δύο μηδέν).

Δεκηνπξγήζακε έλα Code Selector Test (CODE_SEL_TEST) θαη ηνλ αληίζηνηρν

Descriptor νη νπνίνη είλαη θιώλνη ηνπ CODE_SEL θαη ηνπ code_sel_descr έηζη ώζηε λα

κεηαβνύκε από privilege level 0 ηνπ CODE_SEL ζην νπνίν είκαζηε ζην privilege level 0

ηνπ CODE_SEL_TEST. Γηα λα εθηειέζνπκε απηό ην εξώηεκα βάιακε ηελ εληνιή:

call CODE_SEL_TEST:task2

Σύκθωλα κε ην 6.3.3 ηνπ manual ε κεηαθνξά ειέγρνπ κεηαμύ 2 code segment κε ίδην

privilege level είλαη επηηξεπηή θαη ην πξόγξακκα έηξεμε θαλνληθά όπωο αλακελόηαλ.

Τα CODE_SEL_TEST θαη code_descr_test νξίδνληαη ζην αξρείν gdt.asm ωο

εμήο:

CODE_SEL_TEST equ $-gdt_start

code_descr_test: istruc seg_descriptor

at limit0_15, dw 0xFFFF ; limit 0:15

at base0_15, dw 0 ; base 0:15

at base16_23, db 0 ; base 16:23

at type_dpl, db 0x9B ; 1 00 1 001 1 = present + DPL=0 +

code_segment_descr + C=0 + Read + not_active

at limit16_19,db 0xCF ; 1 1 00 1111 = Granularity + 32bit code + limit

16:19

at base24_31, db 0 ; base 24:31

; base = 0x0, limit = 0xFFFFFFFF

iend

Page 4: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

4

Φηηάρλνπκε ην base address ζην αξρείν stdlib.asm ωο εμήο:

; Update Code Descriptor base address field

push eax

push word code_descr_test

call initialize_descriptor_base

add sp, 6

2. Μεηάβαζη από Code Segment ζε άλλο με ςτηλόηεπο privilege level (ζηο

παπάδειγμα από μηδέν ζε ηπία).

Δεκηνπξγήζακε έλα CODE_SEL_TS1 θαη ηνλ αληίζηνηρν Descriptor νη νπνίνη

είλαη θιώλνη ηνπ CODE_SEL θαη ηνπ code_sel_descr κε privilege level 3 έηζη ώζηε λα

κεηαβνύκε από privilege level 0 ηνπ CODE_SEL ζην νπνίν είκαζηε ζην privilege level 3

ηνπ CODE_SEL_TS1. Γηα λα εθηειέζνπκε απηό ην εξώηεκα βάιακε ηελ εληνιή:

call CODE_SEL_TS1:task2

Σύκθωλα κε ην θεθάιαην 6.3.3 γηα Conforming Bit 0, επεηδή ην DPL (3) δελ είλαη

ίζν κε ην CPL (0), θαλνληθά έπξεπε ην πξόγξακκα λα κελ ηξέμεη. Ωζηόζν ην DOSBOX

πξνθαλώο δελ θάλεη Privilege Level Checking νπόηε ην πξόγξακκα έηξεμε.

Σύκθωλα κε ην θεθάιαην 6.3.3 γηα Conforming Bit 1, επεηδή ην DPL (3) δελ είλαη

κηθξόηεξν ή ίζν ηνπ CPL (0), θαλνληθά έπξεπε ην πξόγξακκα λα κελ ηξέμεη. Ωζηόζν ην

DOSBOX πξνθαλώο δελ θάλεη Privilege Level Checking νπόηε ην πξόγξακκα έηξεμε.

Τα CODE_SEL_T1 θαη code_descr_TS1 νξίδνληαη ζην αξρείν gdt.asm ωο εμήο:

; The code selector and code descriptor of the task1 with privilege level 3

CODE_SEL_TS1 equ $-gdt_start

code_descr_TS1: istruc seg_descriptor

at limit0_15, dw 0xFFFF ; limit 0:15

at base0_15, dw 0 ; base 0:15

at base16_23, db 0 ; base 16:23

at type_dpl, db 0xFB ; 1 11 1 101 1 = present + DPL=3 +

code_segment_descr + C=0 + Read + not_active

at limit16_19,db 0xCF ; 1 1 00 1111 = Granularity + 32bit code + limit

16:19

at base24_31, db 0 ; base 24:31

; base = 0x0, limit = 0xFFFFFFFF

iend

; Update Code Descriptor base address field

; Update Code Descriptor TS1 base address field

push eax

Page 5: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

5

push word code_descr_TS1

call initialize_descriptor_base

add sp, 6

3. Μεηάβαζη από Code Segment ζε άλλο με σαμηλόηεπο privilege level (ζηο

παπάδειγμα από ηπία ζε μηδέν).

Αξρηθά, πεγαίλνπκε κέζω iret ζην task1, ην νπνίν εθηειεί ην CODE_SEL_TS1 ην

νπνίν έρεη Privilege Level 3. Από εθεί ζέινπκε λα πάκε ζην CODE_SEL κε Privilege

Level 0 κέζω ηεο εληνιήο:

call CODE_SEL:task2

Σύκθωλα κε ην θεθάιαην 6.3.3 ηνπ manual γηα Conforming Bit 0, επεηδή ην DPL

(0) δελ είλαη ίζν κε ην CPL (3), θαλνληθά έπξεπε ην πξόγξακκα λα κελ ηξέμεη. Ωζηόζν

ην DOSBOX πξνθαλώο δελ θάλεη Privilege Level Checking νπόηε ην πξόγξακκα

έηξεμε.

Σύκθωλα κε ην θεθάιαην 6.3.3 ηνπ manual γηα Conforming Bit 1, επεηδή ην DPL

(0) είλαη κηθξόηεξν ή ίζν ηνπ CPL (3), θαλνληθά έπξεπε ην πξόγξακκα λα ηξέμεη, όπωο

θαη έγηλε.

4. Μεηαθοπά Data Segment ζε Code Segment.

Πξνζπαζνύκε λα κεηαθηλήζνπκε ην DATA_SEL ζηνλ CS ηνπ πξνγξάκκαηνο

κέζω ηωλ εληνιώλ:

call DATA_SEL:0

Σύκθωλα κε ην θεθάιαην 6.3.1.1 ηνπ manual ε κεηαθίλεζε απηή είλαη κε

επηηξεπηή δηόηη δελ κπνξνύκε λα βάινπκε Data Selector ζην CS. Τν DOSBOX βγάδεη

κήλπκα: CALL:Descriptor type b unsupported.

Page 6: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

6

5. Μεηαθοπά Code Segment ζε Data Segment.

Πξνζπαζνύκε λα κεηαθηλήζνπκε ην CODE_SEL ζηνλ DS ηνπ πξνγξάκκαηνο

κέζω ηωλ εληνιώλ:

mov ax, CODE_SEL

mov ds, ax

Σύκθωλα κε ην θεθάιαην 6.3.1.1 ηνπ manual κηα ηέηνηα κεηαθίλεζε δελ

απαγνξεύεηαη γη’ απηό θαη ην DOSBOX δελ καο έβγαιε ηέηνην πξόβιεκα.

6. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Code Segment.

Φηηάμακε ην CODE_SEL_LIMIT ωο θιόλν ηνπ CODE_SEL θαη ην call_descr_limit

ωο θιόλν ηνπ call_descr κε κόλε δηαθνξά όηη ην call_descr_limit έρεη limit 0 γηα λα

δνθηκάζνπκε ην Limit Checking κέζω ηωλ εληνιώλ:

call CODE_SEL_LIMIT:0xffff

Σύκθωλα κε ην θεθάιαην 6.3.1.2 ηνπ manual κηα ηέηνηα κεηαθνξά ειέγρνπ δελ

είλαη επηηξεπηή δηόηη ην limit καο είλαη κεδέλ θαη ην offset δηάθνξν ηνπ κεδελόο. Ωζηόζν

ην DOSBOX δε δέρζεθε θαλ ηε κεηαθίλεζε βγάδνληαο ην κήλπκα: CALL:Descriptor type

b unsupported.

Τα CODE_SEL_LIMIT θαη code_descr_limit νξίδνληαη ζην αξρείν gdt.asm ωο

εμήο:

CODE_SEL_LIMIT equ $-gdt_start

Page 7: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

7

code_descr_limit: istruc seg_descriptor

at limit0_15, dw 0x0 ; limit 0:15

at base0_15, dw 0 ; base 0:15

at base16_23, db 0 ; base 16:23

at type_dpl, db 0x9B ; 1 00 1 001 1 = present + DPL=0 +

code_segment_descr + C=0 + Read + not_active

at limit16_19,db 0x0 ; 1 1 00 1111 = Granularity + 32bit code + limit

16:19

at base24_31, db 0 ; base 24:31

; base = 0x0, limit = 0x0

iend

7. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Data Segment.

Φηηάμακε ην DATA_SEL_LIMIT ωο θιόλν ηνπ DATA_SEL θαη ην data_descr_limit

ωο θιόλν ηνπ data_descr κε κόλε δηαθνξά όηη ην data_descr_limit έρεη limit 0, έηζη ώζηε

λα δνθηκάζνπκε ην Limit Checking κέζω ηωλ εληνιώλ:

mov word ax, DATA_SEL_LIMIT

mov ds, ax

mov ax, vidmem_start

Σύκθωλα κε ην θεθάιαην 6.3.1.2 ηνπ manual κηα ηέηνηα κεηαθνξά ειέγρνπ δελ

είλαη επηηξεπηή δηόηη ην limit καο είλαη κεδέλ θαη ην offset δηάθνξν ηνπ κεδελόο. Ωζηόζν

ην πξόγξακκα έηξεμε θαλνληθά άξα πξνθαλώο ην DOSBOX δελ θάλεη Limit Checking.

Τα CODE_SEL_LIMIT θαη code_descr_limit νξίδνληαη ζην αξρείν gdt.asm ωο

εμήο:

Page 8: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

8

DATA_SEL_LIMIT equ $-gdt_start

data_descr_limit: istruc seg_descriptor

at limit0_15, dw 0x0 ; limit 0:15

at base0_15, dw 0 ; base 0:15

at base16_23, db 0 ; base 16:23

at type_dpl, db 0x92 ; 1 00 1 101 0 = present + DPL=0 +

data_segment_descr + E=0 + RW + not_active

at limit16_19,db 0x0 ; 1 1 00 1111 = Granularity + Big + limit 16:19

at base24_31, db 0 ; base 24:31

; base = 0x0, limit = 0xFFFFFFFF

iend

8. Μεηάβαζη μέζυ Call Gate ζε σαμηλόηεπο privilege level.

Φηηάμακε έλα Call gate κε DPL 3 ώζηε λα κεηαβνύκε από Privilege Level 3 ζε

Privilege Level 0. Μεηαβήθακε ζην task1 κέζω iret θαη κεηά ζέιακε λα θάλνπκε ηε

κεηαθνξά κέζω ηεο εληνιήο:

call CALL_GATE_SEL:0

Σύκθωλα κε ην 6.3.4 ηθαλνπνηνύληαη νη πξνϋπνζέζεηο, ωζηόζν ην πξόγξακκα δελ έηξεμε ζην DOSBOX θαη έβγαιε κήλπκα: CALL:GATE:SS: no writable data segment. To Call Gate ην νξίδνπκε ζην αξρείν gdt.asm ωο εμήο:

; The call gate selector and descriptor

CALL_GATE_SEL equ $-gdt_start

call_gate_descr: istruc call_gate_descriptor

at offset0_15, dw 0

at selector, dw 0

at dword_count, db 0

at p_type_dpl, db 0xEC ; Εδώ νξίζακε DPL=3

at offset16_31, dw 0

iend

Τν selector θαη ην offset ηνπ call gate descriptor ηα θηηάρλνπκε ζην αξρείν

stdlib.asm ωο εμήο:

; Update the selector of the call gate with the CODE_SEL

mov word [call_gate_descr+2], CODE_SEL;

Page 9: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

9

; Update the offsets of the call gate with the address of task2

push eax

mov eax, task1

mov word [call_gate_descr], ax;

shr eax, 16

mov word [call_gate_descr+6], ax;

9. Έλεγσορ δςναηόηηηαρ εκηέλεζηρ πποζηαηεςμένυν ενηολών από privilege

level 3.

Μεηαβαίλνπκε κε iret ζην task1 θαη από εθεί (ελώ είκαζηε ζε CPL 3)

πξνζπαζνύκε λα εθηειέζνπκε ηελ πξνζηαηεπκέλε εληνιή:

hlt

Σύκθωλα κε ην θεθάιαην 6.3.5.1 ε εληνιή απηή δελ κπνξεί λα εθηειεζηεί δηόηη

απαηηεί ην CPL λα είλαη κεδέλ. Τν DOSBOX θξαζάξεη αθνύ βγάιεη ην κήλπκα Exit to

error: INT: Inner level: Stack segment not writable.

Page 10: Protected Mode security mechanisms support in DosBox

Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών

Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ

10