콘텐츠로 이동

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
  • 동작 로직