문제
버퍼 오버플로우(Buffer Overflow) 공격의 원리를 설명하고, 이를 방어하기 위한 기술적 대응 방안을 3가지 이상 서술하시오.
정답
버퍼 오버플로우는 프로그램이 할당된 메모리 경계를 넘어서 데이터를 쓸 때 발생하며, 공격자가 이를 악용해 스택의 반환 주소를 조작하여 임의 코드를 실행하는 공격이다. 대응으로는 1) 스택 카나리(Stack Canary)로 스택 변조 탐지, 2) ASLR(주소 공간 배치 무작위화)로 메모리 주소 예측 차단, 3) NX bit(실행 방지)로 데이터 영역의 코드 실행 금지, 4) 안전한 함수 사용(strcpy 대신 strncpy) 등이 있다.
메모리 경계 침범스택 카나리ASLRNX bit안전한 함수
해설
버퍼 오버플로우는 C/C++의 경계 검사 부재로 인한 대표적 메모리 손상 공격이다. 스택 카나리는 함수 호출 시 스택에 특별한 값을 삽입하여 반환 전 검사하고, ASLR은 메모리 레이아웃을 무작위화하여 공격자의 주소 예측을 방해한다. NX bit는 하드웨어 차원에서 데이터 영역의 실행을 차단한다.