测试操作系统网络安全【免费下载链接】syzkallersyzkaller is an unsupervised coverage-guided kernel fuzzer项目地址https://gitcode.com/gh_mirrors/syz/syzkaller点击查看免费下载syzkaller 是一个无监督的、基于覆盖率引导coverage-guided的 Linux 内核模糊测试器。它能否高效工作很大程度上取决于被测内核的编译配置覆盖率收集、漏洞检测、沙箱隔离、符号表与调试信息、fault injection 等能力全部由内核.config决定。本文以仓库官方文档 docs/linux/kernel_configs.md 为骨架完整整理 syzkaller 推荐的 Linux 内核配置项并以 syzkaller 实际运行中的参考配置 和底层源码executor、vminfo 等印证每个配置的真实用途。读完本文你可以为自己的 fuzzing 环境拼出一份可直接make menuconfig或合并进.config的内核配置。参考配置从哪里抄作业官方文档明确推荐以 syzbot 的 upstream-apparmor-kasan.config 作为参考配置。这是一份由syz-kconf自动生成、针对 Linux x86_64 的完整.config文件头部标注了生成工具与内核版本涵盖了本文将要讨论的绝大部分推荐项——包括CONFIG_KCOVy、CONFIG_KASANy、CONFIG_NAMESPACESy、CONFIG_FAULT_INJECTIONy以及内核命令行中的net.ifnames0见 参考配置 L227-L231、L503-L504、L9517、L9737-L9752 附近。在实际搭建环境时可以把它当作基线再按需裁剪。Syzkaller 核心功能所需的配置覆盖率收集KCOV 系列最重要的四项覆盖率是 syzkaller 引导模糊测试方向的燃料文档强调它对高效 fuzzing 极为重要最低要求如下CONFIG_KCOVy CONFIG_KCOV_INSTRUMENT_ALLy CONFIG_KCOV_ENABLE_COMPARISONSy CONFIG_DEBUG_FSyCONFIG_KCOV开启内核覆盖率收集接口。在 executor/executor_linux.h 中执行器直接open(/sys/kernel/debug/kcov, O_RDWR)并使用KCOV_INIT_TRACE64/KCOV_INIT_TRACE32初始化缓冲区——这正对应CONFIG_DEBUG_FSy的依赖/sys/kernel/debug由 debugfs 提供。调试时可用ls /sys/kernel/debug、ls /sys/kernel/debug/kcov确认 kcov 已生效见 troubleshooting。CONFIG_KCOV_INSTRUMENT_ALL对内核所有代码插桩避免覆盖率黑洞。CONFIG_KCOV_ENABLE_COMPARISONS收集比较操作数comparison operands这是 syzkaller 的 comparison 反馈机制的数据来源。在 executor/executor.cc 中定义了struct kcov_comparison_t4 个 64 位字段并调用convert()将其转为 flatbuffers 的ComparisonRaw用于指导后续变异在 BSD 侧则对应KCOV_MODE_TRACE_CMP模式见 executor/executor_bsd.h。注意旧内核CONFIG_KCOV_ENABLE_COMPARISONS需要 gcc 8并且如果你的内核较旧还需移植以下两个提交kcov: support comparison operands collection kcov: fix comparison callback signature内存泄漏检测kmemleak要借助 Kernel Memory Leak Detectorkmemleak检测内核内存泄漏启用CONFIG_DEBUG_KMEMLEAKy在 executor/common_linux.h 中syzkaller 的 leak 检测通过写/sys/kernel/debug/kmemleakKMEMLEAK_FILE完成setup_leak()先scanoff关闭后台扫描、scan触发扫描、sleep 5 秒后再扫描并clear以冲刷启动期的假泄漏随后在检查阶段再次 scan/读回并比较校验和来降低误报。若setup_leak因EBUSY失败代码会提示increase CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE or unset CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF。对应地pkg/vminfo/features.go 中的FeatureLeak会由管理器自动探测并启用该能力。Web 界面展示代码覆盖率调试信息CONFIG_DEBUG_INFOysyzkaller 的 Web 界面需要将覆盖率 PC 地址还原为源码位置这依赖内核的调试信息vmlinux 符号。参考配置中同样开启了CONFIG_DEBUG_INFOy并采用 DWARF4见 参考配置 L9408-L9412。验证方法把 kcov 测试程序输出的十六进制地址交给addr2line -a -i -f -e $VMLINUXVMLINUX即配置中的kernel_obj能还原出行号即说明调试信息可用。系统调用检测与内核位宽KALLSYMSCONFIG_KALLSYMSy CONFIG_KALLSYMS_ALLysyzkaller 启动时会在 VM 内探测哪些系统调用可用、内核是 32 位还是 64 位这依赖/proc/kallsyms。在 pkg/vminfo/linux.go 中/proc/kallsyms被列入RequiredFiles()并从中正则解析_stext/_etext的地址来确定内核镜像范围linuxParseCoreKernel/proc/modules与/sys/module/*/sections/.text则用于计算内核模块的地址区间——这些地址将用于覆盖率数据的规范化。更好的沙箱隔离命名空间syzkaller 默认用沙箱限制被测程序的权限命名空间是隔离的基础CONFIG_NAMESPACESy CONFIG_UTS_NSy CONFIG_IPC_NSy CONFIG_PID_NSy CONFIG_NET_NSy CONFIG_CGROUP_PIDSy CONFIG_MEMCGy其中CONFIG_NET_NS网络命名空间是namespace沙箱中网络隔离的关键CONFIG_CGROUP_PIDS用于限制进程数防止失控CONFIG_MEMCGmemory cgroup用于内存隔离与统计。这些配置在 参考配置 L205-L231 附近 均已置y。若想使用namespace沙箱sandbox: namespace还需要CONFIG_USER_NSy在虚拟机中运行kvm_guest.config文档指出在 VM 中运行 syzkaller 一般需要make kvm_guest.config——这是 Linux 内核自带的 KVM guest 最小配置片段在编译内核时叠加到现有配置之上即可例如make defconfig kvm_guest.config。它确保 virtio 等虚拟化设备驱动就绪配合 QEMU/KVM 使用。若 SSH 连不上 VM还应检查网络配置是否过于精简参考 troubleshooting 中建议的CONFIG_VIRTIO_NETy、CONFIG_E1000y、CONFIG_E1000Ey。Debian 镜像的额外要求configfs 与 securityfs仓库用 tools/create-image.sh 生成 Debian 镜像脚本会向镜像的/etc/fstab写入securityfs挂载到/sys/kernel/security与configfs挂载到/sys/kernel/config条目见 create-image.sh L171-L172。因此内核必须支持这两个文件系统CONFIG_CONFIGFS_FSy CONFIG_SECURITYFSy建议禁用 KASLRRANDOMIZE_BASE文档建议禁用内核地址空间布局随机化KASLR# CONFIG_RANDOMIZE_BASE is not set理由与 kcov 的覆盖率数据稳定性直接相关若内核随机化基址收集到的 PC 地址会发生偏移影响覆盖率合并与报告解析。文档特别指出如果你的内核没有以下两个提交则必须禁用CONFIG_RANDOMIZE_BASEarm64: setup: introduce kaslr_offset()kcov: make kcov work properly with KASLR enabled建议禁用可预测网络接口命名net.ifnames0systemd 的可预测网络接口命名机制会把接口改名为enp0s3之类的名字导致 VM 内接口名与 syzkaller 预期不一致、SSH 连接失败。官方文档给出两种禁用方式方式一内核配置层面CONFIG_CMDLINE_BOOLy CONFIG_CMDLINEnet.ifnames0参考配置中CONFIG_CMDLINE_BOOLy且CONFIG_CMDLINE内已包含net.ifnames0见 参考配置 L503-L504。方式二syzkaller manager 配置层面在vm段加cmdline: net.ifnames0详见 docs/linux/troubleshooting.md 中给出的完整config.json示例type: qemu、count: 4等。文档同时提醒该方式不能保证在所有虚拟化技术上都生效——所以内核命令行方式更可靠。判断是否需要处理若 VM 报 Failed to start Raise network interfaces 或 syzkaller 连不上 VM优先检查此配置。Bug 检测配置检测器选型总览syzkaller 设计上配合以下内存/未定义行为检测器使用检测器说明上游状态KASAN内核地址消毒器检测 use-after-free 与越界上游可用CONFIG_KASANyKTSAN内核线程消毒器原型可用KMSAN内核内存消毒器未初始化内存原型可用KUBSAN内核未定义行为消毒器上游可用CONFIG_UBSANy其中 KASAN 是最常用的主力检测器。开启 KASAN 以检测 use-after-free 和越界访问CONFIG_KASANy CONFIG_KASAN_INLINEyCONFIG_KASAN_INLINE采用内联插桩虽然代码体积更大但能捕获更多种类的错误。syzkaller 的崩溃解析器对 KASAN 报告有专门支持在 pkg/report/linux.go 中可看到针对BUG: KASAN:的多种模式越界读写、double-free/invalid-free、KASAN_HW_TAGS报告等都会被归为crash.KASAN类型见 pkg/report/crash/types.go说明 KASAN 产出已深度集成进报告管道。故障注入fault injection 系列若想测试内核的故障处理路径错误路径的健壮性启用以下配置syzkaller 会自动拾取该能力FeatureFault见 pkg/flatrpc/flatrpc.go 中的FeatureFault枚举以及 pkg/vminfo/features.go 中对应的 feature 探测CONFIG_FAULT_INJECTIONy CONFIG_FAULT_INJECTION_DEBUG_FSy CONFIG_FAULT_INJECTION_USERCOPYy CONFIG_FAILSLABy CONFIG_FAIL_PAGE_ALLOCy CONFIG_FAIL_MAKE_REQUESTy CONFIG_FAIL_IO_TIMEOUTy CONFIG_FAIL_FUTEXy其中CONFIG_FAULT_INJECTION_DEBUG_FS提供 debugfs 接口/sys/kernel/debug/fail*供 executor 写入 fail-nth 之类的注入控制参考配置完整开启了这一组见 参考配置 L9737-L9746并额外启用了CONFIG_FAULT_INJECTION_CONFIGFSy。注意旧内核若测试旧内核还需要以下提交fault-inject: support systematic fault injection fault-inject: simplify access check for fail-nth fault-inject: fix wrong should_fail() decision in task context fault-inject: add /proc/pid/fail-nth其他高价值调试配置多多益善文档态度很明确任何其他调试配置越多越好并列出被实践证明特别有用的一组CONFIG_LOCKDEPy CONFIG_PROVE_LOCKINGy CONFIG_DEBUG_ATOMIC_SLEEPy CONFIG_PROVE_RCUy CONFIG_DEBUG_VMy CONFIG_REFCOUNT_FULLy CONFIG_FORTIFY_SOURCEy CONFIG_HARDENED_USERCOPYy CONFIG_LOCKUP_DETECTORy CONFIG_SOFTLOCKUP_DETECTORy CONFIG_HARDLOCKUP_DETECTORy CONFIG_BOOTPARAM_HARDLOCKUP_PANICy CONFIG_DETECT_HUNG_TASKy CONFIG_WQ_WATCHDOGy这些配置的作用大致如下CONFIG_LOCKDEP/CONFIG_PROVE_LOCKING是锁依赖与死锁静态验证CONFIG_PROVE_RCU校验 RCU 使用规则CONFIG_DEBUG_VM开启大量 VM 层运行时断言CONFIG_REFCOUNT_FULL把 refcount 溢出检测做成完整实现CONFIG_FORTIFY_SOURCE/CONFIG_HARDENED_USERCOPY分别加强字符串/结构体边界与用户拷贝边界检查LOCKUP_DETECTOR系列与CONFIG_DETECT_HUNG_TASK、CONFIG_WQ_WATCHDOG用于探测软/硬锁死、挂起任务与 workqueue 卡死。参考配置中可见CONFIG_LOCKDEPyL9590、CONFIG_PROVE_LOCKINGyL9581、CONFIG_DEBUG_VMyL9499、CONFIG_DETECT_HUNG_TASKyL9558等均已开启。调大超时阈值降低误报率锁死/挂起检测的默认超时较短在高负载 fuzzing 下容易误报。文档建议调大CONFIG_DEFAULT_HUNG_TASK_TIMEOUT140 CONFIG_RCU_CPU_STALL_TIMEOUT100参考配置中正是CONFIG_DEFAULT_HUNG_TASK_TIMEOUT140L9559与CONFIG_RCU_CPU_STALL_TIMEOUT100L9633另外还配合CONFIG_BOOTPARAM_HUNG_TASK_PANICy让严重挂起直接 panic 以便捕获。运行期也可用内核参数workqueue.watchdog_thresh140、watchdog_thresh55等做等价调节同样体现在参考配置的CONFIG_CMDLINE中。从源码看配置如何被真正消费为了加深理解这里把文档中的配置项与仓库代码的调用点对应起来方便读者自行深入配置项消费它的仓库代码具体机制CONFIG_KCOV/CONFIG_DEBUG_FSexecutor/executor_linux.h打开/sys/kernel/debug/kcovioctl 初始化 trace 缓冲区并映射内存CONFIG_KCOV_ENABLE_COMPARISONSexecutor/executor.cckcov_comparison_t结构解析比较操作数转成ComparisonRaw反馈给 fuzzerCONFIG_KALLSYMSpkg/vminfo/linux.go从/proc/kallsyms解析_stext/_etext确定内核代码区间用于模块地址计算与覆盖率规范化CONFIG_DEBUG_KMEMLEAKexecutor/common_linux.h通过/sys/kernel/debug/kmemleak的 scan/clear 流程做泄漏检测FeatureLeakfault injection 系列pkg/flatrpc/flatrpc.go、pkg/vminfo/features.goFeatureFault自动探测executor 向 debugfs fail 接口注入故障CONFIG_KASANpkg/report/linux.go解析BUG: KASAN:报告并归类为crash.KASAN这一对应关系也解释了为什么文档把某些配置标注为必需例如没有CONFIG_KALLSYMSpkg/vminfo/linux.go 的RequiredFiles()探测就会失败没有CONFIG_DEBUG_FSexecutor 连/sys/kernel/debug/kcov都无法打开。落地步骤小结以 upstream-apparmor-kasan.config 为基线或从make defconfig开始确保本文Syzkaller 核心功能一节的全部配置为yKCOV 四件套、KALLSYMS、命名空间、configfs/securityfs按目标检测器叠加CONFIG_KASANy或 KTSAN/KMSAN/KUBSAN与 fault injection 系列追加 LOCKDEP 等调试配置并调大CONFIG_DEFAULT_HUNG_TASK_TIMEOUT/CONFIG_RCU_CPU_STALL_TIMEOUT对 VM 场景执行make kvm_guest.config并处理# CONFIG_RANDOMIZE_BASE is not set与net.ifnames0内核命令行或 manager 配置二选一编译内核后按 docs/linux/setup.md 启动 syzkaller并用ls /sys/kernel/debug/kcov快速验证覆盖率接口可用。配置完成后即可拥有高覆盖率反馈 内存安全检测 故障注入 强沙箱隔离的完整 fuzzing 内核这也是 syzbot 长期运行的配置形态。赞分享测试操作系统网络安全【免费下载链接】syzkallersyzkaller is an unsupervised coverage-guided kernel fuzzer项目地址https://gitcode.com/gh_mirrors/syz/syzkaller点击查看免费下载相关推荐syzkaller Linux 内核覆盖率数据管道从 kcov PC 采集到源码级报告syzkaller Linux 内核覆盖率数据管道从 kcov PC 采集到源码级报告 syzkaller 以覆盖率作为无监督模糊测试的核心反馈信号内核在编测试操作系统网络安全syzkaller 内核覆盖率收集与符号化解析完全指南KCOV 与 binutils 工具链实战syzkaller 内核覆盖率收集与符号化解析完全指南KCOV 与 binutils 工具链实战 本文围绕 syzkaller 在内核模糊测试中的覆盖率Co网络安全开发工具质量保障syzkaller 覆盖率采集与报告指南KCOV、Sanitizer Coverage 与 syz-cover 全解析syzkaller 覆盖率采集与报告指南KCOV、Sanitizer Coverage 与 syz cover 全解析 syzkaller 是内核模糊测试工具网络安全开发工具质量保障上一篇让AI替你调试网页JS:js-reverse-mcp逆向MCP Server,从安装到第一次断点调试下一篇fish-shell complete 命令完全指南从零编写可编程 Tab 补全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考