ASLR(Address Space Layout Randomization)은 메모리 손상 취약점 공격을 방지하기 위한 기술이다. 스택, 힙, 라이브러리 등의 주소를 랜덤한 영역에 배치하여 공격에 필요한 Target address를 예측하기 어렵게 만든다. 프로그램이 실행될 때 마다 각 주소들이 변경된다.
ASLR은 /proc/sys/kernel/randomize_va_space 파일에서 설정하며 0 은 ASLR 해제, 1은 랜덤스택, 랜덤 라이브러리 설정, 2는 랜덤 스택, 랜덤 라이브러리, 랜덤 힙을 설정한다.
ASLR을 확인하기 위해 다음과 같은 코드를 작성하고 컴파일한다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *global = "aslr.test";
int main()
{
char *heap = malloc(100);
char *stack[] = {"ASLR"};
printf("[Heap] address : %p\n", heap);
printf("[Stack] address : %p\n", stack);
printf("[libc] address : %p\n", **(&stack + 3));
printf("[.data] address : %p\n", global);
gets(heap);
return 0;
}
다음과 같이 randomize_va_space 파일을 0으로 설정하면 프로그램을 실행할 때 마다 heap, stack, libc 주소 영역이 변경되지 않는다.
randomize_va_space 파일을 1로 설정하면 힙 주소는 고정되어 있고, 스택과 libc 주소만 바뀌는 것을 확인할 수 있다.
randomize_va_space 파일을 2로 설정하면
heap, stack, libc 주소가 모두 바뀌는 것을 확인할 수 있다.
2로 설정해도 .data의 주소는 변하지 않는다. .data영역의 주소도 매번 무작위의 주소로 할당하려면 PIE보호기법을 적용해야 한다.
'Security & Hacking > Technical & etc.' 카테고리의 다른 글
[Pwnable] Frame faking(Fake EBP)_Lazenka (0) | 2021.05.24 |
---|---|
[Pwnable] PIE 보호기법 (0) | 2021.05.13 |
[Pwnable] RTL(Retrun To Libc) x64_ Lazenca (0) | 2021.04.26 |
[Pwnable] RTL(Retrun To Libc) x86 _ Lazenca (0) | 2021.04.23 |
[System] DEP(NX bit) (0) | 2020.11.13 |