strcpy 같은 호출이 입력 길이를 확인하지 않고 buffer[64]에 기록합니다.
공격 경로
검증 없는 복사
제어 정보 변조
경계를 넘은 바이트가 saved RBP/EBP와 return address를 차례로 덮습니다.
반환 시 분기
함수가 반환될 때 조작된 주소로 이동해 shellcode 또는 ROP/code-reuse 공격을 시도합니다.
스택 프레임에서 벌어지는 일
높은 주소
스택은 보통 아래 방향으로 성장
return address
공격자가 덮어쓰려는 제어 지점
함수 반환 후 CPU가 점프할 주소
saved RBP/EBP
이전 프레임 기준점
스택 복구와 디버깅에 쓰이는 저장 값
stack canary
변조 감지용 난수 값
반환 직전 바뀌었는지 검사
buffer[64]
지역 버퍼
입력이 경계를 넘으면 위쪽 인접 영역으로 번짐
경계 초과 쓰기 overflow
지역 버퍼에서 리턴 주소 방향으로 확산
주황 지역 버퍼
파랑 변조 감지
빨강 제어 흐름 위험
다계층 방어
snprintf, fgets처럼 목적지 크기를 넘지 않는 API를 사용합니다.
리턴 주소 앞 값이 바뀌면 반환 전에 실패 처리해 변조를 탐지합니다.
스택과 힙 같은 데이터 영역을 실행 불가로 표시해 shellcode 실행을 막습니다.
스택, 힙, 라이브러리, 실행 파일 주소 예측을 어렵게 만들어 ROP 성공률을 낮춥니다.