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