출처
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 |