-
LINUX 메모리 보호 기법지식 조각들/컴퓨터 2018. 8. 19. 22:18
목차
ASLR
ASLR(Address Space Layout Randomization)은 메모리상의 공격을 어렵게 하기 위해 스택이나, 힙, 라이브러리 등의 주소를 랜덤으로 프로세스 주소 공간에 배치함으로써 실행할 때 마다 데이터의 주소를 바뀌게 하는 기법이다.
* ASLR 해제하는 방법
echo 0 > /proc/sys/kernel/randomiza_va_space
randomize_va_space=0 : ASLR 해제
randomize_va_space=1 : 랜덤 스택 && 랜덤 라이브러리 설정
randomiza_va_space=2 : 랜덤 스택 && 랜덤 라이브러리 && 랜덤 힙 설정
* ASLR 우회 기법
memory Leak, ROP, ...
NX bit
NX bit(Never eXecute bit)는 데이터 영역에서 코드가 실행되는 것을 막는 기법이다. 이 방법을 통해 공격자가 stack, heap, data 영역에서 shell code를 실행시키는 것을 막는다.
* NX bit 우회 기법
RTL, GOT overwrite, ROP, ...
SSP
SSP(Stack Smashing Protector)는 함수 진입 시 스택에 SFP와 RET를 저장할 때, 이 정보들이 공격자에 의해 덮어씌워지는 것으로부터 보호하기 위해 스택상의 변수들의 공간과 SFP 사이에 canary를 추가한 것이다. 만약 canary가 변조되면 메모리가 외부로부터 불법적인 변조가 일어났다고 간주하여 프로그램을 종료시킨다. Canary 종류로는 terminator canary, null canary, random canary 등이 있다.
* SSP 우회 기법
ROP, memory leak, brute force, ...
ASCII-Armor
ASCII-Armor는 공유 라이브러리 영역의 상위 주소에 0x00을 포함시키는 방법이다. RTL 공격에 대응하기 위한 기법으로, 공격자가 라이브러리를 호출하는 버퍼 오버플로우 공격을 해도 Null 바이트가 삽입된 주소로는 접근할 수 없다.* ASCII-Armor 우회 기법ROP, GOT overwrite, ...RELRO
RELRO(Relocation Read-Only)는 메모리 보호 기술로 메모리가 변경되는 것을 보호한다. RELRO의 종류로는 Full RELRO와 Partial RELRO가 있다.Partial RELRO
컴파일 옵션 : gcc -WI,-z,relro.ctors, .dtors, .jcr, .dynamic 섹션이 ready-only가 된다.* Partial RELRO 우회 기법ROP, GOT overwrite, ...Full RELRO
컴파일 옵션 : gcc -WI,-z,relro,-z,now.ctors, .dtors, .jcr, .dynamic 섹션이 read-only가 된다. GOT overwrite가 불가능하다. Relocation 작업을 모두 완료한 후 프로그램을 실행하기 때문에 느려서 잘 사용하지 않는다.* Full RELRO 우회 기법memory leak, ROP...PIE
PIE(Position Independent Executable)은 모든 심볼 주소를 상대적으로 작성하고 base address를 랜덤화해서 main()같은 함수들의 주소를 실행할 때마다 랜덤화하는 것이다.* PICPIC(Position Independent Code)는 공유 라이브러리를 만들 때 반드시 필요한 기능으로 공유 라이브러리 내의 심볼들이 어느 위치에 위치하더라도 동작하게끔 한다. 다이나믹 링킹 과정에서 text 섹션은 수정이 불가능하기 때문에 함수 call을 할 때 미리 data 영역에 위치하는 PLT, GOT를 만들어 놓고 해당 테이블을 가리키게 한다. 그리고 data 영역은 수정이 가능하기 때문에 lazy binding 식으로 GOT에 함수 주소를 써주면된다.* PIE 우회 기법memory leak, ROP, ...'지식 조각들 > 컴퓨터' 카테고리의 다른 글
Dynamic Memory Allocation (0) 2018.08.14 Static Memory Allocation (0) 2018.08.13 GCC 동작 과정 (0) 2018.08.13