유저레벨, 커널레벨
Posted 2012. 10. 17. 15:57과거나 지금이나 컴퓨터 보안 또는 시스템 보호에 대해서 많은 논의가 되고 있다.
미숙한 사용자가 중요한 파일을 삭제한다던데 의로적인 악성코드로 인해 시스템이 멈추어 버린다던지
이런 위험요소에서 시스템을 보호하는 것은 매우 중요한 일이다.
인텔은 80286프로세서를 디자인 할때 시스템 보호에 대해 만은 고민을 해 왔으며
이들 중 가장 효과정인 방법으로 마이크로프로세서 내의 MMU( Memory Management Unit )에서의
보호 매커니즘을 생각하게 되었다.
App code : PL 3 :: Aookications
PL 2 :: Operation System Service
PL 1 :: Operation System Service
OS Code : PL 0 :: Operation System Kernel
PL 3 에서 PL 0 으론 특별한 방법에 의해 접근 가능하다.
이방법은 어떠한 프로그램이든 메모리에 있는 코드 내용에 의해 실행이 되어지며 이러한 메모리에 대해
어떠한 명령어가 참조하고자 할 때 그 명령을 실행하는 코드 메모리와 접근하는 메모리의 권한을 체크하여 프로세서 차원에서의 보호가 가능하게 하는것으로 인텔에서는 이러한 것을
멀티링 이라는 형태로 디자인 하였다.
보호 규정
1. 특권 수준이낮은 코드 세그먼트가 특권 수준이 높은 데이터 세그먼트로 엑세스 하는 것은 불가능하다
2. 특권 수준이 낮은 코드 세그먼트에서 특권 수준이 높은 코드 세그먼트로의 제어 이행은 특별한
방법을 사용해서만 가능하다
3. 특권 수준이 높은 코드세그먼트에서 특권 수준이 낮은 코드 세그먼트로의 제어 이행이 불가능하다.
커널모드를 Ring0 이라 하고, 유저모드를 Ring3 이라 한다.
인텔 마이크로프로세서으 ㅣ세그먼트 디스크립터에는 그 디스크립터가 가지는 특권 권한값을
나타내는 DPL 필드를 가지고 있다. 현재 실행중에 있는 코드 세그먼트 디스크립터가 가지는
DPL값을 우리는 CPL이라 부르며( Current Privilege Level ) 이 값이 바로 현재 실행되고 있는
코드의 권한이 된다.
당연히 낮은 권한으로 높은 권한으로의 접근은 불가능 하다.
- Filed under : 윈도우즈 프로그래밍/보호(유저레벨, 커널레벨)