Fascination
Published 2022. 11. 8. 00:25
[Fuzzer] What the Fuzz Hacking Tech/Fuzzer

[Fuzzer] What the Fuzz

Ref. https://labs.f-secure.com/blog/what-the-fuzz/


# 정의

  • fuzzing이란 자동화된 소프트웨어 테스팅 기술로써 프로그램 내부에 존재할 수 있는 취약점을 찾아내는 것
  • 단순화된 fuzzing은 브루트포스와 마찬가지로 무작위로 입력 값을 보내는 방식으로 진행할 수 있음
  • but 발전된 fuzzing techniques 소스코드나 바이너리를 분석하여 입력 값을 생성

 

 

# 장점

  • 자동화하여 버그를 찾을 수 있으므로 비용적으로 효율적임
  • 수동 테스트는 분석자의 기술력에 굉장히 의존적
  • fuzzing을 사용하면 서로 다른 종류의 버그를 찾을 수 있음 + 분석자의 손을 벗어나도 계속해서 분석이 가능하기 때문에 효율적임

 

 

# 이슈

  •  fuzzing은 훌륭하고 값싼 기술이지만 최적의 방안은 아님 → fuzzing을 하기 위한 토대를 만드는데도 많은 시간이 걸리기 때문
  • fuzzing을 통해 많은 취약점을 발견하면 취약한 프로그램이라고 할 수 있으나, 취약점이 나오지 않는다고해서 취약점이 없는 프로그램은 아님. 즉, fuzzing만으로 보안성을 평가하기 어려움
  • fuzzer는 무의미하고 익스플로잇터블하지 않은 많은 버그들을 만들 수 있음 → 따라서 검토 프로세스가 항상 필요하고, 수동으로 해야만 가장 정확한 검토가 가능

 

 

# 필요 조건

  • 입력을 받는 타겟 프로그램이 필요
    • 💡 프로그램이 복잡할 수록 더 많은 버그를 찾을 가능성이 높음
  • 어떤 프로그램인지 어떤 버그를 찾을 것인지에 따라 어떤 퍼저를 사용할지 고민해야 함 → 그렇지 않으면 처음부터 작성해야 함

 

 

# 버그의 종류

  • 이론적으로 fuzzing을 통해서는 모든 종류의 버그를 찾을 수 있음
  • fuzzing을 할 때 프로그램의 행동이 의도된 것인지 잘못된 것인지 구별할 메카니즘이 필요함
  • 메모리 corruption같은 경우 fuzzing을 통해 찾아내기 쉽지만, 논리 취약점의 경우에는 탐지하기 어려움

 

 

# Test case Generator

  • 새로운 테스트케이스 작성을 담당
  • 입력 값을 만들어 내는 곳
  • smart fuzzer: 입력 값의 구조를 알고 test case를 만드는 것
  • dumb fuzzer: 입력 값의 구조를 모르고 무작위로 test case를 만드는 것
  • test case는 처음부터 생성되거나, 이미 존재하던 test case를 변조하여 생성됨

 

 

# Guided fuzzing

  • 테스트 케이스 생성기를 이용하여 test case를 만드는 것에는 품질의 차이가 있음
  • 따라서 어떤 test case에서 어떤 부분을 조작하여 입력값을 만들지에 대한 고민이 필요함
  • 이에 대한 일반적인 지침은 code coverage임
  • 이론적으로 code coverage가 클수록 더 많은 버그를 찾을 수 있음

 

 

# Dumb fuzzing

  • 입력구조 모델이 필요없는 방식을 Dumb fuzzer라고 함
  • 장점으로는 입력구조의 정보 없이 가능하기 때문에 많은 다른 프로그램들에 적용이 가능함
  • 가장 큰 단점은 입력에 미리 정의된 구조가 필요하거나, 체크섬이 존재하는 경우 fuzzer가 유효한 입력 값을 만들어 내기까지 상당한 어려움이 존재

 

 

# Mutation based fuzzing

  • 존재하는 test case를 변형하여 test case를 생성함
  • 주로 bit flipping을 사용하며, 랜덤으로 bit flipping을 하고, 움직이거나, 지우거나 반복하는 형태로 진행됨
  • 장점으로는 설정 작업이 많이 필요하지 않음

 

 

# Generation based fuzzing

  • 처음부터 test case를 생성하며 입력 파일의 구조를 알고 있어야 함
  • 한 번 실항하게 되면 Mutation based fuzzer보다 높은 coverage를 생성하는 경향이 있어서 고유한 버그를 발견할 가능성이 높음

 

 

# Test case minimization

  • fuzzing이 진행될 수록 test case가 증가하고 복잡해지며 시간도 오래 걸리게 됨
profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!