buffer overflow ; 버퍼 넘침

버퍼 넘침은 프로그램이나 프로세스가 원래 설계된 것보다 더 많은 량의 데이터를 버퍼에 넣으려는 시도를 했을 때 발생한다. 버퍼는 유한한 량의 데이터를 저장하도록 설계되어 있기 때문에 그보다 더 많은 량의 정보가 들어오게 되면, 여분의 데이터는 인접한 다른 버퍼로 흘러 들어가거나, 버퍼 내에 저장되어 있던 다른 유효한 데이터를 망가뜨리거나 또는 그 위에 겹쳐 써지는 등의 부작용이 일어날 수 있다. 이러한 일들은 대개 프로그램 에러에 의해 발생하는 것이 보통이지만, 버퍼 넘침이 점차 데이터 무결성에 대한 보안공격의 대표적인 한 형태가 되어가고 있다. 버퍼 넘침 공격에서는 여분의 데이터에 특정한 행위를 유발시키도록 설계된 코드를 포함시켜, 공격 대상 컴퓨터에 새로운 명령어를 보냄으로써, 사용자 파일에 손상을 입히거나, 데이터를 변경하거나 비밀 정보를 노출 시키는 등의 일을 벌이는 것이 가능하게 된다. 버퍼 넘침 공격은 C 프로그래밍 언어가 기반을 제공하고, 거기에 저급의 프로그래밍 기술이 취약점을 제공하기 때문에 발생한다고 알려져 있다.

2000년 7월에, 마이크로소프트 아웃룩과 아웃룩 익스프레스에서 버퍼 넘침 공격이 가능한 취약점이 발견되었다. 하나의 프로그래밍 결점으로 인해, 공격자가 단지 전자우편 메시지를 보내는 것만으로도 대상 컴퓨터의 무결성이 크게 위협받게 되었다. 이는 전자우편 바이러스와는 달리, 사용자들이 첨부된 파일을 열지 않는 조심성만으로는 자신들을 보호할 수 없었는데, 그 이유는 메시지를 열지 않아도 공격이 개시되었기 때문이다. 프로그램의 메시지 헤더 구조에 있던 결함 때문에, 전자우편 발송자가 그 기억영역에 관계없는 데이터를 넘치게 만들 수 있게 됨으로써, 송신자가 수신자 컴퓨터상의 떠한 형태의 코드라도 실행시킬 수 있게 되었다. 이 프로세스는 수신자가 전자우편 메시지를 서버로부터 다운로드하자마자 동작하기 때문에, 이러한 형태의 버퍼 넘침 공격은 방어하기가 매우 어려웠다. 결국 마이크로소프트는 그 후 이 취약점을 제거하기 위하여 패치 파일을 작성하여 공급하였다.


작성 : 02-08-15 수정 : 03-11-20
영어판(whatis.com)