티스토리 뷰
- 먼저 Canary에 대해 설명하겠습니다. Canary란 일종의 스택가드입니다. 아래의 사진과 같이 Buf 영역 뒤에 Canary 라는 특정한 값이 들어가게 되고, 이 값은 main이 실행될 때 생성이 됩니다. 따라서 프로그램을 실행할때 마다 바뀌는 값입니다.
- 프로그램 익스플로잇을 위해서 통상 데이터를 입력할 때 Buf를 초과해서 값을 넣게 됩니다. 그러나 Buf를 뒤집어 쓰다가 Canary자리에 다른 값이 들어갈 경우, 프로그램은 Stack오류가 발생했다는 에러를 발생시키고 프로그램을 강제종료 시키게 됩니다. 이 방식이 Canary 방식입니다.
- ASLR이란 바이너리가 실행될 때마다 스택, 힙, 데이터, 코드 영역등의 주소를 할당할 때 임의의 주소에 할당하는 보호 기법입니다. 아래의 그림을 보시면 이해가 훨씬 빠르게 됩니다.
- No-eXecute(NX)는 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법입니다.
- 아래의 그림을 보시게 되면 우리가 리눅스에서 흔히보는 r w x가 존재합니다. 위에는 NX가 적용되기 전인데 보면 Stack영역에 rwx 모두 할당되어 있는 것을 볼 수 있습니다. 그래서 NX가 꺼져 있을 경우에는 Stack영역에 쉘코드를 직접 넣어서 system("/bin/sh")와 같은 함수를 실행시킬 수 있는 것입니다.
- 하지만 NX가 켜져있을 경우에는 실행할 수 있는 권한이 없어서 오류가 발생하게 됩니다. 이것이 NX 메모리 보호 기법입니다.
'개인 > 보안 공부' 카테고리의 다른 글
DES 암호학 (0) | 2023.05.24 |
---|---|
간단한 키보드 후킹 프로그램 (0) | 2022.09.06 |
DreamHack 리버싱) 레지스터란? (0) | 2022.06.08 |
Dreamhack System Hacking) ROP 실습 (0) | 2022.06.03 |
댓글