직접 커널 개체 조작

Direct kernel object manipulation

Direct Kernel Object Manipulation(DKOM; 다이렉트 커널 객체 조작)은 Microsoft Windows의 일반적루트킷 기술로, 잠재적으로 손상되는 서드파티 프로세스, 드라이버, 파일 및 중간 연결을 태스크 매니저이벤트 스케줄러로부터 숨깁니다.

개요

본질적으로 DKOM을 사용하는 루트킷은 객체 매니저 또는 태스크 매니저로부터 자신을 숨깁니다.모든 활성 스레드 및 프로세스 목록을 포함하는 링크 목록을 수정함으로써 이러한 루트킷 유형은 포인터를 루트킷 자체에서 멀리 떨어뜨려 객체 관리자로부터 모든 트레이스를 숨길 수 있습니다.이는 커널 모듈과 로드 가능한 드라이버가 특권 액세스에서 커널 메모리에 직접 액세스하기 때문에 가능합니다.시스템 커널이 시스템에서 실행 중인 모든 프로세스의 목록을 검색하기 위해 ping을 실행하면 EPROCESS에 의존합니다.그러나 Windows 커널은 프로세스 기반이 아닌 스레드 기반이기 때문에 의도하지 않은 [1]영향 없이 포인터를 자유롭게 수정할 수 있습니다.루트킷 프로세스 자체를 감싸도록 링크 리스트포인터를 변경함으로써 루트킷은 Windows 이벤트뷰어 및 이 리스트에 의존하는 시스템 무결성 응용 프로그램에는 표시되지 않게 됩니다.이를 통해 DKOM 루트킷은 타깃 시스템을 자유롭게 제어할 수 있습니다.

DKOM의 용도 [2]

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

오브젝트 매니저로부터 숨기기

각 프로세스는 개체로 표시되며 운영 체제에서 서로 연결됩니다.각 프로세스에는 현재 스레드, 다음 스레드 및 mutex_locked 스레드의 주소를 포함하는 사전 할당된 공간 세트가 있습니다.이 중요한 정보는 메모리의 EPROCESS에 나열됩니다.오브젝트 매니저 섹션에는 실행 중인 기존의 모든 프로세스의 이중 링크 목록이 포함되어 있습니다.이 목록은 EPROCESS라고도 합니다.단, DKOM은 이 구조를 이용하여 숨기는 프로세서의 이전 노드를 가리키도록 프론트 링크(FLINK)를 수정하고 숨겨진 프로세서의 백링크(BLINK)를 이전 [3]구조로 가리킵니다.EPROCESS 블록의 하위 섹션을 수정하면 현재 활성 프로세스 목록이 숨겨진 프로세스 주변을 가리킵니다.이렇게 하면 프로세스가 숨겨져 있기 때문에 스케줄러의 정밀 조사로부터 특정 프로세스 또는 인젝터의 문서 흔적이 기본적으로 숨겨집니다.단, 라운드 로빈 [2]정책에 의해 프로세스 또는 인젝터가 활성화되어 있기 때문에 프로세스는 무기한 실행됩니다.

이런 유형의 루트킷의 주요 문제는 숨겨진 프로세스가 다양한 [3]컨텍스트스위치에 관계없이 계속 실행될 수 있다는 것입니다.윈도우즈 스케줄러에서 스레드는 프로세스가 아닌 작업을 수행하기 위해 구분됩니다.오히려 쓰레드는 특정 기간 동안 여러 프로세스를 호출합니다.이 프로세스는 스케줄러의 라운드로빈 특성에 의해 제어되며 스레드는 다른 스레드를 활성화하기 위해 아이돌 상태가 됩니다.프로세스가 태스크 매니저에게 보이지 않게 되더라도 스레드가 [4]활성화되어 있기 때문에 프로세스는 시스템과 동시에 실행됩니다.이로 인해 루트킷에 의해 생성된 숨겨진 프로세스를 검출하는 것이 매우 어려워집니다.

검출

루트킷 검출은 무결성 검사 및 동작 검출을 포함한 많은 복잡한 레이어로 구분됩니다.CPU 사용률, 진행 중인 네트워크 트래픽발신 네트워크 트래픽 또는 드라이버의 시그니처를 체크하는 것으로, 간단한 바이러스 대책 툴은 일반적인 루트킷을 검출할 수 있습니다.단, 이것은 커널 타입의 루트킷에서는 해당되지 않습니다.이러한 유형의 루트킷은 시스템테이블 및 이벤트뷰어에서 숨길 수 있기 때문에 검출하려면 후크 기능을 찾아야 합니다.이는 구현이 매우 어려울 뿐만 아니라 EPRESS의 모든 노드를 통해 반복해야 합니다.다만, 핸들러내에 물리적으로 악의 있는 프로세스가 존재하지 않는 경우에서도, 백그라운드에서 그 프로세스에 콜이 발신됩니다.이러한 프로세스는 스레드를 가리키고 네트워크 연결은 프로세스를 가리키며 드라이버는 스레드를 가리킵니다.DKOM 루트킷이 실행 가능하려면 [5]EPRESS의 모든 참조에서 그 존재를 숨겨야 합니다.즉, 루트킷은 링커를 정기적으로 업데이트하여 포인트해야 합니다.스케줄러 내의 모든 엔티티(스레드, 오브젝트 헤더 등)를 반복함으로써 DKOM 루트킷을 검출할 수 있습니다.특정 메모리 패턴 또는 동작이 스케줄러에 표시될 수 있으며, 이것이 발견되면 실제 루트킷도 최종적으로 검출할 수 있습니다.[5]

「 」를 참조해 주세요.

레퍼런스

  1. ^ https://www.blackhat.com/presentations/win-usa-04/bh-win-04-butler.pdf 버틀러, 제이미.DCOM, HBGary.2014년 5월 14일 취득.
  2. ^ a b http://bsodtutorials.blogspot.com/2014/01/rootkits-direct-kernel-object.html Miller, Harry. "BSOD 튜토리얼: Rootkits"BSODTORIAL, 2014년 1월 27일2014년 5월 1일 취득
  3. ^ a b http://fluxius.handgrep.se/2011/01/02/ring-0f-fire-rootkits-and-dkom/ FlUxIuS Ring Of Fire: 루트킷.Word Press, 2011년 1월 2일2014년 5월 5일 취득
  4. ^ https://www.symantec.com/avcenter/reference/when.malware.meets.rootkits.pdf 2017-08-28년 엘리아주 플로리오 웨이백머신에서 보관."맬웨어가 루트킷과 일치하는 경우"Symantec, 2005년 12월2014년 5월 9일 취득
  5. ^ a b http://jessekornblum.com/presentations/dodcc11-2.pdf jessekornblum.Windows 메모리 포렌식스,KYRUS Technology, (2006).2014년 5월 14일 취득

외부 링크