Windows Heap Internals

2014. 12. 17. 17:22


힙 메모리에 대해 정리...끝나면 깔끔하게 문서로 작성해서 공유 할 예정입니다.





===========================================================================



메모리 커럽션 류의 취약점은 스택 기반 취약점과 힙 기반 취약점이 존재한다. 스택기반 취약점은 정리가 잘 되어있는 반면 힙 기반

Exploitation 기술과 배경 지식들은 자료가 부족한 편이다. 이에 나 또한 힙 메모리에 대한 기존 지식 정리와 함께 이 기회에 조금 더 자세

히 공부해 보려고 한다.



ㅁ 윈도우 힙 메모리 관리 메커니즘

- 힙 메모리 관리 메커니즘은 버전이 올라가며 조금씩 바뀌어 왔으며 Vista 를 기준으로 관리 메커니즘이 아래와 같이 변경되었다.

                               Front-end Heap Management                   Back-end Heap Management
Windows XP                      LookAside List

Windows 7                  Low Fragmentation Heap                            ListHint,  Freelist 


- 응용프로그램이 메모리를 요청하면 Frontend 인 LFH 에 의하여 "이미 해제된 메모리 블럭 리스트" 중에서 반환을 해 준다. 단편화를 줄이기 위해(low fragmentation) 


  요청한 메모리 크기를 만족시키는 가장 작은 메모리블럭을 반환해준다. 또한 최근에 해제된 메모리를 반환해 주는 경향이 있다. 만약 Frontend 가 처리할 수 없는 


  크기의 요청이 들어오면 Back-end 단에 요청을 해서 새롭게 메모리를 할당받는 구조이다.




ㅁ Use-After-Free 의 공격 원리


- ex) 32 byte 의 객체가 free 되었을때, free 된 객체와 비슷한 사이즈로 객체를 할당받으면 LFH 에 의해 최근에 반환된 메모리 블럭(주소)를 할당받게 되어 덮어쓸 수 있다.


        이렇게 되면 VTable 을 변조할 수 있게 되어 (Fake VTable) 이를 이용하여 임의의 쉘코드를 실행시킨다. 









+ Recent posts