SiliFuzz:通过代理模糊测试发现CPU缺陷
silifuzz 项目地址: https://gitcode.com/gh_mirrors/si/silifuzz
项目介绍
SiliFuzz 是一个通过模糊测试软件代理(如 CPU 模拟器或反汇编器)来发现 CPU 缺陷的系统。它通过在实际 CPU 上大规模执行积累的测试输入(称为 语料库)来实现这一目标。SiliFuzz 目前仍在开发中,详细信息请参阅 论文。
项目技术分析
术语解释
- 软件模糊测试和覆盖率:模糊测试是一种通过生成大量动态测试输入来测试目标(如应用程序或 API)的技术。其目标是使这些输入尽可能多样化和有趣,以触发边缘情况,从而最大化代码覆盖率。
- 代理:在 SiliFuzz 中,代理是指任何在某些方面与目标 CPU 行为相似的软件或硬件系统,如 CPU 模拟器或反汇编器。当无法直接从目标收集覆盖信息时,代理是必要的。
- 语料库/语料库分片:用于测试目标的输入集合称为 语料库。大型语料库通常包含数百万个输入,并被分成多个不重叠的块,称为 分片。
- 快照:SiliFuzz 快照描述了一小段 CPU 指令及其初始寄存器和内存状态,以确定性地执行该序列。快照通常包含少于 100 字节的代码,运行时间在微秒级,但可以任意大。
- 预期结束状态:结束状态描述了在快照执行结束时预期存在的寄存器和内存内容。如果快照在不同的 CPU 微架构上执行不同,它将具有多个预期结束状态。
- Snap:Snap 是 快照 的内存表示形式,可以由 Runner 轻松加载和执行。
- Runner:Runner 是一个用于测试单个 CPU 核心的二进制文件。它消耗一个语料库分片,反复执行其中的随机 Snaps,并检查是否达到预期结束状态。
- Orchestrator:Orchestrator 是一个驱动多个 Runner 的进程。在典型设置中,Orchestrator 将持续为每个逻辑 CPU 核心执行一个 Runner,并累积和报告单个 Runner 进程产生的任何故障。
支持的平台和微架构
SiliFuzz 已在以下 x86_64
微架构上进行了广泛测试,运行最新的 Linux 内核:
intel-skylake / intel-cascadelake
intel-haswell / intel-broadwell
intel-ivybridge
amd-rome
amd-milan
其他 x86_64
微架构只要具备编译器和操作系统支持,也应该能够工作。SiliFuzz 正在积极开发 AArch64
支持。
项目及技术应用场景
SiliFuzz 主要应用于以下场景:
- CPU 缺陷检测:通过模糊测试软件代理,SiliFuzz 能够发现 CPU 中的逻辑错误和电气缺陷,从而提高硬件的可靠性和稳定性。
- 安全漏洞挖掘:SiliFuzz 已经发现了一些已知的安全漏洞,如 CVE-2021-26339 等,显示出其在安全领域的潜力。
- 硬件测试:在硬件开发和测试阶段,SiliFuzz 可以作为自动化测试工具,帮助发现和修复潜在的硬件问题。
项目特点
- 高效性:SiliFuzz 通过大规模并行执行测试输入,能够快速发现 CPU 中的缺陷。
- 灵活性:支持多种 CPU 微架构,并且正在开发对
AArch64
的支持,具有广泛的适用性。 - 自动化:SiliFuzz 的 Orchestrator 能够自动管理多个 Runner,简化了大规模测试的部署和管理。
- 可扩展性:通过使用语料库分片和快照技术,SiliFuzz 能够处理大规模的测试输入,具有良好的可扩展性。
总结
SiliFuzz 是一个强大的工具,通过模糊测试软件代理来发现 CPU 中的缺陷。它不仅能够提高硬件的可靠性和稳定性,还在安全漏洞挖掘和硬件测试方面展现出巨大的潜力。如果你正在寻找一种高效、灵活且自动化的 CPU 测试工具,SiliFuzz 绝对值得一试。