본문 바로가기

DreamHack: System Hacking/Heap Allocator Exploit(ptmalloc2)

(2)
__builtin_expect() ( __glibc_unlikely(), __glibc_likely() ) 해당 글은 glibc를 분석할 때 자주 보게 되는 __builtin_expect(), __glibc_unlikely()가 무엇인지 설명하기 위해 작성한 글이다. 사전 지식우리가 코드를 짜서 이를 실행할 때, CPU는 현재의 실행 흐름에 맞게 하나의 코드씩 순차적으로 연산하는 것이 아니다. CPU는 "분기 예측"을 통해 효율성을 극대화 시키는데, 이를 아주 짧게 설명해보자면 다음과 같다. CPU는 앞에서 만나게 될 분기문의 결과를 예측하여 특정 경로를 타고가며 코드를 미리 연산해놓는다. 그리고 그 분기 예측이 맞았을 경우에는 미리 연산해뒀던 결과들을 이용하고, 분기 예측이 틀렸을 경우에는 미리 연산해뒀던 것들을 모두 버리고 분기문의 결과에 맞게 새로 분기 예측을 시작한다.(분기 예측에 관해 몇 줄로 요약하..
ptmalloc2(glibc 2.23) _int_malloc(), _int_free() 동작 분석 2023년 8월 시점에 glibc 2.23에 대해 글을 쓰는 이유 glibc는 버전이 업데이트 될 때마다 새로운 기능을 추가하거나 취약점들을 보완하며, 현재 release된 최신 glibc 버전은 glibc 2.38이다. 그럼 '왜 이런 구닥다리 버전의 glibc를 분석하는 글을 기재하냐?' 라고 물을 수 있는데, 이는 glibc가 업데이트 될 때마다 취약점들을 업데이트하고 새로운 기능들을 추가하긴 하지만, 대부분은 원래 있던 버전의 소스코드에 코드를 "추가" 하는 것이지, 원래 있던 코드를 삭제하고 그것을 "새로 쓰는 것"은 아니기 때문이다. 따라서 한 버전의 glibc를 통해 heap의 동작을 이해한다면, 이후에 나오는 glibc 버전에서는 어떤 요소가 새로 추가되었는지, 또는 변경되었는지만 확인하면..