토픽 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으로방어)
연관: 시큐어 코딩, 메모리 보호, 취약점, 악성코드