[논문 리뷰] KernelGPT: Enhanced Kernel Fuzzing via Large Language Models
KernelGPT는 커널 퍼지 테스팅을 향상시키기 위해 자동으로 Syzkaller 시스템콜 사양을 추론하는 LLM 기반의 첫 번째 접근법이다. 반복적인 LLM 추론과 검증 피드백을 활용하여 정확하고 고카버리지의 사양을 생성하며, Syzkaller의 버그 탐지 능력을 크게 향상시켰다. 이로 인해 이전에 알려지지 않은 7개의 취약점을 발견했고, Syzkaller 팀으로부터도 업스트림 통합을 고려 중이라는 관심을 받았다.
Bugs in operating system kernels can affect billions of devices and users all over the world. As a result, a large body of research has been focused on kernel fuzzing, i.e., automatically generating syscall (system call) sequences to detect potential kernel bugs or vulnerabilities. Kernel fuzzing aims to generate valid syscall sequences guided by syscall specifications that define both the syntax and semantics of syscalls. While there has been existing work trying to automate syscall specification generation, this remains largely manual work, and a large number of important syscalls are still uncovered. In this paper, we propose KernelGPT, the first approach to automatically synthesizing syscall specifications via Large Language Models (LLMs) for enhanced kernel fuzzing. Our key insight is that LLMs have seen massive kernel code, documentation, and use cases during pre-training, and thus can automatically distill the necessary information for making valid syscalls. More specifically, KernelGPT leverages an iterative approach to automatically infer the specifications, and further debug and repair them based on the validation feedback. Our results demonstrate that KernelGPT can generate more new and valid specifications and achieve higher coverage than state-of-the-art techniques. So far, by using newly generated specifications, KernelGPT has already detected 24 new unique bugs in Linux kernel, with 12 fixed and 11 assigned with CVE numbers. Moreover, a number of specifications generated by KernelGPT have already been merged into the kernel fuzzer Syzkaller, following the request from its development team.
연구 동기 및 목표
- 커널 퍼지 테스팅을 위한 수동적이고 실수를 유발하기 쉬운 시스템콜 사양 작성이라는 핵심 과제를 해결하기 위해.
- LLM을 활용해 정확하고 종합적인 시스템콜 사양을 자동 생성함으로써 Syzkaller의 효과성을 향상시키기 위해.
- 희귀하거나 복잡한 커널 코드 패턴에서 실패하는 정적 분석 기반 도구(예: SyzDescribe)의 한계를 극복하기 위해.
- 커널 변경 사항에 따라 진화하는 가용성 있고 유지보수 용이하며 확장 가능한 사양 생성을 가능하게 하기 위해.
- LLM이 인간이 작성한 히ュ리스틱보다도 정확하고 유용한 커널 시스템콜 기술서를 생성할 수 있음을 입증하기 위해.
제안 방법
- 커널 코드, 문서, 시스템콜 사용 사례에 광범위하게 노출된 사전 학습된 LLM을 활용해 시스템콜 사양을 추론한다.
- 단계별로 구성 요소(예: 장치 이름, 명령어 값, 타입 등)를 생성하고 개선하는 반복적이고 피드백 기반의 프로세스를 적용한다.
- Syzkaller 실행 결과에서 유도된 검증 피드백을 활용해 사양 오류를 탐지하고 수정함으로써 여러 개선 라운드를 거쳐 정확도를 향상시킨다.
- 매크로 변환(예: _IOC_NR(command))과 같은 복잡한 패턴을 포함한 커널 소스 코드를 분석해 정확한 시스템콜 매개변수를 추론한다.
- 장치 드라이버를 위한 시스템콜 이름, 인자 타입, 상호의존성까지 포함한 완전한 syzlang 사양을 생성한다.
- 소수의 예시를 활용한 프ompting과 사고의 연속 체인 추론을 적용해 LLM이 저수준 커널 인터페이스와 극단 케이스를 이해하도록 이끈다.

실험 결과
연구 질문
- RQ1LLM은 수동 규칙 설계 없이 커널 소스 코드에서 정확하고 종합적인 Syzkaller 시스템콜 사양을 자동으로 추론할 수 있는가?
- RQ2정확성과 커버리지 측면에서 LLM 기반 사양 생성은 SyzDescribe와 같은 정적 분석 기반 도구와 비교해 어떻게 다른가?
- RQ3LLM이 추론한 사양은 이전에 테스트되지 않은 드라이버에서 이전에 알려지지 않은 커널 버그를 발견할 수 있는가?
- RQ4희귀하거나 비표준적인 실현 방식을 포함한 다양한 커널 드라이버 패턴에 대해 LLM은 얼마나 일반화할 수 있는가?
- RQ5사양 생성과 Syzkaller 검증 간 피드백 루프가 반복적으로 사양 품질을 향상시킬 수 있는가?
주요 결과
- KernelGPT는 테스트한 11개 드라이버 중 10개에서 SyzDescribe보다 더 높은 Syzkaller 커버리지를 확보했으며, 두 사양은 SyzDescribe에서 잘못된 장치 경로 추론로 인해 완전히 실패했다.
- KernelGPT는 8개의 고유한 커널 버그를 탐지했으며, 그 중 7개는 기본 Syzkaller로는 이전에 탐지되지 않은 것으로 확인되었다.
- Syzkaller 팀이 KernelGPT가 생성한 사양을 업스트림 통합을 고려 중이며, 실제 적용 가능성에 대한 인식이 있음을 시사한다.
- KernelGPT는 장치 매핑기 및 CEC 드라이버에서 슬랩 사용 후 할당 해제 및 kmalloc 메모리 손상과 같은 복잡한 버그를 성공적으로 식별했다.
- CEC 드라이버에서는 비표준 포인터를 참조하는 것으로 인한 일반 보호 장애와 완료되지 않은 설정 작업으로 인한 작업 정지 버그를 발견했다.
- 장치 이름 추론 시 .nodename을 사용하는 경우나 ioctl 명령어 값 변환을 정확히 처리하는 등 극단 케이스에서 SyzDescribe보다 우수한 성능을 보였다.

더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.