Theory/fuzzing theory

Fuzzing: What is the Fuzzing?

TESTING 2021. 2. 15. 01:22

"퍼징이란?" 여러 사전적 의마가 있겠지만, 대략적으로 다음 설명이면 충분히 설명된다.

퍼징은 소프트웨어를 테스팅하는 방법의 일종으로 무작위 입력값을 프로그램에 대입해 예상치 못한 결과를 얻어내는 것

일반적으로 퍼징을 떠올리면 복잡하고 어렵다고 생각되지만, 그저 단순하게 보면 퍼징은 버그를 찾는 방법 중 하나라고 할 수 있다.

 

소프트웨어 버그를 찾는 방법을 공부하는 이유는 눈으로 분석하는 것보다 쉽고 빠르게 버그를 찾기 위함일 것이다.

그래서 버그 헌터들은 잘 만들어진 퍼저들을 사용하거나 직접 퍼저를 만들기도 한다.

정말 간단한 퍼저부터 시작해서, 여러가지 기법을 응용한 복잡한 퍼저들도 많이 나오고 있다.

 

복잡한 퍼저를 사용하려다 보면 Coverage, White Box, Black Box, Generation, Mutation 등 여러 용어들을 접하게 된다.

이 방법들이 퍼저에서 무슨 역할을 할까?
이게 정말로 퍼징 방법을 개선하는데 도움을 줄까?

 

이에 대한 답변은 퍼저의 역사, 중요한 기술적 내용을 집대성한 서베이 논문, 이를 번역한 포스팅들을 통해 보다 자세히 알 수 있다.

어려운 말도 많고 복잡하지만, 이를 이해하기 위한 기초적인 내용을 간단하게 정리해서 포스팅을 작성해보고자 한다.

 

 

추가적으로 퍼징에 대한 최신 동향, 보다 깊은 공부를 위해서는 아래와 같은 래퍼런스들을 팔로우업하면 된다. :)

  • Security 탑 티어 학회(IEEE S&P, USENIX Security, ACM CCS, NDSS)
  • 소프트웨어 엔지니어링 탑 티어 학회(FSEASEICSE)
  • 해킹 컨퍼런스(BlackHat, PoC Conference, Hack-In-The-Box, ...)
  • 유명 블로그(Project0, 360 Security, ...)
  • Github에 공개된 툴, 유명인의 트위터, 아카이브 등