내보내기(0) 인쇄
모두 확장
확장 최소화

데이터 실행 방지

적용 대상: Windows Server 2003 with SP1

데이터 실행 방지는 어떤 기능을 수행합니까?

데이터 실행 방지(DEP)는 하드웨어 및 소프트웨어 기술로서 악의적인 코드 이용을 방지하기 위해 메모리를 추가로 검사합니다. Windows Server 2003 서비스 팩 1에서는 하드웨어 및 소프트웨어에서 모두 DEP를 사용합니다.

하드웨어 적용 DEP

하드웨어 적용 DEP는 메모리 위치가 명시적으로 실행 코드를 포함하지 않은 경우 프로세스의 모든 메모리 위치를 비실행으로 표시합니다. 비실행 메모리 위치에서 코드 삽입 및 실행을 시도하는 일종의 공격이 있습니다. DEP는 이러한 공격을 차단하고 예외를 발생시켜 이를 방지합니다.

하드웨어 적용 DEP는 프로세서 하드웨어를 사용하여 해당 메모리에서 코드를 실행하지 않아야 함을 나타내는 특성을 메모리에 표시합니다. DEP는 일반적으로 PTE(Page Table Entry)의 1비트를 변경하여 메모리 페이지를 표시하면서 가상 메모리 페이지별로 작동합니다.

DEP의 실제 하드웨어 구현 및 가상 메모리 페이지 표시 방법은 프로세서 아키텍처에 따라 다양합니다. 그러나 해당 특성 집합으로 표시된 페이지에서 코드가 실행되는 경우 하드웨어 적용 DEP를 지원하는 프로세서에서 예외가 발생할 수 있습니다.

Advanced Micro Device(AMD) 및 Intel Corporation에서 DEP와 호환되는 Windows 호환 아키텍처를 정의하고 출시했습니다.

32비트 버전의 Windows Server 2003 서비스 팩 1은 AMD에서 정의한 대로 NX(No-Excute) 페이지 보호 프로세서 기능을 사용하거나 Intel에서 정의한 대로 XD(Execute Disable bit) 기능을 사용합니다. 이러한 프로세서 기능을 사용하려면 프로세서를 PAE(실제 주소 확장) 모드에서 실행하고 있어야 합니다. 64비트 버전의 Windows에서는 64비트 확장의 NX 또는 XD 프로세서 기능 및 IPF 프로세서의 액세스 권한 PTE(Page Table Entry) 필드의 특정 값을 사용합니다.

향후 모든 32비트 및 64비트 프로세서는 하드웨어 적용 DEP 지원을 제공할 것으로 기대하고 있습니다. Microsoft에서는 프로세서 공급업체와 지속적으로 협력하여 DEP 기술의 채택 및 개발을 장려할 것입니다.

소프트웨어 적용 DEP

DEP 보안 검사의 추가 집합이 Windows Server 2003 서비스 팩 1에 추가되었습니다. 소프트웨어 적용 DEP로 알려진 이 검사는 Windows에서 예외 처리 메커니즘 사용을 줄이도록 설계되었습니다. 소프트웨어 적용 DEP는 Windows Server 2003 서비스 팩 1을 실행할 수 있는 모든 프로세서에서 실행됩니다. 기본적으로 소프트웨어 적용 DEP는 프로세서의 하드웨어 적용 DEP 기능과 상관없이 제한된 시스템 바이너리만 보호합니다.

이 기능의 적용 대상은 누구입니까?

응용 프로그램 및 드라이버 개발자는 DEP 및 지원 플랫폼에서 실행되는 소프트웨어의 요구 사항에 대하여 알고 있어야 합니다. JIT(Just-In-Time) 코드를 생성하거나 기본 프로세스 스택 또는 힙에서 메모리를 실행하는 응용 프로그램을 사용하는 경우 DEP 요구 사항에 유의해야 합니다.

드라이버 개발자는 하드웨어 적용 DEP를 지원하는 플랫폼의 PAE 모드를 알고 있어야 합니다. 드라이버 호환성을 향상시키기 위해 Windows Server 2003, Standard Edition 서비스 팩 1을 실행하는 시스템의 PAE 모드 동작이 변경되었습니다.

Windows Server 2003 서비스 팩 1에서 이 기능에 추가된 새로운 기능은 무엇입니까?

32비트 및 64비트 버전의 Windows 및 응용 프로그램에서 데이터 실행 방지

자세한 설명

하드웨어 적용 DEP

DEP를 비롯하여 메모리 보호 모델은 응용 프로그램 및 드라이버 개발자를 위해 일관성 있게 32비트 및 64비트 버전의 Windows에서 모두 동일하게 디자인되었습니다.

응용 프로그램 개발자는 사용자 모드의 DEP 동작에 대해 알고 있어야 합니다. 사용자 모드 DEP 예외는 Windows 시스템에서 STATUS_ACCESS_VIOLATION (0xc0000005)이 됩니다. EXCEPTION_RECORD 구조 안에 위치한 ExceptionInformation 의 첫 번째 매개 변수에는 발생한 액세스 위반 유형이 포함됩니다. ExceptionInformation[0]의 값 8은 액세스 위반이 예외 위반이었음을 나타냅니다.

대부분의 프로세스에서 STATUS_ACCESS_VIOLATION 예외는 처리되지 않은 예외이며 그 결과 프로세스가 종료됩니다.

또한 DEP는 커널 모드의 드라이버에 적용됩니다. 커널 모드의 메모리 영역에 대한 DEP를 선택적으로 사용할 수 있게 설정하거나 사용할 수 없게 설정할 수 없습니다. 32비트 버전의 Windows에서 DEP는 기본적으로 스택에 적용됩니다. 이 경우는 64비트 버전의 Windows 커널 모드 DEP와 다른데, 여기에서는 스택, 페이지된 풀 및 세션 풀에 DEP가 적용됩니다.

DEP가 설정되어 있으면 장치 드라이버가 스택에서 코드를 실행할 수 없습니다. 커널 모드에서 DEP 액세스 위반이 발생하면 오류 검사 0xFC: ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY가 실행됩니다.

소프트웨어 적용 DEP

소프트웨어 적용 DEP는 Windows의 예외 처리 메커니즘에서 추가 검사를 수행합니다. 프로그램 이미지 파일이 SafeSEH(Safe Structured Exception Handling)를 사용하여 만들어진 경우 소프트웨어 적용 DEP는 예외가 발송되기 전에 예외 처리기가 이미지 파일 내에 있는 함수 테이블에 등록되어 있는지 확인합니다.

프로그램 이미지 파일이 SafeSEH를 사용하여 만들어지지 않은 경우 소프트웨어 적용 DEP는 예외가 발송되기 전에 예외 처리기가 실행 가능으로 표시된 메모리 영역 내에 위치하는지 확인합니다.

DEP 응용 프로그램 닫기 동작

대부분의 응용 프로그램에는 DEP로 인한 문제가 발생하지 않습니다. 그러나 응용 프로그램에 DEP 문제가 발생하면 사용자에게 문제에 대해 알리는 데이터 실행 방지 메시지가 나타납니다.

데이터 실행 방지 메시지는 응용 프로그램에 DEP 문제가 발생했음을 나타내고 사용자가 DEP에 대해 자세히 알 수 있도록 하며 닫힌 응용 프로그램의 DEP를 선택적으로 해제합니다.

Important중요
DEP 문제가 응용 프로그램에 발생하는 경우 응용 프로그램 공급업체에 업데이트가 있는지 문의하는 것이 좋습니다. 응용 프로그램에 대해 DEP를 해제하기 전에 응용 프로그램에 대해 DEP를 해제할 경우의 보안 문제를 충분히 고려해야 합니다.

데이터 실행 방지 메시지 창의 설정 변경 단추를 사용하여 닫힌 응용 프로그램에 대해 DEP 설정을 변경하는 기능은 시스템 전반의 DEP 구성에 따라 다릅니다. 응용 프로그램에 대한 DEP 방지는 시스템 전반의 DEP 구성이 OptOut 모드로 설정된 경우에만 변경할 수 있습니다.

Windows 오류 보고 창이 나타나기 직전에 데이터 실행 방지 메시지가 나타나 DEP 문제에 대한 보고서를 Microsoft에 제출할 기회를 제공합니다.

Windows Server 2003 서비스 팩 1에서는 관리자가 시스템에 대화형으로 로그온한 다음에 데이터 실행 방지 메시지가 나타납니다. Windows 오류 보고가 기본적으로 대기 모드로 구성되어 있기 때문에 Windows XP 서비스 팩 2의 동작에서 Windows Server 2003 서비스 팩 1의 동작이 변경되었습니다. 대기 모드는 관리자가 다음에 시스템에 대화형으로 로그온할 때까지 오류 보고 메시지가 대기하도록 합니다.

Windows 오류 보고에 대해 자세히 알고 싶거나 응용 프로그램 문제가 발생한 즉시 DEP 및 Windows 오류 보고 메시지가 표시되도록 Windows 오류 보고를 구성하려면 Microsoft 웹 사이트(http://go.microsoft.com/fwlink/?LinkId=38443)에서 "Using Windows Server 2003 in a Managed Environment: Windows Error Reporting" 문서를 참조하십시오.

Windows 오류 보고는 DEP로 인해 응용 프로그램이 닫힐 때 오류 서명을 생성합니다. 오류 서명은 Windows 오류 보고 대화 상자에서 "여기를 클릭하십시오" 링크를 클릭하면 볼 수 있습니다. DEP 문제에 대한 오류 서명은 다음과 같은 특성을 갖습니다.

 

매개 변수 예제 값 설명

EventType

BEX

버퍼 오버플로(/GS) 또는 DEP 예외를 표시(BEX64는 64비트 버전의 Windows에서 버퍼 오버플로(/GS) 또는 DEP 예외를 표시)

P1

DEPDemo.exe

문제가 발생한 응용 프로그램 실행 파일 이름

P2

5.1.2600.2180

문제가 발생한 응용 프로그램 실행 파일 버전

P3

416725f2

오류가 있는 응용 프로그램 스탬프

P4

DEPDemo.exe

오류가 있는 모듈 이름

P5

5.1.2600.2180

오류가 있는 모듈 버전

P6

416725f2

오류가 있는 모듈 스탬프

P7

00002060

오류 오프셋(모듈이 오류 주소에 로드되지 않는 경우 명령어 주소)

P8

C0000005

STATUS_ACCESS_VIOLATION 예외를 표시(이 매개 변수가 c0000409인 경우 문제는 /GS 관련 오류)

P9

00000008

실행 STATUS_ACCESS_VIOLATION을 표시(00000002는 Intel Itanium 아키텍처의 경우 64비트 버전의 Windows에서 실행 STATUS_ACCESS_VIOLATION을 표시)

마지막으로 Windows 오류 보고 구성에 관계 없이 DEP 문제가 발생할 때 몇 가지 응용 프로그램의 경우에는 데이터 실행 방지 메시지가 표시되지 않을 수 있습니다. 이러한 응용 프로그램은 DEP에 의해 발생한 STATUS_ACCESS_VIOLATION 예외를 처리하거나 기본 Win32 UEF를 무시하는 처리되지 않은 예외 필터(UEF)를 설치합니다. 기본 Win32 UEF는 데이터 실행 방지 및 Windows 오류 보고 메시지 모두를 트리거하는 일을 담당합니다. 응용 프로그램이 SEM_NOGPFAULTERRORBOX 플래그를 사용하여 SetErrorMode() 함수를 호출한 경우 데이터 실행 방지 메시지가 나타나지 않을 수 있습니다.

이 변경 사항이 중요한 이유는 무엇이며 이로 인해 줄어드는 위협은 무엇입니까?

DEP의 가장 큰 장점은 기본 힙, 여러 스택 및 메모리 풀과 같은 데이터 페이지에서 코드가 실행되지 않도록 하는 것입니다. 일반적인 시스템 작업의 경우 코드는 보통 기본 힙 및 스택에서 실행되지 않습니다. 하드웨어 적용 DEP는 이러한 위치에서 실행 중이며 실행이 시작될 때 예외를 발생시키는 코드를 검색합니다. 예외가 처리되지 않으면 프로세스가 종료됩니다. 커널 모드에서 보호된 메모리의 코드를 실행하면 오류가 발생합니다.

오류로 인해 프로세스가 종료되거나 시스템 장애가 발생하는 것은 바람직한 일은 아니지만 이렇게 하면 악의적인 코드가 실행되는 것을 방지할 수 있습니다. 시스템에서 악의적인 코드가 실행되지 못하게 하면 시스템이 손상되거나 악의적인 코드가 전파되는 것을 막을 수 있습니다. 악의적인 코드가 전파되어 나타나는 악영향은 종료된 프로세스나 시스템 오류보다 더 심각한 경우가 많습니다.

DEP를 사용하면 바이러스나 다른 공격으로 인해 실행 코드가 입력되고 이와 같이 입력된 코드가 실행되는 것을 방지할 수 있습니다. DEP가 있는 시스템에서는 이와 같이 입력된 코드가 실행되면 예외가 발생할 수 있습니다. 소프트웨어 적용 DEP를 사용하면 Windows 내에서 예외 처리 메커니즘 사용을 줄일 수 있습니다.

DEP의 두 번째 장점은 응용 프로그램 및 드라이버 개발자에게 기술적으로 유용하다는 점입니다. DEP 기술을 사용하면 개발자는 명시적으로 데이터 페이지를 실행 가능으로 표시하지 않고는 데이터 페이지에서 코드를 실행할 수 없습니다.

작동 방식의 차이는 무엇입니까?

응용 프로그램 호환성

일부 응용 프로그램의 동작은 DEP와 호환되지 않습니다. Just-In-Time 코드 생성과 같은 동적 코드 생성을 수행하며 생성된 코드를 실행 권한을 사용해서 명시적으로 표시하지 않은 응용 프로그램은 DEP와 호환성 문제가 발생할 수 있습니다. SafeSEH가 기본 제공되지 않는 응용 프로그램은 실행 메모리 구역에 예외 처리기가 있어야 합니다.

DEP 위반을 시도하는 응용 프로그램에는 상태 코드가 STATUS_ACCESS_VIOLATION (0xC0000005)인 예외가 발생합니다. 응용 프로그램에 실행 메모리가 필요한 경우 Virtual* 메모리 할당 함수의 메모리 보호 인수에 PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE 또는 PAGE_EXECUTE_WRITECOPY를 지정하여 명시적으로 이 특성을 해당 메모리에 설정해야 합니다. malloc()HeapAlloc() 함수를 사용하는 힙 할당은 실행할 수 없습니다.

드라이버 호환성

DEP의 드라이버 호환성 문제는 PAE 모드로 인한 호환성 문제가 대부분입니다.

note참고
하드웨어 적용 DEP를 지원하는 프로세서가 있는 32비트 버전의 Windows를 실행하는 시스템에만 PAE가 필요합니다.

코드 생성을 수행하거나 다른 기술을 사용하여 실시간으로 실행 코드를 생성하는 드라이버에서는 DEP가 호환성 문제를 일으킬 수도 있습니다. DEP가 64비트 버전의 Windows에 로드된 드라이버에 대해서는 "항상 설정"되어 있기 때문에 위와 같이 동작하는 많은 드라이버가 수정되었지만 모든 드라이버가 업데이트된 것은 아닙니다. 그러나 이러한 기술을 사용하는 드라이버는 거의 없으며 DEP 단독으로는 드라이버 호환성 문제를 많이 발생시키지 않습니다.

드라이버 호환성 문제가 가장 관건이 되는 경우는 32비트 시스템에서 PAE(실제 주소 확장) 모드를 실행하는 경우입니다. PAE 모드를 사용하면 프로세서에서 4GB 이상의 메모리에 주소를 지정할 수 있습니다. PAE 메모리 페이징 및 비 PAE 메모리 페이징 구성표 간의 가장 큰 차이점은 PAE 모드(2 수준 대신 3 수준)에서 필요한 추가 페이징 수준입니다.

일부 드라이버는 PAE 모드에서 로드되지 못할 수 있는데 이는 해당 장치에서 64비트 주소 지정을 수행할 수 없거나 드라이버가 PAE 모드에서 4GB를 초과하는 RAM이 필요한 것으로 가정하기 때문입니다. 그러한 드라이버는 PAE 모드일 때 언제나 64비트 주소를 받을 것이고 드라이버나 해당 장치에서 주소를 해석할 수 없다고 예상합니다.

다른 드라이버는 PAE 모드에서 로드될 수 있지만 직접 시스템 PTE(Page Table Entries)를 수정하여 시스템을 불안정하게 만들 수 있습니다. 이러한 드라이버는 32비트 PTE를 예상하지만 PAE 모드에서는 32비트 대신 64비트 PTE를 받게 됩니다.

드라이버 PAE 호환성과 관련된 가장 큰 문제는 직접 메모리 액세스(DMA) 전송 및 맵 레지스터 할당입니다. DMA를 지원하는 많은 장치(주로 32비트 어댑터)는 64비트의 실제 주소를 지정할 수 없습니다. 32비트 모드에서 실행될 때는 장치가 모든 실제 주소 공간의 주소를 지정할 수 있습니다. PAE 모드에서는 데이터가 4GB 이상의 실제 주소에 존재할 수 있습니다. 이러한 제약 조건이 있는 장치가 이 시나리오에서 작동할 수 있도록 Windows 2000 Server 이상의 운영 체제에서는 맵 레지스터에서 표시하는 32비트 주소를 제공하여 DMA 트랜잭션을 위해 이중 버퍼링을 제공합니다. 장치는 32비트 주소에 대해 DMA 트랜잭션을 수행할 수 있고 커널은 드라이버에 제공된 64비트 주소로 메모리를 복사합니다.

시스템이 PAE 모드를 설정하지 않은 채로 실행될 때는 32비트 장치의 해당 맵 레지스터를 실제 메모리에서 백업하지 않아도 됩니다. 즉, 모든 장치와 드라이버가 32비트 주소 공간 안에 포함되어 있기 때문에 이중 버퍼링이 필요하지 않습니다. 64비트 프로세서 기반 컴퓨터에서 32비트 장치용 드라이버 테스트를 기준으로 할 때 클라이언트에서 테스트한 대부분의 DMA 지원 드라이버는 무제한의 맵 레지스터를 예상하는 것으로 보입니다.

호환성 문제를 줄이기 위해 Windows Server 2003, Standard Edition 서비스 팩 1에서는 HAL(Hardware Abstraction Layer)이 32비트 HAL DMA처럼 동작하도록 변경되었습니다. 시스템이 PAE 모드로 실행 중이면 변경된 HAL에서 무제한 맵 레지스터를 승인합니다. 또한 커널 메모리 관리자는 4GB 이상의 실제 주소를 모두 무시합니다. 4GB 한도를 초과하는 시스템 RAM은 Windows에서 주소를 지정할 수 없도록 하여 시스템에서 사용할 수 없게 됩니다. 4GB로 주소 공간을 제한하므로 32비트 DMA 버스 마스터 기능이 있는 장치에서는 4GB 한도를 초과하는 주소를 사용하는 트랜잭션을 볼 수 없습니다. 이와 같이 변경하면 트랜잭션을 이중으로 버퍼링할 필요가 없으므로 일부 드라이버에서 올바른 이중 버퍼링 지원 구현과 관련된 버그를 방지할 수 있게 됩니다.

Windows Server 2003, Enterprise Edition 서비스 팩 1 및 Windows Server 2003, Datacenter Edition 서비스 팩 1의 PAE 동작은 서비스 팩이 없는 버전에서 변경되지 않았습니다.

HAL 및 메모리 관리자가 이와 같이 변경되면 DEP를 사용하는 Windows Server 2003 서비스 팩 1을 실행하는 시스템에서 장치 드라이버 호환성 문제가 최소화될 것으로 예상됩니다.

시스템 호환성

DEP 호환성과 관련하여 마지막으로 고려할 사항은 4GB를 초과하는 실제 RAM을 지원할 수 있게 설계되어 있지 않는데도 PAE 모드가 설정되어 있는 시스템으로 인한 문제입니다. Microsoft는 프로세서가 PAE 모드에서 실행 중인 경우 하드웨어 적용 DEP 지원 프로세서를 사용하는 일부 시스템이 시작되지 되지 않거나 다른 안정성 문제가 발생하는 것을 내부 테스팅 과정에서 발견했습니다.

PAE 모드는 NX 프로세서 기능을 사용하기 위해 필수적입니다. 그러므로 시스템 디자이너 및 펌웨어 엔지니어는 시스템 칩셋 및 펌웨어가 4GB를 초과하는 실제 RAM을 지원하도록 설계되어 있지 않아도 시스템이 PAE 모드에서 실행될 수 있다는 점을 알아야 합니다.

특히 페이지 테이블 항목을 해석하여 운영 체제에서 실행한 명령을 확인하는 시스템 펌웨어를 고려해야 합니다. 프로세서가 PAE 모드에서 실행 중인 경우 페이지 테이블 항목의 길이는 64비트로 확장됩니다. 시스템 디자이너와 펌웨어 개발자는 운영 체제에서 실행한 명령을 안전하게 확인하는 방법에 대한 자세한 내용을 해당 프로세서 및 칩셋 공급업체에 문의하는 것이 좋습니다.

AMD 프로세서로 작업하는 시스템 디자이너는 "BIOS and Kernel Developer’s Guide for AMD Athlon 64 and AMD Opteron Processors"에서 자세한 정보를 얻을 수 있습니다. 이 설명서를 참조하려면 AMD Athlon 64 웹 사이트(http://go.microsoft.com/fwlink/?LinkId=28165)로 이동하여 "BIOS and Kernel Developer’s Guide for AMD Athlon 64 and AMD Opteron Processors"를 클릭하십시오.

Intel에서는 SMM(System Management Mode)에 대한 자세한 정보를 공개적으로 제공하지 않습니다. Intel 프로세서로 작업하는 시스템 디자이너는 Intel에 직접 문의하여 자세한 정보를 얻어야 합니다.

Windows의 PAE 모드 지원에 대한 자세한 내용은 Microsoft 웹 사이트(http://go.microsoft.com/fwlink/?LinkId=45912)에서 "Physical Address Extension - PAE Memory and Windows"를 참조하십시오.

이러한 문제를 해결하는 방법은 무엇입니까?

메모리의 실행 영역이 필요한 응용 프로그램에서 메모리를 할당할 때 PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE 또는 PAGE_EXECUTE_WRITECOPY 특성을 사용해야 합니다. 추가로 응용 프로그램은 기본 프로세스 힙이나 스택에서 실행할 수 없습니다. DEP와 호환되지 않는 작업을 수행하는 대부분의 응용 프로그램은 호환성을 위해 업데이트해야 합니다. 또한 응용 프로그램은 SafeSEH를 사용하여 만들어지거나 해당 예외 처리기가 명시적으로 실행으로 표시된 메모리에 위치하게 해야 합니다.

응용 프로그램에서 VirtualAlloc() API(응용 프로그래밍 인터페이스) 함수를 사용하여 적절한 메모리 보호 옵션을 적용하여 실행 메모리를 할당할 수 있습니다. 적어도 PAGE_EXECUTE 메모리 보호 옵션은 사용해야 합니다. 실행 코드가 생성된 이후에 응용 프로그램에서 메모리 보호를 설정하여 할당된 메모리에 쓰기 권한을 금지하는 것이 좋습니다. 응용 프로그램은 VirtualProtect() API 함수를 사용하여 할당된 메모리에 쓰기 권한을 금지할 수 있습니다. 쓰기 권한을 허용하지 않으면 프로세스 주소 공간의 실행 영역을 최대한 보호할 수 있습니다.

악의적인 프로세스가 실행 영역에 코드를 삽입하기 위해 액세스를 시도하면 STATUS_ACCESS_VIOLATION 쓰기 예외가 발생합니다. 응용 프로그램은 주소 공간의 실행 영역을 가능한 작게 만들어야 합니다. 이렇게 하면 실행 메모리가 프로세스 주소 공간으로 삽입되고 실행되는 공격 범위가 줄어듭니다.

또한 정교한 응용 프로그램에서는 해당 가상 메모리의 레이아웃을 제어하고 실행 영역을 만들 수 있습니다. 이러한 응용 프로그램은 비실행 영역보다 낮은 메모리 공간에서 실행 영역을 찾으려고 합니다. 비실행 영역 아래에서 실행 영역을 찾으려는 목적은 버퍼 오버플로가 실행 메모리로 오버플로되지 않게 하기 위해서입니다.

소수의 실행 파일 및 라이브러리는 이미지 파일의 데이터 섹션에 실행 코드를 포함하고 있을 수 있습니다. 응용 프로그램이 데이터 섹션에 썽크로 알려진 작은 코드 세그먼트를 두는 경우가 있습니다. 그러나 섹션에 실행 특성이 적용되지 않은 경우 DEP는 메모리에 로드된 이미지 파일의 섹션을 비실행으로 표시합니다.

그러므로 데이터 섹션에 있는 실행 코드를 코드 섹션으로 이동해야 하거나 실행 코드를 포함하는 데이터 섹션을 실행으로 명시적으로 표시해야 합니다. 실행 코드가 있는 섹션에 대해 해당하는 섹션의 Characteristics 필드에 실행 특성 IMAGE_SCN_MEM_EXECUTE (0x20000000)를 추가해야 합니다.

Microsoft Visual Studio 제품과 함께 배포되는 Microsoft linker는 /SECTION 링커 옵션을 사용하여 섹션에 실행 특성을 추가할 수 있습니다. /SECTION 링커 옵션의 형식은 다음과 같습니다.

/SECTION: 이름 ,[E][R][W][S][D][K][L][P][X][,ALIGN=#]

E 값은 실행 특성(0x20000000)을 나타냅니다. /SECTION 및 기타 Microsoft 링커 옵션에 대한 자세한 내용은 MSDN 웹 사이트(http://go.microsoft.com/fwlink/?LinkId=28167)를 참조하십시오.

추가적으로 Microsoft COFF Binary File Editor(Editbin.exe) 유틸리티는 기존 이미지의 섹션 특성을 변경하는 데 사용할 수 있습니다. Editbin 유틸리티는 다음과 같은 형식의 /SECTION 옵션을 사용합니다.

/SECTION: 이름 [= newname ][,[[!]{CDEIKOMPRSUW}][A{1248PTSX}]]

C E 값은 각각 코드와 실행 특성을 나타냅니다. Editbin 유틸리티 및 /SECTION 옵션에 대한 자세한 내용은 MSDN 웹 사이트(http://go.microsoft.com/fwlink/?LinkId=28168)를 참조하십시오.

Microsoft는 Windows Server 2003 서비스 팩 1에서 DEP를 사용하도록 Microsoft .NET Framework 버전 1.0 및 버전 1.1에 서비스 팩을 제공했습니다. Microsoft .NET Framework를 사용하는 응용 프로그램은 정상적으로 작동하지만 적절한 Microsoft .NET Framework 서비스 팩이 설치되지 않으면 DEP를 사용하는 경우 이점을 얻지 못합니다.

Microsoft는 응용 프로그램 개발자가 Microsoft .NET Framework를 재배포하여 DEP를 이용할 수 있는 Microsoft .NET Framework 버전 1.0 서비스 팩 3이나 버전 1.1 서비스 팩 1로 업데이트할 것을 권장합니다.

Windows Server 2003 서비스 팩 1에서 변경되거나 추가된 설정은 무엇입니까?

DEP의 시스템 전체 구성

Windows XP 서비스 팩 2(SP2)와 비교하여 Windows Server 2003 서비스 팩 1의 DEP 동작의 주요 차이점은 서버 운영 체제에서는 기본 구성이 모든 응용 프로그램과 서비스를 보호한다는 것입니다. Windows XP SP2에서 기본적으로 DEP는 필수 Windows 운영 체제 프로그램 및 서비스에서만 설정됩니다.

시스템의 DEP 구성은 Boot.ini 스위치를 통해 제어됩니다. 또한 제어판에 있는 시스템을 변경하여 최종 사용자가 시스템에 관리자로 로그온한 경우 쉽게 DEP 설정을 구성하도록 할 수 있습니다.

시스템 DEP 구성 설정은 32비트나 64비트 버전의 Windows를 실행할 때 32비트 응용 프로그램과 프로세스에만 적용됩니다. 64비트 버전의 Windows에서 하드웨어 적용 DEP를 사용할 수 있는 경우 64비트 프로세스와 커널 메모리 공간에 항상 적용되며 해제할 시스템 구성 설정이 없습니다.

Windows에서는 하드웨어 적용 DEP 및 소프트웨어 적용 DEP 모두에 대해 네 가지의 시스템 전체 구성을 지원합니다.

DEP 구성

구성 설명

OptIn

(Windows XP SP2 및 Windows XP 64비트 버전의 기본값)

하드웨어 적용 DEP를 사용할 수 있는 프로세서가 있는 시스템에서는 기본적으로 제한된 시스템 바이너리 및 "옵트인"된 응용 프로그램에 대해 DEP를 사용할 수 있습니다. 이 옵션을 사용하면 기본적으로 DEP는 Windows 시스템 바이너리만 처리합니다.

OptOut

(Windows Server 2003 서비스 팩 1의 기본값)

기본적으로 모든 프로세스에서 DEP를 사용할 수 있습니다. 사용자는 직접 제어판에 있는 시스템을 사용하여 DEP를 적용하지 않을 특정 응용 프로그램 목록을 만들 수 있습니다. IT 전문가는 Application Compatibility Toolkit를 사용하여 하나 이상의 응용 프로그램을 DEP 보호 대상에서 옵트아웃할 수 있습니다. DEP에 대해 시스템 호환성 수정("shims")이 적용됩니다.

AlwaysOn

이 옵션은 전체 시스템에 대해 전체적으로 DEP를 적용합니다. 모든 프로세스는 항상 DEP가 적용되어 실행됩니다. DEP 보호에서 특정 응용 프로그램을 제외하기 위한 예외 목록을 사용할 수 없습니다. DEP에 대해 시스템 호환성 수정("shims")이 적용되지 않습니다. Application Compatibility Toolkit를 사용하여 제외된 응용 프로그램은 DEP가 적용되어 실행됩니다.

AlwaysOff

이 옵션은 하드웨어의 DEP 지원 여부에 상관없이 시스템의 어느 부분에도 DEP를 적용하지 않습니다. 그러나 부팅 항목에서 /noexecute=alwaysoff 옵션이 /execute 옵션으로 바뀌지 않으면 프로세서가 32비트 버전의 Windows를 사용하여 PAE 모드에서 실행됩니다.

하드웨어 적용 DEP 및 소프트웨어 적용 DEP는 동일한 방법으로 구성됩니다. 시스템 전체 DEP 정책이 옵트인으로 설정되는 경우 동일한 Windows 핵심 바이너리와 응용 프로그램이 하드웨어 적용 DEP 및 소프트웨어 적용 DEP 모두에서 보호됩니다. 시스템이 하드웨어 적용 DEP를 사용할 수 없는 경우 Windows 핵심 바이너리와 응용 프로그램은 소프트웨어 적용 DEP에 의해서만 보호됩니다.

이와 유사하게 시스템 전체 DEP 정책이 옵트아웃으로 설정되는 경우 DEP 보호에서 제외된 응용 프로그램이 하드웨어 적용 DEP 및 소프트웨어 적용 DEP 모두에서 제외됩니다.

네 가지의 시스템 전체 DEP 구성이 Boot.ini 스위치를 통해 제어됩니다. Boot.ini 설정은 다음과 같습니다.

/noexecute=policy_level

여기서 policy_levelAlwaysOn, AlwaysOff, OptIn 또는 OptOut로 정의됩니다.

Windows Server 2003 서비스 팩 1이 설치된 경우 또는 하드웨어 적용 DEP가 지원되는 컴퓨터 및 지원되지 않는 컴퓨터 간에 Windows 운영 체제 이미지가 이동되는 경우 Boot.ini 파일에 있는 기존 /noexecute 설정은 변경되지 않습니다.

Windows Server 2003 서비스 팩 1을 설치하는 동안 다른 정책 수준을 무인 설치에 지정하지 않으면 OptOut 정책 수준이 기본적으로 사용됩니다. /noexecute=policy_level 설정이 DEP를 지원하는 Windows 버전의 부팅 항목에 없는 경우에는 /noexecute=OptIn 옵션이 포함된 경우와 동일하게 동작합니다.

관리자로 로그온한 최종 사용자는 성능 옵션 대화 상자의 데이터 실행 방지 탭을 사용하여 직접 OptIn OptOut 정책 간에 DEP를 구성할 수 있습니다. 다음 절차는 컴퓨터에서 DEP를 직접 구성하는 방법에 대해 설명합니다.

DEP 설정을 구성하려면

  1. 시작, 제어판을 차례로 클릭한 다음 시스템을 두 번 클릭합니다.

  2. 고급 탭을 클릭합니다. 그런 다음 성능에서 설정을 클릭합니다.

  3. 데이터 실행 방지(DEP) 탭을 클릭합니다.

  4. 데이터 실행 방지(DEP)를 필수적인 Windows 프로그램 및 서비스에만 사용을 클릭하여 OptIn 정책을 선택합니다.

  5. 데이터 실행 방지(DEP)를 사용자가 직접 선택한 항목을 제외한 모든 프로그램 및 서비스에 사용을 클릭하여 OptOut 정책을 선택합니다.

  6. OptOut 정책을 선택한 경우 추가를 클릭하고 DEP를 사용하지 않을 응용 프로그램을 추가합니다.

IT 전문가는 다양한 방법으로 시스템 전체 DEP 구성을 제어할 수 있습니다. 스크립트 메커니즘을 사용하거나 Windows Server 2003 서비스 팩 1에 포함되는 Bootcfg.exe 도구를 사용하여 Boot.ini 파일을 직접 수정할 수 있습니다.

Windows Server 2003 서비스 팩 1을 무인 설치하기 위해 Unattend.txt 파일을 사용하여 특정 DEP를 미리 구성할 수 있습니다. Unattend.txt 파일의 [Data] 섹션에서 OSLoadOptionsVar 항목을 사용하여 시스템 전체 DEP 구성을 지정할 수 있습니다.

응용 프로그램별로 DEP 구성

응용 프로그램의 호환성을 위해 DEP를 OptOut 정책 수준으로 설정한 경우 개별 32비트 응용 프로그램에 대해 DEP 해제를 선택적으로 설정할 수 있습니다. 그러나 DEP는 항상 64비트 응용 프로그램에 사용됩니다.

최종 사용자를 위해 시스템 속성데이터 실행 방지 탭을 사용하여 응용 프로그램에 대해 DEP 해제를 선택적으로 설정할 수 있습니다.

IT 전문가를 위해 DisableNX라는 새로운 응용 프로그램 호환성 수정이 Windows Server 2003 서비스 팩 1에 포함되어 있습니다. DisableNX 호환성 수정으로 인해 DEP가 적용되어 있는 프로그램에서 데이터 실행 방지를 사용할 수 없게 됩니다.

DisableNX 호환성 수정은 Application Compatibility Toolkit를 사용하여 응용 프로그램에 적용될 수 있습니다. Windows 응용 프로그램 호환성에 대한 자세한 내용은 Microsoft 웹 사이트(http://go.microsoft.com/fwlink/?LinkId=23302)에서 "Windows Application Compatibility"를 참조하십시오.

이 정보가 도움이 되었습니까?
(1500자 남음)
의견을 주셔서 감사합니다.

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft