검수요청.png검수요청.png

루트킷

위키원
leejia1222 (토론 | 기여)님의 2019년 9월 23일 (월) 13:39 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
이동: 둘러보기, 검색

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

개요[편집]

루트킷은 해커들이 시스템을 해킹할 때 시스템 이용자가 해킹당하고 있음을 알지 못하도록 하기 위해 사용하는 도구를 말한다. 루트킷을 설치하는 목적은 해커들이 나중에 시스템에 접근할 때 들키지 않으려는 것이다. 즉, 해커들은 이 도구를 사용해서 컴퓨터의 제어권을 가로채고 자신들이 하는 일을 감출 수 있다. 루트킷은 해커가 설치한 악성코드가 백신이나 PC 사용자에게 발각되지 않도록 숨겨주는 역할을 한다. 대부분의 루트킷은 일반 프로그램이 동작하는 계층보다 더 하위 계층, 즉 커널(kernel)이라는 운영체제의 핵심 부분에 숨어서 동작하여 탐지 및 분석이 어렵다. 시스템 침입 후 침입 사실을 숨긴 채 차후의 침입을 위한 백도어, 트로이목마 설치, 원격 접근, 내부 사용 흔적 삭제, 관리자 권한 획득 등 주로 불법적인 해킹에 사용되는 기능들을 제공한다. 루트킷이 설치되면 자신이 뚫고 들어온 모든 경로를 바꾸어 놓고, 명령어들을 은폐해 놓기 때문에 해커가 시스템을 원격으로 해킹하고 있어도 루트킷이 설치된 사실조차 감지하기 어렵다. 침입자는 먼저 암호를 크래킹(cracking)하거나 시스템 취약점을 찾아내어 사용자용 접근 권한을 획득한 뒤, 컴퓨터에 루트킷을 설치한다. 루트킷은 네트워크상의 다른 컴퓨터에 있는 사용자 아이디와 암호들을 탐지하여 해커에게 루트 권한, 시스템 정보 그리고 기타 특수한 접근 권한을 제공한다. 또한, 트래픽(traffic)이나 키스트로크(keystroke) 감시, 해커 이용 목적의 시스템 내 백도어(backdoor) 설치, 로그 파일 수정, 네트워크상의 다른 컴퓨터 공격, 탐지 회피를 위한 기존 시스템 도구의 수정 등의 기능을 제공한다.

역사[편집]

1990년도에 루트킷이라는 용어가 처음 등장했다. 루트킷은 이미 오래전부터 존재했지만, 유명세를 얻은 무렵에는 이미 기술이 대부분 공개된 상황이었다. 국내에 루트킷이 알려진 것은 2005년, 소니 비엠지(Sony BMG)의 CD 보안이 루트킷을 사용했다는 것이 마크 러시노비치(Mark Russinovich)에 의해 알려지면서 CD를 전량 회수하는 사건이 시발점이 되었다. 소니(SONY)의 CD 보안 문제로 인해 루트킷에 관심이 없었던 해커와 크래커, 프로그래머들에게도 그 존재가 알려졌기 때문이다. 루트킷이 알려지자 많은 크래커가 루트킷을 사용하기 시작하였고, 악의적인 일을 좀 더 효과적으로 실행하기 위해 루트킷의 소스 코드나 프로그램들을 활용하게 되었다. 그 이후로 루트킷에 대한 사람들의 경각심이 더욱 고취되었고, 백신 프로그램도 루트킷에 얼마나 효과적으로 대응하는지가 관건이 되기도 했다. 기술 자체는 새롭거나 특별할 것이 없지만, 소니 비엠지의 CD 보안사건 이후 루트킷이 보안의 핵심으로 대두되었다.

특징[편집]

사용자 모드[편집]

사용자 모드 루트킷은 링-3에서 돌아가는 시스템 프로세스이다.[1] 응용 프로그램 프로그래밍 인터페이스, API의 표준 행동을 가로채고 수정하기 위한 가능한 수많은 설치 매개들을 가지고 있다. 몇몇 사용자 모드는 동적 링크 라이브러리(DLL ; dynamic link library)을 다른 프로세스에 삽입함으로써 어느 대상 프로세스에서도 루트킷이 실행될 수 있게 한다.[2] 애플리케이션에 의해 호출되는 API 함수가 특정한 데이터 필드를 사용한다는 점, 또는 API의 겟 프락 어드레스(GetProcAddress)를 이용하여 어드레스를 받아오는 점을 이용하는 것이다. 프로그램 코드는 DLL 모듈에 삽입되고 기존의 시스템 프로세스의 어드레스 공간에 통합된 후, 모든 사용자 애플리케이션의 통제 권한을 원격에 있는 악성 코드 제작자 또는 악성 코드 사용자에게 넘겨준다. 경로 변경은 문서화도 잘 되어있고 쉽게 접근할 수 있어 루트킷 사용을 더욱더 쉽게 한다. 다른 충분한 권한을 가진 것들은 간단하게 대상 애플리케이션의 메모리를 덮어쓰게 된다. 삽입 메커니즘은 다음의 사항들을 포함하고 있다. 벤더에서 제공된 애플리케이션 확장 사용, 메시지 가로채기, 디버거(Debugger), 보안 취약점 공격, 실행되는 프로세스나 파일 시스템에 존재하는 파일을 숨기기 위한 함수 후킹(Hooking) 또는 주로 이용되는 API 패치이다.

커널 모드[편집]

커널(kernel) 모드 루트킷은 커널과 디바이스 드라이버(Device driver) 같은 코어 운영체제의 한 부분에 코드를 추가하거나 대체함으로써 높은 운영체제 권한인, 링-0와 함께 실행된다.[3] 대부분의 운영체제들은 운영체제 자신과 같은 권한에서 실행되는 커널 모드 디바이스 드라이버를 지원하기 때문에, 많은 커널 모드 루트킷들은 리눅스(Linux)에서 적재 가능 커널 모듈, 그리고 윈도우에서 디바이스 드라이버 형태로 개발된다. 커널 모드 루트킷들은 운영체제 자신과 같은 보안 수준에서 동작하기 때문에 특히 탐지하고 제거하기가 어렵다. 대다수의 커널 모드 루트킷은 문서화되어 있지 않은 운영체제의 구조를 활용하기 때문에 커널 모드 루트킷은 정보를 더욱 잘 감출 수 있다. 커널 모드 루트킷은 시스템 서비스 서술자 테이블, SSDT(system service descriptor table)을 후킹 하거나, 자신을 숨기기 위해 사용자 모드와 커널 모드 사이의 게이트를 수정할 수 있다. 커널 모드 루트킷 변형으로는 부트킷(bootkit)이 있다. 부트킷은 마스터 부트 레코드(MBR), 볼륨 부트 레코드(VBR) 또는 부트 섹터(boot sector) 같은 시작 코드를 감염시켜서 전체 디스크 암호화를 공격하는 데 사용된다.

하이퍼바이저[편집]

하이퍼바이저(Hypervisor) 형태로 생성된 루트킷은 기술 검증용으로 만들어졌다. 하이퍼바이저는 하나의 시스템에서 동시에 여러 개의 운영체제를 사용할 수 있게 해주는 가상화 플랫폼을 말한다. 가장 대표적이고 쉬운 예로 브이엠 웨어(VM ware)를 들 수 있다.[4] 하이퍼바이저는 다음과 같이 크게 두 가지 형태로 구분된다. 물론 아래의 두 형태가 복합된 형태 또한 가능하다. Type 1에서는 가상머신 모니터(VMM ; Virtual Machine Monitor)가 호스트 운영체제 안에서 동작한다. Type 2에서는 가상머신 모니터가 하드웨어와 게스트 운영체제(Guest OS) 사이에 존재한다. 인텔 VT 또는 AMD-V 같은 하드웨어 가상화 특징을 익스플로잇하는 타입의 루트킷은 링 -1에서 실행되고 가상머신으로서 대상 운영체제를 호스트하며, 이로써 루트킷이 원래 운영체제에 의해 만들어진 하드웨어 호출을 가로챌 수 있게 한다. 하이퍼바이저 루트킷은 전복시키기 위해 대상의 커널을 수정할 필요가 없지만, 게스트 운영체제에 의해 탐지될 수 없다는 것을 의미하지는 않는다.

펌웨어와 하드웨어[편집]

펌웨어(firmware) 루트킷은 하드웨어에서 일관적인 악성코드 이미지를 생성하기 위한 것이다. 라우터(router), 네트워크 카드(network card), 하드 디스크 드라이브(hard disk drive) 또는 시스템 바이오스(system bios) 같이 디바이스나 플랫폼 펌웨어를 사용한다. 펌웨어가 일반적으로 코드 무결성 검사가 이루어지지 않기 때문에 루트킷은 펌웨어에 숨을 수 있다. 이렇게 펌웨어에 내장된 루트킷은 복구 방식으로 정리하기가 어려울 수 있다. 2018년 9월 최초로 발견된 UEFI(Unified Extensible Firmware Interface) 루트킷APT28은 장치의 SPI(Serial Peripheral Interface)의 플래시 메모리에 내장되어 있었다. 그렇기 때문에 펌웨어 루트킷은 다른 접근 방식이 필요하다.

탐지 방법[편집]

탐지 방법으로는 대안이 되는 신뢰 되는 매체, 행위 기반, 시그니처 기반, 차이 기반, 무결성 검사, 메모리 덤프(memory dump)가 있다. 대안이 되는 신뢰 되는 매체를 이용하는 것은 루트킷이 자신이 실행 중이지 않을 때는 자신의 존재를 숨길 수 없기 때문에 효과적인 방법이다. 운영체제 수준 루트킷을 탐지하는 가장 신뢰 되는 방법으로, 의심되는 컴퓨터를 끄고 대안이 되는 신뢰 되는 매체(CD-ROM, USB 플래스 드라이브)에서 부팅함으로써 이것의 저장소를 검사하는 것이다. 행위 기반 접근법은 루트킷이라고 여겨질 만한 행동을 찾음으로써 루트킷의 존재를 추론하는 것이다. 예를 들면, 시스템을 프로파일링하고 전체 CPU 활용에서 API 호출의 빈도와 타이밍이 다를 때 루트킷으로 여겨질 수 있는 것이다. 시그니처 기반은 루트킷이 임시로 자신을 시스템에서 언로드시키는 경우에 찾아낼 수 있는 방법이다. 공격자가 대응 메커니즘을 구현하게 함으로써, 안티 바이러스 프로그램(anti-virus program)을 종료시키는 것이다.

차이 기반은 신뢰 할 수 있는 가공되지 않은 데이터와 API가 반환하는 오염된 내용을 비교하는 것이다. 루트킷은 이러한 차이 기반 스캐너나 가상머신의 존재를 탐지하고, 자신의 행동을 차이가 없도록 만들어 탐지되지 않게 할 수도 있다. 무결성 검사는 코드 사이닝 파일이 배포자에 의해 디지털 서명화 된 이후로 수정되었는지를 검증하기 위해서 공개키 기반 구조를 사용하는 방법이다. 대체로, 시스템 소유자나 관리자는 디스크의 코드 라이브러리(code library)들에 대한 비인가된 변화를 탐지하기 위해 암호화 해시 함수를 사용할 수도 있다. 메모리 덤프(memory dump)는 가상 메모리의 완전한 덤프를 가능하게 하여 활성화된 루트킷을 잡게 하고, 결과 덤프 파일에 대해 오프라인 포렌식 분석을 디버거로 수행할 수 있게 하는 방법이다.[5] 여기서 루트킷은 자신을 은폐할 수 없기 때문에, 이 기법은 고도로 전문적이며 공개되지 않은 소스 코드나 디버그 심볼에 대한 접근을 요구한다.

전망[편집]

루트킷을 탐지하는 여러 소프트웨어들이 나오고 있으며, 안티바이러스 업체에서도 루트킷에 대한 탐지 및 제거에 대한 연구가 계속되고 있다. 따라서 악성코드 보안을 담당하는 기관이나 기업체 등에서도 이를 대비하기 위한 방안을 마련해야 한다. 루트킷은 윈도우 장치에만 해당하는 이야기가 아니다. 사물인터넷 장치에도 적용될 수 있다. 장치가 감염되었다고 의심되는 경우 출고 당시로 되돌리는 ‘팩토리 리셋(factory reset)’을 한 후 최신 펌웨어를 설치한다. 마지막으로 사용자 이름과 관련된 비밀번호 또는 장치와 관련된 계정을 재설정한다.

각주[편집]

  1. 컴퓨터 보안 링〉, 《위키백과》
  2. 동적 링크 라이브러리〉, 《위키백과》
  3. 컴퓨터 보안 링〉, 《위키백과》
  4. VM웨어〉, 《위키백과》
  5. 포렌식 분석〉, 《위키백과》

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 루트킷 문서는 보안에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.