본문 바로가기

Security/pwnable

Stack Canary

Stack Cancary

: Stack overflow를 막기 위한 메모리 보호 기법

Buffer와 SFP 사이에 랜덤한 4byte 또는 8byte의 Canary 값을 삽입

 

SFP와 RET 값이 변조 되는 것을 막아 Exploit을 하지 못하도록 함

 

Memory 보호 과정
  • 함수 진입시 Canary 값을 설정
  • 함수 종료시 변조 되었는지 확인

Canary 값이 변조 되었을 경우 ⇒ __stack_check_fail 함수 → 강제 종료

 

 

Compile option
  • Canary 해제 : -fno-stack-protector
  • Canary 설정 : -fstack-protector

 

우회 방법 (Bypass)

1. Memory leak

해당 Buffer를 출력할 수 있다면 Buffer를 Canary 전까지 채워서 Canary가 함께출력 되도록 함

 

2. Brute Force

Canary 값이 고정인 경우 사용

Canary 값을 특정 파일에서 읽어서 사용하거나 fork된 바이너리는 값이 고정

 

3. pthread 함수로 실행된 함수 내부

Stack 하단에 Canary 값을 비교하는 값이 있는데 이 값을 덮어서 Canary 조작

 

4. sanf(”%d”, buf[i]);

scanf로 공간을 입력 받을 수 있으면 ‘+’나 ‘-’를 이용해 Canary 값을 덮지 않고 우회할 수 있음

 


Canary leak

 

현재 buf 상태

 

A를 8개 입력 ⇒ “\xbe\xe0\xe1\x02\x35\x7e\x28”leak

 

leak한 값을 pwntools로 받아서 unpacking해준 후, hex값으로 출력 ⇒ Canary


leak_canary write up

'Security > pwnable' 카테고리의 다른 글

1. 취약점이란?  (0) 2021.07.24