2007년 12월 26일
루트킷 탐지 및 제거 모듈 (Anti RootKit Module)
| |
| | |
| 세인트 시큐리티의 5번째 솔루션 - Anti-RootKit Module 루트킷 탐지 및 제거 모듈 (루트킷 무력화 모듈) 1. 루트킷이란? - 루트킷 소개 루트킷이란 원래 Linux 에서 별다른 설정이나 공격 없이 바로 Root 권한의 계정을 획득하기 위한 악성 프로그램으로만들어지다가 점차 발전한 형태의 가장 지능적인 해킹 프로그램이라고 할 수 있겠다. 현대에 들어서는 Linux 운영체제뿐만 아니라Windows 운영체제에서도 사용자에게 피해를 주기 위해서 여러 형태로 발전 및 개발 되고 있다. 루트킷은 가장 기본적인 공격 코드를 포함함과 동시에 루트킷 프로그램 자신을 보호하기 위해서 여러 가지 고급 기법들이 동원된다. 그중에 대표적인 예로 작동되는 프로세스를 숨기거나 자신의 파일을 노출 되지 않도록 한다거나 특정 레지스터 값을 숨기는 등의 작동을하여 자신을 보호 한다. 따라서 탐지를 한다거나 탐지를 하더라도 치료를 하기가 더욱 까다로워 진다. [열기] - 루트킷 기법을 이용한 악성코드 최근에는 위와 같은 루트킷 기법들이 대중화 되고 일반화 되면서 각종 스파이웨어 프로그램이나 악성 코드 프로그램과의 혼합을 통해더욱 사용자들을 힘들게 하고 있다. 그냥 작동하고 그냥 피해만 주던 악성 코드 프로그램들이 이제는 고급 기술인 루트킷 기술을흡수하여 악성코드 자신이 작동하는 프로그램 메커니즘을 보호하고 자신이 관장하는 특정 레지스터 값을 사용자가 변경하지 못하게 막는등의 행위를 하게 되면서 사용자는 최악의 상황에는 치료도 하지 못하고 그냥 시스템을 재 설치 해야 하는 상황에 놓이게 되었다.더욱이 각종 마케팅 목적으로 쓰이는 프로그램 중에서도 일부가 해당 회사의 마케팅 효과를 위해서 사용자는 프로그램을 끄지도지우지도 못하게 만들어 놓아 불편을 가중 시키는 경우도 발생하게 되는 것이다. 이러한 상황에서 루트킷은 그 기술이 공개된 포럼을 통해서 개발자들 사이에 공공연히 공유가 되고 있는 실정이고 조금만 실력이 있는개발자라면 쉽게 그 내용을 프로그램으로 옮길 수 있게 되는 것이다. 또한 그 루트킷 기술 자체는 장, 단점을 가지고 있어서악용하는 경우도 있는가 반면에 다른 특정 분야에서 잘 이용되는 경우도 있어서 이를 구분 하여 탐지하는 것은 더욱 어려워 지는것이 현실이다. 시중에 나와 있는 백신이나 악성코드 기술을 능가하는 기술을 가진 루트킷을 어떻게 탐지하고 제거 할 것인가? 2. 기반 기술 분석 - 루트킷 작동 기법 루트킷의 작동 기법은 아주 다양하지만 가장 기반이 되는 기술은 Hooking 기술이다. Hooking 기술이란 특정 함수나 특정명령어가 실행 됨에 있어서 그 중간에 해당 명령 내용을 가로채서 특정 작업을 한 이후에 원래 실행 함수로 넘겨주게 되어 처리를하도록 만드는 기술이다. (루트킷의 기반이 되는 이 기술은 여러 영역에 걸쳐서 작동이 가능하며 모든 운영체제, 모든 환경에서가능하도록 되어 있어서 그 변형 기술이 나올 가능성도 아주 높다.) 이러한 Hooking 기술은 User Mode, Kernel Mode로 크게 나누어 볼 수 있다. User Mode 에서는 APIHooking, Message Hooking 기법 등을 이용하고 있으며 Kernel Mode 에서는 SSDT Hooking,IDT Hooking, IRP Hooking 기법 등을 이용한다. (각 기법에 대한 상세한 설명은 본 문서의 목적이 아니므로생략할 수 있도록 하겠다.) 과거의 루트킷과 같은 경우는 이러한 Hooking 된 모듈을 찾아서 Hooking 코드만을 복구 해주면 자연스럽게 루트킷을 탐지및 제거가 가능하게 되었지만 현대에 들어서는 루트킷이 사용하는 Hooking 코드가 복구 되면 시스템을 망가지게 해서 탐지를못하게 하는 경우도 있어 기존의 방법으로는 복구하기가 힘들어 진 것이 사실이다. 따라서 세인트 시큐리티는 아래와 같은 기법을개발하였다. 3. 루트킷 탐지 및 제거 기법 (루트킷 무력화 기법) - 탐지 기법 루트킷은 일단 시스템에 존재 여부를 탐지를 하는 것이 가장 중요하다. 탐지를 위해서는 기존에 Hooking 되어 있는 코드를사용하지 않고 직접 해당 함수를 구현을 해서 탐지를 하는 기법이 있을 수 있겠고 Hooking 된 코드를 복원하여 원래 함수를호출하는 방법이 있을 수 있다. Hooking 된 코드를 복원하는 방법에는 아래에 언급된 각종 Hooking 기법 탐지에 많이사용된다. A. Import Address Table (IAT) B. System Service Dispatch Table (SSDT) - KeServiceDescriptorTable C. Interrupt Descriptor Table (IDT) - Per CPU D. Drivers’ I/O Request Packet (IRP) handler 하지만 위의 Hooking 기법들을 바로 복원을 해서 루트킷을 탐지하는 방법에는 여러 위험성이 따르게 된다. 시스템의 상황에 따라범용으로 제작하기가 힘들어지고 실제 제작을 한다고 하더라도 모든 운영체제에 쉽게 적용을 시키기가 쉽지 않다는 것이다. 따라서 세인트 시큐리티는 새로운 방법을 제안한다. 제안 하는 방법은 바로 가상화 방법이다. 시스템 커널 드라이버를 하나 만들고 그 드라이버에서 Windows System 에서 사용하는 실제 함수들을 가상 메모리에Mapping 을 하고 시스템 Entry 에 연결을 시켜주어 실제 Hooking 함수들을 작동하지 않도록 하는 것이다. 따라서 각종 Hooking 기법을 통해서 프로세스를 숨기거나 파일을 숨기거나 레지스터 값을 숨기거나 기타 내용을 차단을한다고 하더라도 시스템에 원래 사용하게 되는 함수나 명령어를 사용하게 되고 전혀 Hooking 되지 않은 원래 함수를 호출하여올바른 결과를 가지고 올 수 있게 되는 것이다. 실제 테스트 해본 결과 CPU 타입이나 환경에 크게 영향을 받지 않고 사용하는 운영체제 별로 Mapping 되는 함수에 대해서만미리 정의를 해주게 되면 반 영구적으로 사용할 수 있는 기법이 되는 것이다. 또한 새로운 Hooking 기법이 나온다고 하더라도해당 Hooking 에 사용하는 함수나 종류만 판별하게 되면 가상 공간에 해당 내용을 Mapping 해주고 SystemEntry 만 연결해주면 되는 방법이니 신종 기법에 대한 대응도 상당히 빠르게 진행 할 수 있다. - 제거 기법 위의 방법을 통해 루트킷 탐지가 가능해지면 제거 또한 쉽게 가능해진다. 일단 해당 루트킷 프로그램이 작동을 하고 있으면 프로세스작동을 중단시킨다. 프로세스를 중단을 시키는 것은 위의 탐지 과정을 통해서 우리가 사용하는 모듈은 Hooking 되지 않은 실제함수를 호출을 해주는 것이기 때문에 프로그램 작동 중단 방지 등의 Hooking 코드로 막아놓은 것을 우회하여 프로그램을 중단시킬 수 있다. 그와 동시에 해당 프로세스가 작동하면서 보호 되고 있었던 루트킷 파일을 찾아내고 지울 수 있도록 원래 함수를호출하여 주면 쉽게 제거가 가능해진다. 혹 루트킷이 다른 시스템 모듈이나 파일에 자신의 프로세스를 걸고 있어도 프로세스가 작동이 중단이 되면 걸어 놓은 링크들이 다 풀리기 때문에 마찬가지로 제거가 가능해진다. ![]() ![]() |
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- API Hooking - 유저모드와 커널모드 by narumee
- AVG Anti-Rootkit 무료 버전 출시 by 헐랭이
- 루트킷에 당하다 by 하나이
- 루트 킷에 대하여 by 씨나
- 루트킷 - 윈도우 커널 조작의 미학 by somma










☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]