[SW 테스팅 스터디] Fuzzing의 기본 개념

dk-kling·2022년 3월 21일
3

SW Testing Study

목록 보기
1/1
post-thumbnail

1. 서론

많은 소프트웨어 취약성 검출 기술 중에 Fuzzing은 개념의 단순성, 낮은 도입 장벽, 실제 소프트웨어에서 높은 효율을 보여 많은 인기를 끌고 있습니다. High level에서의 Fuzzing은 구문적으로나 의미적으로 문제를 일으킬 수 있는 입력값을 프로그램에 반복적으로 실행하는 과정입니다.

공격자는 공격 생성 및 침투 테스트와 같은 시나리오에 퍼징 기법을 사용했으며, 이러한 악성행동을 막기 위한 방어자들 또한, 공격자보다 먼저 취약성을 발견하기 위해 퍼징 기법을 도입하기 시작했습니다.

Adobe, Google, Microsoft와 같은 기업들은 모두 보안 개발 관행의 일부로 퍼징 기법을 사용하고 있으며, 최근에는 오픈소스 개발자 또한 소프트웨어의 신뢰성을 보장하기 위해 퍼징 기법을 사용하고 있습니다. 이에 따라 주요 보안 컨퍼런스에서도 퍼징 기법에 관한 연구도 활발하게 이루어지고 있습니다.


2. Fuzzing의 기원

Fuzzing이라는 용어는 1990년 Miller 등에 의해 "대상 프로그램이 소비할 랜덤 문자 스트림을 생성하는" 프로그램을 지칭하기 위해서 만들어졌습니다. 그 이후로 다음과 같은 다양한 분야에서 Fuzzing의 개념이 활용되었습니다.

  • Dynamic Symbolic Execution
  • Grammar-based Test Case Generation
  • Permission Testing
  • Behavioral Testing
  • Complexity Testing
  • Kernel Testing
  • Representation Depenence Testing
  • Function detection
  • Robustness Evaluation
  • Exploit Development
  • GUI Testing
  • Signature Generation
  • Penetration Testing

3. Fuzzing과 Fuzz Testing

큰 그림으로 봤을 때, FuzzingFuzz Inputs을 사용하여 PUT(Program Under Test)를 실행시키는 작업입니다.

Fuzzing : input space로부터 샘플링된 입력값을 사용하여 PUT를 실행시키는 동작

PUT : Program Under Test의 약자로 테스트하고자 하는 대상 프로그램

Fuzz Inputs : 의도하지 않은 동작을 일으킬 수 있는 입력

  • 여기서 입력 공간(input space)을 가진다고 표현했지만, 이는 필수적인 요소가 아닙니다. 많은 Fuzzing 기법이 입력 공간을 가지지만, 그렇지 않고 입력만을 가지는 것으로도 충분할 수 있습니다.

  • 실제로 Fuzzing은 여러 번 반복되기 때문에 그 과정에서 PUT는 반복적으로 실행됩니다.

  • 샘플링 과정은 반드시 랜덤하게 수행되지는 않습니다.

Fuzz testing은 소프트웨어 테스팅 기술의 한 형태로써 프로그램 크래쉬를 포함한 다양한 보안 관련 버그를 탐색하는 것을 목표로 합니다. 초기의 Fuzz Testing이 크래시 여부를 테스트하는 데에 사용되었다면, Fuzzing Campaign은 특정한 보안 정책을 정하고, 이를 위반하는 버그를 탐색하는 것을 말합니다. 앞서 말한 보안 정책을 위반하는지 여부를 결정하는 특정 매커니즘을 Bug Oracle이라고 합니다. 또한, Fuzzer에서 구현된 알고리즘을 Fuzz Algorithm이라고 부릅니다. 대부분의 Fuzz AlgorithmPUT 이외의 파라미터에 의존합니다. 그리고 알고리즘에서 사용된 구체적인 파라미터들의 세팅을 Fuzz Configuration이라고 합니다.

Fuzz Testing : PUT가 보안 정책(security policy)를 위반하는지 확인하기 위해 Fuzzing을 테스팅에 사용한 것

Fuzzer : PUTFuzz Testing을 수행하기 위해서 만든 프로그램이나 도구

Fuzz Campaign : 특정한 보안 정책을 사용하여 PUT에서 Fuzzer를 수행하는 것

Bug Oracle : Fuzzer의 일부로써 특정 PUT 실행이 특정한 보안 정책을 위반하는지 여부를 판단하는 프로그램

Fuzz Configuration : Fuzz Algorithm을 제어하는 파라미터 구성된다.


Reference

The Art, Science, and Engineering of Fuzzing: A Survey

profile
STAR-LAB

0개의 댓글