보호 링

Protection ring
보호 모드에서 사용할 수 있는 x86에 대한 권한 링

컴퓨터 과학에서 흔히 보호 링이라고 불리는 [1][2]계층적 보호 도메인은 결함(내결함성 향상)과 악의적인 행동(컴퓨터 보안을 제공하여)으로부터 데이터와 기능을 보호하기 위한 메커니즘이다.

컴퓨터 운영체제는 자원에 대한 다른 수준의 접근을 제공한다.보호 링은 컴퓨터 시스템의 구조 내에서 둘 이상의 계층적 수준 또는 권한 계층 중 하나이다.이는 일반적으로 하드웨어 또는 마이크로코드 수준에서 서로 다른 CPU 모드를 제공하는 일부 CPU 아키텍처에 의해 강제된다.링은 가장 많은 특권층(가장 신뢰할 수 있는, 보통 숫자 0)에서 가장 낮은 특권층(가장 적게 신뢰할 수 있는, 대개 가장 높은 링 번호로)까지 계층 구조로 배열된다.대부분의 운영 체제에서 링 0은 가장 많은 권한을 가진 레벨이며 CPU와 메모리 같은 물리적 하드웨어와 가장 직접적으로 상호작용한다.

임의의 사용을 허용하는 과 반대로 외부 링이 미리 정의된 방식으로 내부 링의 자원에 접근할 수 있도록 링 사이의 특별 콜 게이트가 제공된다.링 사이의 올바른 게이팅 액세스는 한 링 또는 권한 수준의 프로그램이 다른 링의 프로그램에 사용할 리소스를 잘못 사용하는 것을 방지하여 보안을 향상시킬 수 있다.예를 들어 링 3에서 사용자 프로그램으로 실행 인 스파이웨어는 하드웨어 액세스가 장치 드라이버용으로 예약된 링 1 기능이어야 하므로 사용자에게 알리지 않고 웹 카메라를 켜는 것을 방지해야 한다.번호가 높은 링에서 실행되는 웹 브라우저와 같은 프로그램은 번호가 낮은 링으로 제한된 리소스인 네트워크에 대한 액세스를 요청해야 한다.

구현

복수의 보호 링은 오늘날의 유닉스 계열의 운영체제의 매우 안전한 전신인 멀티크스 운영체제가 도입한 가장 혁명적인 개념들 가운데 하나였다.GE 645 메인프레임 컴퓨터는 일부 하드웨어 액세스 제어를 가지고 있었지만, 하드웨어의 링에 대한 완전한 지원을 제공하기에 충분하지 않았기 때문에, Multics는 링 전환을 소프트웨어에 가두어 그들을 지원했다;[3] 그것의 후계자인 Honeywell 6180은 8개의 링에 대한 지원을 가지고 하드웨어에 그것들을 구현했다.[4]그러나 대부분의 범용 시스템은 실행하는 하드웨어가 그것보다 더 많은 CPU 모드를 제공한다고 해도 두 개의 링만 사용한다.예를 들어 Windows 7(윈도우 7)과 Windows Server 2008(및 그 이전 버전)은 이전 버전의 Windows(윈도우)는 두 가지 보호 수준만 지원하는 프로세서에서 실행되었기 때문에 커널 모드에 해당하는 링 0과 사용자 모드에 해당하는 링 3을 가진 두 개의 링만 사용한다.[5][6]

유닉스와 같은 윈도 NT 운영체제는 이 기능을 완전히 활용하지 못하지만, 많은 현대적인 CPU 아키텍처(인기적인 인텔 x86 아키텍처 포함)는 어떤 형태의 링 보호를 포함한다.OS/2는 커널 코드와 장치 드라이버의 경우 링 0, 권한 있는 코드(I/O 액세스 권한이 있는 사용자 프로그램)의 경우 링 2,[7] 권한 없는 코드(대부분의 모든 사용자 프로그램)의 3가지 링을 사용하여 어느 정도 한다.DOS에서 커널, 드라이버 및 애플리케이션은 일반적으로 링 3에서 실행된다(단, 이것은 보호 모드 드라이버 및/또는 DOS 확장기를 사용하는 경우에 독점적이다; 리얼 모드 OS로서 시스템은 사실상 보호 없이 실행된다). 반면 EMM386과 같은 386 메모리 관리자는 링 0에서 실행된다.이 외에도 DR-DOS의 EMM386 3.xx는 선택적으로 일부 모듈(예: DPMS)을 링 1에서 실행할 수 있다.OpenVMS는 커널, 임원, 감독자 및 사용자라는 네 가지 모드를 사용한다.

이러한 설계 구조에 대한 새로운 관심은 Xen VMM 소프트웨어의 확산, 획일적마이크로커널(특히 Usenet 뉴스그룹 및 웹 포럼), NGSCB 이니셔티브의 일부인 마이크로소프트의 Ring-1 설계 구조, Intel VT-x(이전의 Vander)와 같은 x86 가상화를 기반으로 하는 하이퍼바이저에 대한 지속적인 논의와 함께 나타났다.당구를 치다

원래의 멀티크스 시스템은 8개의 고리를 가지고 있었지만, 많은 현대 시스템들은 더 적은 것을 가지고 있다.하드웨어는 특수 기계 레지스터의 도움을 받아 항상 실행 지침 스레드의 현재 링을 인식한다.일부 시스템에서는 가상 메모리 영역에 하드웨어의 링 번호가 할당된다. 예로 Data General Eclipse MV/8000을 들 수 있는데, 프로그램 카운터(PC)의 상위 3비트가 링 레지스터 역할을 했다.따라서 예를 들어 가상 PC를 0xE200000으로 설정한 상태에서 실행하는 코드는 자동으로 링 7에 들어가며, 다른 메모리 부분에서 서브루틴을 호출하면 링 전송이 자동으로 발생한다.

하드웨어는 한 링에서 다른 링으로 통제가 전달될 수 있는 방법을 엄격히 제한하고, 링을 가로질러 수행될 수 있는 메모리 액세스 유형에 대한 제한을 시행한다.x86을 예로 들면, 하위 수준(더 신뢰할 수 있는) 링에서 미리 정의된 진입점을 향해 안전한 방식으로[clarification needed] 제어권을 이전하는 호출 지침이 참조하는 특별한[clarification needed] 게이트 구조가 있다. 이는 링 아키텍처를 사용하는 많은 운영 체제에서 감독자 호출로 기능한다.하드웨어 제한사항은 우발적이거나 악의적인 보안 침해의 기회를 제한하도록 설계되었다.또한 가장 특권 있는 링에는 특수 기능(가상 메모리 하드웨어를 우회하는 실제 메모리 주소 지정 등)이 부여될 수 있다.

ARM 버전 7 아키텍처는 애플리케이션(PL0), 운영 체제(PL1) 및 하이퍼바이저(PL2)의 세 가지 권한 수준을 구현한다.이례적으로 레벨 0(PL0)이 가장 낮은 권한 수준이고 레벨 2가 가장 권한 있는 권한 수준이다.[8]ARM 버전 8은 AArch64[9]: D1-2454 및 AArch32용 애플리케이션(EL0), 운영 체제(EL1), 하이퍼바이저(EL2) 및 보안 모니터/펌웨어(EL3)의 네 가지 예외 수준을 구현한다.[9]: G1-6013

링 보호는 일부 시스템에서 프로세서 모드(마스터/커널/권한/감독자 모드 대 슬레이브/권한 없는/사용자 모드)와 결합될 수 있다.두 가지 모두를 지원하는 하드웨어에서 실행되는 운영 체제는 두 가지 형태의 보호 또는 하나만 사용할 수 있다.

링 아키텍처를 효과적으로 사용하려면 하드웨어와 운영체제 사이의[why?] 긴밀한 협력이 필요하다.여러 하드웨어 플랫폼에서 작동하도록 설계된 운영 체제는 지원되는 모든 플랫폼에 존재하지 않는 경우 링을 제한적으로만 사용할 수 있다.하드웨어가 링을 통해 보다 세밀한 세분성을 제공하더라도 보안 모델을 "커널"과 "사용자"로 단순화하는 경우가 많다.

모드

감독자 모드

컴퓨터 용어로 감독자 모드는 시스템 레벨 소프트웨어에서 실행되는 코드에 의해 변경될 수 있는 하드웨어 매개 플래그다.시스템 수준 작업 또는 스레드는 실행되는 동안 이 플래그를 설정하지만 사용자 수준 애플리케이션은 설정하지 않는다.이 플래그는 다양한 설명자 테이블에 대한 레지스터를 수정하는 것과 같은 기계 코드 작업을 실행할 수 있는지, 인터럽트 비활성화 등의 작업을 수행할 수 있는지 여부를 결정한다.작동해야 할 두 가지 다른 모드를 갖는다는 생각은"통제력이 강화되면 더 많은 책임이 생긴다"에서 비롯된다. 즉, 감독자 모드의 프로그램은 고장이 컴퓨터 시스템 전체를 추락시킬 수 있기 때문에 결코 실패하지 않을 것으로 신뢰된다.

감독자 모드는 "특권적 지시사항을 포함한 모든 지시사항을 실행할 수 있는 일부 프로세서의 실행 모드"이다.또한 다른 주소 공간, 메모리 관리 하드웨어 및 기타 주변 장치에 대한 액세스를 제공할 수 있다.이는 운영체제가 보통 실행되는 모드라고 말했다.[10]

단일 커널에서 운영 체제는 감독자 모드로 실행되고 애플리케이션은 사용자 모드로 실행된다.엑소커넬이나 마이크로커널이 있는 운영 체제와 같은 다른 유형의 운영 체제도 이러한 동작을 반드시 공유하지는 않는다.

PC 세계의 몇 가지 예:

  • Linux, macOSWindows는 감독자/사용자 모드를 사용하는 3개의 운영 체제다.특수 기능을 수행하기 위해 사용자 모드 코드는 감독자 모드 또는 심지어 운영 체제의 신뢰할 수 있는 코드가 필요한 작업을 수행하는 커널 공간에 대한 시스템 호출을 수행해야 하며 실행을 사용자 공간으로 되돌려야 한다.로드 가능한 커널 모듈을 사용하여 커널 공간에 코드를 추가할 수 있지만, 사용자 모드의 액세스 제어 및 안전 제한에 해당하지 않기 때문에 필요한 권한을 가진 사용자만 코드를 추가할 수 있다.
  • DOS(EMM386과 같은 386 메모리 관리자가 로드되지 않는 한), 기타 간단한 운영 체제와 많은 내장 장치가 영구적으로 실행되므로 드라이버를 사용자 프로그램으로 직접 작성할 수 있다.

대부분의 프로세서는 적어도 두 가지 다른 모드를 가지고 있다.x86-프로세서는 4개의 다른 링으로 나뉜 4개의 다른 모드를 가지고 있다.링 0에서 실행되는 프로그램은 시스템으로 어떤 것도 할 수 있으며 링 3에서 실행되는 코드는 컴퓨터 시스템의 나머지 부분에 영향을 미치지 않고 언제든지 실패할 수 있어야 한다.링 1과 링 2는 거의 사용되지 않지만 다른 수준의 접근으로 구성할 수 있다.

대부분의 기존 시스템에서 사용자 모드에서 커널 모드로 전환하면 관련 높은 성능 비용이 발생한다.기본 요청에 따라 측정됨getpid, 대부분의 기계에서 1000–140 사이클의 비용이 소요됨.이 중 100개 정도가 실제 스위치(사용자에서 커널 공간으로 70개, 40개로)를 위한 것이고 나머지는 "커널 오버헤드"[11][12]이다.L3 마이크로커널에서는 이러한 오버헤드를 최소화하여 전체 비용을 약 150 사이클로 줄였다.[11]

모리스 윌키스는 이렇게 썼다.[13]

… 결국 링이 제공한 계층적 보호가 시스템 프로그래머의 요구조건과 밀접하게 일치하지 않고, 두 가지 모드만을 갖는 단순한 시스템에 대해서는 거의 또는 전혀 개선되지 않았다는 것이 명백해졌다.보호반지는 하드웨어에서 효율적인 구현에 자신을 빌려주었지만, 그들에게는 달리 말할 것이 거의 없었다.[...] 보호반지가 해답을 제시하지 못하는 것을 본 후에도 미세한 보호의 매력은 여전했다...이것은 다시 막다른 골목으로 증명되었다...

성능과 결정론을 얻기 위해 일부 시스템은 기기 드라이버가 아닌 애플리케이션 로직으로 볼 수 있는 기능을 커널 모드로 배치한다. 보안 애플리케이션(액세스 제어, 방화벽 등)과 운영 체제 모니터가 예로 꼽힌다.하나 이상의 내장형 데이터베이스 관리 시스템, eXtremeDB 커널 모드는 커널 모드 배포를 위해 특별히 개발되었으며 커널 기반 애플리케이션 기능에 대한 로컬 데이터베이스를 제공하고 커널 기능이 사용자 모드에서 실행되는 데이터베이스 시스템과 상호 작용할 때 발생할 수 있는 컨텍스트 스위치를 제거하기 위해 개발되었다.[14]

기능도 때로는 다른 방향으로 링을 가로질러 이동하기도 한다.예를 들어 Linux 커널은 일반적으로 시스템 호출(즉, 링 전환)을 필요로 하는 기능을 포함하는 vDSO 섹션의 프로세스에 주입한다.이 기능들은 syscall을 하는 대신에 커널이 제공하는 정적 데이터를 사용한다.이것은 링 전환의 필요성을 피하고, 따라서 syscall보다 더 가볍다.함수 gettimeoff day는 이런 방식으로 제공될 수 있다.

하이퍼바이저 모드

Intel 및 AMD의 최신 CPU는 Ring 0 하드웨어 액세스를 제어하는 하이퍼바이저에 대한 x86 가상화 지침을 제공한다.서로 호환되지 않지만 Intel VT-x(코드명 "Vanderpool")와 AMD-V(코드명 "Pacifica") 모두 새로운 "Ring -1"을 생성하여 게스트 운영 체제가 다른 게스트나 호스트 OS에 영향을 주지 않고 기본적으로 링 0 작업을 실행할 수 있도록 한다.

가상화를 지원하기 위해 VT-x 및 SVM은 링 0 아래에 새로운 권한 수준을 삽입한다.둘 다 하이퍼바이저에서 사용하도록 고안된 "Ring -1"에서만 작동하는 9개의 새로운 시스템 코드 지침을 추가한다.[15]

권한 수준

x86 명령 집합권한 수준은 현재 프로세서에서 실행 중인 프로그램을 메모리 영역, I/O 포트 및 특수 지침과 같은 리소스에 대한 액세스를 제어한다.가장 특권이 있는 0부터 가장 낮은 특권이 있는 3까지 4가지 특권 수준이 있다.대부분의 최신 운영 체제는 커널/실무에 대해 레벨 0을 사용하고 애플리케이션 프로그램에는 레벨 3을 사용한다.수준 n에 사용할 수 있는 모든 리소스는 수준 0에서 n까지 사용할 수 있으므로 권한 수준은 링이다.권한이 적은 프로세스가 더 높은 권한 있는 프로세스에 액세스하려고 할 때 일반적인 보호 장애 예외가 OS에 보고된다.

네 가지 특권 수준을 모두 사용할 필요는 없다.Microsoft Windows, MacOS, Linux, iOS, Android 등 시장 점유율이 넓은 현재 운영 체제는 대부분 1비트만 있는 페이징 메커니즘을 사용하여 권한 수준을 Supervisor 또는 User(U/S Bit)로 지정한다.윈도우 NT는 2단계 시스템을 사용한다.[16]8086의 리얼 모드 프로그램은 레벨 0(최고 권한 수준)에서 실행되는 반면, 8086의 가상 모드는 레벨 3에서 모든 프로그램을 실행한다.[17]

x86 ISA 제품군이 지원하는 다중 권한 수준의 잠재적 향후 사용에는 컨테이너화가상 머신이 포함된다.호스트 운영 체제 커널은 전체 권한 액세스(커널 모드)가 있는 지침을 사용할 수 있지만, 가상 시스템이나 컨테이너에서 게스트 OS에서 실행되는 애플리케이션은 사용자 모드에서 가장 낮은 수준의 권한을 사용할 수 있다.가상 시스템과 게스트 OS 커널 자체는 중간 수준의 명령 권한을 사용하여 게스트 운영 체제의 관점에서 시스템 호출과 같은 커널 모드 작업을 호출하고 가상화할 수 있다.[18]

아이오플

IOPLE(I/O Privileges 수준) 플래그는 모든 IA-32 호환 x86 CPU에서 찾을 수 있는 플래그다.그것은 Flags 레지스터의 비트 12와 13을 차지한다.보호 모드와 롱 모드에서는 현재 프로그램이나 작업의 I/O 권한 수준을 보여준다.작업 또는 프로그램이 I/O 포트에 액세스하려면 작업 또는 프로그램의 현재 권한 수준(CPL0, CPL1, CPL2, CPL3)이 IOP보다 작거나 같아야 한다.

IOPLE은 다음을 사용하여 변경할 수 있음POPF(D)그리고IRET(D)현재 권한 수준이 0 링인 경우에만.

IOPLE 외에도 TSS의 I/O 포트 권한은 I/O 포트에 액세스하는 작업의 기능을 결정하는 데도 참여한다.

미스크

x86 시스템에서는 x86 하드웨어 가상화(VT-xSVM)를 "링 -1"로, 시스템 관리 모드를 "링 -2"로, Intel Management EngineAMD 플랫폼 보안 프로세서를 "링 -3"으로 부르기도 한다.[19]

하드웨어 기능 사용

많은 CPU 하드웨어 아키텍처는 그들이 보통 실행하는 운영체제에 의해 이용되는 것보다 훨씬 더 많은 유연성을 제공한다.복잡한 CPU 모드를 적절하게 사용하려면 운영 체제와 CPU 간의 매우 긴밀한 협력이 필요하므로 OS를 CPU 아키텍처와 연결하는 경향이 있다.OS와 CPU가 서로를 위해 특별히 설계된 경우, 이것은 문제가 되지 않지만(일부 하드웨어 기능은 여전히 설명되지 않은 채로 남아 있을 수 있다), OS가 여러 개의 서로 다른 CPU 아키텍처와 호환되도록 설계되었을 때, CPU 모드 기능의 상당 부분을 OS에 의해 무시될 수 있다.예를 들어 Windows에서 두 가지 수준(링 0과 링 3)만 사용하는 이유는 과거에 지원되었던 하드웨어 아키텍처(예: Power)가 있기 때문이다.PC 또는 MIPS)는 두 가지 권한 수준만 구현했다.[5]

Multics는 특수 CPU 아키텍처를 위해 특별히 설계된 운영 체제였으며(이것은 Multics를 위해 특별히 설계되었다), 그것이 이용할 수 있는 CPU 모드를 최대한 활용했다.그러나 규정상 예외였다.오늘날 OS와 하드웨어 사이의 높은 수준의 상호작용이 보안과 안정성에 대한 잠재적인 장점에도 불구하고 종종 비용 효율적이지 않다.

궁극적으로 CPU에 대한 구별되는 작동 모드의 목적은 소프트웨어에 의한 우발적이거나 의도적인 시스템 환경(및 그에 상응하는 시스템 보안 침해)의 손상으로부터 하드웨어를 보호하는 것이다.시스템 소프트웨어의 "신뢰할 수 있는" 부분만 커널 모드의 제한 없는 환경에서 실행되도록 허용한 다음 패러다임 설계에서 절대적으로 필요한 경우에만 실행하도록 허용된다.다른 모든 소프트웨어는 하나 이상의 사용자 모드에서 실행된다.프로세서가 사용자 모드에서 오류 또는 예외 조건을 생성하는 경우, 대부분의 경우 시스템 안정성은 영향을 받지 않으며, 프로세서가 커널 모드에서 오류 또는 예외 조건을 생성하는 경우, 대부분의 운영 체제는 복구할 수 없는 오류로 시스템을 중지한다.모드 계층 구조(링 기반 보안)가 존재하는 경우, 한 권한 수준에서 결함과 예외는 번호가 더 높은 권한 수준만 불안정하게 할 수 있다.따라서 링 0(가장 높은 권한을 가진 커널 모드)의 결함은 전체 시스템을 손상시키지만 링 2의 결함은 링 3 이상과 링 2 그 자체에 기껏해야 영향을 미칠 뿐이다.

모드 간 전환은 높은 권한 수준에서 낮은 권한(커널에서 사용자 모드로 전환) 중 하나로 전환되는 경우 실행 스레드의 재량에 따라 이루어지지만, 하위 권한에서 상위 권한으로 전환되는 권한은 특수 지침을 실행함으로써 전달되는 안전한 하드웨어 제어 "게이트"를 통해서만 이루어질 수 있다.외부 인터럽트가 수신된 경우.

마이크로커널 운영 체제는 보안우아함을 위해 특권 모드에서 실행되는 코드의 양을 최소화하려고 하지만 궁극적으로 성능을 희생시킨다.

참고 항목

참조

  1. ^ Karger, Paul A.; Herbert, Andrew J. (1984). "An Augmented Capability Architecture to Support Lattice Security and Traceability of Access". 1984 IEEE Symposium on Security and Privacy. p. 2. doi:10.1109/SP.1984.10001. ISBN 0-8186-0532-4. S2CID 14788823.
  2. ^ Binder, W. (2001). "Design and implementation of the J-SEAL2 mobile agent kernel". Proceedings 2001 Symposium on Applications and the Internet. pp. 35–42. doi:10.1109/SAINT.2001.905166. ISBN 0-7695-0942-8. S2CID 11066378.
  3. ^ "A Hardware Architecture for Implementing Protection Rings". Retrieved 27 September 2012.
  4. ^ "Multics Glossary - ring". Retrieved 27 September 2012.
  5. ^ a b Russinovich, Mark E.; David A. Solomon (2005). Microsoft Windows Internals (4 ed.). Microsoft Press. pp. 16. ISBN 978-0-7356-1917-3.
  6. ^ Russinovich, Mark (2012). Windows Internals Part 1. 6th Ed. Redmond, Washington: Microsoft Press. p. 17. ISBN 978-0-7356-4873-9. The reason Windows uses only two levels is that some hardware architectures that were supported in the past (such as Compaq Alpha and Silicon Graphics MIPS) implemented only two privilege levels.
  7. ^ "Presentation Device Driver Reference for OS/2 - 5. Introduction to OS/2 Presentation Drivers". Archived from the original on 15 June 2015. Retrieved 13 June 2015.
  8. ^ ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition. Arm Ltd. p. B1-1136.
  9. ^ a b Arm Architecture Reference Manual Armv8, for A-profile architecture. Arm Ltd.
  10. ^ "supervisor mode". FOLDOC. 15 February 1995.
  11. ^ a b 조센 리딩케.µ-Kernel 건설, Proc. 15차 운영 체제 원칙 심포지엄, 1995년 12월
  12. ^ J. K. 1990. 아우스터아웃.운영 체제가 하드웨어만큼 빨라지지 않는 이유는?캘리포니아 애너하임에서 열린 USenix Summer Conference에서 247–256페이지.
  13. ^ Maurice Wilkes (April 1994). "Operating systems in a changing world". ACM SIGOPS Operating Systems Review. 28 (2): 9–21. doi:10.1145/198153.198154. ISSN 0163-5980. S2CID 254134.
  14. ^ 고린과 안드레이와 크리볼라포프, 알렉산더.2008년 5월 Dobb's Journal, "커널 모드 데이터베이스: 고성능 애플리케이션을 위한 DBMS 기술".
  15. ^ Dornan, Andy (1 November 2005). "Intel VT vs. AMD Pacifica". CMP. Archived from the original on 30 May 2013. Retrieved 11 November 2012.
  16. ^ 루시노비치, 마크 E; 데이비드 A.솔로몬(2005년).Microsoft Windows Internals (4 Ed.Microsoft Press. 16페이지.ISBN 978-0-7356-1917-3
  17. ^ Sunil Mathur, "Microprocessor 8086: 건축, 프로그래밍 및 인터페이스", East Economy Edition, PHI Learning
  18. ^ Anderson, Thomas; Dahlin, Michael (21 August 2014). "2.2". Operating Systems: Principles and Practice (2nd ed.). Recursive Books. ISBN 978-0985673529.
  19. ^ Gelas, Johan De. "Hardware Virtualization: the Nuts and Bolts". www.anandtech.com. Retrieved 13 March 2021.
  • Intel 80386 프로그래머 참조서

추가 읽기