posted by 블르샤이닝 2012. 9. 12. 10:53
728x90




 



윈도우 8에 대한 간단한 소개를 살펴보았다.

  1. 윈도우 8 포렌식 – 소개 (Windows 8 Introduction)

포렌식 관련 흔적을 살펴보기 전에 이번에는 윈도우 8에 추가된 보안 기능에 대해 살펴보자. 윈도우는 새로운 버전을 내 놓을때마다 보안적인 문제를 해결하기 위해 여러가지 보안 매커니즘을 시도하곤 한다. 윈도우 8에서도 역시나 여러가지 시도를 했는데 어떤 새로운 보안 기능이 추가되었는지 한번 살펴보자.

 

부팅 과정을 보다 더 안전하게…
PC가 보급된 이후 거의 30년동안 컴퓨터 부팅은 BIOS가 담당했다. BIOS에 의한 부팅 과정을 간단히 살펴보면 다음과 같다. 좀 더 자세한 부팅 과정은 [#FP-6] 부팅 절차를 참고하자.

  • ROM BIOS -> Option ROM -> MBR -> VBR -> Load Kernel -> Load Drivers

부팅 과정에 대한 공격은 일찍이 있어왔지만 최근 들어 심각한 위협을 받고 있다. 부팅 과정에서 시스템을 감염시키는 StuxNet, Sinowal, Mebroot와 같은 부트킷(Bootkit)이 일반화되고 있기 때문이다. 부팅 과정에서 감염된 시스템은 부팅 이후의 행해지는 어떤 행동도 제어될 수 있기 때문에 사용자 입장에서는 아무것도 믿을 수 없는 환경이 된다.

윈도우는 Vista/7으로 업그레이드되면서 부팅 과정을 좀 더 안전하게 하기 위해 부팅 관련 드라이버의 서명을 검증한다. 보통 안전 모드(Safe Mode)로 부팅을 하면 이 과정이 생략되고 부팅된다. 이러한 노력에도 불구하고 서명 검증을 우회하기 위한 고급 기법도 사용되고 있고 차츰 일반화되어 가고 있다.

윈도우 8에서는 BIOS의 한계를 극복하고 보다 더 안전한 부팅을 위해 다음을 지원한다.

  1. UEFI (Unified Extensible Firmware Interface)
  2. ELAM (Early Launch Anti-Malware) driver
  3. 원격 증명 (Remote Attestation)

1. UEFI
90년대 중반 인텔이 BIOS를 대체할 수단으로 EFI를 제안한 이후, 많은 산업체들이 참여한 포럼에서 다양한 논의를 거쳐 통합된(Unified) 인터페이스 규격으로 만든 것이 UEFI(Unified Extensible Firmware Interface)이다. 현재 v2.3.1이 나와있고 계속 업데이트되고 있다. UEFI에서 개선하고자 했던 BIOS의 한계점은 다음과 같다.

  • 플랫폼에 독립적이어야 한다.
  • 부팅 이전에 보다 향상된 GUI 환경을 지원해야 한다.
  • 2TB 이상의 저장매체를 지원할 수 있어야 한다.

이런 한계점의 개선과 함께 UEFI는 BIOS보다 안전한 부팅(Secure Boot)을 통해 신뢰성을 제공하고자 했다. 그에 따라 UEFI의 모듈은 “chain-of-trust”를 지원하도록 설계되었다. 부팅 체인 상에 취약할 수 있는 모든 모듈은 서명을 하고, 각 모듈은 실행 전에 서명을 검증받는다. 따라서, 신뢰되지 않은 모듈은 로드되지 못하는데 멀티 부팅를 사용할 경우, 다른 OS의 컴포넌트가 로드되지 못하는 상황이 발생한다. 몇몇 벤더에서는 이런 문제 때문에 UEFI 설정을 해제하고 출시하기도 한다. UEFI 자체의 업데이트는 인증서를 이용해 제조사만 가능하다.

안전한 부팅을 지원려면 기존에 사용하던 MBR 방식을 버려야만 한다. MBR 방식에서는 서명이나 검증을 할 수가 없기 때문이다. 물론, 이 문제 이외에도 MBR은 구조상의 한계점으로 2TB 이상의 저장매체를 지원하지 못한다는 단점이 있다. 이에 따라 새로운 파티션 테이블인 GPT(GUID Partition Table)가 등장했다. GPT를 이용하면 윈도우에 로딩되는 컴포넌트를 검증하는 것이 가능하다.

그렇지만, 윈도우 8을 설치한다고 모두 GPT 방식을 사용하는 것은 아니다. UEFI가 동작하려면 시스템이 BIOS가 아닌 UEFI를 지원하는 메인보드를 가지고 있어야 한다. 그렇지 않을 경우는 기존의 MBR을 사용하게 되므로 보안상의 이점이 없다. GPT에 대한 추가적인 내용은 [#FP-9] 파일시스템 – MBR, GPT를 참고하자.

2. ELAM
윈도우 8은 부팅 과정의 신뢰성을 위해 UEFI의 안전한 부팅(Secure Boot)과 더불어 ELAM(Early Load Anti-Malware)라고 불리는 새로운 형식의 드라이버를 사용한다.

마이크로소프트에서 보안에 대해 많은 노력을 하고 있지만 루트킷과 같은 악성코드에 대한 대응은 기존의 백신(Anti-Malware) 업체가 더 뛰어날 수 있다. 부팅 과정에서는 신뢰된 모듈만 로드할 수 있으므로 백신 프로그램은 운영체제가 로드된 이후에만 동작이 가능하다. 이 문제를 해결하고자 백신 업체에게만 제한적으로 인증서를 부여하여 부팅 과정에서 역할을 할 수 있도록 만들었다. 이렇게 인증된 드라이버를 ELAM 드라이버라 한다. ELAM 드라이버를 커널 콜백 함수나 레지스트리 콜백 함수로 등록하면 부팅에 로드되는 각 드라이버의 정보를 얻거나 드라이버의 로드를 막거나 데이터를 수정할 수도 있다.

3. 원격 증명
원격 증명(Remote Attestation)은 TPM(Trusted Platform Module)이 있어야만 동작한다. 부팅 상태를 TPM에 기록하고 부팅이 끝나면 해당 정보를 원격에 있는 신뢰된 증명 시스템으로 보내 정상인지를 검증받는 것이다. 간단히 다음 그림을 살펴보자.

(Ref. http://www.nortoninternetsecurity.cc)

  1. UEFI의 안전한 부팅(Secure Boot)는 인증된 모듈만 로드한다.
  2. 커널은 ELAM으로 인증된 타사의 드라이버와 앱을 실행한다.
  3. 부팅 과정의 상태를 TPM에 기록한다.
  4. TPM의 상태 기록을 원격의 증명 시스템으로 전달하여 정상인지 검증받는다.

 

윈도우 디펜더 강화하기
윈도우 디펜더(Windows Defender)는 윈도우 Vista부터 기본으로 탑재된 소프트웨어로 취약점을 방어한다. 윈도우 7까지는 기본적인 위협만 보호하는 것에 그쳤지만 윈도우 8에서는 행위기반 탐지, 바이러스 팀지/제거, 네트워크 침입 탐지 등의 기능이 포함되었다. 윈도우 8을 설치하면 기본적으로 윈도우 디펜더가 활성화되고, 타사 백신을 설치하게 될 경우 자동으로 비활성화된다. 그렇다면 기존의 백신 시장이 위협을 받지 않을까?

어차피 기존의 개인용 시장에서의 백신은 무료로 배포되고 있고, 기업은 백신을 단순히 보호용이기보다는 침해 대응 서비스까지 확장하여 사용하고 있기 때문에 마소에서 기존의 백신 업체의 이런 서비스 영역까지는 지원하지 않을것이므로 큰 차이는 없을 것 같다.

다만, 이렇게 마소가 지원하게 된 이유는 백신을 설치하지 않고 사용하는 시스템이 기존에 너무 많아서 그런 것은 아닐까? 공격의 대다수는 고도화된 기법이기보다는 단순한 기법이고 보안의 구멍은 이렇게 관리되지 않은 시스템에서 시작되므로 대의를 위해 지원하는 것은 아닌지 퍽이나 긍정적인 상상을 해본다.

다음은 윈도우 8의 윈도우 디펜더 화면이다.

 

스마트스크린 필터 강화하기
IE 기능을 유심히 봤다면 스마트스크린 필터(SmartScreen Filter) 기능을 접해봤을 것이다. 이 기능은 알려진 악성 사이트에 접근하는 것을 차단해주고, 인터넷에서 위험 파일을 다운받지 못하도록 한다. 다운로드 제한을 풀고 강제로 다운받아 실행할 경우 경고를 띄운다.

파일이 인터넷으로부터 다운받았는지 여부는 파일의 ADS(Alternate Data Stream)을 보고 판단하게 된다. 인터넷이나 다른 네트워크에서 전달받은 파일의 ADS에는 존(Zone) 확인 정보(Zone.Identifier)가 함께 기록된다. 윈도우 8에서는 IE 외에 다른 브라우저도 지원하도록 스마트스크린 필터 기능이 더 강력해졌다.

다음은 윈도우 8에서 인터넷으로부터 다운받은 파일을 실행할 경우 나타나는 스마트스크린 필터의 경고 화면이다.

 

익스플로잇을 더 어렵게…
윈도우를 비롯해 모든 운영체제는 보다 더 안전한 환경을 위해 계속적인 노력을 하고 있다. 이러한 노력은 윈도우 8에서도 옅볼 수 있다.

  • ASLR(Address Space Layout Randomization) : ASLR은 프로그램을 실행했을 때 코드와 데이터가 항상 동일한 메모리 주소에 로드되는 것을 방지하기 위해 윈도우 Vista 부터 도입된 기법이다. ASLR은 예측할 수 없도록 랜덤한 주소에 데이터를 사상하지만, 이를 우회하기 위한 다양한 기법이 나와있는 상태이다. 윈도우 8에서는 이렇게 알려진 기법을 막을 수 있도록 좀 더 강화된 랜덤 주소 사상 방식을 사용한다.
  • 윈도우 커널 : 윈도우 8에서는 커널이 악용되는 것을 막기 위해 다양한 기법이 추가되었다. 사용자 모드 프로세스가 프로세스 메모리 공간의 하위 64K를 할당하지 못하도록 하거나 커널 풀(pool) 공격을 막기 위해 무결성 체크를 추가했다. 이외에도 다양한 기법이 사용되는데 좀 더 자세한 내용은 Windows 8: Secure at the Deepest Level 을 참고하자.
  • 윈도우 힙 : 윈도우 8에서는 힙 구조도 기존의 익스플로잇에 대비할 수 있도록 재설계를 했다. 변화된 힙 구조에 대한 좀 더 자세한 내용은 Windows 8 Heap Internals를 참고하자.

 

완벽한 방법이란 있을 수 없다. 대부분의 완벽하다고 하는 방법은 어떤 조건 하에서 이루어진다. 이 경우 안전한 방법을 공격하기 보다는 조건을 무력화시키는데 집중하므로 또 다른 문제가 발생한다. 앞서 살펴본 보안 기능도 나름 고민에 의해 고안된 방법이지만 곧 취약점이 발견되거나 생각지 못했던 곳에서 구멍이 생기기 마련이다.

조직이나 환경의 보안을 강화하고자 한다면 인력으로 할 수 없는 보안 장비나 솔루션을 갖추는 것도 중요하지만 사고 발생가 발생했을 때 피해를 최소화하고 신속히 대응하여 문제점에 대한 적절하고 빠른 해결책을 내는 것도 중요하다. 전자는 비용이 상대적으로 많이 들지만, 후자는 프로세스와 정책을 정비하고 적정한 인력을 뽑아 잘 관리하면 달성할 수 있다.

지속되는 보안 사고로 인해 보안 시장 규모와 투자가 늘어나는 것은 반가운 일이지만, 많은 부분이 보안 장비나 솔루션 도입에만 쓰이는 것이 안타깝다. 보도블럭 갈아 엎듯이 내려온 예산을 쓰기 급급해 하기 보다는 좀 더 중기적으로 계획하고 판단했으면 한다.


728x90