개인적으로.. SROP라고 하면 두개가 생각난다.
Syscall ROP
Sigreturn-oriented programming...
지금 생각해보니까 둘 다 syscall을 이용하는거니.. 거기서 거기인 것 같은 느낌이 든다.
개요
일반적으로 BOF 취약점이 발견되면, ROP나 RTL 기법을 사용하여 익스를 한다.
하지만... ROP를 하기에 gadget이 부족하다?
이럴 때 Sigterun-oriented programming(SROP) 기법을 사용한다.
Sigreturn-oriented programming (SROP)
- Sigreturn system call을 사용하는 ROP 기법
- Sigreturn system call : 시그널을 받은 프로세스가 kernel mode에서 user mode로 복귀할 때 사용하는 system call
프로그램은 보안, 자원 관리 등의 이유로 user mode와 kernel mode를 왔다갔다 하면서 실행된다.
왔다갔다 할 때 자원 공유가 필요하다.
user mode -> kernel mode : user hardware context를 kernel stack에 저장
kernel mode -> user mode : setup_frame() 함수에 의해 user stack에 user hardware context가 저장되며 sigreturn syscall이 불려 user context를 세팅 => sigreturn system call을 통해 레지스터를 세팅
더 쉽게 말하자면.. kernel mode에서 user mode로 이동할 때 Sigreturn 이 호출되는데, 이 때 user mode의 레지스터를 세팅하게 된다. 세팅하면서 세팅하는 값에 대한 검증을 하지 않는데, 이것 때문에 우리는 Sigreturn을 강제적으로 호출하여 레지스터를 마음대로 바꿀 수 있다.
sigreturn은 sigcontext 구조체 형태로 user context를 바꿔준다.
전제 조건
- overflow 발생
- eax 레지스터 제어 가능
- int 0x80 gadget(32bit) or syscall gadget(64bit) 존재
예제는 패스..
dreamhack에서 send_sig 문제를 풀어보면 좋을 듯 하다.
'System Hacking' 카테고리의 다른 글
Double Staged FSB (0) | 2021.05.30 |
---|---|
integer overflow 2 (0) | 2021.05.19 |
Stack Pivoting (스택 피봇팅) (0) | 2021.05.03 |
RTC (Return to CSU) (수정) (0) | 2021.04.19 |
[HackingCamp 22] 퍼징의 이해 - 장대희님 (0) | 2021.03.02 |