본문 바로가기

CAT-Security/미분류

커널모드와 유저모드(사용자모드) 정리




유저 애플리케이션이 운영체제에 치명적인 데이터에 접근하여 수정하거나 삭제하지 못하게 막기 위해 윈도우는 두가지 프로세서 접근 모드를 지원 한다. 유저 어플리케이션은 유저모드에서만, 운영체제 코드(시스템 서비스와 디바이스 드라이버)는 커널 모드에서 실행이 된다. 커널 모드는 모든 시스템 메모리와 모든 CPU 인스트럭션에 접근이 허가된 프로세스 실행 모드를 말한다. (한마디로 admin) 즉 프로세서는 유저 모드보다 커널모드에 높은 권한을 줌으로써 오동작을 유발하는 유저 어플리케이션등이 시스템 전체에 안전성을 해치지 않게 보장하는 필수 기반을 운영체제 설계자에게 제공 한다.



각 프로세스들은 고유한 개별 메모리 공간을 가지지만 커널 모드 운영체제와 디바이스 드라이버 코드는 단일 가상주소 공간을 공유 한다. 가상 메모리 내의 각 페이지에는 페이지를 읽고 쓰기 위해 프로세서가 가져야하는 접근 모드가 무엇인지 표시가 되어있으며, 시스템 공간의 페이지는 커널모드에서만 접근 가능 하다.

즉 유저모드에서는 커널모드에서 접근 할 수있는 메모리 공간에 접근 하지 못한다.


유저 애플리케이션은 시스템 서비스를 호출할 때 유저모드에서 커널모드로 전환 됩니다. 예를 들면 윈도우 ReadFile함수는 실제로 파일로부터 데이터를 읽는 기능을 처리할 내부 윈도우 루틴의 호출이 필요 합니다. 이 루틴은 시스템 데이터 구조체에 접근하므로 커널모드에서 실행되어야 하며, 유저모드에서 커널모드로의 변환은 프로세서를 커널모드로 전환하게 하는 특별한 프로세서 인스트럭션의 사용으로 가능해 진다. 운영체제는 이 인스트럭션을 통해 시스템 서비스가 요청 됐음을 알아채고 스레드가 시스템 함수에 건넨 인자를 검증 한 후 내부 함수를 실행 한다. 제어를 다시 유저 스레드로 되돌리기전에 프로세서는 다시 유저모드로 전환 된다. 이 방법으로 운영체제는 그 자체와 데이터를 사용자 프로세스가 들여다보거나 변경하지 못하게 보호 한다.


유저모드와 커널모드로의 전환과 되돌림은 스레드 스케줄링에 영향을 미치지 않는다. 모드 전환은 컨텍스트 변경이 아니다.



유저 모드는 다음과 같은 특징을 갖는다.


1. 사용자 애플리케이션 코드가 실행 한다.

2. 시스템 데이터에 제한된 접근만이 허용되며 하드웨어를 직저 접근 할수 없다.

3. 유저 애플리케이션은 시스템 서비스 호출을 하면 유저모드에서 커널 모드로 전환 된다.

4. CPU 유저 모드 특권 수준으로 코드를 실행 한다.

5. 유저모드 에서 실행하는 스레드는 자신만의 유저모드 스택을 가진다.


커널 모드는 다음과 같은 특징을 갖는다.


1. 시스템의 모든 메모리에 접근 할 수있고 모든 CPU 명령을 실행 할 수 있다.

2. 운영체제 코드나 디바이스 드라이버 같은 커널 모드 코드를 실행 한다.

3. CPU는 커널 모드 특권 수준에서 코드를 실행 한다.






ex : CreateXXX()계열 함수를 호출하면 이 호출 되는 시점은 유저모드에서 실행 되지만, 이 함수가 실행되면 커널모드로 전환되서 커널에게 오브젝트 생성을 요청 한다. 그리고 커널에서 만들어지든 실패하든 결과가 나와서 함수가 리턴되면 바로 자동으로 유저모드로 돌아오게 된다.



'CAT-Security > 미분류' 카테고리의 다른 글

[Python] BeautifulSoup 모음  (0) 2014.06.01
[윈도우 후킹] Message hooking - 1  (2) 2014.05.19
[PlaidCTF 2013] three eyed fish_100  (0) 2014.05.16
[CSAW CTF 2012] Reversing_400  (0) 2014.05.15
[Codegate2014] dodoCrackme_200  (0) 2014.05.13