커널
커널(Kernel)은 컴퓨터의 운영체제의 핵심이 되는 컴퓨터 프로그램의 하나로, 하드웨어와 응용프로그램 사이에서 인터페이스를 제공하여 응용 프로그램이 하드웨어에서부터 오는 자원을 관리하고 사용할 수 있게 해준다. 즉, 시스템의 모든 것을 완전히 통제한다.[1] [2]
개요
커널은 종료된 입출력 연산 등 커널의 서비스를 경쟁적으로 요구하는 모든 요청들을 처리하는 '인터럽트 처리기'와 어떤 프로그램들이 어떤 순서로 커널의 처리 시간을 공유할 것인지를 결정하는 '스케쥴러', 그리고 스케쥴이 끝나면 실제로 프로세스들에게 컴퓨터의 사용권을 부여하는 '수퍼바이저' 등이 포함되어 있다. 또한 커널은 저장장치나 메모리 내에서 운영체계의 주소 공간을 관리하고, 이들을 주변장치들과 커널의 서비스들을 사용하는 다른 사용자들에게 고루 나누어 주는 '메모리 관리자'를 가지고 있다. 커널을 유지하기 위한 코드는 지속적으로 사용되기에, 보통 자주 사용되지 않는 운영체계 안의 보호된 메모리 영역에 적재된다.[3]
특징
컴퓨터에 속한 자원들의 접근을 중재한다. 커널은 운영체제의 핵심 부분이고, 역할 또한 운영체제의 핵심역할이다. 입출력을 관리하고 소프트웨어로부터의 요청을 하드웨어가 처리할 수 있도록 변환한다.
기능
- 메모리 관리: 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적한다.
- 프로세스 관리: 어떤 프로세스가 중앙 처리 장치(CPU)를 얼마나 오랫동안 사용할지를 결정한다.
- 장치 드라이버: 하드웨어와 프로세스 사이에서 중재자의 역할을 수행한다.
- 시스템 호출 및 보안: 프로세스의 서비스 요청을 수신한다.[4]
- 파일 시스템 관리:
- 디바이스 제어:
- 네트워크 관리:
종류
- 단일형 커널(Monolithic Kernel): 커널의 다양한 서비스 및 수준 높은 하드웨어 추상화를 하나의 주소공간으로 묶은 것으로, 운영체제 개발자의 입장에서 유지보수가 더 어렵지만 성능이 좋다.
- 마이크로커널(MicroKernel): 하드웨어 추상화에 대한 간결한 집합을 제공하고, 더 많은 기능은 응용 소프트웨어를 통해 제공한다.
- 혼합형 커널(Hybrid Kernel): 운영체제에 추가되어야 하는 메커니즘을 최소한으로 제공하는 초소형 커널로, 성능 향상을 위해 코드를 추가적으로 커널 공간에 넣은 것을 제외하면 많은 부분은 순수 마이크로 커널이라고 한다.
- 나노커널(NonoKernel): 모든 커널 코드의 양이 매우 작은 커널로, 실질적으로 모든 서비스를 책임진다.[5]
- 엑소커널(ExoKernel): 낮은 수준의 하드웨어 접근을 위한 최소한의 추상화를 제공한다. 엑소커널 시스템에서는 커널이 아닌 라이브러리가 단일형 커널 수준의 추상을 제공한다.
- 리눅스 커널
프로세서와 시스템 메모리에 상주하면서 디바이스나 메모리 같은 하드웨어 자원을 관리하고, 프로세스의 스케쥴을 관리하여 다중 프로세스를 구현하고, 시스템에 연결된 입출력을 처리하는 운영체제의 핵심역할을 수행한다.
- 모놀리식 커널: 리눅스 커널은 대부분 유닉스 커널과 같은 모놀리식(Monolithic)이다. 그렇기에 논리적으로 구분되는 여러 구성 요소들이 상호간에 연결되어 동작한다.
- 비선점형과 선점형: 비선점형 커널은 프로세스의 동작 상태가 사용자 모드에서 커널 모드로 진입하면 외부에서 해당 프로세스를 중지시키지 못한다. 즉, 해당 프로세스가 커널 모드에서 빠져나왔을 경우에만 스케쥴링이 가능하다. 선점형 커널은 프로세스가 커널 모드로 동작하더라도 스케쥴링 정책이 다른 외부적인 접근을 통해 프로세스를 강제로 중지시킬 수 있다. 수행중인 프로세스가 커널모드로 진입되어 있어도, 우선권이 높은 프로세스로 즉시 전환할 수 있다.
- 가상 메모리 시스템(VM): 메모리 사용량이 늘어나면 디스크의 일부를 확장된 램(RAM)처럼 사용할 수 있게 해준다. 커널은 실제 메모리(RAM)에 올라와 있는 블록들 중에 당장 쓰이지 않는 것을 디스크에 저장하는데, 이로인해 사용가능한 메모리 영역을 훨씬 늘릴 수 있게된다.[6]
- 메모리 관리 장치(MMU) 지원안함
- 가상파일시스템(VFS): 표준 유닉스 파일 시스템이 제공하는 모든 시스템 콜을 처리하는 소프트웨어 계층으로, 여러 종류의 파일 시스템에 대해 공통 인터페이스를 제공한다.[7]
- 모듈을 이용한 커널 확장: [8]
문제점
윈도 커널 요소인 UMPD에서 발견됐다. UMPD는 프린터 그래픽 DLL과 프린터 인터페이스 DLL 두 가지 요소로 구성되어 있다. 문제는 UMPD와 특정 윈도 커널 기능들이 상호작용을 하기 시작할 때 발생한다. 사용자가 인쇄와 관련된 기능들을 사용할 때, UMPD가 그래픽 엔진을 가동시키고, '콜백(callbacks)'이라는 것을 커널로부터 받기 시작한다. 이 상호작용이 일어나는 방식이 취약해지면, 공격자들이 특정 코드를 주입할 수 있게 된다. 마이크로소프트(MS)는 이미 로그인 된 공격자만이 익스플로잇 할 수 있는 권한 상승 취약점이라고 묘사했었고, 익스플로잇에 성공한 공격자는 프로그램 설치, 데이터 열람, 조작 및 삭제, 권한 높은 계정 생성 등의 악성 행위를 할 수 있다고 경고했다. 하지만 블랙햇 유럽(Black Hat Europe)행사에서 사용자 모드의 콜백 매커니즘을 사용하여 커널 층위의 공격을 성공했다. 오래된 취약점, 잘 알려진 취약점, 공격 가능성이 낮다고 치부된 취약점은 고질적인 보안 문제이다.[9]
각주
- ↑ 〈커널(컴퓨팅)〉, 《위키백과》
- ↑ Anderson Kim, 〈(운영체제) 커널이란?〉, 《IT 내맘대로 끄적끄적》, 2019-08-27
- ↑ 〈(커널) 알아봅시다, '커널(Kernel)'〉, 《오픈소스소프트웨어》, 2013-05-16
- ↑ 〈Linux 커널이란 무엇일까요?〉, 《레드햇》
- ↑ 〈마이크로커널〉, 《위키백과》
- ↑ 〈리눅스에서의 가상 메모리란?〉, 《티스토리》, 2017-01-28
- ↑ 〈리눅스 커널 공부 정리 0X04 - 가상 파일 시스템〉, 《티스토리》, 2017-01-28
- ↑ 〈커널(kernel)〉, 《티스토리》, 2016-02-17
- ↑ 문가용 기자, 〈오래된 윈도 커널 요소 취약점의 익스플로잇 등장〉, 《보안뉴스》, 2020-12-10