콜 게이트(인텔)

Call gate (Intel)

게이트는 Call FAR 명령을 사용하여 사전 정의된 함수 호출을 실행할 때 프로세스의 권한 수준변경하기 위한 인텔의 x86 아키텍처의 메커니즘이다.

개요

콜 게이트는 권한이 적은 코드가 더 높은 수준의 코드를 호출할 수 있도록 하기 위한 것이다.사용자 애플리케이션이 커널 기능과 시스템 호출운영 체제에 의해 제어될 수 있는 방식으로 사용할 수 있도록 하기 때문에 메모리 보호를 채택하는 현대 운영 체제에서는 이러한 유형의 메커니즘이 필수적이다.

콜 게이트는 글로벌 설명자 테이블 또는 로컬 설명자 테이블을 통해 액세스한 설명자를 참조하기 위해 특수 선택기 값을 사용하며, 권한 경계를 통과하는 통화에 필요한 정보가 포함되어 있다.이것은 인터럽트에 사용되는 메커니즘과 유사하다.

사용법

운영 체제 커널에 의해 콜 게이트가 이미 설정되었다고 가정하면, 코드는 단순히 필요한 세그먼트 선택기로 콜 FAR을 수행한다(오프셋 필드는 무시됨).프로세서는 항목이 유효하고 코드가 게이트를 사용할 수 있는 충분한 권한으로 작동되고 있는지 확인하기 위해 여러 검사를 수행할 것이다.모든 체크가 통과한다고 가정할 때, 새로운 CS/EIP가 세그먼트 설명자로부터 로드되고, 연속 정보는 새로운 권한 수준(이전의 SS, 이전 ESP, 이전 CS, 이전 EIP, 그 순서대로 이전 EIP)의 스택에 푸시된다.필요한 경우 매개변수를 이전 스택에서 새 스택으로 복사할 수도 있다.복사할 파라미터의 수는 콜 게이트 설명자에 있다.

커널은 RET FAR 명령을 사용하여 사용자 공간 프로그램으로 복귀할 수 있으며, 이 명령어는 스택에서 연속 정보를 튀어나오고 외부 권한 수준으로 복귀한다.

호출 게이트 설명자 형식

타이피프 구조상의 _Call_GATE {  USHOT 오프셋로우;  USHOT 선택기;  UCAR NumberOfArguments:5;  UCAR 예약됨:3;  UCAR 유형:5; // i8의 경우 01100, i286의 경우 00100  UCAR Dpl:2;  UCAR 현재:1;  USHOT 간격띄우기높음; }Call_GATE,*PCALL_GATE; 

이전사용

멀티크스는 콜 게이트의 첫 번째 사용자였다.Honeywell 6180은 건축의 일부로 콜 게이트를 가지고 있었지만, Multics는 더 오래된 GE 645에서 그것들을 시뮬레이션 했다.

OS/2는 링 3에서 실행되는 애플리케이션 코드, 링 2에서 실행되는 권한 코드, 링 0에서 실행되는 커널 코드 간에 전송하기 위한 Intel 콜 게이트의 초기 사용자였다.

윈도 95는 링 0에서 드라이버와 프로세스 전환을 실행하며, 커널32.dll, krnl386.exe 등의 API DLL을 포함한 애플리케이션은 링 3에서 실행된다.드라이버 VWIN32.VXD는 링 0에서 주요 운영 체제 원시 요소를 제공한다.16비트 애플리케이션(MSDOS, Win16)에서 드라이버 기능을 호출할 수 있다.이 주소는 AX 레지스터에 1684h로 INT 2Fh를 호출하여 얻는다.진입점이 요청하고 있는 VxD를 식별하기 위해 BX 레지스터는 16비트 VxD ID로 설정된다.INT 지침에서 돌아오는 즉시 ES.DI 레지스터에는 링 0에서 실행되는 VxD로 제어를 전송하기 위해 호출할 수 있는 먼 포인터가 포함되어 있다.ES가 가리키는 설명자는 사실 콜게이트.[1] 그러나 32비트 애플리케이션은 윈도 95 드라이버 코드에 액세스해야 할 때는 KERNER32에서 미등록 VxDCall 함수를 호출한다.기본적으로 링 모드를 변경하는 INT 30h를 호출하는 DLL.

현대 용법

현대의 x86 운영체제는 콜 FAR 콜게이트에서 탈피하고 있다.x86 시스템 호출 지침(Intel의 SYSENERT/SYSEXIT, AMD의 SYSCALL/SYSRET)이 도입되면서 x86 프로그램의 제어 전송을 위한 새로운 더 빠른 메커니즘이 도입되었다.다른 아키텍처들은 대부분 콜 게이트를 지원하지 않기 때문에 콜 게이트가 인터럽트보다 현저히 빠르더라도 소프트웨어 인터럽트나 트랩이 휴대성을 위해 선호되었기 때문에 이러한 새로운 지침 이전에도 콜 게이트의 사용은 드물었다.

콜 게이트는 SYSENTER/SYSEXIT 및 SYSCALL/SYSRET 지침보다 유연하다. 왜냐하면 콜 게이트는 후자와 달리 임의의 권한 수준에서 임의의 권한 수준(비례적으로 높거나 같음)으로 변경할 수 있기 때문이다.빠른 SYS* 지침은 3에서 0으로 제어 전송만 허용하며 그 반대의 경우도 허용된다.

보안 문제

시스템 보안을 유지하려면 글로벌 설명자 테이블을 보호 메모리에 보관해야 하며, 그렇지 않으면 어떤 프로그램이라도 자체 호출 게이트를 만들어 이를 사용하여 권한 수준을 높일 수 있다.콜 게이트는 소프트웨어 보안 악용에 사용되어 왔으며, 이 보호에 관한 방법이 발견되었다.[2]이것의 한 예는 전자우편구롱이다.\Device\를 사용하는 마이크로소프트 윈도우즈 운영 체제를 이용하기 위해 작성된 A호출 게이트를 설치하는 물리적 메모리.[3]

참고 항목

참조

  1. ^ Matt Pietrek, Windows 95 시스템 프로그래밍 비밀
  2. ^ Intel SYSRET 권한 상승 Xen 프로젝트 블로그
  3. ^ 웜:W32/구롱.설명 F-Secure Lab