정의
프로그래밍에서 정해진 버퍼(메모리 공간)의 범위를 초과하는 데이터를 집어넣어서, 다른 메모리 영역을 침범하고 프로그램의 흐름을 변경하는 공격
발생 조건
- C, C++ 같은 언어에서 : 문자열 복사 시 strcpy(), gets(), scanf()
- 입력 검증/길이 체크 부족 : 사용자 입력을 제한 없이 복사
- 스택 메모리 사용 시 : 함수 호출 중 지역 변수 덮어쓰기
설명
- 프로그래머가 메모리에 공간(버퍼)을 10바이트 할당했는데 사용자가 20바이트를 입력하게 만들면 그 초과된 10바이트가 인접한 메모리 영역까지 덮어쓰기
- 그 덮어쓴 부분이 만약 프로그램 실행 흐름(예: return 주소, 함수 포인터 등)이면 → 코드가 공격자가 원하는 대로 실행됨!
테스트 방법
- 소스 코드 점검 : 정적 분석 도구 (SAST) → SonarQube, Fortify 등
- 실행 시 공격 :익스플로잇 툴킷 → GDB, pwndbg, Metasploit
- 컴파일러 경고 확인 : -Wall -Wextra 플래그 사용