Freigeben über


데이터 실행 방지(DEP)

 Windows XP SP2와 Windows 2003 SP1이 릴리즈 될 때 새로 추가된 큰 기능 중에 하나가 바로 데이터 실행 방지(DEP: Data Execution Prevention) 기능입니다. 이 기능 때문에 기존에 실행되던 애플리케이션들이 Service Pack을 설치한 이후에 제대로 실행되지 않는 문제들이 발생하여 시장에 혼란이 있었던게 사실입니다.

이번 포스트에서는 호환성 이슈를 많이 일으켰던 DEP 기능에 대해서 살펴보도록 하겠습니다.

 

[그림] 데이터 실행 방지(DEP) 설정 윈도우

기존에 서버 시장에서 주목을 받지 못했던 Windows 운영체제는 Windows 2000 부터 많은 서버용 애플리케이션과 서비스 기능을 제공하면서 엔터프라이즈 시장에서의 입지를 넓혀가기 시작했는데, 수 많은 웜 바이러스의 등장으로 운영중이던 서버가 공격 받아서 서비스가 중단되는 사건이 수차례 발생하면서 시장으로부터 불안한 시스템으로 인식되되기 시작했습니다. 이를 막기위한 핫픽스가 나오긴 했지만 계속되는 유사 공격에 많은 피해를 입은 것이 사실입니다. 웜 바이러스가 감염되는 과정은 대부분 Buffer Overflow 취약점을 이용해서 운영중인 서비스를 위한 잘 알려진 네트워크 포트(예를 들어 HTTP, RPC 포트 등)에 대한 공격으로 인한 것이었습니다.

이에 마이크로소프트는 가상메모리의 최소 단위인 페이지(page)에 새로운 보호 속성(PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY)을 추가해서 이러한 공격으로부터 시스템을 보호하고자 했는데, 기존에는 read, write 등의 권한 체크 외에 실행(execution)이 가능한지에 대해서도 체크 하도록 추가한 것입니다. 즉, 실행될 수 없는 가상 메모리 영역에서 코드가 실행되고자 할 때 STATUS_ACCESS_VIOLATION 예외를 발생시키는 것이 DEP의 동작 원리입니다.

웜 바이러스의 경우 data 영역인 thread stack을 buffer overflow 시켜 stack을 임의로 변경시킴으로써 악성 코드가 실행되도록 하는 방법으로 주로 공격을 당했는데, DEP 기능이 활성화 되어 있을 경우 이러한 공격에 의해서 악성 코드가 실행되려는 시점에 해당 영역에서는 code execution이 허용되어 있지 않으므로 예외가 발생하고 악성 코드의 실행을 막는 역할을 할 수 있습니다.

하지만 heap과 같은 데이터 영역에서 code를 실행시키는 방법은 DEP 이전에 일종의 팁으로 기존 애플리케이션에 사용되기도 했습니다. 예를 들어 runtime시에 암호화 또는 압축되어 있는 실행 코드를 데이터 영역에 복호화 또는 압축 해제한 후에 이를 실행되게끔 하도록 구현된 프로그램이 있었는데, 이러한 애플리케이션에서 DEP 기능이 실행된 시스템에서는 호환성 문제가 발생하기도 하였습니다. 지금은 이러한 DEP 기능이 시장에서 사용된 지 오래되었기 때문에 이러한 호환성 이슈는 대부분 해소된 것으로 보입니다.

Comments

  • Anonymous
    May 11, 2009
    The comment has been removed