카테고리 없음

Unmasking Kernel Exploits 번역

진모씨 2015. 7. 18. 01:45

원문 링크: http://labs.lastline.com/unmasking-kernel-exploits


커널 익스플로잇 정체 알아내기 (Unmasking Kernel Exploits)

저자: Roman Vasilenko


많은 수의 알려진 APT 공격과 국가 수준의 공격이 정교한 말웨어(Turla, Duqu, Equation Group, Duqu2, 등등)을 사용한다. 이 말웨어들은 Microsoft Windows 운영체제의 커널 안에서 돌아가는 하나 이상의 구성요소를 가지고 사용한다. 그 말웨어들은 보안 솔루션들로부터 숨겨진 상태를 유지하며, 공격자의 악의적인 목표를 성취하기 위해 컴퓨터 시스템의 가장 높은 권한을 탈취할 수 있다.


OS 커널 안에서 실행될 수 있는 능력을 이용해서, 악의적인 코드들은 자동화된 말웨어 분석 솔루션(샌드박스)를 피할 수 있게 되었다. 그 솔루션들은 커널이라는 곳에서 돌아가는 말웨어들의 동작에 대해 제한된 감지 시야를 가지고 있다. "커널 말웨어"라는 하나의 흐름은 "심층적인 커널 모드 분석"이 효율적이고 고급적인 말웨어 분석 솔루션의 필수요소로 자리매김하게 해버렸다. (이부분까지 엄청나게 의역이 많은거같네요. 원본을 참고합시다..)


앞서 언급한 두 글(원본에 링크 있어요)에서 우리는 이런 수준의 진보된 공격들을 어떻게 분석하고 감지하는지에 대해 보았지만, 우리는 아직 공격자들이 Windows 커널에 어떻게 그들의 코드를 삽입하는지에 대해 아직 설명하지 않았습니다. 이 글에서는, 저희는 공격자의 입장에서의 어려움을 설명하고, 보안 연구원들과 전문가들이 어떻게 "전 시스템 수준의 에뮬레이션"(full-system emulation)을 써서 Zero-day 커널 익스플로잇 기술들에 대한 분석, 해부하고 감지하는지에 대해 조명합니다.


Microsoft Windows 커널 익스플로잇하기


Microsoft Windows 의 모든 최신 버전들은 UAC(User Account Control)을 기본적으로 활성화시켜두고 있습니다. 이 기능은 유저 모드 프로세스에게 제한된 권한을 부여해서 그들이 그들의 호스트 컴퓨터에 대해 할 수 있는 동작들을 제한해주고 있습니다. 가령 어떤 프로그램이 시스템에 치명적인 구성요소들(critical system components)에 접근할 수 없으며, 시스템 레지스트리를 수정하거나, 커널에 새로운 드라이버를 로딩할 수는 없습니다. 그 드라이버가 신뢰된 곳에 의해 signing되었더라도말이죠.


공격자들이 원하는 목표를 위한 권한을 재성취하기위해서, 커널 익스플로잇은 최근의(modern) 공격들의 주 요소들 중 하나가 되었습니다. 우리가 커널에서 실행되고 있는 말웨어들에 대해 먼저 조명하고 SXSW Interactive에서 3월에 "커널 말웨어 심층 분석"에 대해서 발표한 이후로 많은 수의 커널 익스플로잇들이 헤드라인을 장식했습니다. 목록은 대충 이렇습니다.


  • 이번 달에 Kaspersky Lab에서 발표했듯이, Duqu2는 CVE-2015-2360 에 대한 커널 익스플로잇을 써서 커널 모드에서 돌아가는 구성요소를 로딩했습니다.
  • NATO와 백악관이 타겟인 공격(Operation Pawn Storm이라고 불림)은 4월에 지대한 언론의 관심을 받았었죠. 이 작전에 쓰인 말웨어는 CVE-2015-1701 에 대한 커널 익스플로잇을 장착하고 있었습니다.
  • 4월에 발표했듯이, Turla는 CVE-2009-1123 과 CVE-2010-0232 에 대한 익스플로잇을 사용합니다.


그리고 그 전인 2월에는 정부의 지원을 받았을 가능성이 있는 많이 알려진 Equation Group APT가 있었는데요. 이게 최대 10개의 익스플로잇을 썼을거라고 보고가 되었으며, 3개는 CVE-2009-1124, CVE-2011-3402, CVE-2013-3879 로 판명이 났습니다.


하지만 많은 지원이 있는 정부가 지원한 공격들만 커널 익스플로잇들을 사용하는 것들은 아닙니다.

커널을 공격하는 것은 더더욱 보통이 되었죠. 이 사실은 말웨어 군들(malware families)이 현저하게 커널 익스플로잇들을 쓰는 것들을 보면 알 수 있습니다.


  • Cidox/Rovnix Bootkit은 CVE-2013-3660 과 CVE-2014-4113 에 대한 익스플로잇들을 씁니다.
  • Sandworm은 CVE-2014-4148 과 CVE-2014-4113 에 대한 익스플로잇을 사용합니다.
  • PowerLoader는 CVE-2013-3660, CVE-2012-1864, 그리고 CVE-2012-0217 용 익스플로잇을 씁니다.

이건 극히 일부이구요.


보이듯이, 운영체제의 커널의 감염을 분석하는 능력은 현대의 위협, 그 뿐만 아니라 진보하고 타겟이 정해진 공격들을 감지하는 데에는 필수적인 것이 되어버렸죠.


커널 익스플로잇 해부하기


커널 익스플로잇을 어떻게 감지하는가에 대해 중점을 두기 전에, 일단 전형적인 커널 익스플로잇이 어떻게 작동하는지에 대해 들어가봅시다. 보통, 익스플로잇은 다음 4단계로 나뉩니다: 호스트 준비, 익스플로잇 코드 준비, 취약점 공격, 그리고 페이로드 실행으로 나뉘죠.


호스트 준비: 첫 단계 - 호스트 준비 단계에서는, 공격자는 사용자가 유저 모드에서 어떤 코드를 실행하도록 유도합니다. 이건 전통적인 익스플로잇, 그러니까 드라이브-바이-다운로드 익스플로잇이나 아니면 타겟 컴퓨터에서 미리 실행되고 있던 말웨어의 일부로서 공격을 실행하는 방법들로부터 일어날 수 있죠. 그리고 이런 유저모드 말웨어들이 저희들이 앞서 다룬 전통적인 샌드박스들을 무력화시키는 기술들을 사용하도록 정교하게 제작되고 있습니다.


익스플로잇 코드 준비: 다음으로, 익스플로잇 코드 준비 단계에서는, 공격자는 나중에 커널 익스플로잇에 의해 실행될 쉘코드들을 준비합니다. 커널 모드에서 어떤 작업을 하려면 익스플로잇은 커널 내부에 대한 정보들을 알아야 합니다. 예를 들어 다음과 같은 것들을 알아야 합니다.


  • 커널 메모리에서의 필수적인 구조체들의 위치 또는 오프셋
  • 커널 API 함수들의 주소들


윈도 커널 모듈들은 운영체제의 버전, 서비스 팩, 그리고 설치된 윈도 업데이트에 따라 달라질 수 있습니다. 그렇기에 하나의 익스플로잇은 이런 변수들에 대해 적응이 되어있어야하죠. 이 것을 하기 위해서 유저 모드 프로그램은 보통 디스크에서 커널 이미지들을 열어서 필수적인 정보들을 찾곤 합니다.


동시에, 준비 코드들은 시스템에서 사용 가능한 사용자 지정 OEM 드라이버들을 찾을 수 있으며, 이는 익스플로잇할 더 많은 추가적인 취약점들을 제공할 수 있습니다. 이를 위해 공격자는 드라이버의 존재들을 찾거나 시스템에서 사용 가능한 장치들을 찾아다닐 수 있죠.


취약점 공격: 일단 공격자가 익스플로잇이 가능하게 할 모든 필수적인 정보들을 찾고 나면, 커널 취약점이 공격되도록 합니다. 저희가 다룰 익스플로잇은 두 가지 종류가 있습니다. 실행될 쉘코드의 위치로 나눌건데요, 그러니까 user-space의 쉘코드를 커널의 권한으로 실행하는 것(즉 CPL/Current Privilege Level = 0인 상태)랑 kernel-space의 쉘코드를 실행하는 것이 있습니다.


User-space 쉘코드를 만드는 건 비교적으로 쉽습니다. 왜냐하면 그럴 경우에는 커널 메모리를 조금만 덮어써도(역주: 쉘코드쪽으로 프로그램 흐름을 돌려버릴 정도만 쓰면 되니까) 되거든요. 많은 사례에서 이럴 때 덮어써줘야 하는 메모리는 함수, 또는 함수 포인터로서 이는 그 함수를 실행하는 다음 커널 쓰레드가 쉘코드가 담긴 user-space 공간에 점프하도록 하죠.