SYSTEM Hacking

[SISS] Lazenca (Protection Tech > NX Bit(MX : DEP))

SolB 2022. 2. 4. 17:06

NX Bit(MX : DEP)

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

: 프로세스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술

  NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되며, 프로세서 명령어가 그 곳에 상주하지 않음으로써 실행되지 않도록 만들어 준다.

 

▶ DEP(Data Execution Prevention)

- 마이크로소프트 윈도우 운영 체제에 포함된 보안 기능이며, 악의적인 코드가 실행되는 것을 방지하기 위해 메모리를 추가로 확인하는 하드웨어 및 소프트웨어 기술

- 하드웨어 DEP: 메모리에 명시적으로 실행 코드가 포함되어 있는 경우를 제외하고 프로세스의 모든 메모리 위치에서 실행할 수 없도록 표시 ( 대부분 최신 프로세서는 하드웨어 적용 DEP를 지원)

- 소프트웨어 DEP: CPU가 하드웨어 DEP를 지원하지 않을 경우 사용한다.

 

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

- DEP가 적용되지 않았을 경우 → 쉘코드가 실행되어야 한다.

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

< Example program >

#include <stdio.h>
#include <stdlib.h>
 
int main(){
    char str[256];
    char *chare = (char*)malloc(100);
 
    printf("Input: ");
    gets(str);
    printf("%p\n", str);
}

 

 

< Check the protection techniques of binary files >

▶ checksec.sh

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

- gcc -o DEP-enabled DEP.c

 

▶ Checking Permissions in Memory

다음과 같은 메모리 맵에서 메모리 영역별 설정된 권환을 확인할 수 있다.

- DEP enabled의 경우 실행권환(--x-)을 가지고 있는 영역은 5곳이다.

- DEP disabled의 경우 실행권한(--x-)을 가지고 있는 영역은 17곳이다.

 

< How to detect NX in the "Checksec.sh" file >

▶ Binary

- 바이너리 NX 설정여부 하기

: readelf 명령어를 이용해 파일의 세그먼트 헤더 정보에서 NX 여부를 확인, 파일의 세그먼트 헤더 정보에서 'GNU_STACK'의 Flg값이 'RWE'이라면 NX가 활성되었다고 판단

NX 적용 바이너리 Flg 값 : RW / NX 적용X 바이너리 값 : RWE

 

▶ Process

- 실행중인 프로세서의 NX 설정 여부 확인하기

: 바이너리 확인 방식과 동일하며, 전달되는 파일의 경로가 다르다. (ex) /proc/<PID>/exe)

 

▶ CPU

- CPU의 NX 설정여부 확인하기

: "/proc/cpuinfo" 파일에서 'nx'문자가 있는지 확인하기