Notice
Recent Posts
관리 메뉴

Hacking Arts

BOF 개론 본문

System/BOF

BOF 개론

Rakehell 2014. 8. 27. 01:31

Buffer Over Flow


1.알기전 알아 두어야 할 사항

- stack frame구조에 대한 상식이 필요하다.

- 프로세스가 메모리에 올라 갔을 때 어떤 방식으로 동작하는 지에 대한 이해가 필요하다.

- 기본적인 어셈블리어와 레지스터에 대한 상식이 필요하다.

- 즉, 전반적인 시스템 상식을 요구한다.


2.이론

- BOF란 말 그대로 하면 Buffer라는 곳을 흘러 넘치게 하는 것이다.

- 아래 그림을 이용해서 설명하도록 하겠다. 기본적으로 프로세스가 실행되면 push %ebp, mov %esp,%ebp 이런식으로 실행하게 된다. 이것을 stack frame이라고 부르는데 프로그램 내부에 함수가 호출 되었을 때 기존의 함수로 다시 돌아오기 위해 사용되는 것이다.

<그림 1>

- 그리고 저 구조가 끝나면 leave가 실행되고 ret라는 것이 실행된다. ret가 BOF의 핵심이다. ret는 다시말하면 pop eip로 말할 수 있다. pop eip를 하게 되면 eip레지스터 안에 ret가 스택에서 가지고 있던 주소값을 넘겨주고 eip는 그에 해당하는 주소로 이동하여 명령어를 읽게 된다. 이를 악이용하는 것이다.

- 그림 1은 위의 내용을 설명해주는 것이다.

- 그렇다면 어떻게 ret를 덮을 것인가 라는 것이다. C언어 함수중에 안타깝게도 지정된 buffer의 크기를 넘어서 계속 쓰게 되는 함수가 존재한다. 그림 2는 그 목록이다.

<그림 2>


3.결론

- 공격방법을 요약하면 ret까지 스택을 덮어 쓸 수 있는 함수를 이용하여 ret의 값을 계산하여 ret를 덮는다. 그 뒤 함수가 실행되면 변조된 ret 값으로 점프를 하여 거기에 있는 실행코드를 읽게 된다. 이때 실행되어야 할 코드에 쉘코드가 삽입 되어있는 경우가 많다.

-이것은 모든 BOF공격의 기본적인 방법이다. 대부분의 발전된 공격들은 여기서 발전된 형태이다.

-추가적으로 말하면 RET를 덮어버린다는 점에 중점을 두자 RET를 공격해서 EIP레지스터를 이용할수 있게되면 해커는 실제로 자기가 원하는 주소로 점프를 할 수 있기 때문이다.



<출처>

그림 2 - http://proneer.tistory.com/entry/BOF-%EB%B2%84%ED%8D%BC%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C%EC%9A%B0-%EA%B3%B5%EA%B2%A9%EC%97%90-%EB%8C%80%ED%95%9C-%EB%8C%80%EC%9D%91%EC%B1%85

'System > BOF' 카테고리의 다른 글

[intel][x64] RTL(Return To libc)  (0) 2015.10.31
[intel][x64] Stack 기반 BOF  (0) 2015.10.22
[intel][x86] ROP  (2) 2015.09.29
[MIPS][x86] BOF 기본 공격 방식  (0) 2015.08.17
[MIPS][x86] BOF 분석  (0) 2015.08.17