공격조건2.23에서는 가능, malloc을 임의로 할 수 있어야함. top chunk의 size를 조작할 수 있다. 임의의 주소를 알고있어야 한다.House of Force란?top chunk의 size를 조작함으로써 임의의 주소에 힙 청크를 할당 할 수 있는 공격 기법이다. 아래는 top chunk를 처리하는 _int_malloc 코드이다.static void *_int_malloc (mstate av, size_t bytes){ INTERNAL_SIZE_T nb; /* normalized request size */ ... mchunkptr remainder; /* remainder from a split */ unsigned long remai..
공격조건2.23에서는 가능, malloc과 free를 임의로 할 수 있어야함. heap영역의 주소를 알 수 있어야 함, free된 chunk에 접근 가능해야함, fake chunk의 주소 알아야 함.House of Lore란?smallbin 크기의 힙이 존재 할 때 bck→fd를 조작하여 임의의 주소에 청크를 할당할 수 있는 공격 기법이다.하지만 이에는 몇 가지 검증 코드가 있기 때문에 이를 우회해야 한다.if (in_smallbin_range (nb)){ idx = smallbin_index (nb); bin = bin_at (av, idx); if ((victim = last (bin)) != bin) { if (victim == 0) /* initialization check */ mal..
공격조건2.23에서는 가능, fake chunk의 주소(stack 주소) 알아야 함. 임의의 주소 free 가House of Spirit이란?stack에 fake fastbin chunk를 만들고 이를 free하면 이 fake chunk가 fast bin에 들어가게 된다. 그리고 다시 재할당을 하면 fake chunk가 할당된다. 단, fake chunk의 header 크기를 정상적인 크기로 해줘야 한다. 간단하니까 실습은 패스
공격조건unsorted bin 청크를 만들 수 있어야 한다.large bin 청크를 만들 수 있어야 한다.해제된 large bin의 BK, bk_nextsize를 조작할 수 있어야 한다.libc 2.23에서 가능 2.27 안됨Large Bin Attack 이란?해제된 large bin을 조작하여 원하는 주소에 힙 청크의 주소를 덮어쓸 수 있는 공격 기법이다.예시일반적인 Large bin 의 연결(가장 큰 청크보다는 작고 같은 크기의 chunk없을 때)//_int_mallocvictim_index = largebin_index (size);bck = bin_at (av, victim_index);fwd = bck->fd;...while ((unsigned long) size fd_nextsize; ..
공격조건해제된 힙의 size를 조작할 수 있을 때glibc 2.27 미만 Overlapping chunks란?해제된 힙의 size를 기존 힙 청크의 크기보다 큰 값으로 조작하고 할당하면 다른 힙 청크의 영역을 침범하여 메타데이터를 덮어 쓸 수 있다.해당 기법은 두 가지 방법이 있다.방법 1할당하려는 크기가 unsorted bin에 들어간 힙 청크의 크기와 같으면 해당 주소를 재사용하여 할당하는 unsorted bin의 특징을 이용한다.방법 2해제된 힙의 특징을 이용한다.예(방법 1)#include #include #include #include int main(int argc , char* argv[]){ uint64_t *ptr1, *ptr2, *ptr3; uint64_t over_ptr; ptr1 ..
unsorted bin attack공격조건glibc 2.27에 가능(단 tcache에 들어가지 않는 크기여야함)기본적으로는 glibc 2.23 공격기법이다. 해제된 청크의 bk 포인터를 조작할 수 있어야 한다. 기본적으로 모든 버전에서 free된 chunk에 접근하여 값을 쓸 수 있어야한다. unsorted bin attack이란?해제된 청크의 bk 포인터를 조작할 수 있을 때, 임의 주소에 main_arena 영역의 주소를 쓸 수 있는 공격 기법이다.쓰여지는 값은 주로 특정 버퍼의 사이즈를 덮는 등 추가적인 공격을 연계하기 위해 사용된다. 재할당 과정fastbin의 크기가 아닌 청크를 처음 해제하면 fd, bk 영역에 main_arena 영역의 주소가 써진다. 그리고 같은 크기로 힙을 할당하면 fd를 ..
double free란?해당 취약점은 libc 2.23에서 발생하는 취약점으로 free를 두번 하게 되면서 생기는 오류이다.if (__builtin_expect (old == p, 0){ errstr = "double free or corruption (fasttop)"; goto errout;}이러한 코드로 인해 free를 두번 할 경우 오류가 생긴다. 하지만 만약 chunk1 해제후 chunk2를 해제하고 다시 chunk1을 해제하면 old는 chunk2이고 p는 chunk1이여서 이 오류검출을 우회할수있다. 그러면 같은 binlist에 같은 주소가 2개가 생긴다. 이렇게되면 재할당시 두개의 객체가 한 개의 주소를 가리킬수 있게 된다.#include #include int main(){ ..