0Pricing
Cyber Security Academy · 강의

힙 익스플로잇: Use-After-Free와 힙 스프레이

glibc malloc 내부, Use-After-Free 조건, 힙 스프레이 기법을 이해합니다.

힙 익스플로잇: Use-After-Free와 힙 스프레이은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

힙

힙은 실행 시간에 malloc()/free()/new/delete를 통해 할당되는 동적 메모리입니다. 스택과 달리 힙의 배치는 호출 스택이 아니라 할당 및 해제 패턴에 따라 결정됩니다. 힙 취약점은 브라우저, 구문 분석기, 네트워크 데몬에서 흔히 발생합니다.

해제 후 사용(UAF)

해제 후 사용 취약점은 프로그램이 메모리 영역을 해제한 후에도 계속 사용할 때 발생합니다. 해제된 영역이 공격자가 제어하는 데이터로 다시 할당되면 프로그램은 오래된 포인터를 사용해 공격자의 데이터에서 작업하게 됩니다.

UAF 예시

UAF 패턴:

// Vulnerable C code:
struct Object *obj = malloc(sizeof(*obj));
free(obj);
// Later, attacker causes a new malloc to fill the freed region
// with their data...
obj->method();  // now calls attacker's function pointer!

힙 풍수

힙 풍수(또는 힙 그루밍)는 힙 할당자를 조작해 객체를 특정 위치에 배치하고, 해제된 메모리를 제어된 방식으로 재사용하는 기법입니다. 공격자는 정확한 순서로 할당과 해제를 실행해 힙의 형태를 조정합니다.

힙 스프레이

힙 스프레이는 공격자가 제어하는 대량의 데이터(셸코드 + NOP 슬레드)를 힙 전체에 할당합니다. 힙의 많은 부분이 채워지므로 잘못된 포인터가 공격자의 데이터에 도달할 가능성이 높아집니다. UAF 또는 타입 혼동 버그와 함께 자주 사용됩니다.

// JavaScript heap spray:
var spray = [];
for(var i = 0; i < 100000; i++) {
  spray[i] = unescape("%90%90...shellcode...");
}

이중 해제

이중 해제는 메모리를 두 번 해제할 때 발생합니다. 두 번째 해제는 힙 할당자의 메타데이터(해제 목록 포인터)를 손상시켜 공격자가 다음 할당이 배치될 위치를 제어하고 임의의 주소에 쓸 수 있게 할 가능성이 있습니다.

힙 버퍼 오버플로

스택 오버플로와 마찬가지로 힙 버퍼 오버플로는 힙 할당 영역의 끝을 넘어 데이터를 씁니다. 스택 오버플로와 달리 대상은 일반적으로 힙 메타데이터(크기, 앞쪽 및 뒤쪽 포인터) 또는 함수 포인터나 가상 함수 테이블 포인터를 포함한 인접 할당 영역입니다.

타입 혼동

타입 혼동은 한 타입으로 할당된 메모리 영역을 다른 타입으로 사용할 때 발생합니다. JavaScript 엔진과 C++ 코드에서 흔히 발생합니다. 공격자가 할당 순서를 제어할 수 있다면 엔진이 공격자의 데이터를 신뢰할 수 있는 Object로 취급하게 만들 수 있습니다.

ptmalloc 및 tcmalloc 내부 구조

힙 할당자를 이해하면 익스플로잇 개발에 도움이 됩니다. glibc의 ptmalloc은 빈(비정렬, 소형, 대형)과 빠른 빈을 사용합니다. tcache(스레드별 캐시)는 첫 번째 할당 원천입니다. 익스플로잇은 미래의 할당 주소를 제어하기 위해 빈 손상을 노리는 경우가 많습니다.

완화 기법

힙 익스플로잇에 대한 완화 기법:

  • 힙 무작위화(ASLR의 일부) — 힙 기준 주소 무작위화
  • 안전한 연결 해제 — 연결을 해제하기 전에 앞쪽 및 뒤쪽 포인터 검증
  • tcache 중독 탐지 — glibc 2.32에 추가됨
  • 포인터 난독화 — tcache에 저장된 포인터 암호화
  • 메모리 안전 언어 — Rust는 컴파일 시 UAF 제거

브라우저 힙 익스플로잇

대부분의 브라우저 제로데이는 JavaScript 엔진(V8, SpiderMonkey)의 힙 취약점과 관련이 있습니다. 최신 브라우저는 샌드박스 탈출 연쇄를 여러 단계로 구성합니다. 렌더러의 힙 버그 → 브라우저 프로세스로 탈출 → OS 권한 상승과 같은 방식입니다. 각 단계에는 고유한 기법이 필요합니다.

빠른 확인: 힙 익스플로잇

이미 해제된 후 공격자의 데이터로 다시 할당된 메모리를 오래된 포인터로 사용하여 공격자가 프로그램 실행을 제어할 수 있게 하는 취약점은 무엇입니까?

학습 내용 요약

힙 취약점(UAF, 이중 해제, 힙 오버플로, 타입 혼동)은 동적 메모리 관리 오류를 악용합니다. 해제 후 사용은 현대 익스플로잇에서 가장 흔한 취약점 유형입니다. 힙 스프레이는 공격자의 데이터에 도달할 가능성을 최대화합니다. 완화 기법으로는 ASLR, 안전한 연결 해제, 포인터 난독화가 있습니다. Rust와 같은 메모리 안전 언어는 이러한 취약점 유형을 완전히 제거합니다.

자주 묻는 질문

“힙 익스플로잇: Use-After-Free와 힙 스프레이” 강의는 무료인가요?

네 — “힙 익스플로잇: Use-After-Free와 힙 스프레이” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“힙 익스플로잇: Use-After-Free와 힙 스프레이”에서 뭘 배우나요?

glibc malloc 내부, Use-After-Free 조건, 힙 스프레이 기법을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“힙 익스플로잇: Use-After-Free와 힙 스프레이” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 스택 버퍼 오버플로
  2. Return-Oriented Programming (ROP)
  3. 형식 문자열 취약점
  4. 힙 익스플로잇: Use-After-Free와 힙 스프레이
← Cyber Security Academy(으)로 돌아가기