๐์ ๋ณด๋ณด์/์์คํ
๋ณด์
์์คํ ๋ณด์ - ๋ฆฌ๋ ์ค ์ปค๋ ASLR ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๊ธฐ๋ฒ ์ค์ (randomize_va_space)
Janger
2023. 11. 9. 17:51
728x90
ASLR(Address Space Layout Randomization)์ด๋?
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๊ธฐ ์ํด ์ฃผ์ ๊ณต๊ฐ ๋ฐฐ์น๋ฅผ ๋์ ํํ๋ ๊ธฐ๋ฒ์ผ๋ก ์คํ ์๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ณ๊ฒฝ์์ผ ์ ์ฑ์ฝ๋์ ์ํ ํน์ ์ฃผ์ ํธ์ถ์ ๋ฐฉ์งํ๋ค.
๋ฆฌ๋ ์ค ASLR ์ ์ฉ (/proc/sys/kernel/randomize_va_space ์์ )
echo 0 > /proc/sys/kernel/randomize_va_space # ASLR ๋ฏธ์ค์
echo 1 > /proc/sys/kernel/randomize_va_space # ASLR ๋ถ๋ถ์ค์ (heap๋ง ๋ฏธ์ค์ )
echo 2 > /proc/sys/kernel/randomize_va_space # ASLR ๋ชจ๋์ค์ (stack, heap, library ๋ฑ)
sysctl ๋ช ๋ น์ด๋ก ๋ฆฌ๋ ์ค ์ปค๋ ํ๋ผ๋ฏธํฐ ํ์ธ ๋ฐ ์ค์
sysctl -n kernel.randomize_va_space # ASLR ์ํ ํ์ธ
sysctl -w kernel.randomize_va_space=2 # ASLR ์ํ ์ค์
ASLR ์ ์ฉ ํ์ธ
ASLR.c
#include <stdio.h>
int a = 10;
int c;
int main()
{
static int b = 20;
static int d;
char *heap = (char *)malloc(100);
int stack;
printf(" ==========[code section]==========\n");
printf(" main() addr : 0x%08x\n",&main);
printf(" ==========[data section]==========\n");
printf(" valu a addr : 0x%08x\n",&a);
printf(" valu b addr : 0x%08x\n",&b);
printf(" ==========[BSS section]==========\n");
printf(" valu c addr : 0x%08x\n",&c);
printf(" valu d addr : 0x%08x\n",&d);
printf(" ==========[heap section]==========\n");
printf(" [!] heap addr : 0x%08x\n",heap);
printf(" ==========[stack section]==========\n");
printf(" [!] stack addr : 0x%08x\n",&stack);
return 0;
}
root@kali:~/Desktop# gcc ASLR.c -o ASLR.out
์์ค ์ฝ๋ ์ถ์ : https://hackstoryadmin.tistory.com/entry/Linux-Memory-Protection-ASLR
ASLR์ ๋ฏธ์ ์ฉํ์์ ๊ฒฝ์ฐ(echo 0 > /proc/sys/kernel/randomize_va_space)
root@kali:~/Desktop# ./ASLR.out
==========[code section]==========
main() addr : 0x0804847c
==========[data section]==========
valu a addr : 0x0804992c
valu b addr : 0x08049930
==========[BSS section]==========
valu c addr : 0x0804993c
valu d addr : 0x08049938
==========[heap section]==========
[!] heap addr : 0x0804a008
==========[stack section]==========
[!] stack addr : 0xbffff478
root@kali:~/Desktop# ./ASLR.out
==========[code section]==========
main() addr : 0x0804847c
==========[data section]==========
valu a addr : 0x0804992c
valu b addr : 0x08049930
==========[BSS section]==========
valu c addr : 0x0804993c
valu d addr : 0x08049938
==========[heap section]==========
[!] heap addr : 0x0804a008
==========[stack section]==========
[!] stack addr : 0xbffff478
๊ฒฐ๊ณผ: ๋ณํจ์์
ASLR์ ๋ถ๋ถ ์ ์ฉํ์์ ๊ฒฝ์ฐ(echo 1 > /proc/sys/kernel/randomize_va_space)
root@kali:~/Desktop# ./ASLR.out
==========[code section]==========
main() addr : 0x0804847c
==========[data section]==========
valu a addr : 0x0804992c
valu b addr : 0x08049930
==========[BSS section]==========
valu c addr : 0x0804993c
valu d addr : 0x08049938
==========[heap section]==========
[!] heap addr : 0x0804a008
==========[stack section]==========
[!] stack addr : 0xbf86ccb8
root@kali:~/Desktop# ./ASLR.out
==========[code section]==========
main() addr : 0x0804847c
==========[data section]==========
valu a addr : 0x0804992c
valu b addr : 0x08049930
==========[BSS section]==========
valu c addr : 0x0804993c
valu d addr : 0x08049938
==========[heap section]==========
[!] heap addr : 0x0804a008
==========[stack section]==========
[!] stack addr : 0xbfd22678
๊ฒฐ๊ณผ: heap ์์ญ ์ธ์ stack ์์ญ์ด ์คํ๋ ๋๋ง๋ค ๋๋ค ํ๊ฒ ๋ณ๊ฒฝํ๋ค.
ASLR์ ๋ชจ๋ ์ ์ฉํ์์ ๊ฒฝ์ฐ(echo 2 > /proc/sys/kernel/randomize_va_space)
root@kali:~/Desktop# ./ASLR.out
==========[code section]==========
main() addr : 0x0804847c
==========[data section]==========
valu a addr : 0x0804992c
valu b addr : 0x08049930
==========[BSS section]==========
valu c addr : 0x0804993c
valu d addr : 0x08049938
==========[heap section]==========
[!] heap addr : 0x086ff008
==========[stack section]==========
[!] stack addr : 0xbfbf4748
root@kali:~/Desktop# ./ASLR.out
==========[code section]==========
main() addr : 0x0804847c
==========[data section]==========
valu a addr : 0x0804992c
valu b addr : 0x08049930
==========[BSS section]==========
valu c addr : 0x0804993c
valu d addr : 0x08049938
==========[heap section]==========
[!] heap addr : 0x089c4008
==========[stack section]==========
[!] stack addr : 0xbfab8598
๊ฒฐ๊ณผ: ๋ชจ๋ ์์ญ์ด(heap, stack) ์คํ๋ ๋๋ง๋ค ๋๋คํ๊ฒ ๋ณ๊ฒฝํ๋ค.
728x90