삼전동해커 2021. 1. 18. 15:50

SSP(Stack Smashing Protector)는 카나리를 이용해 스택이 망가졌는지 확인한다.

카나리는 스택 버퍼와 스택 프레임 포인터 사이에 삽입되는 랜덤 값이다.


이 카나리는 main함수가 호출되기 전에 생성된 값을 스레드마다 전역 변수로 사용되는 TLS(Thread Local Storage)에 저장되는데, 모든 스레드가 하나의 카나리 값을 사용하기 위해서이다.


security_init()함수는 _dl_setup_stack_chk_guard()함수에서 반환한 랜덤 카나리 값을 설정한다.

Thread_SET_STACK_GUARD는 TLS영역의 header.stack_guard에 카나리 값을 삽입한다.

그냥 뭐 이런게 있다고 생각한다.


ssp 예제는 드림핵 문제를 풀어보자.

https://dreamhack.io/wargame/challenges/32/