본문 바로가기
정상을향해/OS·Kernel Driver·Rootkit

2장. 커널 조작 - 커널의 중요 요소

by 사이테일 2014. 1. 8.

커널의 중요 요소




프로세스 관리


프로세스가 동작하려면 CPU가 필요하다.


커널은 CPU 스케쥴링을 관리하는 코드를 포함하고 있다.


운영체제가 스레드를 지원한다면 커널은 각각의 스레드별로 CPU 스케쥴링을 수행할 것이다.


모든 스레드와 프로세스에 대한 정보는 메모리상의 데이터 구조체에 의해서 유지, 관리된다.


만일 공격자가 이 데이터 구조체를 변경하면 특정한 프로세스를 숨기는 것이 가능하다.




파일 접근


파일 시스템은 운영체제가 제공하는 가장 중요한 기능 중 하나다.


디바이스 드라이버에 의해서 각종 파일시스템이 구현되고 처리된다.


커널은 이런 파일시스템에 대한 일관적인 인터페이스를 제공한다.


커널의 파일시스템 관련 코드를 수정하면 특정한 파일이나 디렉토리를 숨기는 것이 가능하다.




보안


프로세스간의 독립성은 궁극적으로 커널이 보장해 주어야 한다.


간단한 시스템은 보안에 신경을 쓰지 않는다.


예를 들면, 많은 임베디드 디바이스에서는 프로세스가 메모리의 모든 영역에 접근하는 것이 허용된다.


반면에 유닉스와 윈도우 시스템에서는 각각의 프로세스가 접근할 수 있는 메모리 영역이 분리되어 있고


권한이 설정되어 있다.


커널의 보안에 관한 코드를 조금만 수정해도 모든 보안 메커니즘을 무력화시키는 것이 가능하다.




메모리 관리


인텔 팬티엄 패밀리와 같은 몇몇 하드웨어 플랫폼은 복잡한 메모리 관리 체계를 가지고 있다.


메모리 주소는 동시에 여러 개의 물리 메모리 주소로 매핑될 수 있다.


따라서, 어느 한 프로세스가 메모리 주소 0x00401111에서 "HELLO"라는 데이터를 읽을 때


또 다른 프로세스는 같은 메모리 주소인 0x00401111에서 "GO AWAY"라는 주소를 읽을 수 있다.


같은 메모리 주소가 실제적으로는 전혀 다른 물리 메모리 주소를 가리키고 있는 것이다.


물론, 서로 다른 두 물리 메모리 주소는 다른 데이터를 포함하고 있을 것이다.


이것이 가능한 근본적인 이유는 두 프로세스의 메모리 주소가 전혀 다르게 매핑되기 때문이다.


커널의 이와 같은 메모리 관리 부분을 조작할 수 있다면 디버거나 포렌식 소프트웨어로부터


데이터를 숨길 수 있을 것이다.




출처 : 루트킷 윈도우 커널 조작의 미학 / 에이콘 - 그렉 호글런드. 제임스 버틀러 저