Volací brána (Intel) - Call gate (Intel)

A volací brána je mechanismus v Intel architektura x86 pro změnu úroveň oprávnění procesu, když provede předdefinovaný volání funkce pomocí instrukce CALL FAR.

Přehled

Volací brány mají umožnit méně privilegovanému kódu volat kód s vyšší úrovní oprávnění. Tento typ mechanismu je nezbytný v moderních operačních systémech, které používají ochrana paměti protože umožňuje použití uživatelských aplikací jádro funkce a systémová volání způsobem, který lze ovládat operační systém.

Volací brány používají speciální hodnotu selektoru k odkazování na deskriptor přístupný prostřednictvím Tabulka globálního deskriptoru nebo Tabulka místního deskriptoru, který obsahuje informace potřebné pro volání přes hranice oprávnění. To je podobné mechanismu, který se používá pro přerušení.

Používání

Za předpokladu, že volací brána již byla nastavena operační systém jádro, kód jednoduše provede CALL FAR s nezbytným selektor segmentů (pole offsetu je ignorováno). Procesor provede řadu kontrol, aby se ujistil, že položka je platná a kód fungoval s dostatečným oprávněním pro použití brány. Za předpokladu, že všechny kontroly projdou, nový CS /EIP je načten z deskriptor segmentu a informace o pokračování se vloží do zásobníku nové úrovně oprávnění (starý SS, starý ESP, starý CS, starý EIP, v uvedeném pořadí). V případě potřeby je také možné zkopírovat parametry ze starého zásobníku do nového zásobníku. Počet parametrů ke kopírování se nachází v deskriptoru brány volání.

Jádro se může vrátit do programu uživatelského prostoru pomocí instrukce RET FAR, která vysune informace o pokračování ze zásobníku a vrátí se na vnější úroveň oprávnění.

Formát deskriptoru brány volání

typedef struktur _CALL_GATE{	USHORT OffsetLow;	USHORT Volič;	UCHAR NumberOfArguments:5;	UCHAR Rezervováno:3;	UCHAR Typ:5; // 01100 v i386, 00100 v i286	UCHAR Dpl:2;	UCHAR Současnost, dárek:1;	USHORT OffsetVysoká;}CALL_GATE,*PCALL_GATE;

Předchozí použití

Multics byl prvním uživatelem bran. The Honeywell 6180 měl brány brány jako součást architektury, ale Multics je simuloval na starší GE 645.

OS / 2 byl jedním z prvních uživatelů bran Intel k přenosu mezi kód aplikace běží v kruhu 3, privilegovaný kód běží v kruhu 2 a kód jádra v kruhu 0.

Windows 95 spouští ovladače a přepíná procesy v kruhu 0, zatímco aplikace, včetně API DLL, jako jsou kernel32.dll a krnl386.exe, se spouštějí v kruhu 3. Ovladač VWIN32.VXD poskytuje klíčová primitiva operačního systému v kruhu 0. Umožňuje volání ovladače funkce ze 16bitových aplikací (MSDOS a Win16). Tato adresa se získá voláním INT 2Fh s 1684h v registru AX. Aby bylo možné určit, o který vstupní bod VxD se žádá, je registr BX nastaven na 16bitové ID VxD. Po návratu z instrukce INT obsahují registry ES.DI vzdálený ukazatel, který lze volat k přenosu řízení na VxD běžící na kruhu 0. Deskriptor, na který odkazuje ES, je ve skutečnosti brána volání.[1] 32bitové aplikace však, když potřebují získat přístup k kódu ovladače pro Windows 95, volají nezdokumentovanou funkci VxDCall v KERNEL32.DLL, která v podstatě volá INT 30h, což mění režim vyzvánění.

Moderní využití

Moderní operační systémy x86 přecházejí od bran CALL FAR. Se zavedením pokynů x86 pro systémové volání (SYSENTER / SYSEXIT od společnosti Intel a SYSCALL / SYSRET od společnosti AMD), byl zaveden nový rychlejší mechanismus pro převody řízení pro programy x86. Jelikož většina ostatních architektur nepodporuje brány volání, jejich použití bylo vzácné ještě před těmito novými pokyny, jako přerušení softwaru nebo pasti byly preferovány pro přenositelnost, přestože brány jsou podstatně rychlejší než přerušení.

Volací brány jsou flexibilnější než instrukce SYSENTER / SYSEXIT a SYSCALL / SYSRET, protože na rozdíl od posledních dvou volacích bran umožňují změnu z libovolné úrovně oprávnění na libovolnou (i když vyšší nebo stejnou) úroveň oprávnění. Rychlé pokyny SYS * umožňují pouze převody řízení z prsten 3 až 0 a naopak.

Bezpečnostní problémy

Aby se zachovalo zabezpečení systému, musí být tabulka globálního deskriptoru uchovávána v chráněné paměti, jinak bude jakýkoli program schopen vytvořit vlastní bránu volání a použít ji ke zvýšení úrovně oprávnění. Volací brány byly použity v softwaru bezpečnostní exploity, když byly nalezeny způsoby kolem této ochrany.[2] Jedním z příkladů je e-mail červ Gurong.A, napsaný k využití Microsoft Windows operační systém, který k instalaci volací brány používá DevicePhysicalMemory.[3]

Viz také

Reference

  1. ^ Matt Pietrek, Tajemství programování systému Windows 95
  2. ^ Eskalace oprávnění Intel SYSRET Blog projektu Xen
  3. ^ Červ: W32 / Gurong.A Popis F-Secure Labs