Relro

htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!

다른 HackTricks 지원 방법:

Relro

RELRORelocation Read-Only의 약자로, **GOT (Global Offset Table) 덮어쓰기와 관련된 위험을 완화하기 위해 이진 파일에서 사용되는 보안 기능입니다. 이 개념을 명확히 하기 위해 두 가지 유형으로 나눌 수 있습니다: Partial RELROFull RELRO.

Partial RELRO

Partial RELRO는 이진 파일의 성능에 큰 영향을 미치지 않으면서 보안을 강화하는 간단한 방법을 취합니다. 메모리에서 프로그램 변수 위에 GOT를 배치함으로써 Partial RELRO는 버퍼 오버플로우가 GOT에 도달하고 GOT를 손상시키는 것을 방지하려고 합니다.

이로 인해 임의 쓰기 취약점에서 GOT가 남아있는 것을 방지하지는 않습니다.

Full RELRO

Full RELROGOT 및 .fini_array 섹션을 완전히 읽기 전용으로 만들어 더 나은 보호를 제공합니다. 이진 파일이 시작되면 모든 함수 주소가 해결되고 GOT에 로드되며, 그런 다음 GOT가 읽기 전용으로 표시되어 실행 중에 이에 대한 수정을 방지합니다.

그러나 Full RELRO의 단점은 성능 및 시작 시간 측면에서 발생합니다. GOT를 읽기 전용으로 표시하기 전에 시작 시 모든 동적 심볼을 해결해야 하므로, Full RELRO가 활성화된 바이너리는 더 긴 로드 시간을 경험할 수 있습니다. 이 추가적인 시작 오버헤드로 인해 Full RELRO는 모든 이진 파일에서 기본적으로 활성화되지 않습니다.

바이너리에서 Full RELRO가 활성화되었는지 확인할 수 있습니다.

readelf -l /proc/ID_PROC/exe | grep BIND_NOW

우회

만약 Full RELRO가 활성화되어 있다면, GOT 테이블에 쓰지 않고 임의 실행을 얻는 다른 방법을 찾아야만 우회할 수 있습니다.

LIBC의 GOT는 일반적으로 Partial RELRO이므로 임의 쓰기로 수정할 수 있습니다. 자세한 정보는 LIBC GOT 항목을 대상으로** 참조하세요.**

Last updated