Fuzzing has become popular as a software bug detection technique for its high bug detection ability (covering large execution space of a complex target program fast). Although semantic information of a target program can be useful to improve test coverage of fuzzing, still most fuzzers do not utilize valuable semantic information of a target program much. This is because obtaining such semantic information is technically difficult and/or costly (i.e., causing high runtime overhead). To resolve such limitation, this dissertation proposes FRIEND, which is the first fuzzer to use "dynamic function relevance'', which is a salient method to improve test coverage and crash bug detection ability cost-effectively. FRIEND identifies functions closely relevant to a target function $f_t$ containing a target branch $b_t$ and utilizes this information to select test inputs and input bytes to mutate. I found that the dynamic function relevance metric is simple and cheap to calculate and can improve fuzzing performance significantly. I have applied \tech to 4 LAVA-M benchmark programs and 10 popular real-world programs. The experiment results demonstrated that FRIEND covers significantly more execution paths and detects more crashes than other cutting-edge fuzzers (i.e., AFLFast, Angora, FairFuzz, and RedQueen).
테스트 자동 생성 기술인 퍼징은, 크고 복잡한 프로그램에서도 오류를 검출하는데 높은 성능을 보여, 널리 이용되고 있다. 하지만, 테스트 대상 프로그램의 시맨틱 정보를 이용하면 퍼징의 테스트 커버리지 성능을 높일 수 있는 잠재력이 있음에도, 이러한 시맨틱 정보를 이용하는데 필요한 실행비용이 높고, 기술적인 난이도가 높아 이러한 시맨틱 정보를 사용하는 퍼징 기술에 대한 연구는 더딘 편이다. 이러한 한계를 극복하기 위해 본 논문에서는 동적 함수 관련도를 사용하는 첫 퍼저인 FRIEND를 제시한다. FRIEND는 타겟 분기 b_t를 포함한 함수 f_t에 대해 높은 연관도를 가지는 함수를 식별하여 이 정보를 이용하여 어떤 테스트 입력을 변이할지, 테스트 입력의 어떤 바이트를 변이할 지를 결정하여 효율적으로 높은 커버리지와 버그 식별 능력을 가지는 테스트를 생성하도록 한다. FRIEND를 LAVA-M의 4개의 프로그램과 10개의 실제로 활발히 사용되는 프로그램에 적용한 결과, 다른 최신 퍼저 (AFLFast, Angora, FairFuzz, RedQueen)과 비교하여 높은 커버리지와 버그 식별 능력을 보였다.