Buffer Overflow는 가상 메모리 상에서 이루어지는 변수 / 함수 흐름, 그리고 메모리 상에서의 경계를 이해해야만 알 수 있는 내용이다. 위 그림과 같이 Program은 가상 메모리의 하위에 위치하게 되고, Stack은 그 위에서 Program의 함수 이용에 따라 Down 되면서 변수를 쌓았다가 뺐다가 하는 일련의 작업을 하게 된다.

 

함수를 호출하게되면, 변수가 먼저 stack에 쌓이게 되고 (PUSH EAX), main에서 Call Func()를 하게 되고, Stack Base Pointer를 잡기 위해 EBP를 PUSH 후 (PUSH EBP), MOV EBP, ESP 를 진행, 함수 최초 시작 시에 Stack Pointer는 그 함수의 Base Pointer가 될 것이기 때문. 후에 다시 main으로 돌아갈 Ret 주소를 쌓고, (PUSH Ret), 지역 변수를 쌓게된다. (PUSH func.Buffer[128])

 

이때, Buffer에 128 이상의 값이 들어가게되면, (c) 그림과 같이 Return Addr과 EBP 영역까지 침범하게 된다. 이 때, Return Addr이 침범된 데이터에 의해 값이 변형 되고, 이에 따라 함수가 끝나고, 복귀 시점이 다가올 때, 엉뚱한 곳으로 Return 하게 된다. 이 때, Crash가 발생하며 엉뚱한 Return 주소에 공격자가 원하는 Shell Code가 있을 경우, 추가적인 악성 행위를 진행하게 된다.

 

기본적인 내용이지만, 위 내용과 같은 기본적인 기술로 ZeroDay Attack도 가능한 것이다.

 

 

open(DATA, "filename");   # 현재 파일로부터 읽기
open(DATA, "<filename");  # 위와 같음 (읽기를 명확히 표시)
open(DATA, ">filename");  # 파일을 만들고쓰기
open(DATA, ">>filename"); # 현재 파일 뒤에 덧붙여 쓰기
open(DATA, "| output-pipe-command"); # 출력 필터 만들기
open(DATA "input-pipe-command |");

 

1. History와 Cache 데이터를 참고하여 [웹 트래픽]에서 특징적으로 나타나는 URL 정보가 존재하는지 검사할 수가 있다. 또한 [스크립트 구조]에서 특징적으로 나타나는 악성 스크립트 패턴들을 임시 저장된 Cache 파일에서 키워드 검색을 통해 추적해볼 수 있다.


2. 각 브라우저가 제공해주는 Cache, Cookie, History에는 index.dat 파일이 존재. index.dat 파일은 인터넷 웹 브라우저가 사용하는 데이터베이스 파일이다.

+ Recent posts