티스토리 뷰
linux 환경에서의 메모리 보호기법들 2 (RELRO)
RELEO : Relocation Read-Only
GOT overwrite 와 같은 공격에 대비하여 ELF 바이너리 또는 프로세스의 데이터 섹션을 보호하는 기술
메모리가 변경되는 것을 보호하는 기술
RELRO에는 Partial RELRO 와 Full RELRO 두 가지 모드가 있음
Partial RELRO
컴파일 옵션 : gcc -WI, -z, relro
GOT 상태 : Writable
특징 : 함수 호출 시 해당 함수의 주소를 알아옴
Full RELRO
컴파일 옵션 : gcc -WI, -z, relro, -z, now
GOT 상태 : Read-Only
특징 : ELF 실행 시 GOT에 모든 라이브러리 주소 바인딩
Full-RELRO를 적용하면 .ctors, .dtors, .jcr, .dynamic, .got 섹션이 Read-only 상태가 됨
RELRO가 적용되지 않은 경우
odjdump 를 이용하여 .ctors, .dtors, .jcr, .dynamic, .got 섹션들의 위치를 구할 수 있음. (명령어 : odjdump -h [파일 이름] )
다섯 섹션들 모두에 데이터가 써짐
2. Partial RELRO 인 경우odjdump 를 이용하여 .ctors, .dtors, .jcr, .dynamic, .got 섹션들의 위치를
구할 수 있음. (명령어 : odjdump -h [파일 이름] )
다섯 섹션들에 데이터 쓰기를 시도 시 Segmentation fault가 발생함.
그 이유는 write 권한이 없기 때문임.
Partial RELRO에서 GOT Overwrite가 가능
readelf -r ./[프로그램 이름] | grep [함수명]으로 GOT 주소를 알아 올 수 있음.
3. Full RELRO인 경우
GOT OVERWRITE 불가능.
FULL RELRO가 GOT가 읽기전용이라 보안상 더 안전할 것 같지만, Partial RELRO가 더 널리 사용 됨.
그 이유는 FULL RELRO는 링커에 의해 모든 메모리에 대해 재배치 작업이 일어나 실행이 느려지기 때문이다.
'pwnable > 정리' 카테고리의 다른 글
pwntool 기본 사용법 정리 (0) | 2018.01.25 |
---|---|
정적 라이브러리와 공유 라이브러리 (0) | 2018.01.13 |
linux 환경에서의 메모리 보호기법들 1 (ASLR, DEP, ASCII-Armor, Stack Canary) (0) | 2018.01.08 |
PLT와 GOT (0) | 2018.01.07 |
Static Link 방식과 Dynamic Link 방식 (0) | 2018.01.07 |
- fastbin
- SQLi
- hacking
- glibc
- heap
- pwnable
- oob
- 본선가고싶다
- fastbindup
- 해킹
- overflow
- exit
- pwable
- srop
- HackCTF
- shellcoding
- tcache
- rt_sigreturn
- FSB
- ebp change
- pwnable.tw
- TLS
- fsop
- codegate
- stack reusing
- Total
- Today
- Yesterday