๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”’์ •๋ณด๋ณด์•ˆ/์‹œ์Šคํ…œ ๋ณด์•ˆ

์‹œ์Šคํ…œ ๋ณด์•ˆ - ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ASLR ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ ๊ธฐ๋ฒ• ์„ค์ •(randomize_va_space)

by Janger 2023. 11. 9.
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
๋ฐ˜์‘ํ˜•