상세 컨텐츠

본문 제목

01. NX Bit (MS : DEP)

Computer Science/Linux System

by RACC8N 2020. 3. 8. 17:05

본문

NX Bit(NX bit, Never eXecute bit, 실행 방지 비트)란?

  • 프로세스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술이다.
  • NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되며, 프로세서 명령어가 그 곳에 상주하지 않음으로써 실행되지 않도록 만들어 준다.

DEP(Data Execution Prevention)이란?

  • 마이크로소프트 윈도우 운영 체제에 포함된 보안 기능이며, 악의적인 코드가 실행되는 것을 방지하기 위해 메모리를 추가로 확인하는 하드웨어 및 소프트웨어 기술이다.
  • DEP는 두 가지 모드로 실행된다.
    • 하드웨어 DEP: 메모리에 명시적으로 실행 코드가 포함되어 있는 경우를 제외하고 프로세스의 모든 메모리 위치에서 실행할 수 없도록 표시한다.
      • 대부분의 최신 프로세서는 하드웨어 적용 DEP를 지원한다.
    • 소프트웨어 DEP: CPU가 하드웨어 DEP를 지원하지 않을 경우 사용한다.

※ 공격자가 Heap, Stack 영역에 Shellcode를 저장해서 실행하기 위해서는 해당 영역에 실행권한이 있어야 한다.

  • DEP가 적용되지 않았을 경우에는 쉘코드가 실행이 된다.
  • DEP가 적용된 경우에는 실행권한이 없으므로 쉘코드가 실행되지 않는다.
    • 프로그램에서 해당 동작에 대한 예외처리 후 프로세스가 종료된다.

※ Build Command(DEP disable)

  gcc -z execstack -o DEP-disabled DEP.c

 

Binary

다음과 같은 방법으로 바이너리의 NX 설정여부를 확인한다.

  • readelf 명령어를 이용해 파일의 세그먼트 헤더 정보에서 NX 여부를 확인한다.
  • 파일의 세그먼트 헤더 정보에서 'GNU_STACK'의 Flg 값이 'RWE'이라면 NX가 활성화되었다고 판단한다.
  • NX가 적용된 바이너리의 Flg 값이 'RW' 이다.
  • NX가 적용되지 않은 바이너리의 Flg 값이 'RWE' 이다.

>  readelf -W -l ./DEP-disabled |grep 'GNU_STACK' | grep 'RWE'

 

Process

다음과 같은 방법으로 실행중인 프로세서의 NX 설정여부를 확인한다.

  • Binary의 확인 방식과 동일하며, 전달되는 파일의 경로가 다음과 같이 다르다.
    • Ex) /proc/<PID>/exe

>  readelf -W -l /proc/<PID>/exe |grep 'GNU_STACK'

 

 

*** (checksec --file=name)

 

 

REFERENCE : https://www.lazenca.net/pages/viewpage.action?pageId=1147904

 

 

'Computer Science > Linux System' 카테고리의 다른 글

Lazy binding (Feat. Now binding)  (0) 2020.03.09
04. RELRO  (0) 2020.03.09
03. Canaries  (0) 2020.03.08
02. ASLR  (0) 2020.03.08

관련글 더보기

댓글 영역