2022 04 28
2022-04-28¶
Fuzzing¶
- 참고 : https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%A7%95
- 참고 : https://wogh8732.tistory.com/271
- 정의
- 소프트웨어 테스팅 기법 중 하나로, 컴퓨터 프로그램에 예상치 않은 무작위 데이터를 입력하는 것
- 프로그램은 충돌이나 빌트인 코드 검증의 실패, 메모리 누수 발견 등 예외 감시 이루어짐
- 주로 컴퓨터 시스템의 보안 문제를 테스팅하기 위함
- fuzzing을 통해 프로그램에 들어가는 입력을 변조시켜 정상 동작이 아닌, 크래시 유발이나 메모리 Corruption 일으키는 사례 기록
- Fuzzing 왜 필요한가?
- 버그를 자동으로 찾을 수 있음 (동적 분석)
- 정적 분석은 찾는 사람의 실력에 따라 버그 찾는게 달라짐
- Fuzzing은 모든 버그를 찾을 수 있는가?
- 이론적으로는 모든 버그 유형 탐색 가능
- heap, stack, integer OF/UF
- format string bug
- 이론적으로는 모든 버그 유형 탐색 가능
- Fuzzing 아키텍쳐
1. TestCase Generator : 타겟 프로그램에 들어갈 입력 만듦
2. Logger : 퍼징 돌리는 중 버그 분석에 필요한 정보 기록
3. Worker : 주어진 입력으로 예기치 않은 동작 인식
4. Server/Master : 1,2,3 컨트롤 및 상호작용 관리
AFL¶
- 참고 : https://github.com/google/AFL
- 참고 : https://wogh8732.tistory.com/272
- 동작 원리
- Instrumentation-guided genetic algorithm과 결합된 Fuzzer
- 커버리지를 넓혀가며 프로그램 제어 흐름에 대한 변경 사항 기록 -> 이를 로깅하여 Unique한 Crash 발견
- 커버리지 기반 Fuzzer
- 동작 로직
