[論文レビュー] 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 仕様を生成する。
- Few-shot プロンプトとチェーン・オブ・トゥーク(思考の道筋)推論を適用し、LLM が低レベルのカーネルインターフェースとエッジケースを理解できるように導く。

実験結果
リサーチクエスチョン
- RQ1LLM は、ルールの手作業定義なしに、カーネルソースコードから正確で包括的な Syzkaller システムコール仕様を自動で推論できるか?
- RQ2SyzDescribe などの静的解析ベースのツールと比較して、LLM ベースの仕様生成は正確性とカバレッジの面で優れているか?
- RQ3LLM が推論した仕様は、以前テストされていなかったドライバで、以前未知のカーネルバグを発見できるか?
- RQ4LLM は、まれなまたは非標準的な実装を含む多様なカーネルドライバのパターンにどれほど一般化できるか?
- RQ5仕様生成と Syzkaller 検証のフィードバックループは、反復的に仕様品質を向上させられるか?
主な発見
- KernelGPT は、テストした 11 個のドライバのうち 10 個で SyzDescribe よりも高い Syzkaller カバレッジを達成した。2 つの仕様は、SyzDescribe で不正なデバイスパス推論により完全に失敗した。
- KernelGPT は 8 つの独自のカーネルバグを検出。そのうち 7 つは、デフォルトの Syzkaller では検出されなかった以前未知のバグであった。
- Syzkaller チームは、KernelGPT が生成した仕様の上流統合を要請しており、実世界での採用可能性が示唆されている。
- KernelGPT は、デバイスマッパーおよび CEC ドライバで、スラブ使用後フリーと kmalloc メモリ破損といった複雑なバグを正常に特定した。
- CEC ドライバでは、非標準ポインタの間接参照による一般保護違反と、未完了の構成タスクによるタスクの停止(ハング)を発見した。
- デバイス名の推論を .nodename を用いて行うケースや、ioctl コマンド値の変換を正しく処理するエッジケースにおいて、SyzDescribe よりも優れた性能を示した。

より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。