Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sandsifter — x86处理器模糊测试器 | Kitploit
工具/GitHubGitHub/battelle/sandsifter
漏洞分析逆向工程模糊测试硬件安全二进制分析论文与研究学习与教育
GitHubbattelle/sandsifter

sandsifter

x86处理器模糊测试器

查看仓库
53141249年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

s a n d s i f t e r

: x86 处理器模糊测试器

概述

Sandsifter 通过系统生成机器码来搜索处理器的指令集,并监控执行过程中的异常,从而审计 x86 处理器的隐藏指令和硬件漏洞。Sandsifter 已经发现了来自所有主要厂商的秘密处理器指令;反汇编器、汇编器和模拟器中普遍存在的软件漏洞;企业级虚拟机监控器的缺陷;以及 x86 芯片中的良性及安全关键型硬件漏洞。

鉴于 x86 处理器的多样性,该工具的目标是使用户能够自行检查系统中存在的隐藏指令和漏洞。

要对你的处理器进行基本审计,请运行:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

demo_sandsifter

计算机会被系统扫描以发现异常指令。在上半部分,你可以看到 sandsifter 当前正在处理器上测试的指令。在下半部分,sandsifter 报告它发现的异常。

搜索过程可能需要几个小时到几天,具体取决于处理器的速度和复杂度。完成后,汇总结果:

root@kitploit:~
./summarize.py data/log

demo_summarizer

通常,你的处理器上会发现数百万条未记录的指令,但这些指令通常只属于少数几个不同的类别。在对异常进行分箱后,汇总工具会尝试将每条指令归入以下问题类别:

  • 软件漏洞(例如,你的虚拟机监控器或反汇编器中的 bug),
  • 硬件漏洞(你 CPU 中的 bug),或
  • 未记录的指令(处理器中存在但制造商未承认的指令)

按 'Q' 键退出并获取系统扫描的文本摘要:

扫描结果有时难以被工具自动分类,可能需要手动分析。如需帮助分析你的结果,可以随时将 ./data/log 文件发送至 [email protected]。该日志中不包含除处理器品牌、型号和修订版本(来自 /proc/cpuinfo)之外的任何个人信息。

结果

使用 sandsifter 进行扫描,已经发现了跨越数十个操作码类别的未记录处理器特性、企业级虚拟机监控器的缺陷、几乎所有主流反汇编和模拟工具中的漏洞,以及打开处理器安全漏洞通道的关键硬件缺陷。

结果的详细信息可在项目白皮书中找到。

(待办事项:此处应列出详细结果枚举)

构建

Sandsifter 需要先安装 Capstone 反汇编引擎:http://www.capstone-engine.org/。通常可以通过以下方式安装 Capstone:

root@kitploit:~
sudo apt-get install libcapstone3 libcapstone-dev
sudo pip install capstone

然后使用以下命令构建 Sandsifter:

root@kitploit:~
make

接着运行:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

标志

标志通过 --flag 传递给 sifter,通过 ---f 传递给 injector。

示例:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

Sifter 标志:

root@kitploit:~
--len
	搜索所有指令的长度差异(执行方式与反汇编器预期不同的指令,或者反汇编器预期存在但实际上不存在的指令)

--dis
	搜索有效指令的长度差异(执行方式与反汇编器预期不同的指令)

--unk
	搜索未知指令(反汇编器不知道但能成功执行的指令)

--ill
	与 --unk 相反,搜索无效的反汇编(不能成功执行但反汇编器承认的指令)

--tick
	定期将当前指令写入磁盘

--save
	退出时保存搜索进度

--resume
	从上次保存的状态恢复搜索

--sync
	发现搜索结果时立即写入磁盘

--low-mem
	不将结果存储在内存中

Injector 标志:

root@kitploit:~
-b
	模式:暴力破解

-r
	模式:随机模糊测试

-t
	模式:隧道模糊测试

-d
	模式:外部导向模糊测试

-R
	原始输出模式

-T
	文本输出模式

-x
	定期将进度写入 stderr

-0
	允许空指针解引用(需要 sudo)

-D
	允许重复前缀

-N
	无 NX 位支持

-s seed
	随机搜索中的种子值

-B brute_depth
	暴力搜索中的最大搜索深度

-P max_prefix
	要搜索的最大前缀数量

-i instruction
	开始搜索的指令(包含)

-e instruction
	结束搜索的指令(不包含)

-c core
	执行搜索的核心

-X blacklist
	将指定指令加入黑名单

-j jobs
	同时运行的作业数

-l range_bytes
	每个子范围内基本指令的字节数

快捷键

m: 模式 - 更改 sifter 的搜索模式(暴力、随机或隧道)

q: 退出 - 退出 sifter

p: 暂停 - 暂停或恢复搜索

算法

扫描支持四种不同的搜索算法,可以在命令行设置,也可以通过热键循环切换。

  • 随机搜索:生成随机指令进行测试;通常能快速产生结果,但无法发现复杂的隐藏指令和漏洞。
  • 暴力搜索:递增地尝试指令,直到用户指定的长度;在几乎所有情况下,其性能都不如随机搜索。
  • 驱动或突变驱动搜索:旨在通过遗传算法创建新的、越来越复杂的指令;尽管很有前景,但这一方法从未完全实现,这里作为未来研究的存根。
  • 隧道搜索:是演示和白皮书中描述的方法,在绝大多数情况下,它提供了全面性和速度之间的最佳平衡。

提示

  • sudo

    为获得最佳效果,应以 root 用户运行该工具。这样做是必要的,以便进程可以将页面映射到地址 0 的内存中,这需要 root 权限。该页面可以防止许多指令在内存访问时发生段错误,从而实现更准确的故障分析。

  • 前缀

    指令搜索深度的主要限制是要探索的前缀字节数量,每增加一个前缀字节,搜索空间就会增加大约 10 倍。使用 -P 标志限制前缀字节。

  • 颜色

    sifter 的界面是为 256 色终端设计的。虽然具体细节因终端而异,但大致可以通过以下方式实现:

    root@kitploit:~
    export TERM='xterm-256color'
    
  • GUI

    界面假定终端至少具有特定大小;如果界面不能正确渲染,尝试增大终端尺寸;这通常可以通过减小终端字体大小来实现。

    在某些情况下,可能希望或有必要在没有图形前端的情况下运行该工具。可以通过直接运行 injector 来实现:

    root@kitploit:~
    sudo ./injector -P1 -t -0
    

    要过滤直接调用 injector 的结果,可以使用 grep。例如,

    root@kitploit:~
    sudo ./injector -P1 -r -0 | grep '\.r' | grep -v sigill
    

    搜索处理器和反汇编器对指令长度不一致(grep '.r')但指令成功执行(grep -v sigill)的指令。

  • 定向模糊测试

    在很多情况下,将模糊测试器定向到特定目标是很重要的。例如,如果你怀疑模拟器在重复的 lock 前缀(0xf0)周围存在缺陷,可以使用 -i 和 -e 标志将模糊测试器定向到指令空间的这个区域:

    root@kitploit:~
    sudo ./sifter.py --unk --dis --len --sync --tick -- -t -i f0f0 -e f0f1 -D -P15
    
  • 遗留系统

    对于扫描非常老的系统(i586 级别处理器、低内存系统),向 sifter 传递 --low-mem 标志,向 injector 传递 -N 标志:

参考资料

  • 技术和结果的讨论可以在 Black Hat 演示视频 中找到。
  • 技术细节在白皮书中有描述。
  • Black Hat 演示的幻灯片在这里。

作者

sandsifter 是 Christopher Domas (@xoreaxeaxeax) 的研究成果。

下载工具
root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick --low-mem -- -P1 -t -N

如果你观察到扫描完成得太快(例如,几秒钟就完成),通常是因为你的处理器需要这些标志。

  • 32 位 vs 64 位

    默认情况下,sandsifter 构建为目标主操作系统的位宽。但是,某些指令在 32 位进程和 64 位进程中的行为不同。为了探索这些情况,有时在 64 位系统上运行 32 位的 sandsifter 是有价值的。

    要在 64 位系统上构建 32 位的 sandsifter,必须安装 32 位的 Capstone;相关说明可以在 http://www.capstone-engine.org/ 找到。

    然后必须为 32 位架构构建 sandsifter:

    root@kitploit:~
    make CFLAGS=-m32
    

    这样,就可以在 64 位系统上探索 32 位的指令空间了。