Топ питань
Часова шкала
Чат
Перспективи

Шлюз виклику

З Вікіпедії, вільної енциклопедії

Remove ads

Шлюз виклику (англ. call gate) — механізм у процесорній архітектурі x86, призначений для зміни рівня привілеїв задачі, і реалізований за допомогою механізму CALL FAR.

Призначення

Призначення шлюзів виклику — дозволити менш привілейованому коду (такому, як звичайний застосунок) викликати код, що виконується з вищим рівнем привілеїв. Це може бути, наприклад, ядро операційної системи, або спеціальні системні бібліотеки чи драйвери, що працюють у кільцях захисту 0, 1 або 2.

Кожен шлюз виклику має відповідний селектор, що обирає відповідний дескриптор у GDT чи LDT. Схожий механізм має в архітектурі x86 обслуговування переривань.

Remove ads

Використання

Якщо шлюз виклику коректно встановлений ядром ОС, прикладна програма здійснює інструкцію CALL FAR з потрібним селектором сегмента як аргументом. Поле «зміщення» (offset) при цьому ігнорується. Після успішної перевірки привілеїв процесор завантажує пару CS: EIP з дескриптора сегмента, і записує до стека нового рівня привілеїв всю інформацію, потрібну для коректного відновлення програми після виклику (регістри SS, ESP, CS і EIP перерваної задачі, у вказаному порядку. При потребі зі стека перерваної задачі копіюються параметри, їх кількість вказується у дескрипторі шлюзу.

Після закінчення обробки виклику виконання повертається назад до перерваної задачі за допомогою інструкції RET FAR.

Remove ads

Формат

313029282726252423222120191817161514131211109876543210
offset 31..16PDPL0type
1 1 0 0
000count
selectoroffset 15..0
typedef struct _CALL_GATE
{
	USHORT OffsetLow;
	USHORT Selector;
	UCHAR NumberOfArguments:5;
	UCHAR Reserved:3;
	UCHAR Type:5;
	UCHAR DPL:2;
	UCHAR Present:1;
	USHORT OffsetHigh;
}CALL_GATE;

Безпекові проблеми

Для збереження безпеки системи глобальна таблиця дескрипторів повинна зберігатися у захищеній пам'яті, інакше будь-яка програма зможе створити свій власний шлюз виклику і використати його для підвищення рівня привілеїв. Шлюзи виклику використовувалися у програмних експлойтах, коли були знайдені способи обійти цей захист[1]. Прикладом цього є поштовий хробак Gurong.A, написаний для експлуатації операційної системи Microsoft Windows, який використовує \Device\PhysicalMemory для встановлення шлюзу викликів[2].

Remove ads

Див. також

Джерела

Посилання

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads