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

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

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

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

工具目录

分类

查看所有分类
Loading categories
sandsifter — x86 处理器模糊测试工具 | Kitploit
工具/GitHubGitHub/xoreaxeaxeax/sandsifter
漏洞分析逆向工程模糊测试硬件安全二进制分析
GitHubxoreaxeaxeax/sandsifter

sandsifter

x86 处理器模糊测试工具

查看仓库
5.1k355319年前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

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

  • 软件漏洞(例如,您的虚拟化软件或反汇编器中的漏洞),
  • 硬件漏洞(您的 CPU 中的漏洞),或
  • 未记录指令(处理器中存在但制造商未认可的指令)

按 '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 传递给注入器。

示例:

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
	不在内存中存储结果

注入器标志:

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

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

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

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

    要过滤直接运行注入器的结果,可以使用 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 标志,向注入器传递 -N 标志:

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

    如果您发现扫描完成得太快(例如,几秒钟内完成),通常是因为需要为您正在扫描的处理器提供这些标志。

  • 32 位与 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 位指令空间。

参考

  • 相关技术和结果的讨论可在 Black Hat 演讲中找到。
  • 技术细节在白皮书中有描述。
  • Black Hat 演讲的幻灯片在此处。

作者

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

下载工具