티스토리 뷰

힙 구현 방법은 malloc 호출 때 할당 free 때 해제한다는 공통점이 있다. 


메모리가 효과적으로 할당되고 해제되려면 메모리영역의 상태가 저장되어야한다. 특히 대부분 메모리 블록 정보와 블록의 트성을 설명하는 헤더가 붙은 메모리 블록을 사용자에게 리턴한다. 


블록 헤더에는 다음과 같은 정보가 있다. 


현재 블록 크기

이전 블록 크기

블록 사용 여부

몇 가지 추가적인 플래그 


malloc으로 사용중일 때는 glibc 사용된 조각 이것이 되고 free되었을 때 즉 사용이 안되고 있는 경우 glibc 가용조각 이게 됩니다. 



힙 오버 플로우 공격


스택 버퍼 오버플로우의 경우 리턴 어드레스라는 코드를 담고 있는 맛있는 포인터가 있지만 힙에는 그런 것이 없습니다. 그래서 공격자는 데이터 포인터나 함수의 포인터를 덮어씌워야합니다. 만약 버퍼 오버플로우가 발생했을 때 리스트 포인터나 헤더 값을 임의로 수정할 수 있다면 공격자는 힙 블록 관리를 무력화할 수 있다. 


힙 관리 특성 


1. 미사용인 블록은 전후 포인터 값을 가지고 있다. 

2. 블록 사용이 해제될 때 이웃 블록 또한 미사용 중이라면 종종 하나의 블록으로 합쳐진다. 합쳐진다느 것은 언링크를 뜻한다. 

3 두 개의 블록이 하나로 합쳐졌기 때문에 힙 알고리즘은 원래 있던 미사용 블록에서 next 포인터를 제거하고 크기를 변경한다. 

4. 오버플로우 버퍼가 오염되면 언링크 되면서 공격자가 원하는 곳으로 메모리를 조작할 수 있다. 


예를 들어서 그림 5-11에서는 링크가 연결된 상태에 있는데 이 부분의 next가 오염된 상태라고 치자 그러면 unlink 되면서 이부분의 주소가 앞부분의 힙의 next에 저장될 것이다. 이런식으로 공격자가 원하는 주소를 넣을 수 있다. 


공격자가 제어할 수 있는 메모리 주소로 값을 덮어 쓰는 것은 필수적인 작업이고 다음 것들은 자주 쓰이는 목표 값이다 .


1. GOT/PLT


2. Exit handlers (dtor)

종료 처리기는 프로세스가 운영체제를 빶나갈 때 호출되는 함수 포인터 테이블이다. 이 함수의 포인터 값을 덮어씀으로써 exit() 를 호출하거나 main() 함수로부터 리턴할 때 임의의 실행을 가능하게 한다. 


3. 윈도우는 스레드가 경합할 때 프로세스 정보가 비동기적으로 수정되는 것을  막기위해서 프로세스 환경 블록에 함수 포인터 집합을 사용하는 데 이것을 수정한다. 


4. 예외처리 루틴

윈도우의 PEB는 예외처리 루틴을 위한 주소를 관리한다. 


5. 함수포인터




  chunk1                            chunk2                               

size                                 size of chunk1                       

size chunk1                        size of chunk2

injected code                     fwd: pointer to target 

bck 


 1 2 3 인 경우 수정되는 것 

chunk 1의 fp 가 지워지는 녀석의 fp로 바뀐다.

chunk 2의 bk 가 지워지는 녀석의 bk로 바뀐다. 


리턴 어드레스를 가리키던 포인터의 내용이 쉘코드를 가리키게 되었다. 


누가 제거되는가

1. 먼저 chunk1이 free가되었다. 근데 두 개가 연달아 free인 경우 두 개를 합친다. 따라서 chunk2를 언링크한다. 


'시스템 보안 > 취약점' 카테고리의 다른 글

힙 보호기술과 우회  (0) 2016.09.27
스택 쿠키(canary value)와 우회  (0) 2016.09.27
off by one 에러  (0) 2016.09.26
SEH overwrite 공격  (0) 2016.09.26
버퍼 오버 플로우란?  (0) 2016.09.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함