pwnable
x64 stack alignment
dreamhack에 있는 CTF 문제를 풀다가 아래와 같은 부분에서 코드가 터졌다. movaps XMMWORD PTR [rsp+0x50], xmm0 이유를 살펴보니 ubuntu 18.04부터 do_system()에 위와 같은 코드가 추가되어서 stack alignment를 지켜주지않으면 코드가 터지는 것이였다. x64 Stack Alignment stack alignment란 stack의 top이 16의 배수로 유지된 상태이다. 메모리의 access cycle을 최소한으로 줄이기 위해 사용한다. 여기서 stack의 top은 rsp 레지스터를 뜻하고 stack alignment를 유지하기 위해 rsp의 위치가 정해진다. 간단하게 말하자면 아래와 같다. call 실행 직전 rsp는 16의 배수 ( stack..
GLIBC 2.29
해당 페이지는 dreamhack.io 사이트의 강의를 참고해 정리하고 이해못한 내용을 추가로 작성해둔것이니 참고사이트의 사이트를 참고하시기바랍니다. glibc 2.26 버전에서는 tcache에 대한 검증이 제대로 이루어지지 않았기 때문에 보안에 취약했다. 하지만 glibc 2.29 버전 이후로 tcache에 대한 검증이 이루어지면서 보안이 강화되었다. 또한 그 외에도 다양한 취약점을 개선하였다. tcache_put & tcache_get tcache를 관리하는 tcache_entry 구조체와 tcache_put, tcache_get 함수에 Double Free 검증에 사용될 코드가 추가되었다. // GLIBC 2.29 typedef struct tcache_entry { struct tcache_entr..
tcache
해당 페이지는 dreamhack.io 사이트의 강의를 참고해 정리하고 이해못한 내용을 추가로 작성해둔것이니 참고사이트의 사이트를 참고하시기바랍니다. glibc는 계속해서 업데이트가되고 있다 아래의 내용은 glibc 2.26 버전의 내용이고 glibc 2.29부터는 달라지게 된다. tcache는 glibc 2.26 버전 이상부터 적용된 기술이다. tcache는 Thread local caching)의 약자로 멀티 스레드 환경에서 메모리 할당 속도를 높이기 위해 적용되었다. 그렇기 때문에 보안이 취약하다. 우선 malloc 함수를 통해 동적 할당 요청이 들어오면 __libc_malloc 함수가 호출된다.__libc_malloc 함수는 MAYBE_INIT_TCACHE 매크로를 호출하여 tcache_init 함..
ptmalloc2 allocator
ptmalloc2는 리눅스 glibc에서 사용하는 메모리 할당자이다. ptmalloc2는 glibc 2.23버전과 glibc 2.26 이후 버전 동작 방식이 tcache로 인해 조금 달라졌다. glibc 2.23 기준으로 설명하겠다. 해당 페이지는 dreamhack.io 사이트의 강의를 참고해 정리하고 이해못한 내용을 추가로 작성해둔것이니 참고사이트의 사이트를 참고하시기바랍니다. ptmalloc2 allocator ptmalloc2에서 힙 청크는 malloc_chunk를 사용한다. struct malloc_chunk { INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */ INTERNAL_SIZE_T size; /* Size in byte..