맨위로가기

직접 커널 객체 조작

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

직접 커널 객체 조작(DKOM)은 운영 체제 내에서 실행 중인 프로세스를 숨기는 데 사용되는 기술이다. DKOM은 EPROCESS 구조체의 링크를 수정하여 프로세스를 숨기며, 이는 스케줄러의 감시를 피하게 한다. 이러한 방식으로 숨겨진 프로세스는 작업 관리자에 나타나지 않지만, 스레드를 통해 시스템에서 계속 실행될 수 있다. DKOM 루트킷은 CPU 사용량, 네트워크 트래픽, 코드 서명 검사를 통해 탐지할 수 있지만, 커널 유형 루트킷은 시스템 테이블 및 이벤트 뷰어에서 숨길 수 있어 탐지가 어렵다. DKOM 루트킷 탐지에는 EPROCESS의 모든 노드를 반복하거나, 스케줄러에서 메모리 패턴이나 행위를 확인하는 방법이 사용된다.

더 읽어볼만한 페이지

  • 루트킷 - 백도어
    백도어는 시스템 보안을 우회하여 특정 기능에 접근하도록 의도적으로 만들어진 통로로, 악의적 사용자에 의해 무단 접근 및 정보 탈취에 악용될 수 있으며, 웜이나 트로이 목마 형태로 나타나 개인 정보 유출 및 시스템 제어 탈취와 같은 심각한 보안 문제를 야기한다.
  • 루트킷 - Chkrootkit
    Chkrootkit은 리눅스 시스템에서 루트킷을 탐지하여 시스템 보안 문제를 해결하도록 돕는 도구이지만, 모든 종류의 루트킷을 탐지할 수 있는 것은 아니다.
직접 커널 객체 조작

2. 역사

루트킷의 개념은 1990년대 초반 유닉스 시스템에서 처음 등장했다. 초기 루트킷은 시스템 유틸리티를 변조하는 방식으로 동작했지만, 기술 발전과 함께 커널 레벨에서 동작하는 루트킷이 등장하면서 은닉 기술이 더욱 고도화되었다. DKOM은 커널 객체를 직접 조작하는 방식으로, 후킹(Hooking)과 같은 다른 은닉 기술보다 탐지가 더 어렵다. 윈도우 운영체제의 EPROCESS 구조를 이용하는 DKOM은 2000년대 중반부터 활발히 연구되었으며, 다양한 변종들이 등장하고 있다.

DKOM을 사용하는 루트킷은 객체 관리자 또는 작업 관리자로부터 자신을 숨긴다.[6] 활성화된 스레드 및 프로세스 목록을 포함하는 연결 리스트를 수정하여 객체 관리자로부터 추적을 피한다. 시스템 커널은 실행 중인 프로세스 목록을 찾기 위해 EPROCESS에 의존하지만, 윈도우 커널은 스레드 기반이므로 연결 리스트 포인터를 부작용 없이 수정할 수 있다.[1] 루트킷은 자신을 감싸는 연결 리스트 포인터를 수정하여 윈도우 이벤트 뷰어 및 시스템 무결성 애플리케이션에서 보이지 않게 된다. 이를 통해 DKOM 루트킷은 대상 시스템을 제어할 수 있게 된다.

'''DKOM 사용 예시'''[7] [2]

DKOM 사용 예시
프로세스 숨기기
드라이버 숨기기
포트 숨기기
스레드와 프로세스의 권한 상승
포렌식 우회/왜곡
시스템에 대한 완전한 제어


3. 작동 원리

DKOM을 사용하는 루트킷은 객체 관리자작업 관리자에서 자신을 숨긴다. 이는 모든 활성화된 스레드 및 프로세스 목록을 포함하는 연결 리스트를 수정하여 객체 관리자로부터 모든 흔적을 숨기는 방식으로 이뤄진다.[6]

시스템 커널이 실행 중인 모든 프로세스 목록을 찾을 때 EPROCESS에 의존하지만, 윈도우 커널은 프로세스가 아닌 스레드 기반이므로 연결 리스트의 포인터는 부작용 없이 수정될 수 있다. 루트킷은 프로세스 자신을 감싸는 연결 리스트 포인터를 수정하여 윈도우 이벤트 뷰어 및 이 목록에 의존하는 시스템 무결성 애플리케이션에서 보이지 않게 된다. 이를 통해 DKOM 루트킷은 대상 시스템을 자유롭게 제어할 수 있다.[1]

DKOM은 다음과 같은 작업에 사용될 수 있다:[2]


  • 프로세스, 드라이버, 포트 숨기기
  • 스레드와 프로세스의 권한 상승
  • 포렌식 우회
  • 시스템에 대한 완전한 제어

3. 1. EPROCESS 조작

각 프로세스는 객체로 표현되며 운영 체제 내에서 서로 연결된다. 각 프로세스 내부에는 현재, 다음, 그리고 mutex_locked 스레드의 주소를 포함하는 공간 집합이 미리 할당되어 있다. 이 중요한 정보는 메모리의 EPROCESS에 목록화되어 있다. 객체 관리자 섹션은 EPROCESS라고도 불리는, 실행 중인 알려진 프로세스들의 더블 연결 리스트를 포함한다. 그러나 DKOM은 숨기고자 하는 프로세스의 이전 노드를 가리키는 FLINK(front link)와, 마찬가지로 BLINK(back link)를 수정하여 이 구조체를 이용한다.[8] EPROCESS 블록의 세부 항목을 수정하면, 현재 활성화된 프로세스 목록은 숨겨진 프로세스를 우회하여 가리킨다. 프로세스가 숨겨졌기 때문에, 이것은 근본적으로 스케줄러의 정밀 조사로부터 주어진 프로세스나 인젝터에 대한 증거를 숨긴다.

이러한 유형의 루트킷과 관련된 중요한 점은 숨겨진 프로세스들이 다양한 문맥 전환에도 불구하고 계속 실행될 수 있다는 점이다. 윈도우 스케줄러에서 스레드는 프로세스가 아니라 작업을 수행하기 위해 분리되어 있다. 대신 스레드는 주어진 시간 프레임 동안 여러 프로세스를 호출한다. 이 프로세스는 스케줄러의 라운드 로빈 방식에 의해 제어되며, 다른 스레드가 활성화되는 동안 스레드는 대기 상태에 놓인다. 비록 프로세스가 작업 관리자에는 보이지 않지만, 스레드가 활성화되어 있기 때문에 프로세스는 시스템과 동시에 실행된다.[9] 이것은 루트킷에 의해 만들어진 숨겨진 프로세스를 탐지하는 것을 극도로 어렵게 만든다.

근본적으로 DKOM을 사용하는 루트킷은 객체 관리자 또는 작업 관리자로부터 자신을 숨긴다. 모든 활성 스레드 및 프로세스 목록을 포함하는 연결 리스트를 수정함으로써, 이 유형의 루트킷은 포인터를 루트킷 자체로부터 멀리 감싸서 객체 관리자로부터 모든 흔적을 숨길 수 있다. 이는 커널 모듈과 로드 가능한 장치 드라이버가 특권 접근 권한을 통해 커널 메모리에 직접 접근할 수 있기 때문에 가능하다. 시스템 커널이 시스템에서 실행 중인 모든 프로세스 목록을 찾기 위해 핑을 보낼 때, EPROCESS에 의존하여 이를 찾는다. 그러나 윈도우 커널은 프로세스 기반이 아닌 스레드 기반이기 때문에, 포인터는 의도하지 않은 영향 없이 자유롭게 수정될 수 있다.[1]

3. 2. 권한 상승

DKOM은 단순히 프로세스를 숨기는 것뿐만 아니라, 스레드 및 프로세스의 권한을 상승시키는 데에도 사용될 수 있다.[7] 공격자는 특정 프로세스의 권한을 관리자 권한으로 상승시켜 시스템에 대한 모든 제어 권한을 획득할 수 있다.

4. 탐지 및 대응

DKOM 루트킷은 커널 메모리를 직접 조작하기 때문에 탐지가 매우 어렵다. 일반적인 안티 바이러스 프로그램은 사용자 레벨에서 동작하므로 커널 레벨에서 이루어지는 조작을 탐지하기 어렵다.

DKOM을 사용하는 루트킷은 객체 관리자 또는 작업 관리자에서 자신을 숨긴다. 모든 활성 스레드 및 프로세스 목록을 포함하는 연결 리스트를 수정하여, 포인터를 루트킷 자신으로부터 멀리 감싸서 객체 관리자로부터 숨긴다.[6] 커널 모듈과 로드 가능한 장치 드라이버는 특권 접근 권한을 통해 커널 메모리에 직접 접근할 수 있기 때문이다. 시스템 커널이 시스템에서 실행 중인 모든 프로세스 목록을 찾기 위해 EPROCESS에 의존한다. 윈도우 커널은 프로세스 기반이 아닌 스레드 기반이기 때문에, 포인터는 의도하지 않은 영향 없이 수정될 수 있다.[1] 연결 리스트 포인터를 수정하여 루트킷 프로세스 자체를 우회함으로써, 루트킷은 윈도우 이벤트 뷰어 및 이 목록에 의존하는 모든 시스템 무결성 응용 프로그램에 보이지 않게 된다.

하지만 라운드 로빈 정책으로 인해 스레드가 활성 상태이므로 프로세스는 무기한으로 실행된다.[2] 윈도우 스케줄러에서 스레드는 프로세스가 아닌 작업을 수행하도록 분리된다. 스레드는 주어진 시간 프레임 동안 여러 프로세스를 호출한다. 이 프로세스는 스케줄러의 라운드 로빈 특성에 의해 제어되며 다른 스레드가 활성화되도록 스레드가 유휴 상태로 설정된다. 프로세스가 작업 관리자에서 보이지 않게 되더라도 스레드가 활성 상태이므로 프로세스는 시스템과 동시에 실행된다.[4] 이로 인해 루킷에 의해 생성된 숨겨진 프로세스를 탐지하는 것이 극도로 어려워진다.

4. 1. 탐지 기법

DKOM 루트킷 탐지는 무결성 검사와 행위 탐지 등 여러 단계로 이루어진다. 일반적인 루트킷은 CPU 사용량, 네트워크 트래픽, 드라이버의 서명 등을 검사하는 간단한 안티 바이러스 도구로 탐지할 수 있다. 그러나 커널형 루트킷은 시스템 테이블이나 이벤트 뷰어에서 자신을 숨기므로, 후킹된 함수를 찾기가 어렵고 EPROCESS의 모든 노드를 반복해야 한다.[10]

DKOM 루트킷은 EPROCESS의 모든 참조에서 자신을 숨겨야 하므로,[10] 루트킷은 자신을 가리키는 링크가 생기지 않도록 주기적으로 업데이트한다. 스케줄러의 모든 개체를 반복하여 특정 메모리 패턴이나 행위를 찾으면 루트킷을 탐지할 수 있다.[10]

DKOM 루트킷 탐지를 위해서는 커널 메모리 영역을 직접 검사해야 한다. 메모리 포렌식 도구를 사용하여 EPROCESS 연결 리스트의 무결성을 검사하거나, 특정 메모리 패턴이나 행위를 분석한다. 시스템 콜 후킹, IRP(I/O Request Packet) 후킹 등 다른 커널 조작 기법과 함께 사용되는 경우도 있으므로, 다각적인 탐지 방법이 필요하다.

4. 2. 대응 방안

DKOM 공격에 대응하기 위해서는 시스템 보안을 강화하고, 최신 보안 패치를 적용하는 것이 중요하다. 또한, 커널 레벨에서 동작하는 보안 솔루션을 도입하여 실시간으로 시스템을 감시하고, 이상 행위를 탐지하는 것이 필요하다. 특히 국가 주요 시설과 같이 중요한 시스템에 대해서는 더욱 강력한 보안 대책을 마련해야 한다.[6][7][1][2]

5. 한계점

DKOM 기법은 탐지가 어렵지만, 완벽하게 숨길 수는 없다. 숙련된 보안 전문가나 메모리 포렌식 도구를 통해 DKOM 루트킷의 흔적을 찾을 수 있다.[10] 운영체제의 커널 구조가 변경되면 DKOM 기법도 수정되어야 하므로, 새로운 운영체제 버전에 대한 대응이 필요하다.

이러한 유형의 루트킷과 관련된 중요한 점은 숨겨진 프로세스들이 다양한 문맥 전환에도 불구하고 계속 실행될 수 있다는 점이다.[9] 윈도우 스케줄러에서 스레드들은 프로세스가 아니라 작업을 수행하기 위해 분리되어 있다. 스레드는 주어진 시간 프레임 동안 여러 프로세스들을 호출한다. 이 프로세스는 스케줄러의 라운드 로빈 스케줄링 방식에 의해 제어되며, 스레드들은 다른 스레드가 활성화되는 동안 대기 상태에 놓인다. 비록 프로세스가 작업 관리자에게는 보이지 않지만, 프로세스는 스레드가 활성화되어 있기 때문에 시스템과 동시에 실행된다.[9] 이것은 루트킷에 의해 만들어진 숨겨진 프로세스를 탐지하는 것을 극도로 어렵게 만든다.

루트킷을 탐지하는 것은 무결성 검사 및 행위 탐지를 포함한 여러 복잡한 단계로 나뉜다. CPU 사용, 네트워크 트래픽, 드라이버 시그니처 등을 검사함으로써 간단한 안티 바이러스 도구들은 흔한 루트킷들을 탐지할 수 있다. 그러나 커널 형태의 루트킷의 경우에는 통하지 않는다. 이러한 형태의 루트킷들이 시스템 테이블이나 이벤트 뷰어, 루트킷 탐지로부터 숨기 위해 사용하는 방법으로 인해 후킹된 함수들을 찾는 것을 필요로 하기 때문이다. 이것은 구현하기 매우 힘들 뿐만 아니라 EPROCESS의 모든 노드에서 각각 반복할 필요가 있다.

악의적인 프로세스들의 존재가 물리적으로 핸들러에 존재하지 않는다고 해도 호출들은 반드시 백그라운드에 있어야 한다. DKOM 루트킷이 성공하기 위해서는 자신의 존재를 EPROCESS에 있는 모든 단일 참조로부터 숨겨야 한다.[10] 이것은 루트킷이 일상적으로 자신을 가리키는 어떠한 링크도 만들어지지 않도록 업데이트해야 한다는 것을 의미한다. 스케줄러에서 모든 개체에 각각 반복함으로써 DKOM 루트킷을 탐지하는 것이 가능하게 된다. 특정한 메모리 패턴이나 행위가 스케줄러에서 발견된다면 실제 루트킷도 결국 탐지할 수 있게 된다.[10]

6. 결론

DKOM을 사용하는 루트킷은 객체 관리자작업 관리자에서 자신을 숨긴다. 모든 활성 스레드 및 프로세스 목록을 포함하는 연결 리스트를 수정하여, 루트킷은 포인터를 자신으로부터 멀리 감싸 객체 관리자로부터 모든 흔적을 숨길 수 있다.[6] 이는 커널 모듈과 로드 가능한 장치 드라이버가 특권 접근 권한을 통해 커널 메모리에 직접 접근할 수 있기 때문에 가능하다. 시스템 커널이 실행 중인 모든 프로세스 목록을 찾을 때 EPROCESS에 의존하지만, 윈도우 커널은 스레드 기반이므로 포인터를 자유롭게 수정할 수 있다.[1] 연결 리스트 포인터를 수정하여 루트킷 프로세스 자체를 우회함으로써, 루트킷은 윈도우 이벤트 뷰어 및 관련 시스템 무결성 응용 프로그램에 보이지 않게 된다. 이는 DKOM 루트킷이 대상 시스템을 자유롭게 제어할 수 있게 한다.[2]

DKOM은 다음과 같은 용도로 사용될 수 있다.[7]


  • 프로세스 숨기기
  • 드라이버 숨기기
  • 포트 숨기기
  • 스레드 및 프로세스의 권한 수준 높이기
  • 포렌식 왜곡
  • 시스템 완전 제어

참조

[1] 보고서 DKOM https://www.blackhat[...] HBGary 2014-05-14
[2] 블로그 BSOD Tutorials: Rootkits http://bsodtutorials[...] 2014-01-27
[3] 블로그 Ring Of Fire: Rootkits http://fluxius.handg[...] 2011-01-02
[4] 간행물 When Malware Meets Rootkits https://www.symantec[...] Symantec 2005-12
[5] 보고서 Windows Memory Forensics http://jessekornblum[...] KYRUS Technology 2006
[6] 보고서 DKOM https://www.blackhat[...]
[7] 블로그 BSOD Tutorials: Rootkits http://bsodtutorials[...]
[8] 웹사이트 Ring Of Fire: Rootkits http://fluxius.handg[...]
[9] 간행물 When Malware Meets Rootkits https://www.symantec[...]
[10] 보고서 Windows Memory Forensics http://jessekornblum[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com