IT 그리고 정보보안/Knowledge base

버퍼 오버플로우 (Buffer Overflow) 개요

plummmm 2021. 4. 15. 21:22
반응형

진입장벽도 상당히 높은 편이고, 웬만큼 엉성하게 배우면 모르느니 못한 버퍼 오버플로우 취약점이다.

나도 솔직히 말하면 시스템 해킹 처음 배울 때, 버퍼 오버플로우가 무서워서 다른 분야부터 공부했다.

다른 부분을 하다보니.. 버퍼 오버플로우와 어우러진 기본 개념들이 전반적으로 약하다보니,

이곳 저곳에서 지식 습득에 제동이 걸리더라.

 

결론은 필수불가결한 그런 내용.. OS의 보호기법 발달에 따라 종류도 엄청나게 많다.

 

일단 버퍼 오버플로우라고 하면 " Buffer + Overflow " 두 가지 단어로 나누어 볼 수 있다.

먼저 buffer, 버퍼란 무엇일까

우리가 음식점에서 음식을 사먹으러 갔는데 사람이 너무 많다.. 근데 나는 이 음식점에서만 음식을 먹어야 한다.

그럼 우린 어떻하나? 그래 줄을 설 것이다. 줄을 서서 먼저 들어가 있는 사람들이 나올 때 까지 기다릴 것이다.

 

우리가 음식점에서 음식을 먹는 것을 "요청한 작업을 처리 한다" 라고 하고,

음식점안에서 음식을 먹고 있는 상태를 "작업을 처리 중이다" 라고 생각하자.

그럼 줄을 서는 행위는?

이미 작업을 진행 중인 상태이므로 작업이 끝날 때 까지 기다리는 것이다.

이 상태를 "buffer(버퍼)에 저장 되어 요청 작업이 수행될 때 까지 기다린다." 라고 적용하면 쉽다.

 

위 설명한 대로, 버퍼는 " 요청한 데이터가 앞서 진행중인 작업에 밀려 처리될 때까지 임시로 저장하는 장소 "

정도로 정의할 수 있겠다. C언어에서 적용시켜 보면

-------------------------------------------------

void main(){

char buf[10];

printf("type your name");

gets(buf);

printf("your name is %s\n",buf);

}

-------------------------------------------------

요런 간단한 소스코드가 있다고 가정하자.

gets로 문자열을 받아서 어디에 저장하는가? 그렇지. buf 라는 변수에 저장한다.

printf함수를 이용하여 입력받은 것을 출력하기 전에 임시로 buf에 저장하는 것이다.

그럼 여기서 buf는 뭐다? buffer(버퍼) 라고 할 수 있다.

 

버퍼를 알았으니, 이제 뒤에 붙은 overflow

사전적인 의미로는 뭐 "흘러넘치다" 이런 뜻이다.

버퍼가 흘러넘치다?? 

 

버퍼가 데이터를 임시로 저장하는 공간이라고 했으니.. 버퍼가 수용할 수 없을 만큼의 많은 양의 데이터를 

저장하려고 해서 제한된 버퍼의 용량을 넘쳐버려 할당된 영역 너머로 침범하는 그런 것을 말한다.

 

스택에는 각자 할당된 영역들이 있는데.. 오버플로우가 일어나면 자신의 영역에 차고 넘쳐서 다른 영역에 침범하게 된다.

그렇게 되면 당연히 프로그램에 문제(Segment fault 라는 오류)가 생기겠지.

버퍼오버플로우는 이 문제를 이용해서 메모리를 조작하는 취약점이다.

 

이 조작 가능한 메모리가 힙영역에 있냐, 스택영역에 있냐에 따라

Stack overflow, heap overflow 로 나뉜다.

반응형

'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글

Shellcode 작성  (0) 2021.04.15
기계어코드 작성  (0) 2021.04.15
Metasploit - Meterpreter  (0) 2021.04.15
Metasploit - Auxiliary 모듈 활용  (0) 2021.04.15
취약점 스캐너 - 네서스(Nessus)  (0) 2021.04.15