본문 바로가기

전체 글19

[논문 리뷰] Evaluating Fuzz Testing Fuzz Testing 을 어떻게 평가해야 믿을 만한 결과를 도출할 수 있을지? 에 대해 다루는 논문이다. 이번 포스팅에서는 논문을 섹션 바이 섹션으로 분석하기보다도 결론 정도를 간단히 정리해보고자 한다. 어떻게 fuzzer를 evaluate 해야 하는지에 대한 어느정도의 방향성 말이다. 앞으로 내가 읽을 많은 Fuzzer 관련 논문들의 evaluation 섹션을 좀 더 비판적으로 읽을 수 있을 수 있는 시각을 제공해주었다는 점에서 인상 깊었던 논문이다. 이 논문은 현재까지 많은 Fuzzing 관련 논문들이 사용한 evaluation 기법들이 실제로는 틀린 결과로 이어질 수 있다는 점을 지적하면서, 어떠한 방법으로 Fuzzer를 평가해야 좀 더 신뢰 가능한 결과로 이어질 수 있는지 그 methodolog.. 2024. 2. 9.
[논문 리뷰] Angora : Efficient Fuzzing by Principled Search 두 번째 논문은 Angora : Efficient Fuzzing by Principled Search 이다. 고민할 거리도 많았고, 직접 손으로 그려보기도 하면서 읽은 논문이었던만큼 흥미로웠다. Angora도 찾아보니까 토끼의 한 종류인 것 같다. 논문에서 AFL 이랑 비교하는 부분이 많이 나오는데, 제목도 혹시 노린건가 싶다 (?) Angora : "The main goal of Angora is to increase branch coverage by solving path constraints without symbolic execution." Angora는 mutation-based fuzzer이다. Angora의 가장 큰 목적은 위에 논문에서 발췌한 문장에서 나와있듯, path constraint.. 2024. 2. 7.
[논문 리뷰] All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution / Part 2. Forward Symbolic Execution 저번에 이어서 오늘은 All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution 의 두번째 파트인 Forward Symbolic Execution에 대한 정리이다. 줄여서 FSE로 쓰도록 하겠다. FSE는 프로그램의 실행 흐름에 대해 논리식을 만들어가면서, 여러 종류의 입력에 대한 프로그램의 행동들을 추론할 수 있게 해준다. 가장 naive 한 형태의 fuzzing이 아래 예시에서 어떻게 동작할 지 생각해보자. x가 32 bit integer 라고 가정한다면, if 분기문의 조건인 x-5 == 14를 만족할 확률은 2의 32승분의 1로 매우 작다. 이를 매번 랜덤한 입력을 바꾸어 가면서, 해당 분기를 tru.. 2024. 2. 5.
[논문 리뷰] All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution / Part 1. Dynamic Taint Analysis 오늘은 보안 탑티어 학회들 중 하나인 S&P에 등재된 All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution 논문에 대해 리뷰해보도록 하겠다. 이 논문은 SoK 논문인데, SoK 란 Systemization of Knowledge의 약자로 기존에 소개된 기술을 보다 체계적으로 정리하는 논문 형식이라고 보면 된다. 해당 논문은 크게 두 개의 주제로 나누어져 있는데, 첫번째 파트는 Dynamic Taint Analysis에 대해서이고, 두번째 파트는 Forward Symbolic Execution에 대해서이다. 동적 분석 기법, Dynamic Analysis는 프로그램을 실행하면서 취약점을 분석하는 것이라고.. 2024. 2. 1.
AFL fuzzer : dictionaries AFL fuzzer에 대해서 조금씩 더 알아나가 보자. 블로그에서 파편화된 지식들로 배우다 보니, 스스로 깊이가 부족한 것 같아서 돌고 돌아 다시 공식 문서다. 두번째 읽으니까 다시 보이는 것이 있어서 정리해둔다. 저번 AFL fuzzer 포스팅에서는 간단한 동작 원리를 살펴보았는데, 타겟 프로그램에 무수히 많은 mutated inputs을 테스팅해봄으로써 취약점을 찾아내는 것이 fuzzing 이다. 하지만 생각해보면, 우리가 사용하는 유명한 프로그램은 독자적인 포맷, 확장자를 제공한다. 예를 들어, PNG, JPEG, PDF, PPTX 등이 있을 것이다. 이러한 확장자들을 살펴보면, 저마다 magic number 혹은 file signature 라는 것이 있는데, PNG 같은 경우, file signa.. 2024. 1. 25.
AFL fuzzer (American Fuzzy Lop) 분석 AFL fuzzer는 사실상 표준인 fuzzer로 fuzzing과 관련된 많은 논문에서 일종의 baseline으로 다루어진다. 가장 기본이 되는 fuzzer인 만큼 후에 참고용으로 공부한 것을 기록해둔다. afl-fuzz 요약 아래 코드는 개인적으로 afl-fuzz.c 의 실행 흐름을 분석하고, 간략하게 pseudo code 형태로 짜본 것이다. 현재 가장 빈번하게 다루어지는 퍼징의 기본적인 형태는 다음과 같다. 1. Queue 에 initial seed, 즉 input 을 넣는다. 2. 반복문에 진입한다. 3. Queue 에서 entry 하나를 가져온다. 4. 이 entry 의 특성을 고려하여, 얼마만큼 fuzzing 시킬 지 결정한다. 5. mutate 6. 만약, mutate 된 testcase가 .. 2024. 1. 21.