PreProcess 초기 준비 단계이다. 아래와 같은 작업을 한다. 1. PUT에 대한 instrumentation 적용 2. 쓸모없는 configureation 제거 3. seed trimming 4. dirver app 생성 PUT 코드 사이사이에 instrumentation 코드를 삽입해 새로 컴파일한다. code coverage를 높이기 위한 작업으로 instrumentation이라고 한다. gray-box와 white-box는 PUT에 instrumentation을 적용해 execution feedback을 수집하고 그에 맞춰 더 정교한 퍼징을 수행한다. Program instrumentation을 static과 dynamic으로 나뉜다. Static 방식은 PUT 실행전 Preprocess 단..
Fuzzing이란? fuzzing이란 fuzz input을 사용해 PUT(Program Under Test)를 실행하는 것이고, fuzz input 이란 PUT가 예상하지 못할 input을 뜻한다. PUT이 잘못 처리하는 input 혹은 개발 의도와는 다른 행동을 보이는 input을 넣어 PUT을 실행하는 것이라고 볼 수 있다. 즉 fuzzing이란, 자동화 테스트로 기형/반기형적 데이터를 주입하여 소프트웨어 버그를 찾는 블랙박스 테스팅 기술이다. PUT은 테스트 실행중인 프로그램이라고 해석하자 Fuzzing을 왜 쓰나? 결론적으로는 fuzzing을 통해 버그를 자동으로 찾을 수 있다는 것이다. 일반적인 정적분석으로도 버그를 찾을 수 있지만 많은 시간과 노력이 들며 자신의 실력에 따라 버그를 찾을 수도,..
tcache란? thread local cache는 멀티 스레드 환경에서 메모리 할당 속도를 높이기 위한 것으로 각 스레드에 독립적으로 할당되는 캐시 저장소이다. 작은 단위의 메모리는 arena를 참조하지 않고 바로 메모리를 할당한다. tcache는 glibc 버전 2.26에서 도입되었으며, 멀티 스레드 환경에 더욱 최적화된 메모리 관리 메커니즘을 제공한다. tcache의 특징 - 각 스레드는 64개의 tcache를 가지고 있다. - tcache는 LIFO방식으로 사용되는 단일 연결리스트이며, 하나의 tcache는 같은 크기의 chunk들만 보관한다. - 리눅스는 각 tcache에 보관할 수 있는 chunk의 갯수를 7개로 제한하고 있다. - tcache에 들어간 chunk들은 병합되지 않는다. - tc..
libc 2.23을 기준으로 변경된 부분만 분석하겠다. https://k0n9.tistory.com/entry/free-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C-%EB%B6%84%EC%84%9Dlibc-223 libc 2.26부터는 tcache의 개념이 도입되었다. 그러니 tcache 위주로 보자. tcache에 관한 함수는 곧 따로 정리하겠다.(tcache_get 등) __libc_free //__libc_free 2.27 void __libc_free (void *mem) { mstate ar_ptr; mchunkptr p; /* chunk corresponding to mem */ void (*hook) (void *, const void *) = atomic_forced_..
libc 2.23을 기준으로 변경된 부분만 분석하겠다. https://k0n9.tistory.com/entry/malloc-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C-%EB%B6%84%EC%84%9Dlibc-223 libc 2.26부터는 tcache의 개념이 도입되었다. 그러니 tcache 위주로 보자. tcache에 관한 함수는 곧 따로 정리하겠다.(tcache_get 등) __libc_malloc 아래는 malloc함수 호출시 실행되는 코드이다. //__libc_malloc 2.27 void * __libc_malloc (size_t bytes) { mstate ar_ptr; void *victim; void *(*hook) (size_t, const void *) = atom..