GDB에서 checksec를 사용했을 때 나오는 보호 기법들의 정의를 정리했습니다.

pwnable.xyz에서 xor문제를 풀다가 정리해야할 것 같아서 정리했는데요...

엄청 간단하게 정리했지만 실제로는 훨씬 복잡하답니다!

 

CANARY

-랜덤 값인 canary를 ebp와 지역변수 사이에 위치시킵니다.

-함수가 시작될 때 이 값을 저장하고, 끝나기 전에 변조여부를 확인합니다.

-이 보호기법이 활성화되어있다면 스택 영역을 건들이기 어렵겠네요...

 

FORTIFY

-일반적인 메모리 버퍼에서 발생하는 BOF를 잡기 위해 존재합니다.

-입력된 데이터의 크기를 확인하여 잡아내는 것 같습니다.

-이 보호기법이 활성화되어있다면 BOF를 일으키기 어렵겠네요.

 

NX

-Non Excutable의 약자로 실행시키지 않는다는 의미입니다.

-BOF에 이용되는 메모리 공간에 있는 코드를 실행시키지 않는 보호기법입니다.

-이 보호기법이 활성화되어있다면 메모리공간에서 쉘 코드를 사용할 수 없습니다.

 

PIE

-위치 독립 코드로 이루어진 실행파일이라는 뜻입니다.

-바이너리의 주소를 랜덤화하여 바이너리의 특정 주소를 수정하는 것과 같은 공격을 방어합니다.

-실행시킬 때마다 주소가 바뀌게 됩니다.

-꺼져있다면... GOT Overwrite를 노릴 수도 있습니다.

 

RELRO

-Relocation Read-Only의 약자입니다.

-크게 NO RELRO, PARTIAL RELRO, FULL RELRO로 구분됩니다.

-NO RELRO는 ELF 기본 헤터, 코드영역을 제외한 거의 모든 영역에 RW 권한을 주게 됩니다. 

-대부분의 공간에서 데이터를 바꿀 수 있습니다.

-Partial RELRO는 NO RELRO에서 _Dynamic 섹션에 쓰기 권한을 없앤 것입니다.

-FULL RELRO는 bss 영역을 제외한 모든 영역에 write 권한이 없어집니다.

 

+ Recent posts