how2heap의 첫번째 분석 자료는 first_fit 이다.
first fit이란 메모리 할당 전략 중 하나이다.
대표적으로 3가지가 있는데
first fit, best fit, worst fit 이 있다.
기본적으로 리눅스에서 heap 할당 관련해서는 first fit전략을 취하고 있다.
first fit이란 할당 가능한 메모리 영역을 발견하면 바로 할당하는 방식이다.
best fit은 internal fragment가 최대한 작게 딱 맞는 크기의 영역을 할당하는 방식이고
worst fit은 정반대로 최대한 널널한 영역을 할당하는 방식이다.
first fit 프로그램은 취약점을 보여주는 프로그램은 아니고
리눅스의 메모리 할당방식을 직접 보여주는 프로그램이다.
과정을 따라가며 분석해보겠다.
(메모리 할당)
a와 b에 할당을 해준다.
(메모리 할당 확인)
프로그램 실행시 확인해 볼 수 있다.
첫번째로 할당한 영역의 주소는 46010 이고 (뒷자리만 부를것이다.)
두번째로 할당한 영역의 주소는 46220 이었다.
(할당된 메모리 사용)
그리고 할당된 주소를 사용한다. a라는 주소에 문자열을 입력해준다.
(메모리 해제)
그렇게 되면 현재 a에 할당된 주소인 46010 주소는 free된 상태이며 사용가능한 주소로
bin 구조에 들어가게 된다.
리눅스에서는 haep영역의 메로리 할당과 해제를 bin을 통해 관리한다.
나중에 heap영역 메모리 요청이 들어오면 이 bin 구조를 탐색한 후 메모리 할당을 해줄 것이다.
이 bin 구조는 사이즈에 따라 fast bin, small bin, unsorted bin 여러가지 종류로 구분되고
구조도 조금씩 다르다. 이에 대한 설명과 분석은 해당 취약점 분석때 자세히 하겠다.
이번 자료에서는 first fit에 초점을 맞춰보겠다.
다시 이어서 malloc을 해준다.
(malloc)
자 그렇게 되면 아까 해제(free) 되었던 주소가 c에 들어갈 것이다.
bin 구조에서 탐색하다가 사용가능한 영역을 발견하고 바로 아까 해제해주었던 영역을 할당해 주는 것이다.
확인을 위해 이번엔 방금 할당된 주소를 사용해본다.
(메모리 사용)
그리고 a변수 처음에 할당되었던 주소가 담긴 변수와
c변수 방금 할당했던 주소가 담긴 변수를 주소값과 안에 담긴 문자열을 출력해본다.
(같은 주소)
결과는 처음 할당했던 주소가 46010이었는데 해제(free)해준 뒤 다시 malloc을 통해 받은 주소가 똑같은 46010이다. 그리고 그 안에 있는 문자열은 thist is C! 로 정확히 같은 주소라는 것을 보여준다.
'Vulnerability_Tech > About Heap' 카테고리의 다른 글
malloc의 사용가능 영역(HEAP) (0) | 2018.02.20 |
---|---|
(how2heap) - house_of_spirit (0) | 2018.01.17 |
(how2heap) - unsafe_unlink (0) | 2018.01.13 |
(how2heap) - fastbin_dup_into_stack (0) | 2018.01.11 |
(how2heap) - fastbin_dup (0) | 2018.01.04 |