'Rootkit'에 해당되는 글 2건

  1. 2008.11.18 DKOM(Direct Kernel Object Manipulation) 기법
  2. 2008.06.30 Core Rootkit Technology for Linux Kernel 2.6
Hacking & Security/Kernel2008. 11. 18. 16:31
 최근 대부분의 보안제품이나 웜바이러스가 유행처럼 SSDT 후킹기법을 사용해서 작동합니다. 이제는 더이상 SSDT 후킹도 최신기술이 아닌 범용기술이 되었습니다. 그래서 점점더 보안소프트웨어와 해킹툴/웜바이러스간의 장벽이 사라지고 있다고 보여집니다. 다양한 해킹기법을 사용한 보안 소프트웨어도 점점더 웜바이러스처럼 견고해지고 있습니다만, 이것은 결국 닭이 먼저나 달걀이 먼저냐의 문제로 보여집니다. 그래서 최근에는 탐지가 쉬운 SSDT 후킹대신에 DKOM 기법을 사용하여 SSDT 후킹 탐지에 걸리지 않는 기법들을 사용하는 추세입니다. DKOM은 의미그대로 직접적으로 커널 오브젝트를 조작하는 방법으로 SSDT 후킹으로 프로세스 숨기기나 네트워크 포트 연결 숨기기가 같은 스텔스 기능을 똑같이 구현할 수 있습니다.
DKOM이 좋은 한가지 예는 보안소프트웨어 자체를 외부의 디버깅이나 프로세스 어태치로부터 자신을 보호하기 위해서 자기자신을 프로세스에서 안보이게 하여 리버싱을 방지하려고 하는 노력도 한가지 예가 될 수있습니다.

1) DKOM으로 숨기기 기법을 한마디로 요약하면
  • 모든 운영체제는 메모리에 계정정보를 보통 구조체 형태나 오브젝트 형태로 저장합니다.
  • 구동되고 있는 프로세스 리스트를 알아내기 위한 함수가 바로 ZwQuerySystemInfomation() 함수입니다.
  • 프로세스 리스트는 EPROCESS 구조체라는 Doubly Linked List 형태로 구성되어 있습니다.
  • EPROCESS 구조체는 FLINK와 BLINK를 멤버로 하는 LIST_ENTRY 구조체를 가지고 있습니다.
  • 현재 구동중인 프로세스의 주소(EPROCESS  구조체)는 PsGetCurrentProcess 함수를 호출하여 찾을 수 있습니다.  
  • PsGetCurrentProcess함수의 실제 함수는 IoGetCurrentProcess 함수가 됨
  • 이 함수를 디스어셈블하면

             mov   eax,   fs:0x00000124;  <-- IoGetCurrentProcess 함수
             mov   eax,   [eax + 0x44];   <-- _EPROCESS의 오프셋
             ret

결론적으로 EPROCESS의 BLINK와 FLINK를 포인터를 조작해서 Rootkit 코드의 프로세스를 Skip하도록 FLINK, BLINK포인터를 조작하면 윈도우즈의 작업관리자(taskmgr.exe)에서 해당 Rootkit 프로세스가 보이지 않게 된다.
보통 SSDT 후킹으로 프로세스를 숨기는 경우에는 SSDT 후킹여부를 탐지 및 복구가 가능하지만 DKOM은 탐지가 휠씬 어렵다.  

2) 디바이스 드라이버 숨기기
로드된 디바이스 드라이버를 안보이게 하는 기법도 DKOM 기법을 사용해서 구현할 수 있습니다.
디바이스 드라이버 오브젝트인 DRIVER_OBECJ 구조체에서 오프셋 값 0x14 위치에 MODULE_ENTRY 오브젝트라고 하는 것이 있습니다. 이 MODULE_ENTRY 역시 Dubly linked 리스트 구조로 FLINK/BLINK로 각 드라이버 리스트를 정보를 파악하게 되는데 이 FLINK/BLINK 값을 조작하면 Rootkit 커널 드라이버를 드라이버 리스트에서 안보이게 할 수 있습니다.
   
    typedef  struct _MODUL_ENTRY {
         LIST_ENTRY module_list_entry;
         DWORD    unknown1[4];
         DWORD    base;
         DWORD    driver_start;
         DWORD    unknown2;
         UNICODE_STRING  driver_Path;
         UNICODE_STRING  driver_Name;

}   MODULE_ENTRY, *PMODULE_ENTRY;


출처 : http://coderant.egloos.com/3564872

Posted by skensita
Hacking & Security/Kernel2008. 6. 30. 08:02

리눅스 커널 2.6의 시스템 콜 제어에 대한 문서입니다. 커널 2.4 에서의 기술은 많이 공개되어 있지만 2.6 부터는 여러가지
제약 사항 때문에 적용이 어려운 것으로 알려져 있으며 전반적인 기반 기술을 정리해서 문서화 한 자료도 찾기 힘듭니다.
본 문서에서는 커널 2.6 에서의 시스템 콜 제어와 관련된 핵심 기술에 대하여 상세히 다루고 있습니다.
Posted by skensita