본문 바로가기

Hacking & Security/System

Buffer Overflow Basic 3

Buffer Overflow의 이해


버퍼란 , 시스템이 연산을 하는데 있어 필요한 데이터를 일시적으로 저장하는 저장공간을 말한다.
문자열을 처리하게 되면 문자열 버퍼가 되고 , 수열이라면 수열 버퍼가 되겠다.

대부분의 프로그램에서는 이러한 버퍼를 스택에다 생성한다.    스택은 함수 내에서 선언한 지역 변수가 저장되고 함수가 끝나고나면 반환한다.


BOF는 미리준비된 버퍼의 크기보다 큰 데이터를 쓸 때 발생하게 된다.

만약 40byte 크기의 버퍼가 준비되어있는데 41~44byte를 사용하면 이전 함수의 bp를 수정하게 될 것이다. 더 나아가 45~48byte를 쓴다면 return address가 저장되어 있는 공간을 침범하게 될 것이다.

따라서 BOF공격은 공격자가 메모리상의 임의의 위치에다 원하는 코드를 저장시켜 놓고 return address가 저장되어 있는 지점에 그 코드의 주소를 집어 넣음으로 해서 EIP에 공격자의 코드가있는 주소로 들어가게 해 공격하는 기법이다.

Byte Order

데이터가 저장되는 순서가 바뀐 이유는 바이트 정렬 방식이다.

현재는 두가지 바이트 순서를 가지는데 Big Endian 방식과 Little Endian 방식이 있다.

빅 엔디언 방식은 높은 메모리 주소에서 낮은 메모리 주소로 되어있다.    리틀 엔디언은 그 반대다.

예를들어 , 74E3FF59라는 헥스값을 저장한다면 , 빅 엔디언에서는 낮은 메모리 영역부터 값을 채워 나가서 74E3FF59가 순서대로 저장된다.

반면 , 리틀 엔디언에서는 59FFE374의 순서로 저장된다.
이렇게 저장 순서를 뒤집어 놓는 이유는 수를 더하거나 빼는 셈을 할 때 낮은 메모리 주소 영역의 변화는 수의 크기 변화에서 더 적기 때문이다.

그러므로 , 리틀 엔디언 시스템에 return address 값을 넣을때는 바이트 순서를 뒤집어줘야 한다.

'Hacking & Security > System' 카테고리의 다른 글

PLT & GOT  (0) 2018.10.31
Linux 환경에서의 메모리 보호기법  (0) 2018.08.21
환경변수란 ?  (0) 2018.01.30
Buffer Overflow Basic 2  (0) 2018.01.16
Buffer Overflow Basic 1  (0) 2018.01.16