[dreamhack] System-stage5: Stack Buffer Overflow

mj·2023년 4월 1일
0
post-thumbnail

1. 서론

스택 버퍼 오버플로우(Stack Buffer Overflow) 는 보안을 공부하지 않은 개발자들도 알만큼 유명하고 역사가 오래된 취약점이다.

2. 스택 버퍼 오버플로우

버퍼 오버플로우

스택 버퍼 오버플로우는 스택버퍼 에서 발생하는 오버플로우 를 뜻한다.

버퍼

버퍼 는 일상에서 '완충 장치' 라는 뜻으로 사용되며, 컴퓨터 과학에서는 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소 의미로 쓰인다.

데이터의 처리속도가 다른 두 장치가 있을 때, 이 둘 사이에 오가는 데이터를 임시로 저장해 두는 것은 일종의 완충 작용을 한다.

현대에는 데이터가 저장될 수 있는 모든 단위를 버퍼라고 부른다.
스택에 있는 지역 변수는 스택 버퍼, 힙에 할당된 메모리 영역은 힙 버퍼 라고 부른다.

버퍼링
버퍼링은 송신 측의 전송 속도가 느려서 수신 측의 버퍼가 채워질 때까지 대기하는 것을 의미한다.

버퍼 오버플로우

버퍼 오버플로우는 문자 그대로 버퍼가 넘치는 것을 의미한다.

만약 10바이트 크기의 char 배열에 20 바이트 크기의 데이터가 들어가면 오퍼블로우가 발생한다.

일반적으로 버퍼는 메모리상에 연속해서 할당되어 있으므로, 특정 버퍼에서 오버플로우가 발생하면, 뒤에 있는 버퍼들의 값이 조작될 위험이 있다.

위험 요소

버퍼 오버플로우로 인한 위험 요소는 다음이 있다.

1. 중요 데이터 변조

버퍼 오퍼블로우가 발생하는 버퍼 뒤에 중요한 데이터가 있다면, 해당 데이터가 변조됨으로써 문제가 발생할 수 있다.

2. 데이터 유출

C 언어에서 정상적인 문자열은 널바이트(0x00) 로 종결되며, 표준 문자열 출력 함수들은 널바이트를 문자열의 끝으로 인식한다.

만약 어떤 버퍼에 오퍼플로우를 발생시켜서 다른 버퍼와의 사이테 있는 널바이트를 모두 제거하면, 해당 버퍼를 출력시켜서 다른 버퍼의 데이터를 읽을 수 있다.-98

3. 실행 흐름 조작

호출 규약의 내용을 되짚어보면 함수를 호출할 때 반환 주소를 스택에 쌓고, 함수에서 반환될 때 이를 꺼내어 원래의 실행 흐름으로 돌아간다고 했다.

만약 스택 버퍼 오버플로우가 발생한다면 반환 주소 가 다른 값으로 덮어씌워져서 실행 흐름이 변경될 수 있다.

profile
사는게 쉽지가 않네요

0개의 댓글