보안

ASLR(Address Space Layout Randomization)

1. ASLR이란?

ASLR(Address Space Layout Randomization)은 프로그램이 실행될 때, 프로세스의 메모리 내 주요 구성요소(스택, 힙, 공유 라이브러리, 실행 파일 등)의 메모리 주소를 무작위(Random)하게 배치하여, 공격자가 특정 메모리 주소를 예측하거나 악용하는 것을 어렵게 만드는 메모리 보호 기법입니다. 이는 시스템을 공격하는 데 사용되는 대표적인 취약점인 버퍼 오버플로우(Buffer Overflow), Return-to-libc, ROP(Return-Oriented Programming) 등의 공격 기법을 어렵게 만듭니다.

2. ASLR의 동작 원리

프로세스가 실행될 때 운영체제는 해당 프로세스에 할당되는 가상 주소 공간의 중요한 위치를 무작위(Random)로 배정합니다. 예를 들어, 스택 시작 주소, 힙 시작 주소, 라이브러리 로딩 주소, 실행 파일(.text) 로딩 주소 등을 실행할 때마다 다르게 배치합니다.

  • 운영체제가 사용하는 난수 생성기를 통해 각 메모리 영역에 대해 오프셋(offset)을 무작위로 결정합니다.
  • 실행될 때마다 이러한 오프셋이 바뀌기 때문에, 동일한 바이너리 프로그램도 실행할 때마다 메모리 주소 배치가 달라집니다.

ASLR 적용 전 메모리 구조 (예시)

0x08048000  <- 실행 파일(.text, .data)
0xbffff000 <- 스택
0x40000000 <- 공유 라이브러리(libc 등)
0x08000000 <- 힙

위와 같이 메모리 배치가 고정되어 있으면, 공격자가 특정 주소를 이용해 정확한 위치로 점프하는 공격이 가능합니다.

ASLR 적용 후 메모리 구조 (예시)

0x08f2a000  <- 실행 파일(.text, .data) - 무작위 위치
0xbf75d000 <- 스택 - 무작위 위치
0x426f1000 <- 공유 라이브러리(libc 등) - 무작위 위치
0x0915e000 <- 힙 - 무작위 위치

주소가 매번 다르기 때문에, 공격자가 정확한 주소를 모르면 쉘코드를 실행하거나 함수 포인터를 조작하기가 매우 어렵습니다.

3. ASLR의 목적

ASLR의 주요 목적은 메모리 기반 공격을 어렵게 만들어 Exploit의 성공 가능성을 낮추는 것입니다. 메모리 취약점을 악용할 때, 공격자는 일반적으로 정확한 메모리 주소를 알아야 합니다. 하지만 ASLR이 활성화되어 있으면 다음과 같은 보안 효과를 얻을 수 있습니다:

  • 공격자가 쉘코드를 삽입하더라도, 점프할 정확한 주소를 알 수 없음.
  • 공유 라이브러리(libc 등)의 위치도 랜덤화되어 return-to-libc 공격이 실패할 가능성 높음.
  • 전체 주소 공간을 브루트 포싱으로 맞추기에는 비용이 큼.

4. ASLR의 장점

  1. 보안성 향상
    메모리 주소가 매번 변경되기 때문에, 취약점을 악용하려는 공격자가 메모리 구조를 예측하기 어렵습니다.
  2. 시스템 성능에 영향 거의 없음
    주소 공간을 무작위로 배치하는 작업은 프로세스 시작 시 한 번만 수행되므로, 성능 저하가 사실상 없습니다.
  3. 다른 보안 기법과의 연계 가능
    Stack Canaries, DEP(NX 비트) 등의 보안 기법과 함께 사용할 수 있어 다층 방어를 구성할 수 있습니다.
  4. 기존 소프트웨어 구조 변경 없음
    운영체제 차원에서 적용되므로, 프로그램 소스코드를 수정할 필요 없이 적용 가능함.
장점설명
✔️ 보안성 향상메모리 주소 예측을 어렵게 하여 Exploit을 방지
✔️ 비용 효율적소프트웨어 구조 변경 없이 OS 차원에서 적용 가능
✔️ 다른 보안 기법과 결합 가능DEP, Stack Canaries 등과 함께 사용할 수 있음

5. ASLR의 단점과 한계

  1. 정보 유출 취약점(Info Leak)이 있으면 무력화됨
    만약 공격자가 메모리 주소 일부를 유출시킬 수 있다면, ASLR이 적용되어 있어도 전체 주소를 추측하거나 복원하는 것이 가능함.
  2. 64비트에 비해 32비트 환경에서는 랜덤화 범위가 작음
    32비트 시스템에서는 가상 주소 공간이 4GB로 제한되어 있어, 랜덤화 가능한 주소 공간도 작음. 따라서 브루트 포스 공격이 상대적으로 쉬움.
  3. 정적인 바이너리(DLL, Shared Library 등)가 ASLR을 지원하지 않으면 전체 효과가 반감됨
    일부 바이너리는 ASLR 적용을 위해 다시 컴파일해야 하며, 적용되지 않은 바이너리가 있다면 공격자가 해당 위치를 기반으로 공격 가능.
  4. 부분 덮어쓰기 우회 기법 가능
    하위 주소 몇 바이트만 덮어써서 특정 위치로 이동하는 공격도 일부 가능한 것으로 알려져 있음.
단점설명
❗ 예측 가능성 존재주소 공간이 좁거나, 랜덤화 범위가 작을 경우 예측 가능
❗ 성능 저하아주 미세하지만 초기 로딩 시 오버헤드 발생 가능
❗ 우회 가능정보 유출(leak) 취약점을 통해 주소를 알아낼 수 있음 (예: InfoLeak)

6. ASLR 우회 기법

  1. Memory Leak 이용 (정보 유출)
    포인터나 메모리 값을 출력시키는 취약점을 이용해 메모리 주소를 유출시킵니다. 이 정보를 기반으로 랜덤화된 주소를 예측하거나 복원할 수 있습니다.
  2. Brute Force 공격
    재시도가 가능한 환경(예: 서버가 계속 재시작되는 경우)에서는 주소를 무작위로 찍어보는 방식으로 성공 가능성을 높일 수 있습니다.
  3. Partial Overwrite
    주소의 하위 바이트(예: 마지막 1~2바이트)만 덮어써서, 높은 확률로 맞는 위치로 이동하도록 시도합니다.
  4. ASLR 비활성 시스템 대상 공격
    일부 시스템에서는 기본적으로 ASLR이 꺼져 있거나, 잘못 설정된 환경이 많기 때문에 이를 노리는 경우도 있습니다.

7. 운영체제별 ASLR 적용 상태

  • Windows
    • Windows Vista 이후 기본 적용
    • Windows 10에서는 system-wide ASLR 및 forced ASLR 기능도 포함됨
  • Linux
    • 커널 2.6.12부터 ASLR 지원
    • /proc/sys/kernel/randomize_va_space 값으로 설정 확인 가능
  • macOS
    • macOS 10.5 이후부터 지원
    • ASLR이 점점 강화되고 있음
  • Android
    • Android 4.0 (Ice Cream Sandwich) 이후 적용
    • ART 런타임에서는 더 정교하게 주소 공간이 관리됨

8. Linux에서 ASLR 설정 확인 및 변경 방법

ASLR 활성화 상태 확인:

cat /proc/sys/kernel/randomize_va_space

결과값 의미:

  • 0: 비활성화 (ASLR 미적용)
  • 1: 일부 랜덤화
  • 2: 완전한 랜덤화 (기본 권장값)

설정 변경 (일시적으로 비활성화):

echo 0 > /proc/sys/kernel/randomize_va_space

영구 적용을 원할 경우 /etc/sysctl.conf에 다음 줄 추가:

kernel.randomize_va_space = 2

9. 결론

ASLR은 운영체제에서 제공하는 기본적이면서도 강력한 메모리 보안 기법입니다. 그러나 완벽한 보안책은 아니며, 다른 보안 기법들과 함께 사용해야 실제 효과를 극대화할 수 있습니다. 특히, ASLR은 정보 유출이 있는 경우 우회가 가능하기 때문에, 시스템의 다른 취약점도 함께 고려하여 방어 전략을 세워야 합니다. 다양한 운영체제에서 지원되고 있으며, 서버 및 클라이언트 시스템 모두에서 기본 활성화되어야 합니다.

zerg96

Recent Posts

정보보안기사 필기 핵심 개념, 접근통제·인증 8문제로 정리

필기 시험의 접근통제 영역은 용어 하나만 알아도 풀리는 문제와 개념을 뒤집어 묻는 문제가 섞여 나옵니다.…

5시간 ago

유튜브 AI 영상 범람, 진짜 크리에이터는 어떻게 살아남나

유튜브에 AI 자동 생성 영상이 넘쳐납니다. 진짜 크리에이터들은 어떻게 살아남아야 할까요? AI와 경쟁하는 3가지 생존…

6시간 ago

코스피 사이드카 이틀 만에 또 발동, 올해만 27번째…5분간 멈추는 건 ‘프로그램 매도’뿐입니다

이틀 전에 사이드카가 걸렸을 때만 해도 "한 번 놀란 장"으로 끝날 줄 알았는데요. 15일 아침…

6시간 ago

코스피 낙폭 7%로 확대, 외국인 1.7조 순매도: 10월 15일 오전 10시 시황

오전 시황 글에 이어 장중 후속 정리입니다. 코스피는 개장 직후 5%대였던 낙폭이 오전 10시 전후에…

10시간 ago

코스피 5.59% 급락 출발, 개장 7분 만에 매도 사이드카: 10월 15일 오전 시황

10월 15일 목요일 아침, 코스피가 전날 종가보다 5.59% 낮은 5,673.01로 출발했습니다. 장 시작 7분 만에…

10시간 ago

삼성 갤럭시 AI, 솔직히 기대 이하였다 — 실망스러운 이유 TOP 5

삼성 갤럭시 AI, 써보니 실망스러웠다. 온디바이스 한계, 지역 제한, 낮은 일상 활용도 등 현실적인 문제점…

11시간 ago