User mode와 Kernel mode에서 Memory 접근 권한
배경
2024년 7월 19일 Windows를 사용하는 전 세계의 수많은 컴퓨터에서 블루스크린 문제가 발생했습니다.
Windows에서 블루스크린은 컴퓨터를 재부팅 시켜야 할 정도로 치명적인 오류가 발생했다는 의미입니다.
이로인해 기업, 공기관, 공항 등 주요 시스템들이 다운되어 업무가 마비되는 상황을 겼었다고 합니다.
원인은 널리 사용되는 보안 소프트웨어의 결함이라고 합니다.
일반적인 소프트웨어는 블루스크린 문제를 발생시킬 여지가 거의 없습니다만,
저 보안 소프트웨어는 무엇이 다르길래 블루스크린 문제를 발생시켰을까요?
궁금증을 풀어봅시다.
User mode 와 Kernel mode
Windows 프로그램은 크게 2가지 모드를 활용합니다.
- User mode
- Kernel mode
대부분의 SW 개발자는 User mode에서 동작하는 Code를 작성하여 프로그램을 개발합니다.
(File 읽기/쓰기 처럼 Kernel mode를 일부 사용할지라도 OS에서 제공하는 안전한 API를 사용하게 됩니다.)
이런 프로그램이 블루스크린을 발생시키는 경우는 거의 없습니다.
왜냐하면, User mode 프로그램은 OS의 철저한 통제하에서 실행되며, 혹시라도 잘못된 Action을 시도하면 OS가 차단합니다.
하지만, Kernel mode에서 동작하는 Code는 OS의 통제를 거의 받지 않습니다.
이런 프로그램은 CPU, Memory, 기타 H/W 장치들을 제어하는 등 거의 모든 권한이 있기 때문에, 잘못된 Action을 하면 블루스크린이 발생합니다.
즉, Kernel mode에서 오류가 있다면 컴퓨터를 마비시키는 아주 치명적인 프로그램이 될 수 있습니다.
따라서, 위의 배경에서 언급했던 보안 소프트웨어는 Kernel mode를 직접 개발하여 활용하는 프로그램일 가능성이 큽니다.
User mode는 User level 또는 Ring3 level 이라고 불리고, Kernel mode는 Kernel level 또는 Ring0 level 이라고 불립니다.
Memory(Ram) 접근 관점에서 두 모드의 차이점
일반적으로 개발되는 Windows Application은 User level의 프로그램입니다.
이런 User level의 프로그램(Process)은 다른 프로그램의 Memory에 접근할 수 없습니다.
왜냐하면 Paging mechanism에 의하여 모든 User level 프로그램은 동일하게 0번지 부터 Memory address를 사용합니다.
즉, 한 프로그램은 다른 프로그램의 Memory address를 알 수 없으며, OS에서 허용하지 않습니다.
또한 Kernel level의 Memory address에도 접근할 수 없습니다.
User level의 프로그램은 자기 자신에 할당된 Memory address만 접근할 수 있습니다.
한편, Kernel level에서 동작하는 프로그램은 고유한 Memory address를 할당받아 사용하므로,
다수의 Kernel level 프로그램들은 겹치는 Memory address를 사용하지 않습니다.
Kernel level 프로그램은 다른 Kernel level과 User level의 Memory address에 접근할 수 있습니다.
따라서, Kernel level code를 작성할 때 Memory 접근에 오류가 없도록 작성해야 합니다.
만일, Memory 접근에 오류가 있다면 블루스크린을 발생 시킬 수 있습니다.
Kernel mode의 Code 작성은 매우 신중해야 한다
위 배경에서 언급했던 보안 소프트웨어는 Memory에 상주하여 실행중인 프로그램과 Storage에 저장된 파일을 상시 모니터링하여 위험요소를 방지/제거하는 것이 주요 기능일 것입니다.
따라서 Kernel mode에서 다양한 Memory address에 접근이 필요했을 것으로 추측됩니다.
이러한 과정에서 오류가 있었기 때문에 블루스크린을 발생시키고 전세계 다양한 컴퓨터에 피해를 주었을 것입니다.
이처럼 Kernel mode에서 작성된 code는 OS에 치명적인 타격을 줄 정도로 매우 강력한 권한을 가집니다.
그만큼 큰 책임이 있기에 매우 신중하게 개발되어야 합니다.