Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 시스템해킹
- Webhaking
- XSS
- 순서도
- ftz
- 웹해킹
- 리버싱
- TCP
- 시스템
- 비박스
- 네트워크보안
- System
- dreamhack
- 드림핵
- 네트워크
- hacking
- 모의해킹
- 소프트웨어
- network
- Web
- WarGame
- reversing
- 알고리즘
- 해킹
- bee-box
- CodeEngn
- 웹
- 워게임
- 소프트웨어보안
- webhacking
Archives
- Today
- Total
Without a Break
[Dreamhack] Mitigation: Stack Canary 본문
스택 카나리(Stack Canary)
: 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법으로, 카나리 값의 변조가 확인되면 프로세스는 강제 종료된다.
카나리 생성 과정
: 카나리 값은 프로세스가 시작될 때, TLS에 전역 변수로 저장되고, 각 함수마다 프롤로그와 에필로그에서 이 값을 참조한다.
카나리 우회
1. 무차별 대입
무차별 대입으로 x64 아키텍처의 카나리 값을 알아내려면 최대 256^7번, x86 에서는 최대 256^3 번의 연산이 필요하다.
=> 즉, x64 아키텍처의 카나리는 무차별 대입으로 알아내는 것이 현실적으로 어렵고, x86 아키텍처는 구할 수 닝ㅆ지만 실제 서버를 대상으로 무차별 대입을 시도하는 것은 불가능하다.
2. TLS 접근
카나리는 TLS에 전역변수로 저장되며, 매 함수마다 이를 참조해서 사용한다. TLS의 주소는 매 실행마다 바뀌지만 만약 실행중에 TLS의 주소를 알 수 있고, 임의 주소에 대한 읽기 또는 쓰기가 가능하다면 TLS에 설정된 카나리 값을 읽거나, 이를 임의의 값으로 조작할 수 있다.
그 뒤, 스택 버퍼 오버플로우를 수행할 때 알아낸 카나리 값 또는 조작한 카나리 값으로 스택 카나리를 덮으면 함수의 에필로그에 잇는 카나리 거사를 우회할 수 있다.
3. 스택 카나리 릭
스택 카나리를 읽을 수 있는 취약점이 있다면, 이를 이용하여 카나리 검사를 우회할 수 있다.
'Pwnable > Dreamhack' 카테고리의 다른 글
[Dreamhack] Background: Library - Static Link vs. Dynamic Link (0) | 2022.11.06 |
---|---|
[Dreamhack] Mitigation: NX & ASLR (0) | 2022.11.06 |
[Dreamhack] Memory Corruption: Stack Buffer Overflow (0) | 2022.10.30 |
[Dreamhack] Exploit Tech: Shellcode (0) | 2022.10.30 |
[Dreamhack] Tool: gdb (0) | 2022.10.12 |