본문 바로가기
정보보안/fuzzing

[TheFuzzingBook] Mutation-Based Fuzzing

by meanjung 2022. 1. 29.

TheFuzzingBook을 읽으면서 제대로 따라가기 위한 글...

정확한 내용은 퍼징북을 참고하세여

 

  • 앞서 해왔던 randomly generated input은 invalid해서 처리되는 프로그램에 의해 빨리 reject된다.
  • input processing 이상의 기능을 실행하려면 더 많은 valid input이 있어야 하는데, 이를 mutation fuzzing이 할 수 있다. 
  • 즉, mutation fuzzing은 valid but new behavior을 만들어낸다. 

학습 목표

  • how to create such mutations
  • how to guide them towards yet uncovered code
  • apply central concepts from AFL fuzzer

Fuzzing with Mutations

  • mutational fuzz testing의 기초를 소개할 것이다.
  • 다음 장에서는 특정 코드 목표를 향해 퍼징을 지시(direct)하는 방법을 추가로 보여줄 것이다.

Fuzzing a URL Parser

  • 기존의 random fuzzer를 이용하면 url 구조에 맞는 랜덤 스트링을 얻는데까지 너무 많은 시간이 걸린다. 

Mutating Inputs

  • 랜덤 스트링 생성의 대체제로 주어진 valid input으로 시작해서 mutate하는 방법이 있다. 
  • 여기서 mutation은 simple string manipulation이다.
  • mutational fuzzing
    • insert a CHAR, del a CHAR, flip a bit...
  • generatinal fuzzing
    • 앞서 살펴본 것
  • 이 파트에서는 insert_random_char, delete_random_char, flip_random_char 함수를 구현해서 이 함수 중 랜덤하게 선택해서 수행하는 mutate 함수를 구현했다. 

Mutating URLs

  • 앞서 만든 is_valid_url함수와 mutate함수를 사용해서 http://~~를 seed로 https://, ftp://를 만들어내는 것은 굉장히 오래걸린다.
  • 때문에 우리는 multiple mutation을 적용해야한다.

Multiple Mutations

  • 하나의 seed로 여러번 mutate하면 원본을 알아내기 힘들게 된다.
  • 인풋에 대해 더 많은 다양성을 갖게 된다.
  • MutationFuzzer

Guiding by Coverage

  • How can we leverage coverage to guide test generation?
    테스트 생성을 안내하기 위해 커버리지를 어떻게 사용하는가?
  • AFL에서 "success"의 의미는 program 실행을 통해 new path를 찾는 것이다.
    • 이렇게 AFL은 input을 계속 mutate해서 new paths를 찾는다.
    • 또한 만약 한 input이 새로운 path를 찾는다면 it will be retained as well

 

구현은 코드 참조

https://www.fuzzingbook.org/beta/html/MutationFuzzer.html

 

Mutation-Based Fuzzing - The Fuzzing Book

Most randomly generated inputs are syntactically invalid and thus are quickly rejected by the processing program. To exercise functionality beyond input processing, we must increase chances to obtain valid inputs. One such way is so-called mutational fuzzi

www.fuzzingbook.org

 

댓글