데이터 실행 방지
데이터 실행 방지(Data Execution Prevention, DEP)는 컴퓨터 보안 기능 중 하나로, 특정 메모리 영역이 데이터를 저장하는 데에만 사용되고 코드 실행은 불가능하도록 지정하는 기술이다. 이 기능은 주로 악성 코드나 바이러스가 시스템의 취약점을 이용해 데이터 영역에 코드를 주입하고 이를 실행시켜 시스템을 제어하거나 손상시키는 행위를 방어하기 위해 사용된다.
목적 및 작동 방식
일반적으로 프로그램은 코드 영역과 데이터 영역이 분리되어 있다. 코드 영역은 실행 가능한 명령어를 담고 있으며, 데이터 영역은 변수, 버퍼 등 프로그램을 실행하는 데 필요한 데이터를 담고 있다. 버퍼 오버플로와 같은 일부 보안 취약점은 공격자가 의도적으로 프로그램의 데이터 영역(예: 스택 또는 힙)에 악성 코드를 작성하고, 프로그램의 실행 흐름을 조작하여 해당 데이터 영역에 주입된 코드가 실행되도록 유도한다.
데이터 실행 방지는 이러한 공격을 막기 위해 데이터 영역으로 지정된 메모리 페이지에 '실행 불가능(Non-Executable, NX)' 또는 '실행 비활성화(Execute Disable, XD)' 속성을 부여한다. 이 속성이 설정된 메모리 위치에서 코드를 실행하려는 시도가 발생하면, CPU는 이를 감지하고 운영체제에 예외(Exception)를 발생시킨다. 운영체제는 이 예외를 처리하여 해당 프로세스를 종료함으로써 악성 코드의 실행을 차단한다.
데이터 실행 방지는 하드웨어 기반 방식과 소프트웨어 기반 방식으로 구현될 수 있다.
- 하드웨어 기반 DEP: CPU가 직접 메모리 관리 장치(MMU)를 통해 메모리 페이지의 실행 가능/불가능 속성을 관리한다. 이는 프로세서에 NX 비트 또는 XD 비트와 같은 기능이 탑재되어 있어야 가능하다. 이 방식이 소프트웨어 기반 방식보다 더 강력하고 효율적이다.
- 소프트웨어 기반 DEP: CPU 지원 없이 운영체제의 예외 처리 메커니즘을 사용하여 코드 실행 시도를 감지한다. 스택의 일부 영역에서만 작동하거나 특정 유형의 공격에만 효과적인 등 하드웨어 기반 방식보다 제한적일 수 있다.
지원 및 중요성
데이터 실행 방지 기능은 마이크로소프트 윈도우(XP 서비스 팩 2 이후), 리눅스, macOS 등 대부분의 현대 운영체제에서 기본적으로 지원되거나 구성 가능한 보안 기능으로 제공된다. 윈도우에서는 시스템 속성의 '고급' 탭에서 데이터 실행 방지 설정을 확인하고 관리할 수 있다.
데이터 실행 방지는 메모리 관련 취약점을 이용하는 공격을 방어하는 데 필수적인 보안 계층을 제공하며, 현대 운영체제의 기본적인 보안 기능 중 하나로 자리 잡고 있다. 물론 데이터 실행 방지만으로 모든 메모리 기반 공격을 완전히 막을 수 있는 것은 아니며(예: ROP 공격 등), 다른 보안 기술과 함께 사용될 때 더 강력한 방어 효과를 발휘한다.