본문 바로가기
IT/정보보안

버퍼 오버플로우의 개념, 역사, 예방

by 미니송 2018. 5. 5.


오늘은 버퍼 오버플로우 공격에 대한 설명을 해보도록 하겠습니다. 버퍼 오버플로우는 아주 오래된 역사를 가지고 있으며 아직까지도 활용할 정도로 강력한 취약점이라고 볼 수 있습니다.


버퍼 오버플로우 공격의 역사

해킹의 대표적인 공격 방법인 버퍼 오버플로우는 1973년 C언어의 무결성 문제로 그 개념이 알려졌습니다. 처음에는 단순한 프로그램상의 문제로 인식되었으나, 1988년 모리스 웜(Morris Worm)이 fingerd 버퍼 오버플루우를 이용했다는 것이 알려지면서 문제의 심각성이 인식되기 시작했습니다.

그리고 1997년에는 유명한 온라인 보안잡지인 프랙에 알렙 원 이라는 문서를 게재하면서 더욱 널리 알려졌습니다. 다양한 버퍼 오버플로우 공격을 유행시기는 계기가 되었고, 현재까지도 해커 지망생의 필독 문서로 전해지고 있습니다.


버퍼 오버플로우 공격이란?

버퍼 오버플로우는 버퍼오버런이라고 불리기도 합니다. 이는 메모리를 다루는데 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점입니다. 프로세스가 데이터를 버퍼에 저자할 때 프로그래머가 지정한 곳 바깥에 저장하는 것입니다. 벗어난 데이터는 인접메모리를 덮어쓰는데 다른 데이터가 포함되어 있을 수 있습니다. 따라서 프로그램 상의 잘못된 동작이 일어날 수 있으며 보안의 취약점이라고 말할 수 있습니다.

좀 더 쉽게 말한다면 프로그램이 실행될 때 입력값이 버퍼를 가득 채우고 넘쳐 그 이상의 버퍼를 침범하기 때문에 발생된다고 할 수 있습니다.


버퍼 오버플로우 예방

이는 프로그래밍 시 설계상의 문제점을 의미합니다. 버퍼 오버플로우와 관련되어 있는 프로그래밍 언어는 C언어와 C++입니다. 이것은 C와 C++에는 메모리상 어떤 부분에서도 데이터 접근과 덮어쓰기에 대한 내장보호 기능이 없기 떄문입니다. 이에 비해 C#과 JAVA는 데이터 타입과 오버플로우 검사가 더욱 엄격하기 때문에 보안성을 획득할 수 있다고 볼 수 있습니다.

버퍼 오버플로우를 예방하기 위해서는 gets, scanf, strcpy등과 같은 함수를 사용하지 말라고 권고하고 있습니다. 이러한 함수들은 경계검사를 하지 않으며 포인트형을 노출시킬 수 있기 때문에 버퍼 오버플로우에 취약합니다. 특히나 Input을 받는 함수들은 더욱 취약하다고 할 수 있습니다.


2017/09/01 - [IT/정보보안] - 보안 취약점과 CVE 코드


댓글