Захист від взаємного впливу програм. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Захист від взаємного впливу програм.



Зміст роботи.

Робота виконується за два етапи. На першому етапі студентами розробляється та налагоджується програма, яка:

1. Перевіряє поточний режим процесора та підготовлює системні структури, необхідні для роботи в захищеному режимі.

2. Виконує переключення процесора в захищений режим.

3. Виводить діагностичне повідомлення на екран.

4. Забезпечує повернення в режим реальних адрес

Другий етап виконується шляхом доповнення програми, розробленої на першому етапі, системними даними та процедурами для обслуговування переривань (виключень), які виникають в результаті виявлення апаратурою процесора порушень правил захисту програмних об'єктів. За допомогою модифікованої програми проводяться експерименти по активізації захисту згідно завдання.

 

Довідкові дані.

Суть захищеного режиму

Захищений режим в процесорах ф.Intel вперше був реалізований ще в процесорі 80286, подальшого розвитку набув в процесорі 80386 і підтримується із незначними доповненнями у всіх наступних процесорах лінії 80х86 та Pentium.

В загальному випадку суть захищеного режиму полягає в обмеженні можливостей виконання окремих груп команд в залежності від стану комп'ютерної системи, який програмним шляхом може динамічно змінюватись.

Із наведеного визначення випливає необхідність існування спеціальної групи команд, яка призначена для зміни стану комп'ютерної системи і відповідно накладати ті чи інші обмеження на виконання команд із других груп. Команди із такої спеціальної групи називають системними або привілейованими.

Для контролю за виконанням накладених обмежень використовується механізм внутрішніх апаратних переривань, які мають назву виключення. На відміну від переривань від зовнішніх пристроїв, де механізм переривання спрацьовує лише після повного виконання чергової команди (тобто переривається програма, а не команда), в випадку виключень переривається виконання команди, якщо апаратурою процесора виявлено порушення командою встановлених обмежень (правил захисту). При цьому в стек записується адреса команди-порушниці. Процедура обробки виключення має по цій адресі доступ до команди-порушниці, може виконати необхідні зміни чи стану системи чи самої команди і продовжить виконання програми з перерваної команди, або вивести відповідне повідомлення і знять програму з виконання.

 

Захист від взаємного впливу програм.

В оперативній пам'яті більшості комп'ютерних систем в кожний конкретний момент часу може розміщуватись значна кількість різних програм та даних, які розділяють на системні та прикладні. Почергове виконання цих програм в відповідності до потреб експлуатації в загальному випадку може призвести до непередбаченого і несанкціонованого взаємного впливу між ними, який виникає в наслідок помилок в програмах. Як небезпідставно шуткують теоретики програмування, безпомилкова програма - це та програма, в якій помилки ще не виявлені. На рівні машинних команд і відповідно на рівні мови Асемблера несанкціонований вплив між програмами або частинами однієї і тієї програми можна розділить на наступні випадки:

a) читання даних по помилковій адресі (наприклад, читання байт програми або даних із другої програми), що може привести до неправильної роботи програми, яка читає.

b) записування даних по помилковій адресі – (наприклад “пошкодження” команд або даних другої програми), що призводить до помилок в роботі другої програми, коли вона буде запущена

c) передача управління по помилковій адресі (як правило, не тільки не на початок якоїсь другої програми, а і не на перший байт команди іншої програми), що призводить до не передбачуваної реакції всієї комп’ютерної системи.

Можна вважати, що непередбачений і несанкціонований взаємний вплив між програмами пов’язаний з помилками в адресації. Інші помилки в програмах приведуть до неправильних результатів її роботи, що може негативно вплинути на інші програми, але такий вплив можна передбачити і нівелювати програмним шляхом.

На рівні мови Асемблера основним джерелом помилок в адресації є помилки в посередній адресації та багатокомпонентній адресації, коли вся адреса або окремі її компоненти розміщуються не в команді, а в регістрах або пам'яті.

Прикладами таких команд, при зверненні до пам'яті, є

Mov [si],dx

Add [bx+di],cx

Shl Mas1[bx],6

Xor Mas1[bx+si],ax

Push ax

Pop dx

Прикладами таких команд при внутрішньо сегментній передачі управління є

Jmp word ptr Mas2[si]

Jmp word ptr [di]

Jmp ax

Ret

Вміст регістрів, які використовуються для адресації, часто буває результатом досить складних обчислень, що є потенційним джерелом помилок. Практика програмування показує, що особливо часто виникають помилки при використанні команди ret через те, що при виконанні процедури виник дисбаланс читання та записування в стек. В результаті замість повернення із процедури відбувається передача управління по випадковій адресі.

При сегментній організації пам'яті додатковим джерелом помилок адресації є помилки в завантаженні та використанні сегментних регістрів.

 

Mov ax,ds

Mov ds,ax

що для непосвячених виглядає достатньо абсурдно.

Розміщення дескрипторів сегментів, з якими виконується робота, в тіньових регістрах "під рукою" процесора, дозволяє досить просто встановлювати і контролювати різноманітні правила захисту. Насамперед не викликає ускладнень контроль зміщення в сегменті на відповідність поля Limit. Крім того, 5-ий байт дескриптора, який названо як байт атрибутів (AR), дозволяє значно деталізувати властивості сегменту. Розглянемо окремі поля (розряди) цього байту детальніше.

Старший біт байта атрибутів (біт P - біт присутності) використовується як ознака присутності сегменту в ОЗП. Це дозволяє на рівні операційної системи організувати "підкачку" сегментів з жорсткого диску, звільнюючи пам'ять від уже використаних сегментів шляхом їх запису, наприклад, на жорсткий диск. Щоб операційна система не "відправила" на жорсткий диск сегмент, який в той момент використовується, то при завантажені сегментного регістра селектором, апаратура процесора записує 1 в молодший біт байта атрибутів (біт А - біт доступу) відповідного дескриптора. Операційна система може використовувати для своїх потреб 4-ий біт 6-го байта дескриптора (біт Uбіт користувача), який апаратурою процесора не встановлюється і не використовується.

Біти 6 та 5 байта атрибутів утворюють поле DPL - рівень привілеїв сегменту. Детальніше система привілеїв буде розглянута в наступному підрозділі. Біт 4 байта атрибутів (біт S - системний) в дескрипторах сегментів завжди встановлюється в 1. Значення S =0 використовується для ідентифікації спеціальних системних дескрипторів, частина із яких буде розглянута при організації переривань в захищеному режимі. Всі чотири молодші біти байта атрибутів в системному дескрипторі використовуються для вказівки типу дескриптора. В дескрипторах сегментів для вказівки на тип дескриптора використовуються біти 3-1 байта атрибутів. При цьому 3-й біт, (біт I - біт призначення) вказує на сегмент кодів (I =1), або на сегмент даних або стека (I =0).

Структура дескриптора сегмента кодів

Байт 7 Байт 6 Байт 5 Байт 4
Base_3 (31-24) G D   U Limit_2 (19 - 16) P DPL     C R A Base_2 (23-16)
Base_1 (15 - 0) Limit_1 (15 - 0)
Байт 3 Байт 2 Байт 1 Байт 0
                           

 

В дескрипторі сегмента кодів 2-й біт байта атрибутів (біт С – узгодженості) визначає порядок між сегментної (дальньої) передачі управління на сегменти, які мають більший рівень привілеїв (при С =1 не змінюється поточний рівень привілеїв), а 1-ий біт (біт Rчитання) дозволяє (при R =1), або забороняє (при R =0) командам читати із сегмента кодів. Крім того, в дескрипторі сегмента кодів 6-ий біт 6-го байта (біт Dрозмір) визначає розрядність адрес та даних по умовчанню (D= 0 – 16-розрядні, D= 1 – 32-розрядні).

 

Структура дескриптора сегмента даних

Байт 7 Байт 6 Байт 5 Байт 4
Base_3 (31-24) G B   U Limit_2 (19 - 16) P DPL       W A Base_2 (23-16)
Base_1 (15 - 0) Limit_1 (15 - 0)
Байт 3 Байт 2 Байт 1 Байт 0
                           

 

В дескрипторі сегмента даних 1-ий біт байта атрибутів (біт W – записування) дозволяє (W = 1), або забороняє (W = 0) записування в сегмент даних.

 

Структура дескриптора сегмента стека

Байт 7 Байт 6 Байт 5 Байт 4
Base_3 (31-24) G B   U Limit_2 (19 - 16) P DPL         A Base_2 (23-16)
Base_1 (15 - 0) Limit_1 (15 - 0)
Байт 3 Байт 2 Байт 1 Байт 0
                           

 

Особливістю дескриптора сегменту стека є трактовка поля Limit. Поле ліміт в цьому дескрипторі визначає не максимально можливе значення зміщення в сегменті, а мінімально не можливе. Тобто дозволеними є зміщення від Limit+1 до maxsp. Значення maxsp визначається бітом B (6-им бітом 6-го байта дескриптора). Якщо B =0, то maxsp=0FFFFH і в командах роботи із стеком використовується 16-розрядний регістр SP. Якщо B =1, то maxsp=0FFFFFFFFH і в командах роботи із стеком використовується 32-розряднийрегістр ESP.

Відповідно до значень розглянутих атрибутів апаратурою процесора контролюються наступні обмеження при виконанні команд:

a) завантаження в сегментні регістри DS, ES, GS, FS селектора дескриптора сегмента кодів, в якому заборонено читання даних;

b) завантаження в сегментний регістр SS селектора дескриптора сегмента з забороною запису даних;

c) завантаження в сегментний регістр СS селектора дескриптора сегмента, який не є кодовим;

d) любе записування в сегмент кодів;

e) читання із сегмента кодів, де читання заборонено;

f) записування в сегмент даних де заборонено запис:

Крім того, контролюється попадання зміщення в сегменті (ефективної адреси) в дозволений діапазон значень. Зауважимо, що в загальному випадку селектор сегмента даних може бути записаний в регістр SS, а селектор сегмента стека – в регістри DS, ES, GS, FS

 

Елементи системи привілеїв

По значенню поля DPL дескриптора всі сегменти пам’яті належать одному із чотирьох рівнів привілеїв. Найбільш привілейований рівень мають сегменти з DPL= 0, а найменш привілейований - з DPL= 3. Система привілеїв ґрунтується на використанні поточного рівня привілеїв (CPL). Вважається, що CPL=DPL непідлеглого сегмента кодів, селектор якого завантажений в регістр СS. Система привілеїв покладає наступні обмеження на виконання команд:

a) читати та записувати дані можна лише із сегментів, в яких DPL≥CPL;

b) виконувати стекові операції можна лише в сегментах, де DPL=CPL;

c) виконувати між сегментні команди JMP можна лише на сегменти, в яких DPL=CPL, якщо цільовий сегмент узгоджений, то DPL≤CPL;

d) викликати процедури між сегментними командами CALL можна лише із сегментів, в яких DPL≤CPL;

Рівень привілеїв з CPL =0 вважається системним. Лише на цьому рівні можуть виконуватись привілейовані команди, які служать для організації захищеного режиму. До таких команд належить, наприклад, команда завантаження регістра GDTR. Виконання привілейованих команд дозволено, також, в реальному режимі процесора.

 

Ускладнені завдання.

Питання для перевірки.

· Що таке дескриптор сегменту, яка його роль в захищеному режимі

· Що таке селектор дескриптора і для чого він служить

· Чи можна визначити таблицю GDT не в окремому логічному сегменті, а в загальному логічному сегменті даних (_DATA).

· Які особливості використання поля розміру сегменту для сегмента стека

· Чи змінюється вміст регістрів загального призначення при переключенню із режиму в режим

· Які дані необхідно підготувати для переключення в захищений режим

· Порядок переключення в режим реальних адрес.

· Що таке виключення і для чого вони використовуються в захищеному режимі.

· Що собою являє таблиця векторів переривань в захищеному режимі.

· В захищеному режимі неможливо виконувати записування в сегмент кодів. Як же операційні системи завантажують програми в ОЗП?

· Коли доцільно використовувати шлюзи пасток.

· Особливості сегмента стека в захищеному режимі.

 

Зміст роботи.

Робота виконується за два етапи. На першому етапі студентами розробляється та налагоджується програма, яка:

1. Перевіряє поточний режим процесора та підготовлює системні структури, необхідні для роботи в захищеному режимі.

2. Виконує переключення процесора в захищений режим.

3. Виводить діагностичне повідомлення на екран.

4. Забезпечує повернення в режим реальних адрес

Другий етап виконується шляхом доповнення програми, розробленої на першому етапі, системними даними та процедурами для обслуговування переривань (виключень), які виникають в результаті виявлення апаратурою процесора порушень правил захисту програмних об'єктів. За допомогою модифікованої програми проводяться експерименти по активізації захисту згідно завдання.

 

Довідкові дані.

Суть захищеного режиму

Захищений режим в процесорах ф.Intel вперше був реалізований ще в процесорі 80286, подальшого розвитку набув в процесорі 80386 і підтримується із незначними доповненнями у всіх наступних процесорах лінії 80х86 та Pentium.

В загальному випадку суть захищеного режиму полягає в обмеженні можливостей виконання окремих груп команд в залежності від стану комп'ютерної системи, який програмним шляхом може динамічно змінюватись.

Із наведеного визначення випливає необхідність існування спеціальної групи команд, яка призначена для зміни стану комп'ютерної системи і відповідно накладати ті чи інші обмеження на виконання команд із других груп. Команди із такої спеціальної групи називають системними або привілейованими.

Для контролю за виконанням накладених обмежень використовується механізм внутрішніх апаратних переривань, які мають назву виключення. На відміну від переривань від зовнішніх пристроїв, де механізм переривання спрацьовує лише після повного виконання чергової команди (тобто переривається програма, а не команда), в випадку виключень переривається виконання команди, якщо апаратурою процесора виявлено порушення командою встановлених обмежень (правил захисту). При цьому в стек записується адреса команди-порушниці. Процедура обробки виключення має по цій адресі доступ до команди-порушниці, може виконати необхідні зміни чи стану системи чи самої команди і продовжить виконання програми з перерваної команди, або вивести відповідне повідомлення і знять програму з виконання.

 

Захист від взаємного впливу програм.

В оперативній пам'яті більшості комп'ютерних систем в кожний конкретний момент часу може розміщуватись значна кількість різних програм та даних, які розділяють на системні та прикладні. Почергове виконання цих програм в відповідності до потреб експлуатації в загальному випадку може призвести до непередбаченого і несанкціонованого взаємного впливу між ними, який виникає в наслідок помилок в програмах. Як небезпідставно шуткують теоретики програмування, безпомилкова програма - це та програма, в якій помилки ще не виявлені. На рівні машинних команд і відповідно на рівні мови Асемблера несанкціонований вплив між програмами або частинами однієї і тієї програми можна розділить на наступні випадки:

a) читання даних по помилковій адресі (наприклад, читання байт програми або даних із другої програми), що може привести до неправильної роботи програми, яка читає.

b) записування даних по помилковій адресі – (наприклад “пошкодження” команд або даних другої програми), що призводить до помилок в роботі другої програми, коли вона буде запущена

c) передача управління по помилковій адресі (як правило, не тільки не на початок якоїсь другої програми, а і не на перший байт команди іншої програми), що призводить до не передбачуваної реакції всієї комп’ютерної системи.

Можна вважати, що непередбачений і несанкціонований взаємний вплив між програмами пов’язаний з помилками в адресації. Інші помилки в програмах приведуть до неправильних результатів її роботи, що може негативно вплинути на інші програми, але такий вплив можна передбачити і нівелювати програмним шляхом.

На рівні мови Асемблера основним джерелом помилок в адресації є помилки в посередній адресації та багатокомпонентній адресації, коли вся адреса або окремі її компоненти розміщуються не в команді, а в регістрах або пам'яті.

Прикладами таких команд, при зверненні до пам'яті, є

Mov [si],dx

Add [bx+di],cx

Shl Mas1[bx],6

Xor Mas1[bx+si],ax

Push ax

Pop dx

Прикладами таких команд при внутрішньо сегментній передачі управління є

Jmp word ptr Mas2[si]

Jmp word ptr [di]

Jmp ax

Ret

Вміст регістрів, які використовуються для адресації, часто буває результатом досить складних обчислень, що є потенційним джерелом помилок. Практика програмування показує, що особливо часто виникають помилки при використанні команди ret через те, що при виконанні процедури виник дисбаланс читання та записування в стек. В результаті замість повернення із процедури відбувається передача управління по випадковій адресі.

При сегментній організації пам'яті додатковим джерелом помилок адресації є помилки в завантаженні та використанні сегментних регістрів.

 



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 250; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.22.242.141 (0.045 с.)