본문 바로가기

wargame

[메모리 보호기법]RELRO

출처

http://lazenca.net/display/TEC/02.TechNote
https://bpsecblog.wordpress.com/2016/05/18/memory_protect_linux_2/



이전에 알아야 할 것

PLT (Procedure Linkage Table)
외부 프로시저를 연결해주는 테이블. PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용할 수 있다.
GOT (Global Offset Table)
PLT가 참조하는 테이블. 프로시저들의 주소가 들어있다.

"함수를 호출하면 (PLT를 호출하면) GOT로 점프하는데 GOT에는 함수의 실제 주소가 쓰여있다.
첫 번째 호출이라면 GOT는 함수의 주소를 가지고 있지 않고 어떤 과정을 거쳐 주소를 알아낸다.
두 번째 호출부터는 첫 번째 호출 때 알아낸 주소로 바로 점프한다."

GOT overwrite
GOT를 다른 함수의 주소를 덮어 원하는 명령을 수행게 만드는 것

RELRO

RELRO (RELocation Read-Only)
ELF binary / 프로세스의 데이터 섹션의 보안을 강화하는 일반적인 기술

RELRO 적용시 Program Header와 Dynamic Section의 변화를 확인할 수 있다.
Partial RELRO
Program Header에 Read only 권한을 가진 RELRO 영역이 생성된다.
해당 영역에 INIT_ARRAY, FINI_ARRAY section이 포함된다.
GOT 영역을 덮어쓸 수 있다.
Full RELRO
Program Header에 read only 권한을 가진 RELRO 영역이 생성된다.
해당 영역에 INIT_ARRAY, FINI_ARRAY, PLTGOT section이 포함된다.
PLTRELSZ, PLTREL, JMPREL section이 제거되고 BIND_NOW, FLAGS_1 section이 추가된다.
GOT 영역을 덮어쓸 수 없다.

'wargame' 카테고리의 다른 글

[메모리 보호기법]PIE  (0) 2019.12.01
[메모리 보호기법]Canaries  (0) 2019.12.01
[메모리 보호기법]ASLR  (0) 2019.12.01
[메모리 보호기법]NX  (0) 2019.12.01
[BOF]simpleBOF  (0) 2019.11.27