[논문 리뷰] Large Language Models are Zero-Shot Fuzzers: Fuzzing Deep-Learning Libraries via Large Language Models
TitanFuzz는 텐서플로우 및 파이토치 라이브러리를 테스트하기 위해 자동으로 다양한 유효한 딥러닝 프로그램을 생성하는 데 대규모 언어 모델(Large Language Models, LLMs)을 제로샷 패치(fuzzer)로 활용하는 최초의 프레임워크이다. 생성형 및 인서트형 LLMs(예: Codex 및 InCoder)를 사용하여 시드 프로그램 생성과 진화적 변형을 조합함으로써, 텐서플로우와 파이토치에서 각각 30.38%, 50.84% 높은 코드 커버리지와 더불어 65개의 버그를 발견하였으며, 이 중 41개는 이전에 알려지지 않은 버그이다.
Detecting bugs in Deep Learning (DL) libraries (e.g., TensorFlow/PyTorch) is critical for almost all downstream DL systems in ensuring effectiveness/safety for end users. Meanwhile, traditional fuzzing techniques can be hardly effective for such a challenging domain since the input DL programs need to satisfy both the input language (e.g., Python) syntax/semantics and the DL API input/shape constraints for tensor computations. To address these limitations, we propose TitanFuzz - the first approach to directly leveraging Large Language Models (LLMs) to generate input programs for fuzzing DL libraries. LLMs are titanic models trained on billions of code snippets and can auto-regressively generate human-like code snippets. Our key insight is that modern LLMs can also include numerous code snippets invoking DL library APIs in their training corpora, and thus can implicitly learn both language syntax/semantics and intricate DL API constraints for valid DL program generation. More specifically, we use both generative and infilling LLMs (e.g., Codex/InCoder) to generate and mutate valid/diverse input DL programs for fuzzing. Our experimental results demonstrate that TitanFuzz can achieve 30.38%/50.84% higher code coverage than state-of-the-art fuzzers on TensorFlow/PyTorch. Furthermore, TitanFuzz is able to detect 65 bugs, with 41 already confirmed as previously unknown bugs. This paper demonstrates that modern titanic LLMs can be leveraged to directly perform both generation-based and mutation-based fuzzing studied for decades, while being fully automated, generalizable, and applicable to domains challenging for traditional approaches (such as DL systems). We hope TitanFuzz can stimulate more work in this promising direction of LLMs for fuzzing.
연구 동기 및 목표
- 입력 프로그램이 복잡한 문법, 의미론적 제약 및 텐서 모양 제약을 충족해야 하는 전통적 패치 기법의 한계를 해결하기 위해.
- 이전의 API 수준 및 모델 수준 패치 도구들이 API 순서의 다양성 부족과 임의의 유효한 코드 생성 능력 부족으로 인해 발생하는 문제를 해결하기 위해.
- 현대의 대규모 언어 모델(LLMs)이 수십억 개의 코드 스니펫에 훈련된 바를 활용해, 작업에 특화된 훈련이나 시드 데이터베이스 없이도 직접적으로 제로샷 패치로 활용될 수 있는지 탐색하기 위해.
- LLMs를 사용하여 유효한 딥러닝 프로그램을 생성하고 변형하는 완전 자동화된, 일반화 가능하며 효과적인 패치 프레임워크를 개발하기 위해.
제안 방법
- 프롬프트 엔지니어링을 활용한 생성형 LLM(예: Codex)을 사용하여 딥러닝 라이브러리에 대해 문법적으로 정확하고 의미적으로 유효한 고품질의 시드 프로그램을 생성하기 위해.
- 코드 조각 삽입, 대체 또는 삭제를 통해 프로그램 내부에서 작업하는 인서트형 LLM(예: InCoder)을 사용하여 시드 프로그램에 대한 진화적 변형을 수행하기 위해.
- CPU 및 GPU에서의 출력을 비교하여 불일치를 탐지함으로써 잠재적 버그를 발견하기 위해 차등 테스팅 오라클을 적용하기 위해.
- 코드 커버리지 향상과 버그 탐지 증가를 유도하기 위해 피드백 기반의 진화 알고리즘을 사용하기 위해.
- 실행을 통한 유효성 검증 및 하드웨어 백엔드 간의 충돌, 런타임 오류 또는 의미론적 불일치 여부를 모니터링하기 위해.
실험 결과
연구 질문
- RQ1작업에 특화된 훈련이나 시드 데이터베이스 없이도 대규모 언어 모델(LLMs)이 딥러닝 라이브러리의 제로샷 패치로 효과적으로 활용될 수 있는가?
- RQ2상위 수준의 API 수준 및 모델 수준 패치 도구와 비교했을 때, LLM 기반의 생성 및 변형이 더 높은 코드 커버리지 달성에 얼마나 효과적인가?
- RQ3기존 패치 도구들이 놓친 바, 희귀하거나 복잡한 API 순서에서 LLM 기반 패치가 이전에 알려지지 않은 버그를 발견할 수 있는가?
- RQ4LLMs가 루프 및 제어 흐름과 같은 파이썬 전용 구문을 포함한 유효하고 다양한 복잡한 딥러닝 프로그램을 얼마나 잘 생성할 수 있는가?
- RQ5프롬프트 엔지니어링 및 모델 선택(Codex 대비 InCoder 등)이 생성된 테스트 프로그램의 품질과 다양성에 어떤 영향을 미치는가?
주요 결과
- TitanFuzz는 최신 기술 기반 패치 도구와 비교해 텐서플로우에서 30.38% 높은 커버리지, 파이토치에서 50.84% 높은 커버리지 달성.
- 파이토치와 텐서플로우에서 총 65개의 고유한 버그를 탐지하였으며, 이 중 53개는 확인되었고, 그 중 41개는 이전에 알려지지 않은 버그였다.
- 확인된 버그 중 10개는 변형 없이도 LLM에 의해 생성된 시드에서 직접 발견되었으며, 이는 초기 프로그램 생성 품질이 매우 높음을 시사한다.
- TitanFuzz는 특정 API 순서(로그 후 행렬 지수)에서만 발생하는 GPU 전용 동기화 버그를 성공적으로 탐지하였으며, 이는 이전 도구들이 놓친 사례였다.
- 저명도가 낮고 시드 커버리지가 부족한 탓에 이전 패치 도구들이 놓친 텐서플로우의 ParallelDynamicStitch API에 심각한 보안 취약점(침묵적 범위 초월 읽기)을 발견하였다.
- 한 개의 탐지된 불일치는 CPU와 GPU 간의 저수준 시프트 연산자 차이로 인해 개발자들이 의도적인 것으로 판단하여 기각되었으며, 이는 오라클 설계 시 신중함이 필요함을 보여준다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.