ASLR 메모리 레이아웃 난수화 (Address Space Layout Randomization)

핵심 인사이트 (3줄 요약)

  1. 본질: ASLR (주소 공간 배치 무작위화)은 애플리케이션이 실행될 때마다 코드, 데이터, 힙(Heap), 스택(Stack), 공유 라이브러리(libc)가 메모리에 올라가는 가상 주소(Virtual Address)의 위치를 매번 예측 불가능하게 랜덤(Random)하게 뒤섞어 버리는 운영체제의 보호막이다.
  2. 가치: 해커가 버퍼 오버플로우로 메모리 경계를 뚫더라도, 자신이 실행시키고 싶은 쉘코드나 리턴 주소(ROP Gadget)가 "어디에 있는지" 알 수 없게 만들어, 시스템 장악 시도를 치명타(Exploit)가 아닌 단순 프로그램 크래시(Crash, 서비스 종료)로 무력화시킨다.
  3. 융합: 가상 메모리(Virtual Memory)의 논리적 추상화 구조 위에, 컴파일러(GCC/Clang)의 위치 독립 코드(PIE/PIC) 생성 기술, 그리고 OS의 보안 난수 발생기(CSPRNG)가 결합되어 탄생한 현대 시스템 방어 아키텍처의 필수 3요소(DEP, Canary, ASLR) 중 하나다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

  • 개념:

    • 과거의 프로그램들은 0x08048000 같은 뻔하고 고정된 메모리 주소에 코드를 올리고 스택을 배정받았다.
    • ASLR은 커널의 가상 메모리 로더(Loader)가 개입하여, 프로세스가 생성될 때마다 이 기본 주소(Base Address)에 무작위 난수 델타(Offset) 값을 더해서 완전히 엉뚱한 위치에 공간을 던져주는 기술이다.
  • 필요성(문제의식):

    • 해커가 스택 버퍼 오버플로우 공격을 하려면, 함수 종료 시 CPU가 돌아갈 '리턴 주소'를 해커가 심어둔 악성 코드의 주소(예: 0xbffff123)로 정확히 조준(Targeting)해서 덮어써야 한다.
    • 고정된 메모리 환경에서는 해커가 자기 집 컴퓨터에서 프로그램의 메모리 지도를 연구한 뒤 쏘면, 전 세계 모든 서버의 메모리 지도도 똑같으므로 100% 명중률로 해킹이 성공했다.
    • 해결책: "실행할 때마다 도시의 건물(메모리) 위치를 전부 섞어버리자! 해커가 저격총을 쏴도 주소가 계속 바뀌면 절대 명중시킬 수 없을 것이다."
  • 💡 비유:

    • ASLR 미적용: 은행 금고(중요 함수)의 위치가 모든 지점에서 항상 "지하 1층 3번 방"으로 도면상에 고정되어 있어, 도둑이 눈을 감고도 찾아가서 털 수 있는 상황.
    • ASLR 적용: 은행이 매일 아침 문을 열 때마다 금고, 창구, 화장실의 위치를 무작위로 섞어버리는 '마법의 건물(가상 메모리)'. 도둑이 침입해도 어제가 지하 1층이었다고 오늘 찾아가 보면 벽으로 막혀있어 길을 잃고 갇혀버림(Segmentation Fault 크래시).
  • 등장 배경:

    • 2001년 PaX 프로젝트(리눅스 커널 보안 패치)에서 처음 고안되었고, 2005년 리눅스 2.6, 2007년 윈도우 비스타에 기본 탑재되며 DEP(데이터 실행 방지)와 함께 원격 코드 실행(RCE) 공격을 박멸하기 위한 가장 강력한 패러다임 시프트가 되었다.
  ┌─────────────────────────────────────────────────────────────┐
  │                 ASLR 적용 전후의 메모리 구조 변화 (Randomization)     │
  ├─────────────────────────────────────────────────────────────┤
  │                                                             │
  │  [ ASLR 꺼짐 (구형 OS) - 매번 동일한 주소 ]                      │
  │  실행 1차: [코드: 0x400000]...[힙: 0x600000].....[스택: 0x7FFFFFFF]│
  │  실행 2차: [코드: 0x400000]...[힙: 0x600000].....[스택: 0x7FFFFFFF]│
  │    ▶ 해커: "스택 주소가 0x7FFFFFFF군. 거기에 쉘코드를 넣고 쏴야지!" 🎯 100% 명중 │
  │                                                             │
  │  [ ASLR 켜짐 (현대 OS) - 매번 무작위로 뒤섞임 ]                    │
  │  실행 1차: [코드: 0x54A000]......[힙: 0x82C000]..[스택: 0x7FFED1B4]│
  │  실행 2차: [코드: 0x71F000].[힙: 0x9B1000].......[스택: 0x7FFC89A0]│
  │  실행 3차: [코드: 0x4A2000].........[힙: 0x5D0000]...[스택: 0x7FFA42C]│
  │    ▶ 해커: "어제 쐈던 0x7FFFFFFF로 쏴야지!"                         │
  │    ▶ 결과: 해당 주소에 아무것도 없음 -> 🚨 Segmentation Fault (프로그램 다운) │
  └─────────────────────────────────────────────────────────────┘

[다이어그램 해설] 이 그림은 메모리 지도의 '예측 불가능성(Unpredictability)'이 방어의 핵심임을 시각화한다. 해커의 공격 페이로드(Payload)에는 쉘코드의 위치를 가리키는 하드코딩된 '주소값(Pointer)'이 반드시 들어가야 한다. ASLR이 켜져 있으면, OS 커널은 프로세스를 메모리에 적재(execve)할 때마다 보안 난수 생성기를 돌려 0x1000 단위(페이지 크기)로 오프셋(Offset)을 더해 주소를 엉망으로 비틀어버린다. 해커가 옛날 주소로 점프를 시도하면, CPU는 허가되지 않은 텅 빈 메모리 공간으로 추락하게 되어 '세그먼테이션 폴트'를 내고 프로세스를 즉각 사살한다. 권한을 탈취당하는 것(Exploit)보다 서비스가 잠시 죽는 것(Crash)이 백만 배 안전하다.

  • 📢 섹션 요약 비유: 해커가 미사일 좌표를 찍고 공격 버튼을 눌렀는데, 맞고 죽어야 할 건물(메모리)이 매 초마다 다른 동네로 순간 이동(랜덤화)을 해버려서 미사일이 매번 텅 빈 허공(세그먼테이션 폴트)에 박히게 만드는 첨단 회피 기술입니다.

Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)

ASLR의 3단계 적용 범위 설정 (sysctl 파라미터)

리눅스 커널에서는 kernel.randomize_va_space 파라미터를 통해 ASLR의 무작위화 강도를 조절한다.

설정 값모드 이름무작위화(Randomize) 되는 영역해킹 위험성 및 효과
0ASLR 비활성화전혀 뒤섞지 않음. (디버깅 용도)최악. 0x08048000 등 고전적인 고정 주소 사용. ROP 공격 등에 무방비 노출.
1보수적 ASLR스택(Stack), 공유 라이브러리(libc 등 mmap 영역), VDSO기본 방어. 하지만 데이터 영역(BSS)과 힙(Heap) 주소가 고정되어 있어 Heap Spraying 공격에 취약함.
2전체 ASLR (디폴트)1번 영역 + 힙(Heap, brk) 영역까지 전체 무작위화현대 시스템 표준. 모든 주요 메모리 덩어리의 베이스 주소가 뒤섞임.

PIE (Position Independent Executable) 컴파일의 필수 결합

가장 치명적인 오해는 "OS에서 ASLR을 켜면 내 프로그램은 무조건 안전하다"는 것이다. OS가 섞어주고 싶어도, 컴파일러가 프로그램을 깡통으로 만들면 섞을 수가 없다. 이를 해결하는 것이 PIE (위치 독립 실행 파일) 기술이다.

  ┌───────────────────────────────────────────────────────────────────┐
  │                 ASLR과 PIE 컴파일러 옵션의 시너지 구조               │
  ├───────────────────────────────────────────────────────────────────┤
  │                                                                   │
  │   [ 일반 컴파일 (No PIE) - gcc -no-pie ]                             │
  │   - 바이너리 안에 "이 프로그램은 무조건 0x400000에 올라가야 해!" 라고 박혀있음. │
  │   - OS의 ASLR: "힙이랑 스택은 섞어줄게. 근데 니 코드(.text)는 고집 부리니까   │
  │                어쩔 수 없이 0x400000에 둔다."                        │
  │   ▶ 해커 반격: "스택 주소는 바뀌었지만, 코드는 0x400000에 고정이네?         │
  │               여기 있는 코드 조각을 모아 공격(ROP)하자!" (반쪽짜리 방어)      │
  │                                                                   │
  │   [ PIE 컴파일 적용 (현대 디폴트) - gcc -fPIE -pie ]                   │
  │   - 바이너리 내 모든 점프 명령어가 절대 주소(`jmp 0x400010`)가 아닌,       │
  │     현재 위치 기준 상대 주소(`jmp PC + 0x10`)로 유연하게 컴파일됨.        │
  │   - OS의 ASLR: "오, 유연하네? 니 코드 전체를 0x9B1000으로 휙 던져버리마!"  │
  │   ▶ 완벽 방어: 힙, 스택, 공유 라이브러리뿐만 아니라 프로그램 본체(Code/Data)의│
  │              베이스 주소까지 완벽하게 난수화됨! 100% 예측 불가 달성.         │
  └───────────────────────────────────────────────────────────────────┘

[다이어그램 해설] ASLR은 운영체제의 마법이고, PIE는 컴파일러의 마법이다. 둘이 합쳐져야 100% 방어막이 켜진다. 과거에는 프로그램의 .text(코드) 영역 위치를 알면 해커들이 스택에 코드를 안 넣고 원래 있던 코드를 짜깁기하는 ROP(Return-Oriented Programming) 공격을 시전했다. 이를 막기 위해 컴파일러는 fPIE 옵션을 써서 프로그램 자체를 "어느 주소에 떨어져도 자기들끼리 오프셋으로 잘 돌아갈 수 있게(Position Independent)" 빌드해 버린다. 현대의 모든 리눅스 배포판(Ubuntu 등)은 패키지를 만들 때 이 PIE 옵션을 100% 강제(Default)하여 OS의 ASLR이 프로그램 본체까지 완벽하게 공중 부양시키도록 설계했다.

  • 📢 섹션 요약 비유: OS의 ASLR이 가구를 매일 다른 방으로 몰래 옮겨주는 이삿짐센터라면, PIE 컴파일은 가구들을 레고처럼 조립형으로 만들어줘서(상대 주소) 이삿짐센터가 어떤 방에 대충 던져놔도 가구들이 부서지지 않고 알아서 결합해 잘 동작하게 해주는 기초 공사입니다.

Ⅲ. 융합 비교 및 다각도 분석

메모리 방어막 3대장 (DEP/NX vs Canary vs ASLR) 트라이포스

현대 운영체제는 버퍼 오버플로우를 막기 위해 3겹의 방탄조끼를 입고 있다. 하나가 뚫리면 다른 하나가 막는 구조다.

방어막 종류핵심 동작 및 방어 목적해커의 우회 전술 (Bypass)
1. 스택 카나리아 (Stack Canary)버퍼 끝과 리턴 주소 사이에 임의의 값(카나리아)을 넣어, 덮어쓰기 발생 여부를 탐지.정보 유출(Leak) 취약점으로 카나리아 값을 읽어내서, 덮어쓸 때 그 값을 그대로 복원해 속임.
2. DEP / NX Bit (데이터 실행 방지)스택이나 힙 메모리에 데이터를 쓸 순 있지만, 그 데이터를 "실행(Execute)"시키지는 못하게 하드웨어 단에서 차단.스택에 코드를 올리지 않고, 이미 메모리에 실행 권한으로 존재하는 libc 안의 함수(system)를 불러다 쓰는 ROP 공격.
3. ASLR (주소 공간 무작위화)ROP 공격을 하려고 해도 libc나 코드의 베이스 주소가 계속 바뀌어 함수(Gadget)를 찾지 못하게 눈을 가림.Base Address Leak (주소 유출) 취약점을 통해 특정 주소 하나를 알아낸 뒤, 메모리의 고정 오프셋(Offset)을 계산해 나머지 주소를 싹 다 추론해 냄.

과목 융합 관점

  • 컴퓨터 아키텍처 (엔트로피 부족 문제): ASLR이 강력하려면 주소를 섞어주는 "난수(Random Number)"의 경우의 수가 어마어마해야 한다(엔트로피). 64비트 CPU는 가상 주소 공간이 넓어 주소를 비틀 수 있는 가짓수(28비트, 약 2억 개)가 방대해 해커가 찍어서 맞출 확률이 0에 가깝다. 그러나 구형 32비트 CPU는 공간 자체가 좁아서 ASLR이 섞어봤자 고작 8비트(256가지)밖에 안 됐다. 해커가 쉘코드를 256번만 연속으로 때려 넣으면(Brute Force) 1번은 운 좋게 걸려 서버가 털리는 한계가 있었다. 64비트 아키텍처의 전환이 ASLR을 완벽하게 만들었다.

  • 네트워크 보안 (Bypass ROP): ASLR 환경에서 공격자는 메모리의 베이스 주소(Base Address)를 훔쳐오기 위해, 먼저 네트워크 응답 패킷에 시스템의 포인터 주소가 섞여 나가도록 유도하는 '메모리 릭(Memory Leak)' 1차 공격을 수행한다. 기준점 하나만 유출되면 거대한 라이브러리의 상대적 거리(Offset)는 고정되어 있으므로 전체 퍼즐이 다 풀려버린다. 공격은 이제 단순히 넘치는 걸 떠나 정교한 정보 수집전으로 진화했다.

  • 📢 섹션 요약 비유: 카나리아가 도둑의 발소리를 듣고 우는 경보기라면, DEP는 도둑이 들고 온 무기를 먹통으로 만드는 무장 해제 장치이고, 최후의 보루인 ASLR은 도둑이 금고를 열려고 할 때마다 금고의 비밀번호와 위치를 계속 섞어버리는 움직이는 미로입니다.


Ⅳ. 실무 적용 및 기술사적 판단

실무 시나리오 및 트러블슈팅

  1. 시나리오 — 포렌식 분석 및 GDB 디버깅의 어려움: 사내 보안팀이 악성코드를 분석하기 위해 gdb(GNU Debugger)를 켜고 메모리 주소를 찍어보는데, 실행할 때마다 변수와 함수의 주소가 계속 바뀌어서 브레이크포인트(Breakpoint)를 걸 수 없고 포렌식 보고서 작성이 불가능해졌다.

    • 아키텍트 판단 (디버깅 환경 격리): ASLR은 실무 보안에는 축복이지만, 개발자와 리버스 엔지니어에게는 최악의 저주다. 분석을 위해서는 OS 커널 파라미터(echo 0 > /proc/sys/kernel/randomize_va_space)를 수정하여 시스템 전역의 ASLR을 일시적으로 끄거나, GDB 내부에서 set disable-randomization on 명령어를 통해 해당 분석 프로세스의 ASLR막을 살짝 걷어내고 정적인 고정 주소 환경에서 분석을 수행하는 노하우가 필수다.
  2. 시나리오 — Nginx / Apache 메모리 유출 방어 (ASLR + 분기 아키텍처): Nginx 워커 프로세스에서 코딩 실수로 버퍼가 터져 해커가 메모리 주소 한 개를 유출(Leak)하는 데 성공했다. 이를 기반으로 ROP 공격을 시도했다.

    • 아키텍트 판단 (멀티프로세스 재분기 구조의 강점): ASLR의 맹점은 "한 번 부여된 베이스 주소는 프로세스가 죽기 전까지는 안 바뀐다"는 것이다. 만약 단일 거대 스레드 모델(Node.js 등)이라면 주소가 털린 채로 영원히 돌아가니 다음 공격에 100% 당한다. 하지만 Nginx 같은 멀티 프로세스 모델에서는 마스터가 워커를 fork 하여 띄우므로, 워커 하나가 공격받아 죽거나(Crash), 정기적으로 워커를 갈아치우게(Reload) 설정해 두면, 죽을 때마다 전혀 새로운 랜덤 주소(ASLR)를 부여받고 환생한다. 해커가 어렵게 구한 옛날 주소는 휴지 조각이 된다. 아키텍처적 생명주기 관리가 보안을 극대화하는 사례다.
  ┌───────────────────────────────────────────────────────────────────┐
  │                 메모리 보호 및 컴파일 아키텍처 무결성 점검 체계         │
  ├───────────────────────────────────────────────────────────────────┤
  │                                                                   │
  │   [ 서비스 배포 전, 바이너리 보호 기법(Mitigation) 체크리스트 ]           │
  │   명령어 도구: `checksec --file=my_server_app`                       │
  │                                                                   │
  │   1. RELRO (Relocation Read-Only)                                 │
  │      - Full RELRO 🟢 : GOT(Global Offset Table) 영역 쓰기 방지 완료    │
  │                                                                   │
  │   2. Stack Canary                                                 │
  │      - Canary found 🟢 : 스택 오버플로우 1차 탐지 방패 정상 작동           │
  │                                                                   │
  │   3. NX (No-Execute / DEP)                                        │
  │      - NX enabled 🟢 : 스택/힙에서 악성 쉘코드 실행 불가 상태             │
  │                                                                   │
  │   4. PIE (Position Independent Executable)                        │
  │      - PIE enabled 🟢 : 코드 영역 베이스 무작위화 준비 완료 (ASLR과 결합) │
  │                                                                   │
  │   아키텍트 판정: 위 4가지 방어막(초록불)이 모두 켜져 있어야만 운영(Prod) 환경 │
  │              배포를 승인한다. 하나라도 빠지면 RCE(원격코드실행) 위험 노출! │
  └───────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 이 점검표는 백엔드 인프라 아키텍트의 최종 검문소(checksec)다. 개발자가 코드를 아무리 잘 짜도 100% 완벽할 순 없다(제로데이 취약점). 따라서 해커가 취약점을 찾아내더라도 그것을 무기(Exploit)로 바꾸지 못하도록 시스템 컴파일 타임에 4중 방패를 강제로 두르게 하는 것이다. 최근의 CI/CD 데브섹옵스(DevSecOps) 파이프라인에는 빌드된 바이너리가 이 4가지 보안 플래그를 모두 가지고 있는지 검사하여 하나라도 실패하면 배포를 거부하는 자동화 장치가 기본으로 구축되어 있다.

안티패턴

  • 구형 라이브러리 (Non-PIC) 링크: 메인 애플리케이션은 PIE 옵션을 주고 최신으로 빌드해 놓고서, 정작 프로그램이 물고 도는 핵심 암호화나 수학 계산용 lib_old.so 같은 서드파티 공유 라이브러리를 PIE/PIC(Position Independent Code)가 적용 안 된 구형으로 링크하는 행위. ASLR이 메인 프로그램은 잘 섞어놓아도, 이 구형 라이브러리는 무조건 고정 주소로 올라가 버리므로 해커는 메인 대신 이 고정된 구형 라이브러리 속의 함수들을 ROP 가젯(Gadget)으로 신나게 긁어모아 서버를 털어버린다. 가장 약한 고리가 전체의 방어력을 결정한다.

  • 📢 섹션 요약 비유: 성의 정문(메인 프로그램)은 매일 위치가 바뀌는 마법의 문(PIE+ASLR)으로 튼튼하게 막았는데, 성 뒤편의 낡은 배수구(구형 라이브러리)는 항상 똑같은 위치에 열려 있다면 도둑은 바보가 아닌 이상 정문을 놔두고 배수구를 통해 들어옵니다. 모든 부품에 무작위화 마법이 적용되어야 합니다.


Ⅴ. 기대효과 및 결론

정량/정성 기대효과

구분ASLR + PIE 미적용 (과거)ASLR + PIE 강제 적용 (현재)개선 효과
정량 (Exploit 성공률)취약점 발견 시 100% 원격 쉘(Shell) 탈취무작위 주소 예측 실패로 99.9% Exploit 실패ROP/RCE 공격의 난이도를 수천 배 증가시켜 공격 비용(Cost) 상승
정성 (장애 격리)해커가 서버 최고 관리자(Root) 권한 강탈주소 오예측 시 Segmentation Fault 크래시 발생"권한 탈취(치명상)"를 "일시적 서비스 다운(찰과상)"으로 전환 방어
정성 (취약점 억제)0-Day 취약점 1개로 전 세계 서버 초토화메모리 릭(Leak) 취약점을 추가 확보해야만 공격 가능해킹 공격의 연쇄 체인(Kill-chain) 허들을 높여 방어 시간 확보

미래 전망

  • KASLR (커널 공간 무작위화): 초기 ASLR은 유저 공간(Ring 3)의 앱들만 섞어주었다. 하지만 해커들이 아예 커널 본체(Ring 0)를 직접 타격하는 취약점을 발굴하자, 운영체제 부팅 시 커널 자신의 코드와 드라이버 모듈들이 메모리에 적재되는 기본 물리 주소 자체를 매번 난수화하여 뒤섞어버리는 **KASLR (Kernel ASLR)**이 도입되어 커널 자체를 투명 망토로 숨기는 시대로 진입했다.
  • FGKASLR (Function Granular KASLR): 기존 ASLR이 커널 전체를 한 덩어리(블록)로 섞었다면, 구글 등 굴지의 인프라 기업들은 커널 내의 '함수(Function)' 하나하나 단위로 쪼개어 매번 순서를 섞어버리는 미세 난수화 기술(FGKASLR)을 연구하고 있다. 해커가 메모리 릭으로 주소 1개를 알아내도 다른 함수의 위치를 절대 유추할 수 없게 만드는 극한의 방어막이다.

참고 표준

  • PaX / Grsecurity: 리눅스 커널에서 DEP(NX)와 ASLR의 철학을 최초로 구현하고 발전시킨 전설적인 커널 보안 강화 패치 프로젝트.
  • ELF (Executable and Linkable Format) & PE: 리눅스(ELF)와 윈도우(PE) 실행 파일 포맷 표준 내부에 동적 재배치(Relocation) 테이블과 PIE 속성을 기록하여, 커널 로더가 부팅 시 ASLR 오프셋을 계산해 매핑할 수 있도록 하는 바이너리 표준 규격.

ASLR 메모리 레이아웃 난수화는 방어의 패러다임을 "성벽을 무한히 두껍게 쌓자"에서 **"적이 성벽을 치려 할 때마다 성벽의 위치 자체를 움직여 버리자(Moving Target Defense)"**로 바꾼 천재적인 역발상이다. 소프트웨어의 취약점(버그)은 인간이 코드를 짜는 한 절대 0이 될 수 없다는 패배를 인정하고, "뚫리더라도 해커가 원하는 목표물(쉘)을 절대로 찾지 못하게 눈을 가려버린다"는 철학은 시스템 아키텍처가 도달할 수 있는 가장 우아하고 현실적인 보안의 정점이다.

  • 📢 섹션 요약 비유: 모기(해커)가 피를 빠는 것(취약점) 자체를 100% 막을 수는 없으니, 모기가 침을 꽂으려고 할 때마다 내 피부의 혈관(메모리 주소) 위치를 1초마다 무작위로 움직여서 모기가 평생 허공에만 침을 꽂다가 굶어 죽게 만드는 완벽한 생존 회피술입니다.

📌 관련 개념 맵 (Knowledge Graph)

개념 명칭관계 및 시너지 설명
버퍼 오버플로우 (Buffer Overflow)ASLR이 막고자 하는 가장 근본적인 해킹 기법으로, 배열 크기를 넘쳐흘러 리턴 주소를 변조하려는 공격이다.
ROP (Return-Oriented Programming)DEP(실행 방지) 때문에 스택에 악성코드를 못 넣자, 기존 라이브러리의 코드 조각들을 기워 붙이는 우회 공격이며 ASLR의 주적이다.
PIE (위치 독립 실행 파일)OS가 ASLR로 메모리를 섞을 수 있도록, 컴파일러가 코드를 '절대 주소'가 아닌 '상대 주소'로 유연하게 만들어주는 찰떡궁합 기술이다.
세그먼테이션 폴트 (Segfault)해커가 ASLR로 섞인 주소를 잘못 찍어 아무것도 없는 메모리로 점프했을 때, MMU가 불법 접근을 감지하고 내리는 프로세스 사형 선고다.
KASLR (커널 ASLR)유저 앱을 넘어서, 시스템 최강의 권력인 커널 스스로의 주소 공간마저 부팅 때마다 섞어버려 커널 익스플로잇을 무력화하는 기술이다.

👶 어린이를 위한 3줄 비유 설명

  1. 나쁜 도둑(해커)이 우리 집 금고(중요 프로그램)를 털려고 "금고는 안방 창문 옆에 있다!"라고 도면(메모리 주소)을 다 외워왔어요.
  2. 하지만 우리 집은 마법의 집(ASLR)이라서, 매일 아침 눈을 뜰 때마다 금고 위치가 화장실, 다락방, 베란다로 완전 무작위로 휙휙 바뀐답니다!
  3. 밤에 몰래 들어온 도둑은 도면만 믿고 안방 창문 옆을 뒤지다가 아무것도 없어서 멘붕에 빠지고, 결국 경보음(크래시)이 울려 경찰에 잡혀간답니다! 방어 대성공!