1. 버퍼 오버플로우**(Buffer Overflow, BOF)**

1) Buffer

버퍼는 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소이다. 데이터 처리 속도가 다른 두 장치를 예시로 버퍼를 이해해보자.

한 번에 10글자 처리가 가능한 키보드와 한 번에 2글자만 처리가 가능한 컴퓨터가 있다고 가정하자. 버퍼가 없으면 컴퓨터는 0, 1만 처리하고 2부터 9까지 처리할 수 없어 데이터의 유실이 발생한다.

image.png

이처럼 중간에 처리되지 못하는 데이터들을 ‘버퍼’라는 저장소에 저장하면 문제를 해결할 수 있다.

image.png

송신측에서 2글자밖에 처리하지 못해도 나머지 8글자가 버퍼에 저장되어 있기 때문에 데이터는 유실되지 않는다.

<aside> 🗒️ 버퍼링이란?

버퍼링은 미디어 파일의 일부를 디바이스의 버퍼나 임시 메모리에 미리 로딩해 저장하는 방법이다. 이 프로세스를 통해 비디오, 오디오, 게임 또는 기타 미디어 파일을 끊김 없이 부드럽게 재생할 수 있다. 비디오 프레임, 오디오 샘플 또는 게임 콘텐츠를 메모리에 항상 미리 제공하면 스트리밍 전송 속도가 일시적으로 지연되는 경우에도 재생이 중단되는 상황을 방지할 수 있다.

</aside>

2) Buffer Overflow

BOF는 할당된 버퍼의 크기보다 더 많은 크기의 데이터가 할당되어 버퍼 외의 영역까지 데이터가 침범하는 증상을 말한다.

아래 그림에서 버퍼 A는 8칸을 차지하고 있다. 만약에 버퍼 A를 초과하여 15칸을 입력하면 데이터 영역 B까지 데이터가 채워지게 된다. 이런 경우 중요한 정보가 있었다면 그 정보가 덮힐 가능성이 있다. 이를 악용한다면 B에 있는 데이터를 변조할 수도 있다.

image.png

2. 스택 버퍼 오버플로우(Stack Buffer Overflow)

1) Stack