[메모리 보호 기법] RELRO
RELocation Read-Only
!!! ``bash readelf -S`` 결과가 `` W``권한이 있는 것으로 나오더라도 실제로 해보면 fault가 발생하므로 주의.
Partial-RELRO
default 옵션이며, `` .ctors(.init_array), .dtors(.fini_array), .jcr, .dynamic`` section이 Read-Only 상태가 된다.
`` .got``에 `` W`` 권한이 있기 때문에 GOT Overwrite가 가능하다.
```
.got.plt : 0x601000
./p_RELRO 601028
WRITE : BBBB(0x601028)
```
-Wl,-z,norelro
Full-RELRO
컴파일 시 Full-RELRO 옵션을 주면 `` .got`` section도 추가로 Read-Only 상태가 된다.
`` .got`` section이 Read-Only 상태이므로 따로 `` W``권한을 주지 않으면 GOT-Overwrite가 불가능하다.
```
.got : 0x600ff8
./f_RELRO 0x600ff8
Segmentation fault (core dumped)
compile option : gcc -o f_RELRO -Wl,-z,relro,-z,now p_RELRO.c
```
같은 source code로 컴파일 옵션만 다르게 주어 컴파일 했는데, GOT 주소가 다르다는 점에 유의한다.
partial-RELRO 바이너리의 경우 함수를 처음 호출했을 때 그 함수가 `` .got.plt`` section에 바인딩되지만,
Full-RELRO 바이너리는 `` .got`` section이 Read-Only 상태여야 하기 때문에 파일을 실행하는 시점에 이미 모든 함수가 `` .got`` section에 바인딩된다.
그래서 Full-RELRO 바이너리는 `` .got.plt`` section이 없고, `` .got`` section만 존재하며 이를 사용한다.
disable
```
gcc -Wl,-z,norelro
```
'Security > System Exploit' 카테고리의 다른 글
[glibc] malloc - 1 (6) | 2017.07.19 |
---|---|
[메모리 보호 기법] PIE (0) | 2017.07.16 |
[메모리 보호기법] ASLR, FORTIFY_SOURCE (1) | 2017.07.13 |
[메모리 보호 기법] SSP +Canary (prologue) / DEP (0) | 2017.07.11 |
BOF, Buffer OverFlow ( local exploit ) (0) | 2016.11.10 |