System Hacking

Sigreturn-oriented programming (SROP)

jir4vvit 2021. 5. 10. 15:33

개인적으로.. 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를 바꿔준다.

 

전제 조건

  1. overflow 발생
  2. eax 레지스터 제어 가능
  3. 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