ASLR
Address Space Layout Randomization(ASLR)은
바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법이다.
(커널에서 지원하는 보호 기법)
https://learn.dreamhack.io/85#4
stack canary
스택 카나리는 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고
함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법이다.
카나리 값의 변조가 확인되면 프로세스는 강제로 종료된다.
공격자는 카나리 값을 정확히 알아야 버퍼 오버플로우 공격이 가능하다.
https://learn.dreamhack.io/112#2
PIE
Position-Independent Executable(PIE)은 ASLR이 코드 영역에도 적용되게 해주는 기술이다.
이 기술은 보안성 향상을 위해 도입된 것이 아니라서 엄밀하게는 보호 기법이 아니지만
실제로는 ASLR과 맞물려서 공격을 더욱 어렵게 만들었기에 여러 글이나 발표에서 보호 기법이라고 소개되기도 한다.
중요한 건 aslr의 특징인데 하위 3비트의 주소가 변경되지 않는다는 점!
libc-database를 통해 libc의 버전을 찾을 수 있고 버전을 알면 오프셋을 알 수 있다.
base에서 심볼까지의 오프셋은 일정하므로
버전을 알게 되면 libc base leak을 통해 원하는 함수 실행이 가능하다.
https://learn.dreamhack.io/113#2
NX
No-eXecute(NX)는 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법이다.
NX를 인텔은 XD(eXecute Disable), AMD는 NX,
윈도우는 DEP(Data Execution Prevention), ARM에서는 XN(eXecute Never)라고 한다.
공격자는 rop 공격을 수행할 수 있고
mprotect를 활용해 우회할 수도 있다.
https://learn.dreamhack.io/85#7
REALO
GOT overwrite 공격을 방어하기 위해 나온 보호 기법이다.
RELRO는 쓰기 권한이 불필요한 데이터 세그먼트에 쓰기 권한을 제거한다.
RELRO는 RELRO를 적용하는 범위에 따라 두 가지로 구분된다.
하나는 RELRO를 부분적으로 적용하는 Partial RELRO이고
나머지는 가장 넓은 영역에 RELRO를 적용하는 Full RELRO이다.
하지만 공격자는 쓰기 가능한 영역을 찾아낸다.
(.bss 세그먼트 라든지.. hook overwrite 라든지..)
https://learn.dreamhack.io/99#2
'background > linux' 카테고리의 다른 글
함수의 프롤로그와 에필로그 (0) | 2022.10.29 |
---|---|
환경 변수(environ) (0) | 2022.10.11 |
mprotect (0) | 2022.09.29 |
NOP Sled & RET Sled (0) | 2022.09.29 |
PLT(Procedure Linkage Table) & GOT(Global Offset Table) (0) | 2022.09.13 |