RELRO(Relocation Read-Only) ? ELF 바이너리 또는 프로세스의 데이터 섹션을 보호하는 기술
즉, 메모리가 변경되는 것을 보호하는 기술
NO RELRO
ELF 기본헤더, 코드영역을 제외한 거의 모든 부분 Read, Write 권한을 준다.
GOT Overwrite가 일어난다.
Partial RELRO
NO RELRO와 매우 비슷하고, _DYNAMIC 섹션에 쓰기 권한이 없어진다.
GOT Overwrite가 일어난다.
FULL RELRO
BSS 영역을 제외한 모든 부분에서 wirte 권한이 없어진다. GOT Overwrite가 일어나지 않는다.
GOT Overwrite란?
PLT(외부 프로시저를 연결해주는 테이블)가 참조하는 테이블이며, 프로시저들의 실제 주소가
들어있다.
예를 들어) printf 함수의 주소가 저장되어 있는 GOT를 Overwrite 하여 system 함수로 변조한다면,
printf 함수가 호출될 때, system 함수가 호출되게 될 것이다 ⇒ GOT Overwrite
Stack Canaries ? 버퍼 오버 플로우를 모니터하기 위해 버퍼와 제어 데이터 사이에 설정된 값이다.
버퍼 오버 플로우 발생 시 Canary 값이 손상, 오버플로우에 대한 경고가 출력되고, 손상된 데이터를
무효화 처리한다.
NX Bit ? 프로세스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU