With rapidly growing fuzzing technology, there has been surging demand for automatically synthesizing buggy programs. Previous approaches have been focused on injecting bugs into existing programs, making them suffer from providing the ground truth as the generated programs may contain unexpected bugs. In this paper, I address this challenge by casting the bug synthesis problem as a maze generation problem. Specifically, I synthesize a whole buggy program by encoding a sequence of moves in a maze as a chain of function calls. By design, our approach provides the exact ground truth of the synthesized benchmark. Furthermore, it allows generation of benchmarks with realistic path constraints extracted from existing vulnerabilities. I implement this idea in a tool, named Fuzzle, and evaluate it with five state-of-the-art fuzzers to empirically prove its value.
최근 퍼징 기술의 발전에 따라 퍼저의 성능을 평가하기 위한 벤치마크 프로그램을 자동으로 만드는 기술의 요구가 급증하고 있다. 이전의 방식은 기존 프로그램에 버그를 주입하는 방식으로 생성된 프로그램에 예기치 않은 버그가 포함되어 있을 수 있으므로 퍼저의 성능을 정확하게 측정하기 힘들다는 단점이 있다. 이러한 문제를 해결하기 위해 본 논문에서는 임의의 미로를 사용하는 프로그램 합성 기술을 이용하여 벤치마크 프로그램을 자동으로 생성하는 기술을 제시한다. 본 기술은 미로 안에서의 이동을 일련의 함수 호출로 부호화하여 프로그램을 합성함으로써 설계상 프로그램에 존재하는 버그의 개수 및 위치를 정확하게 알 수 있다. 또한, 프로그램의 경로 조건을 설정할 때 기존 프로그램 취약점의 경로 조건을 이용하여 현실의 버그를 반영하는 버그를 생성할 수 있다. 본 논문에서는 제시한 기술을 자동화된 시스템 위에 구현하여 퍼저를 평가하는 데에 사용해 보았다.