total_activ

[w2] NX RTL 본문

카테고리 없음

[w2] NX RTL

INFOO 2022. 11. 16. 02:31

1.NX, RTL 문서화

NX

프로세서 명령 저장 또는 데이터 저장을 위해 메모리 영역을 분리하기 위해 CPU 에서 사용되는 기술로, 일반적으로 Harvard 아키텍처 프로세서에서만 볼 수 있는 기능입니다. 그러나 NX 비트는 보안상의 이유로 기존 폰 노이만 아키텍처 프로세서 에서 점점 더 많이 사용되고 있습니다.

실행에 사용할 수 없는 메모리 영역을 지정하는 방법입니다. CPU의 가상 메모리 기능에 의해 지원되는 비트는 가상 메모리 페이지의 플래그(표시기)입니다. 데이터만 상주할 것으로 예상되는 메모리 영역에서 맬웨어 명령이 실행되지 않도록 하는 보안 조치뿐만 아니라 저장용 메모리와 명령을 분리하는 데 사용할 수 있습니다.

 

RTL

RTL 공격은 스택에 NX-bit 보안 기법이 적용 되었을때 사용하는 공격 기법이다. NX란 Never eXecutable stack 을 줄인 말로 "스택에서 코드 실행 불가" 라는 보안 역할을 한다.

NX-bit 때문에 스택에서 shellcode를 삽입하고 이 주소를 RET에 overwrite 해도 실행되지 않아 공격이 실패하게 된다. 이를 우회 하기 위한 기법이 Return to Libc 이다.

Return to Libc은 공유 라이브러리 함수의 주소를 가져와 RET에 overwrite 하고 이를 호출하는 공격 기법이다.

(함수를 호출할 때, 함수의 인자 값과 함수 호출이 어떻게 일어나는지, 이러한 개념을 알고 있으면 Return to Libc 공격 기법에 대해 쉽게 이해 할 수 있다.)

 

2. RTL 실습 문서화

breakpoint를 걸때 이러한 오류가 발생해서 아래 사진과 같이 info file을 통해 main이 들어가있는 text 주소를 직접 찾아서 걸었다.

0x8048310이 text부분!

이후 r을 한뒤에 system과 /bin/sh 주소를 찾아냈고

BUF 128바이트와 SFP 4바이트 총 132바이트의 a값을 넣은뒤 RET에 해당하는 system 함수 주소값과 4바이트의 a값, /bin/sh 주소값을 차례대로 넣어서 출력되도록 했다. 

./rtl을 하지 않고 python만 했을때 잘 출력되는 거를 봐서는... 아무리 봐도 오류같다... 관련 오류를 구글링해도 해결 방법도 마땅치 않아서 30분 허탕만치다가 포기했다..

일단 이론상 내가 집어넣은 코드는 맞다고 생각한다