0Pricing
Cyber Security Academy · 강의

스택 버퍼 오버플로

스택 구조를 이해하고 EIP/RIP를 덮어쓰며 취약한 C 바이너리용 실제 익스플로잇을 작성합니다.

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

버퍼 오버플로란 무엇인가요

버퍼 오버플로는 버퍼가 수용할 수 있는 양보다 많은 데이터가 버퍼에 기록될 때 발생합니다. 초과 데이터가 인접한 메모리를 덮어써 제어 구조를 손상시키고 프로그램 실행 흐름을 다른 곳으로 전환할 수 있습니다.

스택 메모리 배치

호출 스택에는 로컬 변수(버퍼), 저장된 프레임 포인터(SFP), 그리고 반환 주소(RIP/EIP)가 저장됩니다. 반환 주소는 함수가 반환된 후 실행을 계속할 위치입니다. 로컬 버퍼를 오버플로하면 반환 주소를 덮어쓸 수 있습니다.

고전적인 스택 스매싱

프로그램이 길이 검사 없이 gets() 또는 strcpy()를 호출하면 공격자는 버퍼를 채울 만큼 충분한 바이트를 입력하고, 반환 주소를 셸코드의 주소나 유용한 가젯의 주소로 덮어쓸 수 있습니다.

// Vulnerable C code:
void vuln() {
  char buf[64];
  gets(buf);  // No bounds checking!
}

오프셋 찾기

패턴 생성을 사용하여 반환 주소에 도달하는 바이트 수를 확인합니다:

# Generate a cyclic pattern:
python3 -c "from pwn import *; print(cyclic(200))" | ./vuln
# After crash, find offset:
python3 -c "from pwn import *; print(cyclic_find(0x61616166))"

보호 기법: 스택 카나리

스택 카나리는 로컬 변수와 저장된 반환 주소 사이에 배치되는 임의의 값입니다. 반환하기 전에 카나리를 검사하며, 덮어써진 경우 프로그램이 종료됩니다. 고전적인 오버플로 공격을 수행하려면 이 보호 기법을 우회해야 합니다.

보호 기법: ASLR

주소 공간 배치 무작위화(ASLR)는 실행할 때마다 스택, 힙, 라이브러리의 기준 주소를 무작위화합니다. 현재 주소가 유출되지 않는다면 64비트 시스템에서 점프할 위치를 추측하는 것은 사실상 불가능합니다.

보호 기법: NX/DEP

NX(실행 금지) / DEP(데이터 실행 방지)는 스택을 실행할 수 없는 영역으로 표시합니다. 버퍼에 주입된 셸코드는 직접 실행할 수 없습니다. 따라서 공격자는 반환 지향 프로그래밍(ROP)을 사용해야 합니다.

주소 유출

ASLR을 무력화하려면 공격자에게 정보 유출이 필요합니다. 예를 들어 형식 문자열 취약점, 힙의 범위를 초과한 읽기(Heartbleed와 같은 경우), 또는 악용된 함수에 있는 읽기 가능한 포인터가 있습니다. 주소 하나가 유출되면 오프셋을 확인하고 다른 주소를 계산할 수 있습니다.

기본 익스플로잇 작성

보호 기법이 적용되지 않은 기본 32비트 스택 버퍼 오버플로:

# Python exploit skeleton (pwntools):
from pwn import *
p = process("./vuln")
offset = 76
shellcode = asm(shellcraft.sh())
payload = shellcode + b"A" * (offset - len(shellcode)) + p32(stack_addr)
p.sendline(payload)
p.interactive()

ret2libc 기법

ret2libc는 셸코드 대신 libc 함수(예: system())로 반환하는 방식으로 NX를 우회합니다. 공격자는 반환 주소를 system의 주소로 덮어쓰고 "/bin/sh"를 인수로 전달합니다.

익스플로잇 개발 도구

필수 도구:

  • pwntools — Python 익스플로잇 라이브러리
  • GDB + pwndbg/peda — 익스플로잇 지원 기능이 포함된 디버거
  • checksec — 바이너리 보호 기법 표시
  • ROPgadget / ropper — ROP 체인 찾기
checksec --file=./vuln

빠른 확인: 스택 버퍼 오버플로

지역 변수와 저장된 반환 주소 사이에 무작위 값을 배치하고, 이 값이 덮어써지면 프로그램을 종료하는 완화 기법은 무엇입니까?

학습 내용 요약

스택 버퍼 오버플로는 버퍼의 범위를 넘어 데이터를 채워 반환 주소를 덮어씁니다. 보호 기법으로는 스택 카나리(덮어쓰기 탐지), ASLR(주소 무작위화), NX/DEP(실행할 수 없는 스택)가 있습니다. ret2libc는 NX를 우회합니다. 정보 유출은 ASLR을 무력화합니다. pwntools는 익스플로잇 개발을 간소화합니다.

자주 묻는 질문

“스택 버퍼 오버플로” 강의는 무료인가요?

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

“스택 버퍼 오버플로”에서 뭘 배우나요?

스택 구조를 이해하고 EIP/RIP를 덮어쓰며 취약한 C 바이너리용 실제 익스플로잇을 작성합니다. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“스택 버퍼 오버플로” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

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