[STACK] mprotect ROP

두비니

·

2021. 3. 17. 22:57

 

 

 

 


ROP using mprotect


 

 

 

 

 

오늘은 기존의 ROP와는 조금 다른 것을 해보려고 합니다.

기존에는 system함수를 이용해서 권한을 얻는 식이라면, 이번에는 mprotect함수를 이용해서 권한을 획득하는 방식의 ROP에 대해서 알아보려고 합니다.

 

 

1. mprotect함수란

 

기본적으로 mprotect함수에 대해서 알아보도록 합시다. 

mprotect함수는 메모리에 대한 접근을 제어하는 함수로, 원형은 다음과 같습니다.

 

#include <sys/mman.h>

int mprotect(const void *addr, size_t len, int prot);

 

- addr : 접근을 제어할 주소

- len : 주소 기준으로 관여할 길이

- prot : 다음 값들의 비트OR값이다.

      PROT_NONE : 접근할 수 없다.
      PROT_READ : 읽기
      PROT_WRITE : 쓰기
      PROT_EXEC : 실행

- 반환값 : 성공시 0, 에러시 -1 리턴

**주의**

addr의 값은 페이지 경계에 맞게 정렬되어 있어야 한다.
+)페이지의 크기는 4096 이다.

 

 

2. exploit plan

 

이 mprotect함수가 강력한 이유는, 기존에 메모리에 대한 접근이 제한되어 있는 메모리에도 권한을 부여할 수 있다는 점입니다. 즉 NX를 무력화 시킬 수 있다는 것이죠.

보통은 shellcode를 써놓고, 그 영역에 실행 권한을 줘서 exploit하는 방식으로 진행합니다.

 

즉, 다음과 같이 함수를 실행시키면 exploit가 가능해집니다.

 

1. shellcode를 작성(고정주소를 이용해야하기 때문에 보통 bss영역 사용)

2. mprotect(&shellcode, 0x1000의 배수, 0x7)

 

이걸 보통 rtl chaining이나 rop와 엮어서 하고, 익스 코드를 짜면 다음과 비슷하게 생겼습니다.

 

 

문제풀이 자체가 궁금하신 분은 >> dokhakdubini.tistory.com/422

 

3. 결론

 

system함수를 쓸 수 없는 상황에서 사용하기 좋은 방법인 것 같습니다. 

참고로 mmap함수도 비슷한 방법으로 활용할 수 있기 때문에 더 공부하고싶으시다면 아래 글 참조하면 좋을 것 같습니다. 라젠카 최고

 

 

참고 : www.lazenca.net/display/TEC/03.ROP%28Return+Oriented+Programming%29+-+mmap%2C+mprotect

 

03.ROP(Return Oriented Programming) - mmap, mprotect - TechNote - Lazenca.0x0

Excuse the ads! We need some help to keep our site up. List ROP(Return Oriented Programming) - mmap, mprotect ROP를 이용하여 메모리 영역을 할당(mmap)하거나 할당된 메모리 영역의 권한을 변경(mprotect)하는 방법에 대해 설

www.lazenca.net

blog.yes24.com/blog/blogMain.aspx?blogid=ukyo&artSeqNo=1588571

 

Linux :: mprotect() 함수에 대하여.

http://www.pinkdragon.net/DocumentsLibrary/contents/ko/Linux_man/mprotect.2.html 이름 mprotect - 메모리 영역에 대한 접근를 제어한다. 사용법#include <...

blog.yes24.com