상세 컨텐츠

본문 제목

02. ASLR

Computer Science/Linux System

by RACC8N 2020. 3. 8. 17:25

본문

  • ASLR(Address Space Layout Randomization)이란? 
    • 메모리 손상 취약점 공격을 방지 하기 위한 기술이다.
    • 스택, 힙, 라이브러리, 등의 주소를 랜덤한 영역에 배치하여, 공격에 필요한 Target address를 예측하기 어렵게 만든다.
    • 프로그램이 실행 될 때 마다 각 주소들이 변경된다.
  • 예를 들어 Return-to-libc 공격을 하기 위해서는 공유 라이브러리에서 사용하려는 함수의 주소를 알아야 한다.
    • 이러한 주소 값들이 프로그램이 호출 될때 마다 고정적인 주소를 가진다면 매우 쉽게 활용할 수 있다.
    • 하지만 ASLR의 적용으로 인해 프로그램이 호출 될때 마다 스택, 힙, 라이브러리 영역의 주소가 변경되면 공격에 어려워진다.(불가능하지는 않는다.)

SET ASLR

echo 0 > /proc/sys/kernel/randomize_va_space

 

option

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

Memory map

  • 다음과 같이 메모리의 변화를 확인 할 수 있다.
    • "/proc/<PID>/maps" 파일을 통해 프로세스의 메모리 구조 및 주소를 확인 할 수 있다.
    • randomize_va_space에 2를 설정한 환경이다.
    • 프로그램을 처음 실행했을 때와 두번째 실행했을 때의 메모리 배치가 다른 것을 확인 할 수 있다.

Linux 폴더 정보

/proc : process의 줄임말이며, 이 디렉토리에 프로세스의 정보들이 저장된다.
/proc/self : 현재 실행되고 있는 프로세스의 정보가 담겨있는 디렉토리이다.
/proc/self/maps : 현재 실행되고 있는 프로세스의 주소 맵이다.

 

다음과 같은 방법으로 ASLR 설정여부를 확인한다.

>  sysctl -a | grep 'kernel.randomize_va_space

 

*** (checksec --proc=ASLR)

'Computer Science > Linux System' 카테고리의 다른 글

Lazy binding (Feat. Now binding)  (0) 2020.03.09
04. RELRO  (0) 2020.03.09
03. Canaries  (0) 2020.03.08
01. NX Bit (MS : DEP)  (0) 2020.03.08

관련글 더보기

댓글 영역