**루트킷**(rootkit)은 컴퓨터 소프트웨어 중에서 악의적인 것들의 모음으로써, 자신의 또는 다른 소프트웨어의 존재를 가림과 동시에 허가되지 않은 컴퓨터나 소프트웨어의 영역에 접근할 수 있게 하는 용도로 설계되었다.{{웹 인용

루트킷의 설치는 자동으로 이루어지거나 공격자가 루트 권한이나 관리자 접근을 획득하였을 때 설치될 수 있다. 이 접근을 획득하는 것은 알려진 취약점(권한 확대 같은)을 공격하는 것이나 암호(크래킹 또는 사회공학을 통해 획득한)를 통한 직접적인 권한의 결과이다. 한 번 설치되면, 권한을 가진 접근을 유지할 뿐만 아니라 침입을 숨길 수도 있다. 중요한 점은 루트 또는 관리자 접근이다. 시스템에 대한 완전한 제어는 존재하는 소프트웨어가 수정되었을 수 있다는 것을 의미한다.

루트킷 탐지는 이것이 자신을 찾으려 하는 소프트웨어를 뒤집어 엎을 수 있기 때문에 어려운 일이다. 탐지 방법은 대체적이고 신뢰성 있는 운영 체제나 행동 기반 방식, 특징(signature) 스캐닝 그리고 메모리 덤프 분석 등이 있다. 제거는 복잡하거나 심지어 실질적으로 불가능할 수 있는데 특히 루트킷이 커널에 거주할 때 더 그렇다; 운영 체제의 재설치가 문제 해결의 유일한 해결법이 될 수 있다. 펌웨어 루트킷의 경우, 제거하기 위해서 하드웨어 교체나 특별한 장비가 필요할 수 있다.

## 용도
현대 루트킷들은 접근을 상승시키지 않고,{{서적 인용

루트킷과 그것의 페이로드는 많은 용도를 갖는다.
어떤 경우에 루트킷들은 요구되는 기능을 제공하며, 사용자에 의해 의도적으로 설치될 수 있다.

## 종류
루트킷에는 적어도 5가지의 종류가 존재하며, 가장 낮은 레벨인 펌웨어부터(가장 높은 권한을 가진) 가장 높은 권한을 갖는 링 3의 사용자 기반까지의 범위를 갖는다. 이것들의 하이브리드 형태는 사용자 모드에서 커널 모드까지에 걸친 것이다.{{서적 인용

### 사용자 모드
사용자 모드 루트킷은 저수준 시스템 프로세스가 아니라 링 3에서 돌아간다.{{웹 인용

### 커널 모드
커널 모드 루트킷은 커널과 디바이스 드라이버 같은 코어 운영 체제의 한 부분에 코드를 추가하거나 대체함으로써 높은 운영 체제 권한(링 0)과 함께 실행된다. 대부분의 운영체제들은 운영체제 자신과 같은 권한에서 실행되는 커널 모드 디바이스 드라이버를 지원한다. 이러한 많은 커널 모드 루트킷들은 리눅스에서 적재 가능 커널 모듈, 그리고 윈도우에서 디바이스 드라이버 형태로 개발된다.{{웹 인용

커널 루트킷들은 운영체제 자신과 같은 보안 수준에서 동작하기 때문에 특히 탐지하고 제거하기가 어려우며, 그로인해 가장 신뢰되는 운영 체제 동작을 가로채고 전복시킬 수 있다. 바이러스 검사 소프트웨어 같은 시스템과 같이 돌아가는 어떤 소프트웨어도 똑같이 취약하다.{{웹 인용

루트킷은 DKOM(Direct Kernel Object Manipulation)으로 알려진 기법을 사용하는 윈도우 커널에서 데이터 구조를 수정할 수 있다.{{웹 인용

운영 체제들은 커널 모드 루트킷의 위협에 대응하도록 진화하고 있다. 예를 들면 마이크로소프트 윈도우의 64비트 버전은 신뢰하지 않은 코드를 높은 권한으로 실행하는 것을 어렵게 하기 위해 현재 모든 커널 수준 드라이버들의 의무적인 표시를 구현하고 있다.{{웹 인용

#### 부트킷
**부트킷**이라고 불리는 커널 모드 루트킷의 변형은 마스터 부트 레코드(MBR), 볼륨 부트 레코드(VBR) 또는 부트 섹터 같은 시작 코드를 감염시켜서 전체 디스크 암호화를 공격하는데 사용될 수 있다. 일반적으로 악성코드 로더는 커널이 로드될 때 보호 모드로 이행하려고 하며, 그로 인해 커널을 전복시킬 수 있다.{{웹 인용

부트킷 공격에 대한 유일한 알려진 방어는 시스템에 대한 비인가된 물리적 접근의 예방 또는 부트 경로를 보호하기 위한 신뢰 플랫폼 모듈의 사용이다.{{서적 인용

### 하이퍼바이저 레벨
학문적으로 타입2 하이퍼바이저 형태로 생성된 루트킷은 기술 검증용으로서 만들어져 왔다. 인텔 VT 또는 AMD-V 같은 하드웨어 가상화 특징을 익스플로잇함으로써 이 타입의 루트킷은 링 -1에서 실행되고 가상 머신으로서 대상 운영 체제를 호스트하며, 이로써 루트킷이 원래 운영 체제에 의해 만들어진 하드웨어 호출을 가로챌 수 있게 한다.{{저널 인용

2009년에 마이크로소프트와 노스캐롤라이나 주립 대학교의 연구원들은 Hooksafe라고 불리는 하이퍼바이저 계층 안티 루트킷을 입증하였으며, 이것은 커널 모드 루트킷에 대한 일반적인 보호를 제공한다.{{콘퍼런스 인용

윈도우 10은 "디바이스 가드"라고 불리는 새로운 특징을 도입하였으며, 이것은 루트킷 형식의 악성코드에 대한 운영 체제의 독립적인 외부 보호를 제공하기 위해 가상화의 장점을 이용한다.

### 펌웨어와 하드웨어
펌웨어 루트킷은 하드웨어에서 일관적인 악성코드 이미지를 생성하기 위해 라우터, 네트워크 카드, 하드 디스크 드라이브 또는 시스템 바이오스 같이 디바이스나 플랫폼 펌웨어를 사용한다. 펌웨어가 일반적으로 코드 무결성 검사가 이루어지지 않기 때문에 루트킷은 펌웨어에 숨는다.

## 설치와 은폐
루트킷들은 시스템의 제어를 얻기 위해 다양한 기법들을 사용한다. 가장 일반적인 기법은 은밀한 권한 확대를 달성하기 위해 보안 취약점을 사용하는 것이다. 다른 접근법으로 컴퓨터 사용자가 루트킷의 설치 프로그램을 믿게하기 위해 트로이 목마를 사용하는 것이 있다.{{서적 인용

루트킷은 한번 설치되면 호스트 시스템 내에서 자신의 존재를 알리지 않기위한 수단으로 표준 운영 체제 보안 툴과 진단, 스캐닝, 감시를 위한 API들을 전복시키거나 회피하는 등의 동작을 수행한다. 루트킷들은 다른 프로세스들에 코드를 로딩하고 드라이버나 커널 모듈들을 설치하거나 수정하는 방식을 통해서 운영 체제의 중요한 부분의 행동을 수정함으로써 이것을 달성한다. 난독화 기법은 시스템 감시 메커니즘으로부터 실행 중인 프로세스들을 숨기고 시스템 파일들과 다른 설정 데이터를 숨기는 것을 포함한다.{{웹 인용

루트킷들은 또한 안티 바이러스 소프트웨어로부터 탐지되거 제거되는 것에 대한 생존을 위해 여러 방식을 사용하는데, 일반적으로 링 0(커널 모드)에 설치되는 것이 그것이다. 이곳은 시스템에 대한 완전한 접근이 가능하다. 이것들은 다형성, 은폐 기법, 재생, 안티 바이러스 소프트웨어 비활성화 같은 것들을 포함한다.{{저널 인용

## 탐지
루트킷을 발견하는데 근본적인 문제는 만약 운영 체제가 전복되었다면, 특히 커널 수준 루트킷에 의해서, 자신 또는 자신의 구성 요소들에게 비인가된 수정이 신뢰된다는 것이다.

탐지는 여러 가지 접근법을 가질 수 있는데 시그니처(안티 바이러스 소프트웨어), 무결성 검사(디지털 서명), 차이 기반 탐지(예상 결과와 실제 결과와의 비교) 그리고 행위 기반 탐지(CPU 사용이나 네트워크 트래픽 감시)가 있다. 커널 모드 루트킷들에서 탐지는 상당히 복잡한데, 악성코드가 시스템 행위를 전복시키는 곳에서 후킹된 함수들을 찾기 위한 시스템 호출 테이블과 숨겨진 프로세스들을 가리키는 패턴에 대한 메모리의 포렌식 스캐닝의 철저한 검토를 요구한다.

유닉스 루트킷 탐지는 Zeppoo{{웹 인용

의심되는 운영 체제가 가동중이지 않을 때 저장소를 검사함으로써 탐지하는 것은 루트킷이 활성화되지 않아서 루트킷을 인식하는 것을 실패할 수 있다. 가동중인 루트킷과 함께 돌아가는 일반적인 안티 바이러스 소프트웨어는 루트킷이 자신을 효과적으로 숨기면 실패할 수 있다.

### 대안이 되는 신뢰되는 매체
운영 체제 수준 루트킷을 탐지하는 가장 신뢰되는 방법은 의심되는 컴퓨터를 끄고 대안이 되는 신뢰되는 매체에서 부팅함으로써 이것의 저장소를 검사하는 것이다.{{저널 인용

### 행위 기반
루트킷을 탐지하기 위한 행위 기반 접근법은 루트킷이라고 여겨질만한 행동을 찾음으로써 루트킷의 존재를 추론할 수 있다. 예를 들면 시스템을 프로파일링하고 전체 CPU 활용에서 API 호출의 빈도와 타이밍이 다를 때 루트킷으로 여겨질 수 있다. 이 방식은 복잡하고 긍정 오류의 높은 발생으로 방해받는다. 루트킷을 처리하는 것은 종종 시스템에 매우 명백한 변화를 줄 수 있다. Alureon 루트킷은 코드에 설계 결함을 가진 보안 업데이트 이후 윈도우 시스템을 충돌시켰다.{{웹 인용

패킷 분석기, 방화벽, 침입 차단 시스템에서의 로그는 네트워크 환경에서 루트킷 행위의 증거를 보여줄 수 있다.

### 시그니처 기반
비록 보안 소프트웨어 벤더들이 루트킷 탐지를 위해 제품에 추가하여도 안티바이러스 제품들은 공개 테스트에서 모든 바이러스들을 잡아내지는 못한다. 루트킷은 안티바이러스 스캔 시에 숨겨지려 하며 은폐 탐지기는 알아챌 수 있다. 만약 루트킷이 임시적으로 자신을 시스템에서 언로드시킨다면 시그니처 탐지는 찾아낼 수 있을 것이다. 이 결합된 접근법은 공격자가 대응 메커니즘을 구현하게 했는데 이것은 안티바이러스 프로그램을 종료시키는 것이다. 시그니처 기반 탐지 방식들은 공개된 루트킷에는 효과적이지만, 특별히 커스톰화된 루트킷들에는 약한 경향이 있다.

### 차이 기반
루트킷을 탐지하는 다른 방식으로는 "신뢰된" raw 데이터와 API가 반환하는 "오염된" 내용을 비교하는 것이다. 예를 들면 디스크에 존재하는 바이너리들은 메모리의 복사본과 비교될 수 있거나 파일 시스템 또는 윈도우 레지스트리 API에서 나온 결과들은 물리 디스크에서의 raw 구조와 함께 검사될 수 있다

### 무결성 검사
코드 사이닝은 파일이 배포자에 의해 디지털 서명화된 이후로 수정되었는지를 검증하기 위해서 공개 키 기반 구조를 사용한다. 대체적으로, 시스템 소유자나 관리자는 디스크의 코드 라이브러리들에 대한 비인가된 변화를 탐지하기 위해 암호화 해시 함수를 사용할 수도 있다.{{웹 인용

비슷하게 펌웨어에서의 탐지는 펌웨어의 암호화 해시를 계산하고 이것을 예상되는 값들의 화이트리스트와 비교하거나, 해시 값을 TPM(신뢰 플랫폼 모듈) 설정 레지스터(이후에 기대 값의 화이트리스트와 비교되는)로 확장함으로써 달성될 수 있다.{{웹 인용

### 메모리 덤프
가상 메모리의 완전한 덤프를 가능하게 하는 것은 활성화된 루트킷(또는 커널 모드 루트킷의 경우 커널 덤프)을 잡게하고, 결과 덤프 파일에 대해 오프라인 포렌식 분석을 디버거로 수행할 수 있게 한다. 여기서 루트킷은 자신을 은폐할 수 없다. 이 기법은 고도로 전문적이며 공개되지 않은 소스 코드나 디버그 심볼에 대한 접근을 요구한다. 운영 체제에 의해 초기화된 메모리 덤프들은 항상 메모리를 읽기 위한 가장 낮은 수준의 시도를 가로채고 전복시키는 하이퍼바이저 기반 루트킷을 탐지하는데 사용될 수 없다.{{웹 인용

## 제거
루트킷을 직접 제거하는 것은 일반 컴퓨터 사용자들에게 매우 어렵지만,{{웹 인용

루트킷을 제거하는 신뢰성있는 유일한 방법은 운영 체제를 신뢰되는 매체에서 재설치하는 것이라고 믿는 전문가들이 있다.{{웹 인용

비록 루트킷의 본성과 종류가 알려졌지만, 직접 이것을 복구하는 것은 비현실적이며, 운영 체제를 재설치하는 것이 훨씬 쉽고 빠르다.

## 대중적 이용 가능성
공격자에게 사용되는 악성코드들처럼, 많은 루트킷 구현들은 인터넷에서 공유되고 쉽게 사용 가능하다.

대부분의 루트킷들은 인터넷에서 기반한 컴퓨터 시스템에서 숨기고, 비인가된 제어를 하는 것을 입증하기 위한 익스플로잇 또는 학문적으로 "개념 증명"으로서 사용 가능하다.{{서적 인용

## 방어
루트킷이 설치되는 것을 막는 시스템 하드닝은 루트킷을 방어하는 첫번째 계층 중 하나이다.{{서적 인용

통일 확장 펌웨어 인터페이스 같은 새로운 보안 부트 명세는 부트킷의 위협 때문에 설계되었지만, 자신이 제공하는 특징이 사용되지 않는다면 더 취약하다.

서버 시스템에서 원격 서버 증명은 서버를 좋은 상태로 유지시키는 효과적인 방법이다.