지옥방 3주차 과제 라젠카 뿌시기(NX Bit)
<NX Bit(MS : DEP)>
NX BIt(Nx bit, Never eXecute bit, 실행 방지 비트) 란?
- 프로세스 명령어나 코드 또는 데이터 저장을 위해 메모리 영역을 따로 분리하는 CPU 기술
- NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용 => 명령어가 들어갈 수 없다 => 악성코드가 실행되지 않도록 해준다.
DEP(Data Execution Prevention)
- 윈도우 운영체제에 포함된 보안 기능, 악의적인 코드가 실행되는 것을 막기 위해 메모리를 추가로 확인하는 기술
- DEP는 두가지 모드로 실행된다.
하드웨어 DEP | 메모리에 명시적으로 실행 코드가 포함되어 있는 경우를 제외하고 모든 메모리 위치에서 실행 코드 실행 X 대부분의 최신 프로세서 지원 |
소프트웨어 DEP | CPU가 하드웨어 DEP를 지원하지 않을 경우 사용 |
라젠카 Return to address에서도 봤듯이 Heap, Stack 영역에 Shellcode를 저장해서 실행하기 위해서는 해당 영역에 execute, 즉 실행권한이 있어야 한다.
DEP가 활성화 되어있을 경우 해당 메모리 영역의 실행권한을 얻지 못했으니 쉘코드 실행 안댐=> 프로그램은 해당 쉘코드를 예외처리하고 프로세스를 종료한다.
DEP가 비활성화 되었을 경우 쉘코드 아무 문제없이 실행
DEP를 비활성화 하기 위해서는 gcc에 옵션을 추가해야한다.
gcc -z execstack -o DEP-disabled DEP.c
위의 코드에서 "execstack"이 DEP 비활성화 옵션
Checksec.sh 리눅스 보호기법 체크 ( 해당 바이너리에 어떤 보호기법이 적용되었는지 간단하게 체크할 수 있는 스크립트)
http://www.trapkit.de/tools/checksec.html <== 여기서 다운로드 가능
DEP 비활성화 옵션을 넣고 안넣고의 보안기능을 볼 수 있다.
비활성화하지 않은 파일은 NX 활성화, DEP도 활성화 되어있다
이에 반해 DEP가 비활성화된 파일은 NX, DEP 모두 비활성화 되어있음을 확인할 수 있다!
DEP가 활성화 되어있는 경우와 비활성화 되어있는 경우를 비교해봤을때 DEP disabled 쪽이 월등히 실행권한(--x-)를 더 많이 가지고 있음을 위의 그림에서 볼 수 있다.
Checksec.sh 를 이용해 NX 설정 여부 확인 방법 짜란~
Binary
readelf 명령어를 이용해 파일의 세그먼트 헤더 정보에서 NX 설정 여부 확인
파일의 세그먼트 헤더 정보에서 "GNU_STACK"의 Flg 값이 'RWE'이라면 NX가 활성화 되어있음을 의미
DEP가 비활성화된 바이너리의 GNU_STACK의 Flg 값이 RWE?
뭐지
GNU_STACK의 Flg를 보여주는 코드가 아닌가.
몇 번을 읽어봐도 모르겠어서 삭님한테 구조요청!!
답장오면 이해하고 업데이트하기 !!!!
오타 존재!
쪼기 RWE가 아까 권한들을 보면서 봤던 rwx와 같다. E가 Execute의 E더라구요~
그럼 NX가 켜져있으면? 실행권한을 얻지 못하니 RW
NX가 꺼져있으면? 실행권한을 얻을 수 있으니 RWE
Process
Binary에서 사용했던 확인 방식과 동일하지만, 전달되는 파일의 경로가 다음과 같아서,,
조금 다르다!
GNU_STACK의 Flg 값이 RWE라면 NX가 비활성화 되어있음을, 반대의 경우라면 활성화 되어있음을 의미한다.
CPU
CPU의 NX 설정 여부를 확인하는 방법은 "/proc/cpuinfo"파일에서 'nx' 문자가 있는지 확인하는 것이다.
댓글
이 글 공유하기
다른 글
-
지옥방 3주차 과제 LOB 2,3번 뿌시기
지옥방 3주차 과제 LOB 2,3번 뿌시기
2020.04.28 -
지옥방 포너블 3주차 과제 모음!
지옥방 포너블 3주차 과제 모음!
2020.04.24 -
지옥방 3주차 과제 라젠카 뿌시기(Return to Shellcode)
지옥방 3주차 과제 라젠카 뿌시기(Return to Shellcode)
2020.04.24 -
지옥방 3주차 과제 달고나 문서 뿌시기!
지옥방 3주차 과제 달고나 문서 뿌시기!
2020.04.23