오늘은 시스템 해킹에서 자주 사용 돼는 Canary 보호 기법에 대해 알아볼 것이다
먼저 Canary의 기원 같은건 집어 치우고 대충 새 이름이며, 광부들이 질식사 하지 않기 위해 산소 농도에 민감한 Canary라고만 설명 하겠다.
먼저 우리가 흔히 아는 버퍼 오버 플로우, BOF를 방지하기 위해 사용되는 방법인데
먼저 스택이 있다고 가정하자
[.........buf..........] [Canary] [buf]...
이런 스택이 있다고 가정 했을때에 BOF로 메모리 컬렉션을 시도한다
[AAAAAAAAAA] [AAAAA] [AA..buf]...
이렇게 Canary라는 데이터 값이 BOF에 의해 망가졌으면 Canary가 급발진해 시스템을 종료시킨다
대충 이런식이다
Canary라는 데이터 값은 기본적으로 x64 아키텍처에는 8바이트의 Canary가 생성 되고
TLS라는 전역 변수에 저장되며, TLS라는 주소는 ASLR이 적용 돼지 않는다 그리고
x86아키텍처에는 4바이트의 카나리가 생성된다. 하지만 Canary의 처음 데이터는 NULL이므로 각각
7,3바이트의 랜덤한 값이라고 생각하면 된다
그러면 Canary를 우회하는 방법은 크게 2가지인데 Canary의 값을 알아내거나 혹은 BOF로 Master Canary를 조작하면 돼는데 여기서 Master Canary는 Canary라는 메모리가 Master Canary한테 데이터를 받아가는 관계라고 생각하면 된다
혹은 Brute Force, 무차별 대입을 사용 할 수 있는데
이거 할 바엔 롤 연습모드로 CS 먹는게 더 재밌으니(단순 연산만 해도 256^7번 시도해야 된다)
TLS 접근을 하는 것이 더 낫다 여기서 TLS를 모르니 TSL는 다음에 설명하겠다
'해킹 방어' 카테고리의 다른 글
| [NOOBHACK] CSP보안 기법 (0) | 2022.08.16 |
|---|---|
| [NOOBHACK] NX(NO- eXecute) (0) | 2022.08.12 |
| [NOOBHACK] 메모리 보호 기법 ASLR (0) | 2022.08.12 |