02.Frame Pointer Overwrite(One-byte Overflow) - x64
해당 취약성은 다음과 같은 구조에서 발생한다.
vuln() 함수에서 Overflow로 인해 main() 함수의 Frame Pointer를 1 byte 변경 할 수 있다.
vuln() 함수가 종료 될 때 변경된 Frame Pointer는 leave 명령어에 의해 RBP 레지스터에 저장된다.
main() 함수가 종료 될 때 RBP 레지스터에 저장된 Frame Pointer는 leave 명령어에 의해 RSP 레지스터에 저장된다.
다음과 같이 Frame Pointer 영역의 Overwrite를 확인 할 수 있다.
다음과 같이 코드 흐름의 변경을 확인 할 수 있다.
다음과 같은 상황이 발생 할 수 있다.
RTL 코드가 저장된 영역과 Frame Pointer의 뒤에서 3번째 자리의 수가 다르면 공격에 성공 할 수 없다.
즉, 다음과 같은 환경(주소)에서는 FPO 공격이 성공 할 수 없다.
buf[32] Address : 0x7ffff7e7c3b0
Frame Pointer address of main() function : 0x7ffff7e7c3b0 + 0x50 = 0x7ffff7e7c400
REF: https://www.lazenca.net/display/TEC/02.Frame+Pointer+Overwrite%28One-byte+Overflow%29+-+x64
01.Frame Pointer Overwrite(One-byte Overflow) - x86 (0) | 2020.06.26 |
---|
댓글 영역