본문 바로가기
IT/해킹보안

버퍼 오버플로우(Buff overflow)

by 모르면 모른다고 해 2013. 4. 11.
반응형

대부분의 프로그램 공격은 메모리 오류를 이용해 일어난다.
메모리 오류 공격에는 버퍼 오버플로우 처럼 잘 알려진 기법과 포맷 스트링(형식 문자열)공격 처럼 조금은 덜 알려진 공격 기법이 있다.

이 두 기법 모두 최종 목표는 대상 프로그램의 실행 흐름을 제어해 악성 코드를 실행하는 것이다. 이런 포로세스 강탈 타입의 공격을 임의 코드 실행 이라고도 부른다.

버퍼 오버플로우

1. 버퍼 오버플로우??
말 그대로 버퍼를 넘치게(overflow)하는 것을 의미하며, 자세하게 설명하면 메모리에 할당된 버퍼의 양을 초과하는 데이터를 입력하여, 프로그램의 복귀 주소(return address)를 조작하여 해커가 원하는 코드를 실행하는 것이다.
여기에서 버퍼(buffer)는 프로그램이 처리되는 과정에 필요한 데이터가 일시적으로 저장되는 공간으로 메모리의 스택(stack) 영역과 힙(heap)영역이 있다. 즉, 스택 버퍼 오버플로으, 힙 버퍼 오버플로우 두 가지로 분류할 수 있다.

버퍼 오버플로우 취약점은 컴퓨터 초기부터 지금까지 계속 발생 하고 있다. 대부분의 인터넷 웜은 전파를 위해 버퍼 오버플로우 취약점을 이용한다. 인터넷 익스플로러의 가장 최근 제로데이(zero-day) 취약점도 버퍼 오버플로우였다.

C는 하이레벨 프로그래밍 언어지만 자체적으로 데이터 무결성을 검사하는 기능은 없고, 프로그래머가 직접 데이터 무결성을 검사해야 한다. C는 프로그래머가 프로그램을 원하는 대로 제어하고 효율적으로 만들 수 있다는 장점이 있지만, 프로그래머가 신경 쓰지 않을 경우 버퍼 오버플로우와 메모리 누수 현상이 일어날 수 있다는 단점도 있다.

이 글을 읽기 전에 필수적으로 선행 학습해야 할 것이 있는데, 그것은 바로 C 언어다. 버퍼 오버플로우는 프로그래밍 실수로 인해 발생하기 때문에, 프로그래밍에 대한 기본 지식 없이는 제대로 이해할 수 가 없다. 그렇기 때문에 아직 C언어를 모르는 상태라면, C언어 공부를 먼저 하고 이 글을 읽기 바란다. (혹 마땅한 C언어 서적을 선택하지 못하였다면, 시중에 나온 책중에 윤성우님의 "열혈강의 C언어" 서적을 추천한다)

2. 예제
이 글을 overflow_example.c
 

출처
1. 해킹 공격의 예술. 존 에릭슨 | 에이콘 출판사
2. BUFFER OVERFLOW 왕기초편.  해커스쿨| 해커스쿨북

반응형

댓글