본문 바로가기
분석의 묘미

Chapter 1. 루트킷이란? (루트킷의 의미)

by Sweeny 2008. 7. 28.
반응형
사용자 삽입 이미지
Chapter 1. 루트킷이란?
            ㄴ 루트킷의 의미
Chapter 2. 루트킷의 동작원리
Chapter 3. 후킹기술 소개
           ㄴ Import Address Table (IAT) 후킹
           ㄴ Inline 함수 후킹
           ㄴ DLL 인젝션 기법 소개
           ㄴ 커널 후킹 기술 알아보기
Chapter 4. 루트킷 탐지기술 소개
           ㄴ 후킹 탐지기법과 메모리 스캐닝 기법 소개
           ㄴ HIPS(행동 탐지) 기반 탐지 기법 소개
           ㄴ 루트킷 탐지툴(RootkitRevealer)의 작동원리 소개


1. 루트킷이란?

사용자 삽입 이미지
루트킷의 의미...


루트킷(Rootkit)이 뭘까?
루트킷은 필자가 가장 좋아하는 드라이버, 커널 시스템 프로그래밍 분야에서 가장 관심을 갖고 둘러보고 있는 분야 중 하나이다.
루트(Root)의 사전적 의미를 살펴보자.
루트는 식물의 "뿌리 근(根)"이라는 의미를 갖고 있다. 그 다음에 나온 Kit은?
많이 알려졌다 시피 "도구" 라는 의미로 해석되고 있다.


쉽게 해석해보자면 컴퓨터의 뿌리. 가장 근원이자 근본이 되는것은 바로 root 계정일 것이다.
root 계정이란 리눅스(Linux), 유닉스(Unix) 운영체제에서 쓰이는 계정을 뜻하는 단어 중 하나로 우리가 쓰는 Windows에서 슈퍼 관리자(Administrator)와 같은 권한을 갖고 있다.

이 말만 봐도 한가지 알수 있는 사실이 있다.

최초의 루트킷은 바로 유닉스에서 나왔다는 것이다.

루트킷이 최초로 나왔을 당시는 유닉스가 한창 유행이었을 1990년대 시절이다.

지금이나 예나 마찬가지겠지만 별도의
트로이목마백도어 툴 없이 컴퓨터 시스템을 크래킹(불법적으로 시스템에 침투, 자료 파괴, 데이터 갈취 행위의 전체적인 불법행위)할 경우..
다시 이 시스템에 침투할때 마다 별도의 크래킹 작업이 필요했다. 이 별도의 크래킹 작업은 많은 시간이 소요된다.

사용자 삽입 이미지

커널과 OS의 관계(http://www.sweeny.co.kr)

때문에 크래커는 침투를 매번 어렵게 하지 않기 위해 루트킷을 제작하고 그로 인해 루트킷이 최초로 탄생하게 되었다. 최초의 루트킷은 커널에 침투하지 않고 사용자 계층에서 구동되는 단순한 트로이목마였다고 한다.

리눅스, 유닉스의 콘솔(Console)창에서 ls라는 명령어가 있다. 이 ls명령어는 Windows 도스(DOS)에서 사용했던 명령어인 dir와 같은 기능으로써 현재 디렉터리에서 하위 디렉터리까지 리스트로 보여주는 기능이다.

이 ls라는 명령어를 통해 모든 디렉터리와 파일들을 나열하게 되는데 이 ls를 조작한 것이라고 생각해 보자. 즉, 상대방 컴퓨터에 Knife 라는 크래킹툴을 심어놨다고 가정했을때 시스템 관리자는 ls 명령어를 통해 자신이 설치하지도 않은 파일인 Knife 라는 것이 설치되었음을 간파할 것이고 이것은 더 이상 Knife라는 크래킹툴을 통해 크래킹을 할 수 없음을 나타낸다는 것이다. 그래서 생각해낸 것이 시스템에 가장 먼저 침투하여 ls명령어를 조작하거나 침투한 크래커가 직접 별도로 제작한 ls프로그램을 덮어쓰기 해버리는 것이었다. 이러면 사용자가 ls 명령어를 쓰더라도 크래커가 심어놓은 파일이나 디렉터리가 보이지 않고 원하는 작업을 계속 수행할 수 있었다.

시스템 관리자들은 이러한 행위를 막기 위해 언제, 어떤 파일이 교체 되었는지를 알 수 있는 파일 체크 프로그램을 개발하였다.

기는 놈 위에 걷는 놈 있고, 걷는 놈 위에 뛰는 놈 있다고....

체크 프로그램을 개발하여 더 이상 ls프로그램을 대체하는것으로 시스템에 침투하는 것이 어려워지자 그때부터 크래커들은 컴퓨터의 근원이자 근본인 커널에 눈을 돌리기 시작하고, 이 때부터 시스템에 침투하려는 많은 크래커들과 이 크래커들을 어떤 방법으로 막아야 될지에 대한 커널과 커널 루트킷에 대한 연구가 급속도로 진척되기 시작했다.

위에서 루트킷의 역사에 대해 어느정도 알아봤다.

그렇다면 루트킷의 의미는 무엇일까?

위에서 언급했듯이 문맥상으로도 어느정도 감이 잡힐 것이라 생각한다.
루트킷의 진정한 기능이자 진정한 의미는 은폐, 숨겨진(Masking, Hidden)이라는 것이다.

실상 현재 굉장히 많은 네티즌들과 블로거, 언론기자, 심지어는 커리어(career)와 견해 지식이 짧은 보안 전문가까지 루트킷에 대한 언어를 오용(用)하고 있다.

루트킷 자체가 멀웨어(Malware)에 포함되고, 시스템 관리자에게 해를 끼치는 프로그램으로 잘못 인식하고 착각하고 있다는 것이다. 이는 해커해킹. 크래커와 크래킹을 제대로 구분하지 못하는 것과 마찬가지이다. (사실 해커와 크래커는 혼동할 만한 법도 있는 것이 해커가 마음을 바꿔먹으면 그대로 크래커가 된다. 이때 언어의 사용선택은 각자 개인에게 있지만 그것을 대중에게 전파해주는 언론 기자만큼은 올바른 언어를 선택해야 할 것이다. 이런 점에서 국내 최고의 보안기업인 안철수연구소. 안랩(Ahnlab)의 주력제품인 V3와 V3 365 Clinic에 "해킹 차단"이라는 단어 선택은 정말 단어오용의 단적인 예를 가장 보여주는 듯 하다. 국내 가장 큰 기업이 단어선택을 이렇게 하므로 해서 해킹은 더욱더 나쁜일로만 치부되었다는 점에서 V3 프로그램은 괜찮다싶지만 안랩은 글쎄...)

루트킷 자체가 바이러스, 버퍼 오버런, 버퍼 오버플로우같은 자체적인 공격 프로그램이 아니다.
현재 루트킷은 디바이스 드라이버와 바이러스가 결합된 상태로 패키징 된다고 루트킷 자체를 공격 프로그램으로 결부시키는 것은 옳은 행동이 아니다.

루트킷은 바이러스 은닉 기능말고도 현재 우리가 사용하는 백신이나 방화벽의 프로세스(Process)와 커널 드라이버를 은닉시켜 주는 기능을 한다. 만약 루트킷을 멀웨어라고 칭해버리면 멀웨어를 잡는 백신 역시 마찬가지로 멀웨어라는 범주에 속해버리게 되는.. "멀웨어가 멀웨어를 잡는 동족사냥 프로그램"이라는 이상한 관계로 서로 뜻하는 언어가 뒤엉켜버리게 된다.

루트킷은 절대 나쁜 행위를 끼치는 것이 아닌, 그저 은폐와 은닉을 가지고 있는 컴퓨터 "기술"이라고만 알아뒀으면 좋겠다.

다음에는 몇몇 루트킷의 예를 들어 루트킷이 동작하는 원리를 알아보도록 하겠다.
반응형