상세 컨텐츠

본문 제목

[Paper Review] Fuzz4All: Universal Fuzzing with Large Language Models(ICSE'24)

ANALYSIS/Paper Review

by koharin 2024. 5. 25. 14:38

본문

728x90
반응형

기존의 시스템을 위한 퍼저는 특정 언어를 대상으로 하는 경우가 많아 다른 언어나 같은 언어의 다른 버전에 쉽게 적용할 수 없는 문제가 있다. 또한, 기존 퍼저에서 생성되는 입력은 입력 언어의 특정 기능에 국한되는 경우가 많아 다른 기능이나 새로운 기능에 관련된 버그를 발견하기 어렵다. 따라서 본 논문에서는 LLM을 활용하여 다양한 입력 언어와 해당 언어의 다양한 기능을 대상으로 보편적인 퍼징을 할 수 있는 Fuzz4All을 제안하였다.

Fuzz4All은 입력 생성 및 변형 엔진으로 LLM을 활용하여 모든 언어에 대해 다양하고 사실적인 입력을 생성이 가능하도록 하는 것을 목표로 한다. Fuzz4All은 SUT(System Under Test)를 설명하는 사용자 제공 문서를 입력으로 받는데, 사용자가 제공한 모든 입력을 간결하고 효과적인 퍼징 프롬프트로 자동 추출하는 자동 프롬프트 단계를 거친 후 LLM의 초기 입력으로 제공된다. 동일한 프롬프트로 계속 샘플링 시 유사한 퍼징 입력이 계속 생성되므로, 프롬프트를 반복적으로 업데이트함으로써 다양한 퍼징 입력을 생성한다. LLM에서 생성된 퍼징 입력은 SUT에 전달하여 시스템 크래시 등을 체크하는 등 사용자가 제공한 테스트 시스템을 검증한다. Fuzz4All은 대상 프로그램의 계측이 필요하지 않댜. distillation LLM 모델로는 GPT4를 사용하고 generation LLM로는 StarCoder를 사용하였다.

 

6가지 언어(C, C++, Go, SMT2, Java, Python)를 입력으로 받는 9개의 시스템을 대상으로 평가한 결과, 6개의 언어 모두에서 기존의 최신 퍼저보다 36.8% 더 높은 커버리지를 달성하였다.

또한, GCC, Clang, Z3, CVC5, OpenJDK, Qiskit 양자 컴퓨팅 플랫폼과 같이 널리 사용되는 시스템에서 64개의 제로데이 취약점을 발견하였다.

728x90
반응형

관련글 더보기