ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ELF Memory Protection - ASLR
    System hacking training/Knowledge 2018. 2. 6. 08:06

    참고 : https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/


    오늘은 리눅스에서 메모리 보호기법에 대해 정리를 해보겠습니다.


    먼저 메모리 보호란?

    -> 컴퓨터 메모리의 사용을 제어하는 방법이다.

    모든 운영체제에서 중요한 쟁점중 하나이다.

    운영체제에서 실행하고 있는 프로세스가 자신에게 할당되지 않은 영역의 메모리에 접근하는 것을 막는 것이

    메모리 보호의 주된 목적이다.


    메모리 보호기법에도 여러 종류가 있는데, ASLR, NX, ASCII-Armor, Stack canary 등이 있습니다.


    먼저 ASLR에 대해 정리하겠습니다.




    [ASLR] : Address Space Layout Randomization


    ASLR이란 위의 약자이고, 직역하면 주소 공간 레이아웃 무작위화입니다.


    즉, 메모리상의 공격을 어렵게 하기 위해 스택이나 힙, 라이브러리의 주소를 랜덤으로 프로세스 주소 공간에 배치함으로써 실행할 때 마다 데이터의 주소가 바뀌게 하는 기법입니다.



    ASLR이 걸린 상태에서 라이브러리의 주소가 랜덤하게 계속 바뀌는 것을 확인할 수 있습니다.


    이제 echo 0 >/proc/sys/kernel/randomize_va_space 라는 명령으로 ASLR을 끄고 다시 확인을 해보면



    이렇게 라이브러리의 주소가 고정적으로 바뀌게 됩니다.


    이해를 돕기 위해 프로그램 하나를 만들었습니다.


    각 메모리 영역에서 주소가 바뀌는지만 확인을 하기 위한 프로그램입니다.




    [ASLR_check.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;

    }



    이전에 ASLR이 꺼져있으므로 비교를 위해

    echo 2 >/proc/sys/kernel/randomize_va_space 로 다시 켜줍니다.

    (이는 cat명령으로 확인을 할 수 있습니다.)

    // 여기서 0 은 끄기, 1은 랜덤스택&라이브러리 활성화, 2는 랜덤스택&라이브러리&힙 활성화를 의미합니다.

    그리고 해당 소스를 컴파일 하여 프로그램을 만든 후 실행시켜 봅니다.


    해보면 이렇게 실행할때마다 스택과 힙 영역의 주소가 랜덤한 주소를 갖는것을 확인 할 수 있습니다.


    이제 다시 ASLR을 비활성화 하고 실행시켜보면..!


    이와같이 고정된 주소를 갖는것을 볼 수 있습니다.


    이 실습을 통해 ASLR은 스택과 힙, 라이브러리영역의 주소만 랜덤화하는 것을 확인할 수 있었습니다.


    이상입니다.


    반응형

    'System hacking training > Knowledge' 카테고리의 다른 글

    ELF Technique - RTL(Return To Library)  (0) 2018.02.16
    gdb 명령어  (0) 2018.02.13
    ELF Memory Protection - DEP/NX  (0) 2018.02.10
    ELF Memory Protection - ASCII Armor  (0) 2018.02.06
    Memory 구조  (0) 2018.02.03
Designed by Tistory.