유저 레벨 루트킷 (User Level Rootkit)
[special report 2 | 루트킷(Rootkit)]
유저 레벨 루트킷 (User Level Rootkit)
"유저 레벨에선 결코 루트킷을 구현할 수 없다. 루트킷은 반드시 ring0 에서 제작해야만 루트킷이다" 라는 명제만이 절대 정답은 아니다. 유저 레벨에서도 구현할 수 있는 루트킷 기법은 얼마든지 있으며 실제 바이러스들도 굳이 드라이버를 설치하지 않고도 자신을 은닉하고 모습을 많이 보여주고 있다. 이 글에서는 유저 레벨의 루트킷에는 어떤 것들이 있으며, 검출 방법은 또 어떠한 방법들이 있는지 알아본다.
------------------------------------------------------
강병탁 window31@empal.com, www.window31.com | 바이너리 취약점 분석 업무를 하고 있다. 안티 크래킹/안티 디버깅 엔진 개발을 다년간 해왔으며 시스템 프로그래밍과 리버스 엔지니어링에 관심이 많다. 악성 코드나 해킹툴이 내부에 담고 있는 천재적인 알고리즘에 감탄하며 오늘도 IDA를 돌린다.
------------------------------------------------------
루트킷은 반드시 커널 레벨에서만 가동되어야 한다는 고정관념이 있다. 유저 레벨에서 아무리 숨겨 보았자 커널에서 쉽게 발견할 수 있다는 점에서 기능상의 한계를 많이 지적하는 편이다. 하지만 루트킷을 단순히 "최고의 은닉" 기술에만 국한시켜서는 안 된다. 은닉이라는 기본 테마가 "무엇으로부터의 은닉" 이라는 구체적 명제에 목매이지 않는다면, 유저 레벨 루트킷도 훌륭한 투명인간이 될 수 있다. 예를 들어 유저 레벨의 루트킷은 IceSword 등 대부분의 루트킷 디텍터에 쉽게 발견이 되는 편이다. 하지만 그 같은 커널 드라이버를 이용하는 루트킷 디텍터를 사용할 수 없는 경우, 그리고 루트킷을 사용할 목적지가 드라이버와 무관한 장소일 경우라면 유저 레벨 루트킷도 충분한 가치를 발산할 수 있다. 더욱이 루트킷 하면 드라이버라고 생각하는데, 유저 레벨 루트킷은 드라이버를 깔지 않고 숨겼다는 점에서 어떤 면에서는 더욱 훌륭하다고 볼 수 있다.
그리고 유저 레벨 루트킷은 "절대로 발견할 수 없도록 숨긴다"라는 목적보다는 그 기술이나 구현론 자체에 더욱 중점을 두어야 한다고 본다. 유저 레벨 루트킷을 구현하려면 API Hooking이나 각종 시스템 지식들이 다양하게 요구된다. "절대 발견할 수 없도록 숨긴다"에 너무 치중하지만 않는다면, 유저 레벨 루트킷을 연구하면서 얻을 수 있는 시스템 개발적 지식은 아주 많으리라 생각된다. 또한 유저 레벨의 루트킷은 굳이 루트킷 구현이 아닌 다른 여러 곳에서도 이용될 수 있는 알고리즘도 있기 때문에 얻을 수 있는 것은 더욱 많다고 생각된다. 따라서 루트킷을 커널에서만 구현해야 한다는 관념에 너무 얽매일 필요는 없으며, 유저 레벨에서 구현할 수 있는 루트킷도 어떤 것이 있으며 그 구조는 어떠한지 살펴볼 필요가 있다.
