Learning
토픽 117 / 210·사이버 공격 및 위협

버퍼 오버플로 공격 (Buffer Overflow)

버퍼 오버플로 공격 (Buffer Overflow)

프로그램이 할당된 버퍼 크기를 초과하는 데이터를 기록할 때 인접 메모리 영역을 덮어써 프로그램 흐름을 변조하거나 임의 코드를 실행하는 공격

목적: 프로그램 제어 흐름 탈취, 임의 코드 실행(셸코드), 권한 상승

유형

  • 스택 오버플로(Stack Overflow): 지역 변수 버퍼 초과 → 리턴 주소 덮어쓰기 → 셸코드로 점프, 가장 전통적
  • 힙 오버플로(Heap Overflow): 동적 할당 메모리 초과 → 함수 포인터/메타데이터 변조
  • 정수 오버플로(Integer Overflow): 정수 연산 결과 초과 → 버퍼 크기 오계산 → 오버플로 유발

공격 기법: 셸코드 삽입(NOP Sled + Shellcode), ROP(Return-Oriented Programming, 기존 코드 조각 연결), JOP(Jump-Oriented Programming)

방어 기법

  • DEP/NX(Data Execution Prevention): 데이터 영역 실행 금지, 셸코드 직접 실행 차단
  • ASLR(Address Space Layout Randomization): 메모리 주소 무작위화, 예측 불가
  • Stack Canary: 리턴 주소 앞에 감시 값 삽입, 변조 시 프로그램 종료
  • RELRO(Relocation Read-Only): GOT 영역 읽기 전용, GOT Overwrite 방지
  • 안전한 함수 사용: gets→fgets, strcpy→strncpy, sprintf→snprintf

적용사례: Morris Worm(1988, 최초 인터넷 웜), Code Red, Heartbleed(힙), 다수 CVE

비교: 스택오버플로(리턴주소/Canary방어) vs 힙오버플로(메타데이터/복잡) vs ROP(DEP우회/ASLR으로방어)

연관: 시큐어 코딩, 메모리 보호, 취약점, 악성코드