컴파일러가 프로그램의 함수 호출 시에 ret 앞에 canary 값을 주입하고, 종료 시에 canary 값이 변조되었는지의 여부를 확인하여 버퍼 오버플로우 공격을 탐지
함수 시작 시 복귀 주소를 Global RET라는 특수 스택에 저장해 두었다가 함수 종료 시 저장된 값과 스택의 RET값을 비교해 다를 경우 오버플로우로 가정하여 프로그램 실행을 중단시키는 기술
공격자는 셸코드로 제어를 넘기기 위해 공격에 사용할 적당한 반환주소를 결정하는데 예측된 주소를 사용한다. 이 예측을 어렵게 만드는 한 가지 기법은 각 프로세스 안의 스택이 임의의 다른 곳에 위치하도록 변경하는 것이다.
스택과 힙을 실행불능으로 만듦으로써 기존 프로그램을 위한 여러 가지 유형의 버퍼 오버플로우 공격에 대한 방어를 제공
- 똑같이 복사된 파일을 만드는 것
- 하드 링크된 파일을 수정하면 원래 파일도 똑같이 수정됨
- 원본 파일 데이터를 가리키는 링크 정보만 가짐