오늘 알아볼 것
- BoF가 무엇인지 알아본다.
BoF?
- Buffer overFlow의 준말로써, 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리 범위를 넘어선 위치에 자료를 읽거나 쓸 떄 발생하며, 오작동 또는 '악의적 코드'를 실행할 수 있게 하는 공격기법.
종류
- Stack BoF
- 스택 구조상, 할당된 버퍼들이 정의된 버퍼 한계치를 넘는 경우, 복귀 주소를 변경하여 공격자가 임의 코드를 수행할 수 있는 종류.
- Heap BoF
- 힙(내가 쓴 메모리 구조편 참조..)구조 상, 최초 정의된 힙의 메모리 사이즈를 초과하는 문자열들이 힙의 버퍼에 할당될 시, 공격자가 데이터 변경 및 함수 주소를 변경시켜서 그 변경시킨 곳에 미리 준비한 악의적인 코드를 수행하게 만드는 종류.
Stack BoF
- stack에 있는 버퍼에 가용할 수 있는 버퍼의 양보다 더 많이 보내어 의도적인 함수 시작코드에 리턴시키는 공격.
Stack BoF를 시도했을때의 스택구조
정상구문 - buf_over "AAAAAAAAAAA"
- 그냥 그대로 AAAAAAAAAAA라는 버퍼가 들어가고, 나머지 SFP랑 RET은 정상 작동한다.
buffer (12bytes) |
AAAAAAAAAAA\0 (=12bytes) |
SFP (4bytes) |
이전 함수의 스택프레임 포인터 |
RET (4bytes) |
이전 함수의 다음 실행 명령 주소 |
공격구문 - buf_over `perl -e 'print "A"x16, "\x44\x85\x04\x08" ' `
perl? - 인터프리터 방식의 프로그래밍 언어. C와 비슷한 구문에 여러 유명한 유닉스 기능을 포함한 만능 엔터테이너.
++ 텍스트를 처리하는 기능이나 문자열의 일치 여부 검색 및 치환 등등을 짧은 코드로 가능하다는 엄청난 언어.
- perl -e : perl언어에서 즉석 계산기로써 사용한다. // 뒤에 print "A"x16가 붙었으니, A를 16개 출력하라는 말과 같다.
- \x44\x85\x04\x08 : 악성코드 주소를 반대로 적어놓은 코드. 저걸 반대로 보면 0x08048544다.
buffer (12bytes) |
AAAAAAAAAAA\0 (=12bytes) |
SFP (4bytes) |
AAAA (4bytes) |
RET (4bytes) |
0x08048544 (악성 코드주소) |
--> 공격은 결국 RET를 변조하는데 목표를 두고 있다.
원리는 버퍼에 12byte(그 아키텍처마다의 지정된 바이트수)보다 큰, 그리고 SFP까지 변조가 가능하게끔 버퍼에 필요이상의 바이트를 가진 값을 보낸 뒤, 그 뒤에 공격자가 설정해둔 악성 코드 시작주소로 리턴하는 원리인 것 같다.
C언어 상에서의 BOF 주요 함수(BoF를 일으키는 함수 모음zip)
- strcpy(char *dst, const char *src)
- strncpy('')
- size_t strlen(const char *str)
- sizeof(피연산자)
Heap BoF
- 힙구조 상, 최초 정의된 힙의 메모리 사이즈를 초과하는 문자열들이 힙의 버퍼에 할당될 시, 공격자가 데이터 변경 및 함수 주소를 변경시켜서 그 변경시킨 곳에 미리 준비한 악의적인 코드를 수행하게 만드는 종류.
아마 .C파일 가지고 무언가를 하는듯한 느낌이다.
(나중에 할 것 - https://youngjun1004.tistory.com/41)
Heap Buffer Overflow
heap ( 힙 ) - 컴퓨터의 기억 장소에서 그 일부분이 프로그램들에 할당되었다가 회수되는 작용이 되풀이 되는 영역이다 - 보통 포인터를 통해 동적으로 할당 받고 돌려준다 - 프로그램 실행시 크기
youngjun1004.tistory.com
결론 및 느낀점
- 일단 BoF의 종류와 어떤 원리로 일어나는지는 그나마 이해를 하는데는 성공했다.
스택 버퍼 오버플로우는 버퍼안에 버퍼가 가질 수 있는 최대한의 바이트보다 SFP까치 포함하는 바이트수만큼 넘어가는 용량을 가진 값을 넣은뒤 그 뒤에 \x85\x23과 같이 악성코드의 함수시작부분으로 넘기는 그런것 말이다.
즉, 함수 에필로그 부분에 이상한 짓을 하는것이라고 이해했다.
그런데 힙 오버플로우가 참 문제다..
힙은 뭐 감염된 헤더파일을 준비해서 C파일로 풀어내서 메모리쪽에 그 헤더파일이 주문하는 메모리에 그 이상의 바이트를 이용해서 스택 버퍼 오버플로우랑 비슷하게? 하는것으로 이해했다...
이게 참 복잡하고, 어려웠다. 지금도 제대로 이해한건가? 하는 느낌이 드는 순간이다. 다시한 번 봐야할 것들이 너무 많다..
출처 및 참고 -
https://isc9511.tistory.com/119
버퍼 오버 플로우 (BOF - Buffer OverFlow) 공격
* BOF 공격 : 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리 범위를 넘어선 위치에 자료를 읽거나 쓸 때 발생하며, 오작동 또는 악의적 코드를 실행할 수 있게 됨 BOF 종류 설명 Stack B
isc9511.tistory.com
https://m.blog.naver.com/on21life/221477113441
IT보안 - 스택 버퍼 오버 플로우 공격,Stack Buffer Overflow Attack 이란 무엇인가 (커뮤니티가 아닌 기술
복귀주소에 악성코드 심기 Stack Buffer Overflow Attack 스택 버퍼 오버 플로우 공격(Stack Buffer ...
blog.naver.com
Heap Buffer Overflow(BOF)
Heap 이란? 동적 메모리 할당 (malloc 영역) 데이터 사이즈 알 수 없을 때 사용 Heap 영역은 실행시 할당 (stack 영역은 컴파일시 할당) 프로그래머에 의해 해지됨(free) Heap 영역은 낮은 주소에서 높은 주
qzqz.tistory.com
'System & Reversing' 카테고리의 다른 글
x86 / x64 레지스터에 대한 고찰. (0) | 2023.03.20 |
---|---|
GNU(GCC 컴파일러)와 그 과정 안에서 나오는 파일들에 대한 고찰. (1) | 2023.03.13 |
dll파일에 대한 간단한? 고찰. (0) | 2023.03.13 |
어셈블리 핸드레이에 관한 고찰. (0) | 2023.03.13 |
함수 프롤로그, 에필로그에 대한 간단한 고찰. (0) | 2023.03.13 |