시스템 해킹/Lazenca

[Lazenca] ASLR

ruming 2021. 2. 27. 13:45

Protection Tech

ASLR

ASLR이란?

메모리 손상 취약점 공격을 방지 하기 위한 기술.

스택, 힙, 라이브러리 등의 주소를 랜덤한 영역에 배치하며, 공격에 필요한 Target address를 예측하기 어렵게 만듦.

프로그램이 실행될 때마다 각 주소들이 변경됨.

 

예를 들어 return-to-libc 공격을 하기 위해서는 공유 라이브러리에서 사용하려는 함수의 주소를 알아야 하는데, ASLR이 적용되면 프로그램이 호출될 때마다 스택, 힙, 라이브러리 영역의 주소가 변경되어 공격에 어려워짐.

 

Set ASLR

echo 0 > /proc/sys/kernel/randomize_va_space

option

0 : ASLR 해제
1 : 랜덤 스택 & 랜덤 라이브러리 설정
2 : 랜덤 스택 & 랜덤 라이브러리 & 랜덤 힙 설정

 

 

Example

heap, stack, libc 주소를 출력하는 소스 코드

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char *global = "Lazenca.0x0";
  
int main(){
    char *heap = malloc(100);
    char *stack[] = {"LAZENCA.0x0"};
 
    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;
}

 

echo 0 > /proc/sys/kernel/randomize_va_space

heap, stack, libc의 주소영역이 변경되지 않음

lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$ ./ASLR
[Heap]  address: 0x602010
[Stack] address: 0x7fffffffe1f0
[libc]  address: 0x7ffff7a2d830
[.data] address: 0x400764
^C
lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$ ./ASLR
[Heap]  address: 0x602010
[Stack] address: 0x7fffffffe1f0
[libc]  address: 0x7ffff7a2d830
[.data] address: 0x400764
^C
lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$ ./ASLR
[Heap]  address: 0x602010
[Stack] address: 0x7fffffffe1f0
[libc]  address: 0x7ffff7a2d830
[.data] address: 0x400764
^C
lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$

 

echo 1 > /proc/sys/kernel/randomize_va_space

stack, libc의 주소 영역이 변경됨.

lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$ ./ASLR
[Heap]  address: 0x602010
[Stack] address: 0x7ffc5bcf1640
[libc]  address: 0x7f37ba468830
[.data] address: 0x400764
^C                 
lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$ ./ASLR
[Heap]  address: 0x602010
[Stack] address: 0x7fff2ea773e0
[libc]  address: 0x7f6bd7256830
[.data] address: 0x400764
^C
lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$ ./ASLR
[Heap]  address: 0x602010
[Stack] address: 0x7ffd2f5f9ae0
[libc]  address: 0x7fba0f3b3830
[.data] address: 0x400764
^C
lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$

 

echo 2 > /proc/sys/kernel/randomize_va_space

heap, stack, libc의 주소 영역이 변경됨

lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$ ./ASLR
[Heap]  address: 0x1ccb010
[Stack] address: 0x7ffe56b07500
[libc]  address: 0x7f896e125830
[.data] address: 0x400764
^C
lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$ ./ASLR
[Heap]  address: 0x127b010
[Stack] address: 0x7fffeb87cf70
[libc]  address: 0x7eff87928830
[.data] address: 0x400764
^C
lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$ ./ASLR
[Heap]  address: 0x179b010
[Stack] address: 0x7fff04362ea0
[libc]  address: 0x7f16e3ad6830
[.data] address: 0x400764
^C
lazenca0x0@ubuntu:~/Documents/Definition/protection/ASLR$

 

 

'시스템 해킹 > Lazenca' 카테고리의 다른 글

[Lazenca] Canaries  (0) 2021.02.27
[Lazenca] NX bit  (0) 2021.02.21