티스토리 뷰

  • 먼저 Canary에 대해 설명하겠습니다. Canary란 일종의 스택가드입니다. 아래의 사진과 같이 Buf 영역 뒤에 Canary 라는 특정한 값이 들어가게 되고, 이 값은 main이 실행될 때 생성이 됩니다. 따라서 프로그램을 실행할때 마다 바뀌는 값입니다.
  • 프로그램 익스플로잇을 위해서 통상 데이터를 입력할 때 Buf를 초과해서 값을 넣게 됩니다. 그러나 Buf를 뒤집어 쓰다가 Canary자리에 다른 값이 들어갈 경우, 프로그램은 Stack오류가 발생했다는 에러를 발생시키고 프로그램을 강제종료 시키게 됩니다. 이 방식이 Canary 방식입니다.

카나리


  • ASLR이란 바이너리가 실행될 때마다 스택, 힙, 데이터, 코드 영역등의 주소를 할당할 때 임의의 주소에 할당하는 보호 기법입니다. 아래의 그림을 보시면 이해가 훨씬 빠르게 됩니다.

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함