기초공부 중

2017. 12. 3. 22:390x06 Malware

728x90

-루트킷 윈도우 커널 조작의 미학- 


우연히 이 책을 잠시 읽게 되어 이 책에서 얻어가고 싶은 정보를 타이핑 하며 이해하는 시간을 가졌다. 


루트킷 : 소프트웨어의 판단 로직을 변경해 잘못된 판단을 하도록 만드는 것


이스터에그 : 가끔 소프트웨어 자체에 로직 변경이 들어있을 수 있다. 프로그래머 스스로가 백 도어를 자신이 제작하는 프로그램안에 넣기도 한다. 이런 백 도어의 존재 여부는 문서로 명시되지 않으므로 해당 소프트웨어의 숨겨진 기능으로서 작동한다. 

이러한 것을 이스터에그라고 부른다고 한다.


루트킷은 공격툴이 아님을 기억해야한다. 왜냐하면 루트킷 자체는 명백한 유틸리티 셋이기 때문이다. 루트킷은 공개되지 않은 기능과 방법을 사용하며 버퍼 오버플로우와 같은 소프트웨어 버그를 이용하지 않기 때문이다. 

일반적으로 루트킷은 소프트웨어 공격이 성공한 후에 설치가 된다.  


루트킷 자체는 공격툴은 아니지만, 루트킷에는 소프트웨어 공격코드가 포함되어 있다.  일반적으로 루트킷은 "커널에 대한 접근권한" 이라는 것이 필요하며 시스템이 부팅될 때 실행되는 하나 이상의 프로그램을 포함한다. 

커널에 접근하는 방법은 "한정되어"있으며 이런 방법들을 이용하는 것은 침해대응차원에서 탐지될 수가 있다. 


커널에 임의의 코드를 실행시키거나 특정 프로그램을 설치할 수 있는 기능을 제공한다. 커널에 임의의 코드를 실행시킬 수 있는 버퍼오버플로우 취약점이 있다고 가정하게 되면, 커널 버퍼 오버플로우 취약점은 디바이스 드라이버에 존재할 수 있다. 


시스템이 시작하면서 로더 프로그램이 버퍼 오버플로우 취약점을 이용해 루트킷을 로드할 수 있게 된다.

로더프로그램은 루트킷을 설치하거나 디바이스 드라이버에 대한 로드와 등록 작업에 공식적인 방법을 사용하지 않는다.

대신, 버퍼오버플로우 취약점을 이용해서 루트킷의 커널 모드 부분을 설치한다.


버퍼오버플로우 공격 메커니즘을 이용해서 커널 영역으로 코드를 로딩한다. 대부분의 사람들은 이를 버그라고 생각하지만 루트킷 개발자들은 커널 영역으로 코드를 로딩하는 알려지지 않은 방법이라고 생각한다. 공개된 취약점이 아니기 때문에 침해 대응 조사에서도 조사의 대상이 되지 않으며 더욱이 호스트 기반 방화벽 프로그램에 의해서도 방어되지 않는다,


잠시 바이러스에 대해 언급하자면, 바이러스는 "스스로 증식해서 전파" 되지만, 루트킷은 스스로 증식해서 전파 되지 않기 때문에 바이러스가 아니다. 

루트킷은 공격자의 통제를 받게 된다.

정확하게 구분지을 필요성이 있다.


성능이 좋은 루트킷은 방화벽이나 침입 탐지 시스템(IDS)과 같은 각종 보안 대책을 우회해서 통과할 수 있어야 한다. 침입 탐지 시스템은 크게 두가지로 분류되는데 네트워크 기반 침입 탐지 시스템(NIDS)과 호스트 기반 침입 탐지 시스템(HIDS)이다. 


HIDS는 때때로 공격이 성공하기 전에 해당 공격을 차단하도록 설계되기도 한다. 

이렇게 적극적인 방어를 수행하는 시스템들을 호스트 기반 침입 탐지 시스템 (HIPS)라고 한다. 


대부분의 HIPS(Host-Based IPS)는 커널 레벨의 기술을 이용하며 운영체제에 대한 모니터링을 수행할 수 있다. 

HIPS는 안티루트킷이라고 말할 수가 있다.


루트킷이 시스템상에서 시도하는 대부분의 일들을 탐지하고 차단한다. 


NIDS(Network-Based IDS) 

네트워크 기반 침입 탐지 시스템 

이론적으로 보면, 통계적 분석 방법을 이용하면 은닉 통신 채널을 탐지해 내는것이 가능하다고 한다. 하지만, 현실에서는 불가능하다고 한다. 이때 루트킷은 아무런 문제가 없어 보이는 패킷상의 은닉 채널을 이용하게 된다. 

네트워크 상에서 대부분의 데이터는 암호화되어 전송되고 또한 대부분의 NIDS는 엄청난 양의 데이터 스트림을 처리해야한다. 


IDS와 IPS를 우회하기 위해서는 적극적인 방법과 소극적인 방법이 있다. 이 두가지 방법 모두 루트킷과의 결합이 필수적이다. 적극적인 공격은 실시간으로 이뤄지며 탐지되지 않도록 설계가 된다. 누군가 공격에 대한 의심을 품는 경우에는 공격에 대한 대응을 최대한 어렵게 만들기 위한 소극적인 방법이 적용되게 된다.


1. 적극적인 공격

침입 탐지 소프트웨어를 파괴하거나 혼동을 주지 않기 위해서 시스템 하드웨어나 커널을 조작하게 된다. 일반적으로 HIPS 소프트웨어를 무력화 시키기 위해서는 적극적인 방법이 요구된다. 적극적인 공격은 메모리상에서 동작하는 루트킷 탐지 소프트웨어에 대응하기 위해 주로 사용된다. 또한, 적극적인 공격을 이용해서 시스템관리 툴의 공격 탐지 기능을 무력화 할 수 있으며, 바이러스 스캐너와 같은 보안 소프트웨어를 쓸모 없게 만들 수도 있다. 


2. 소극적인 공격 

데이터의 저장과 전송을 까다롭게 만든다.

데이터를 파일시스템에 저장하기 전에 그것을 암호화하는 것은 소극적인 공격 방법이다. 이보다 좀 더 진보된 공격이 암호 해독 키를 파일시스템에 저장하느 대신, 비휘발성 하드웨어 메모리에 저장하는 것이다. 소극적인 공격의 또다른 형태로서 네트워크를 통해 데이터를 몰래 교묘히 전송하도록 은닉 채널을 사용한다. 


Encase와 같은 툴은 포렌식 툴이라고 말하는데 이 툴은 하드디스크 전체를 파일 단위가 아닌 바이트단위로 스캔하면서 꽉 채워지지 않은 공간이나 삭제된 파일을 찾아내게 된다. 

Encase를 우회하는 방법은 '스테가노그래피'이다.  

암호화를 이용할 수도 있으나, 이것은 금방 찾아낼 수 있다고 한다.

(데이터 랜덤 측정 툴을 이용)


암호화된 데이터를 좀 더 확실히 보호하기 위해 다형성 기술을 이용해 복호화 코드를 변형하는 것도 가능하다고 한다.

그렇다면, 다형성 기술을 공부해서 직접 실습을 해보는 것도 좋은 공부방법이 될 것 같다. 


'0x06 Malware' 카테고리의 다른 글

기초 공부중  (0) 2017.12.04
기초 공부 중  (0) 2017.12.04
Good Job  (0) 2017.11.29
레몬 세미나  (0) 2017.10.28
Thread Local Storage  (0) 2017.10.26