데이터실행방지(DEP) (Data Execution Prevention)
한 줄 정의: 메모리 영역을 데이터용과 실행용으로 구분하여, 스택이나 힙처럼 데이터가 저장되는 영역에서는 코드가 실행되지 못하도록 막는 운영체제 보안 기법입니다.
쉽게 풀면
창고와 작업장이 분리된 공장을 생각해 보세요. 창고에는 자재만 쌓아둘 수 있고, 실제 작업(제작)은 작업장에서만 이루어져야 합니다. DEP는 컴퓨터 메모리를 이렇게 나누어, 데이터를 저장하는 공간(스택, 힙)에서는 코드가 실행되지 못하도록 하드웨어와 운영체제가 함께 막습니다. 이렇게 하면 공격자가 데이터 영역에 악성 코드를 몰래 넣어 실행시키는 방식의 공격을 원천적으로 어렵게 만들 수 있습니다.
왜 중요한가
버퍼 오버플로우 등으로 스택에 셸코드를 주입해 실행하는 고전적인 공격 방식을 막기 위해 DEP가 도입되었고, 이는 시스템 보안의 기본 방어선 중 하나로 자리 잡았습니다. 다만 이후 ROP처럼 DEP를 우회하는 기법이 등장하면서, DEP의 한계를 다루는 연구도 활발히 이루어졌습니다.
논문에서는 이렇게 쓰입니다
"실험 환경에서는 DEP와 ASLR을 모두 활성화한 상태로 취약점 악용 성공률을 측정하였다."
DEP가 다른 방어 기법과 함께 실험 조건으로 사용된 문장입니다.
"공격자는 DEP가 적용된 시스템에서도 ROP 체인을 이용하여 코드 실행 제한을 우회할 수 있음을 보였다."
DEP의 방어 한계와 우회 가능성을 설명하는 문장입니다.
조금 더 깊게 보면
DEP는 하드웨어의 NX(No-eXecute) 비트 또는 XD(eXecute Disable) 비트 기능을 활용하여 특정 메모리 페이지를 실행 불가로 표시하는 방식으로 구현되는 것이 일반적입니다. 운영체제는 페이지 테이블에 이 속성을 설정하여, CPU가 해당 페이지에서 명령어를 인출하려 하면 예외를 발생시켜 실행을 차단합니다.
주의할 점
DEP는 새로운 코드 주입은 막지만, 이미 실행 가능한 영역에 존재하는 코드를 재활용하는 ROP 같은 공격은 막지 못한다는 한계가 있습니다.