본문 바로가기


60. 버퍼 오버플로우란 무엇인가요?
60. 버퍼 오버플로우란 무엇인가요?
원광대학교 정보전산원2014-09-16

60. 버퍼 오버플로우란 무엇인가요?

버퍼 오버플로우(Buffer Overflow)는 유명한 해커 잡지인 PHRACK의 49권 14호에 발표된 Alephone의 기고문에 의해 알려졌습니다. 버퍼 오버 플로우란 말 그대로 “버퍼(buffer)가 넘친다(overflow)”는 뜻으로, 데이터가 할당된 영역을 벗어나 다른 영역을 침범하면서 문제를 발생시키게 되고, 이때 해커는 시스템 권한을 획득할 기회를 얻게 되는 것입니다.

예를 들어, x86 리눅스 시스템의 경우 프로그램이 실행될 때, 가상 메모리는 크게 사용자 영역과 커널 영역으로 구분되며, 사용자 영역은 다시 텍스트(text), 데이터(data), 그리고 스택(stack) 영역으로 구분됩니다. 여기서 힙(heap) 영역은 아래에서 위 방향으로 증가하는 반면, 스택 영역은 그 반대 방향으로 증가하게 됩니다.

프로그램이 실행될 때 간혹 사용자 버퍼가 스택의 영역을 침범하여 sfp(saved frame pointer)나 복귀 주소(Return Address) 부분을 덮어쓰게 되면, 프로그램의 흐름에 영향을 미치게 됩니다. 이때, 공격자는 자신이 원하는 코드를 실행시킬 기회를 갖게 되는 것입니다.

버퍼 오버플로우를 일으키는 데에는, C언어 함수 중에서도 strcpy나 gets와 같이 메모리 버퍼의 경계를 검사하지 않는 함수들을 사용한 프로그램들이 대상이 됩니다.