[Security] 버퍼 오버플로우, Buffer Overflow

버퍼 오버플로(buffer overflow) 또는 버퍼 오버런(buffer overrun)은 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점이다. 컴퓨터 보안과 프로그래밍에서 이는 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것이다. 벗어난 데이터는 인접 메모리를 덮어 쓰게 되는데 다른 데이터가 포함되어 있을 수도 있는데, 손상을 받을 수 있는 데이터는 프로그램 변수와 프로그램 흐름 제어 데이터도 포함된다. 이로 인해 잘못된 프로그램 거동이 나타날 수 있으며, 메모리 접근 오류, 잘못된 결과, 프로그램 종료, 또는 시스템 보안 누설이 발생할 수 있다.

버퍼 오버플로는 보통 데이터를 저장하는 과정에서 그 데이터를 저장할 메모리 위치가 유효한지를 검사하지 않아 발생한다. 이러한 경우 데이터가 담긴 위치 근처에 있는 값이 손상되고 그 손상이 프로그램 실행에 영향을 미칠 수도 있다. 특히, 악의적인 공격으로 인해 프로그램에 취약점이 발생할 수도 있다.

– 출처 : 위키백과 

말 그대로 메모리 범위를 초과해 다른 메모리에 초과된 데이터가 덮어씌워진단 소리다.

만약 ID와 PW를 입력받아 로그인 하되, ID와 PW가 올바르다면, a라는 변수가 1이 되고, 올바르지 않다면 0이 되서, a가 1일경우에만 로그인이 되는 프로그램이 있다 가정하자.

또한 메모리 구조는

이렇다고 가정을 하자.

사용자가 이렇게 값을 넣어준다면, 오류없이 작동 될 것이다. 또한 올바른 정보라면 a가 1이 될것이고 아니라면 0이 될 것이다.

하지만 만약 ID를 idtechnol0gic4321로 넣었다면 어떻게 될 까?

입력받은 문자열의 길이를 검사를 안하고 그대로 메모리에 입력시킨다면,

이렇게 ID를 초과하고 PW 메모리 마저 초과해서 a 메모리 까지 데이터가 침범했다.

어? 그런데 a값이 1이 되버렸다. 결국 프로그램은 올바른 아이디라 생각하고, 로그인을 시킬 것이다. 

크킄.. 야레야레 위험하지 않은가.. 애송이


이를 방지하기 위해선 경계검사를 해줘야한다.

You may also like...