루트킷이란?
루트킷(Rootkit)은 해커가 목표 컴퓨터에 접근하여 제어하기 위해 사용하는 멀웨어다. 일반적으로 운영 체제에 영향을 미치지만, 드물게는 제조 공장으로 침투하여 새로 생산된 컴퓨터에 루트킷이 내장될 수도 있다.
간단히 말해, 루트킷은 위협 행위자가 네트워크에 침투하는 백도어다.
테크피디아의 설명
유닉스, 리눅스 및 기타 유닉스 계열 운영 체제(예: 맥OS)에서 “루트(root)”는 관리자 권한을 가진 슈퍼유저를 의미한다. “킷(kit)” 부분은 위협 행위자가 루트 권한을 획득하고, 백도어를 생성하여 운영 체제에서 숨기는 데 사용하는 소프트웨어 도구 모음을 의미한다.
최초의 루트킷은 1990년대에 유닉스 컴퓨터를 공격하기 위해 만들어졌지만, 오늘날에는 윈도우, 맥OS, 리눅스, 크롬 OS 등 모든 일반 운영 체제를 실행하는 시스템을 손상시키는 데 사용된다.
루트킷은 어떻게 설치되는가?
공격자들은 피싱 캠페인이나 기타 사회 공학적인 방법을 사용하여 루트킷을 설치한다. 패치되지 않은 브라우저의 취약점을 악용하여 웹사이트를 통해 감염시키는 것도 흔한 방법이다.
USB 드롭도 흔한 공격 방법이다. 악성 소프트웨어가 심어진 USB 메모리 스틱을 여러 곳에 두고 공격 대상 회사의 직원들이 점심시간에 찾을 수 있는 곳에 놓아두는 방식이다.
점심 식사 후, 직원들은 주인을 찾기 위해 USB를 자신의 컴퓨터에 연결한다. 그것만으로 감염이 시작된다.
일반적인 루트킷 감염 과정은 드로퍼(dropper)로 시작됩니다. 이것은 로더(loader)를 설치하는 작은 프로그램이다. 로더는 드로퍼에 포함되어 있을 수도 있지만, 최근에는 드로퍼가 로더를 다운로드하는 경우가 더 많다. 그런 다음 로더는 정교한 악성 프로그램인 루트킷을 다운로드한다.
물론 자신 또는 공범이 네트워크에 물리적으로 액세스할 수 있는 경우, 직접 로컬에 루트킷을 설치할 수도 있다. 외부에서 네트워크를 손상시키는 데 성공한 경우 원격으로 루트킷을 설치할 수도 있다.
훨씬 더 드물지만, 실제로 발생한 사례로는, 위협 행위자가 컴퓨터를 제조하는 데 사용되는 “골든 이미지(golden image)”를 손상시키는 데 성공한 경우도 있다. 즉, 공장에서 갓 출고된 새 컴퓨터에 드로퍼가 설치되어 있었다는 뜻이다.
루트킷이 효과적인 이유는 무엇인가?
위협 행위자들은 루트킷이 안티멀웨어 및 안티바이러스 엔드포인트 보호 제품군의 탐지를 피할 수 있도록 많은 노력을 기울이고 있다. 또한 일부 루트킷은 하드 드라이브를 포맷하거나 물리적으로 교체한 후에도 감염된 컴퓨터 내부에 남아있을 수 있어 제거하기가 매우 어렵기로 악명이 높다.
루트킷은 BIOS 또는 UEFI 내에 드로퍼를 숨길 수 있어, 컴퓨터를 다시 초기화하면 컴퓨터가 스스로 재감염된다.
루트킷은 운영 체제와 통합되어 마치 운영 체제의 합법적인 구성 요소인 것처럼 보이며, 무제한의 관리자 권한을 가지고 있어 그 어떤 것도 방해할 수 없다. 공격자는 감염된 컴퓨터에서 원하는 모든 작업을 수행할 수 있다.
네트워크를 해킹하는 횟수가 많을수록 탐지될 확률이 높아진다. 하지만 탐지할 수 없는 비공개 백도어가 있는 경우에는 그렇지 않다. 이것이 바로 루트킷이 제공하는 기능이다. 비밀스럽게 접근할 수 있는 방법과 무제한의 슈퍼유저 권한.
루트킷은 바이러스 백신 소프트웨어를 제거하거나, 바이러스 백신 소프트웨어에 “보이지 않게” 나타나거나, 바이러스 백신 소프트웨어가 감염된 파일을 치료하지 못하게 할 수 있다. 루트킷은 매우 정교한 공격이다.
루트킷은 다음을 할 수 있다:
- 악성 소프트웨어 설치
- 파일 읽기, 복사, 유출 또는 삭제
- 시스템 구성 변경
- 로그 파일 액세스 및 수정
- 키 입력 기록 및 모니터링
- 비밀번호 도용
- 사용자 행동 모니터링
- 네트워크 트래픽 모니터링
- 위협 행위자가 다음에 연결하려고 할 때 은밀하게 액세스할 수 있는 백도어 설치
루트킷의 5가지 유형
루트킷은 컴퓨터 시스템의 다양한 수준에서 작동한다. 사용자 공간은 일상적인 애플리케이션이 운영 체제의 감독과 제한 하에 작동하는 영역이다. 이 공간에서 애플리케이션은 다른 프로그램이 사용하는 메모리에 접근하거나 시스템 수준의 기능에 직접적으로 관여할 수 없다.
대신, 이들은 커널(kernel)에 이러한 기능을 대신 수행하도록 요청해야 한다.
커널 공간은 운영 체제의 핵심인 커널이 실행되는 곳이다. 커널 공간에서 실행되는 프로세스는 커널 드라이버와 같이 특별히 허용된 몇 가지 프로세스만이 있다.
1. 사용자 모드 루트킷
사용자 모드 루트킷은 표적이 되는 컴퓨터의 시스템 API 취약점을 이용해 설치되고, DLL 파일(윈도우)이나 DYLIB 파일(맥OS)과 같은 시스템 구성 요소를 감염시키거나 수정한다. 즉, 감염된 파일의 메모리 공간에서 실행되거나, 해당 메모리를 완전히 덮어쓰고 그 RAM에서 실행될 수 있다.
사용자 모드 루트킷은 감염된 파일과 프로그램을 모니터링한다. 다른 프로세스가 이 파일들을 수정, 업데이트 또는 치료하려고 하면 이를 차단하여 루트킷이 감염된 시스템에서 계속 존재할 수 있게 한다.
2. 커널 모드 루트킷
커널 모드 루트킷은 운영 체제의 일부를 교체하거나 수정하여 감염된 컴퓨터에서 최고 수준의 접근 권한을 획득한다. 윈도우, 맥OS, 리눅스, 유닉스 등 거의 모든 운영 체제를 감염시킬 수 있다.
커널 모드 루트킷을 작성하려면 고급 기술 지식과 프로그래밍 경험이 필요하다. 불행히도 다크웹에서는 일반적인 프로그래머도 자신의 루트킷을 제작할 수 있도록 루트킷 “툴킷”이 판매되고 있다.
커널 모드 루트킷은 탐지하기 어려울 뿐만 아니라 제거하기도 매우 어렵다. 설치되면, 이 악성코드는 “직접 커널 객체 수정(Direct Kernel Object Modification)”과 같은 기법을 사용하여 자신을 은폐하기 위해 커널 데이터 구조를 수정한다.
예를 들어, 윈도우에서 실행 중인 작업 목록은 커널 객체다. 커널 공간에 있지만 사용자 공간의 작업 관리자 프로그램에서 참조할 수 있다. 루트킷은 커널 공간의 목록 데이터를 수정하여, 작업 관리자가 커널에서 목록을 요청할 때, 루트킷이 목록에 포함되지 않은 조작된 복사본을 받게 한다. 이는 보이지 않는다.
3. 부트킷 루트킷
부트킷(bootkit)은 커널 모드 루트킷의 변형으로, 완전히 암호화된 시스템조차 감염시키기 위해 설계되었다. 부트킷은 컴퓨터의 부트 로더를 수정하거나 대체하여 운영 체제 커널이 로드된 후에도 커널 공간에 남아 있다. 이를 통해 사용자 로그인 자격 증명이나 암호 해독 키를 탈취할 수 있다.
일부 루트킷은 마스터 부트 레코드를 수정하여 드라이버가 인증되고 서명될 필요성을 무시한다. 이를 통해 악성 드라이버가 커널에 연결될 수 있으며, 부트킷은 자체적으로 악성 커널 드라이버를 제공한다. 이러한 다단계, 다중 기술 공격은 혼합 공격으로도 불린다.
4. 하이퍼바이저 수준 루트킷
하이퍼바이저(hypervisor) 루트킷의 개념 증명은 미시간 대학교와 마이크로소프트의 공동 노력으로 만들어졌다. 이 루트킷은 감염된 기기의 운영 체제를 가상화하여, 가상화가 가능하게 해주는 소프트웨어인 하이퍼바이저 역할을 한다.
이는, 감염된 운영 체제와 하드웨어 간의 모든 시스템 호출이 하이퍼바이저 루트킷을 통과해야 함을 의미한다. 감염된 운영 체제 자체는 건드리지 않기 때문에, 백신 소프트웨어로는 탐지할 수 없다. 시스템 관점에서 볼 때, 모든 것이 정상적으로 작동하고 있는 것처럼 보인다.
하이퍼바이저 수준 루트킷은 세계적인 전문가들에 의해 실험실에서 성공적으로 구현되었으나, 아직 실제로 발견된 사례는 없다.
5. 하드웨어 수준 루트킷
하드웨어 수준 루트킷은 BIOS, UEFI, 네트워크 카드, 그래픽 카드와 같은 하드웨어의 메모리 영역에 드로퍼 또는 때때로 전체 루트킷을 심는다.
이로 인해 탐지가 거의 불가능하고, 제거도 매우 어렵다.
루트킷이 있는지 어떻게 알 수 있나?
컴퓨터가 평소보다 느리게 작동하거나, 시스템이 멈추거나 충돌하는 문제가 발생할 수 있다. 루트킷도 소프트웨어이며, 소프트웨어에는 버그가 존재한다. 코드가 복잡할수록 버그가 많아질 가능성이 높다. 루트킷은 섬세하고 낮은 수준의 활동을 수행하기 때문에, 만약 버그가 있다면 시스템을 불안정하게 만들 수 있다.
루트킷은 대부분의 주요 백신 프로그램을 혼란스럽게 하거나 회피하기 때문에 탐지하기가 매우 어렵다. 운영 체제가 손상된 경우, 무단 파일 수정이나 커널 변경에 대한 질문에 신뢰할 수 있는 응답을 받을 수 없다. 루트킷은 자신을 매우 잘 숨기기 때문에 보고 메커니즘이 종종 무의식적으로 거짓 정보를 제공한다.
이러한 어려움 때문에, 다른 탐지 기법들이 필요하다. 여기에는 다음과 같은 방법들이 포함될 수 있다:
- “라이브 CD(Live CD)”로 부팅하여 다른 운영 체제로 전환한 후, 전문적인 루트킷 탐지 패키지를 사용해 의심스러운 시스템을 스캔하기
- 파일의 RAM 기반 이미지와 디스크 기반 이미지, 혹은 다른 곳에 저장된 파일의 참조 사본을 비교하는 차이 스캐닝 기법
- DLL, 드라이버, 기타 중요한 파일의 무결성 검사
- API 호출에서 반환된 데이터를 분석하여 사양에 따라 응답하는지 여부 확인
- 네트워크 패킷 스니핑, CPU 모니터링, API 호출 시퀀스를 분석하는 동작 분석
- 메모리 덤프와 커널 덤프에서 루트킷의 증거를 검색
실제로는 여러 가지 기법을 혼합해서 사용하는 것이 일반적이며, 전문적인 도움을 받는 것이 가장 좋다. 시장을 선도하는 최신 엔드포인트 보호 제품군 중 일부는 일부 루트킷을 탐지할 수 있다고 주장한다.
루트킷을 어떻게 제거할까?
루트킷 제거는 일반 사용자나 심지어 고급 사용자에게도 어려울 수 있다. 루트킷 제거 도구가 시장에 나와 있지만, 루트킷은 종종 이러한 도구들을 인식하고 무력화하도록 개발됐다. 그러나 일부 루트킷에 대해서는 이러한 제거 도구가 효과가 있을 수 있다.
마이크로소프트 악성 소프트웨어 제거 도구(Microsoft Malicious Software Removal Tool)는 일부 루트킷을 탐지하고 제거할 수 있지만, 이 도구가 매우 유명하기 때문에 루트킷은 이를 회피하도록 설계되기도 한다.
대부분의 보안 전문가들은 루트킷을 제거하는 가장 빠르고 비용 효율적이며 확실한 방법은 “라이브 CD”로 컴퓨터를 부팅한 후 하드 드라이브를 포맷하고 운영 체제를 재설치하는 것이라고 말한다. 원본, 공식 설치 미디어를 사용해 운영 체제를 다시 설치한 후 백업된 데이터를 복원하면 된다.