felixwilhelm/xenpwn

GitHub: felixwilhelm/xenpwn

基于 Xen 硬件辅助虚拟化的内存访问追踪工具,用于发现软件中的双重获取等安全漏洞。

Stars: 145 | Forks: 29

# Xenpwn Xenpwn 是一个利用硬件辅助虚拟化进行内存访问追踪的工具包。 它作为普通用户空间应用程序运行在 Xen hypervisor 的管理域 (dom0) 中,可用于追踪运行在同一 hypervisor 上的另一个 VM 执行的任何内存访问。该工具包使用 [libvmi](http://libvmi.com/) 与 Xen hypervisor API 交互,并依赖 [simutrace](https://github.com/simutrace/simutrace) 实现内存追踪的高效存储。Xenpwn 曾用于发现 Xen hypervisor 域间通信中的双重获取 (double fetch) 漏洞,结果见 [XSA 155](http://xenbits.xen.org/xsa/advisory-155.html)。关于识别其他软件中双重获取的进一步研究仍在进行中。 此代码是我在卡尔斯鲁厄理工学院 (KIT) 的硕士论文 ["Tracing Privileged Memory Accesses to Discover Software Vulnerabilities"](https://os.itec.kit.edu/downloads/ma_2015_wilhelm_felix__discover_software_vulnerabilities.pdf) 的一部分。论文包含对设计、架构和实现的详细讨论。 Xenpwn 深受 [j00ru](http://j00ru.vexillium.org/) 和 [gynvael](http://gynvael.coldwind.pl/) 所做的 [Bochspwn](http://vexillium.org/dl.php?bochspwn.pdf) 研究的启发。 ## 许可证 MIT License ## 构建说明 * 安装 Xen (测试版本 >=4.4) * 从 https://github.com/libvmi/libvmi/tree/250cff3510a115ecae986228ef1a258180a68670 安装 libvmi (http://libvmi.com/):确保启用 xen-events * 安装 simutrace (http://simutrace.org/) * 安装 capstone engine (http://www.capstone-engine.org/) * 构建 Xenpwn: ``` mkdir build cd build; cmake ../; make ``` ## 扩展 Xenpwn 代码库可分为目标无关代码和目标特定代码。 虽然目标无关代码在其他目标上很大程度上是可重用的,但目标特定代码需要进行调整。此仓库目前仅包含用于分析 Xen hypervisor 的代码。 要支持新目标,需要开发以下组件: * 物理内存页识别:由于 VM exit 引入的大量活动开销,Xenpwn 不太适合追踪系统中的**所有**内存访问。为了获得可接受的性能,应仅追踪小部分物理内存地址。对于我论文中描述的用例,这些是用于域间通信的内存页。(当前实现在 xentrace.cc 中) * 页面更新触发:根据您的用例,受监视页面的集合可能会在运行时发生变化。这可以通过在正确的代码位置设置 libvmi 断点来实现(当前实现 xentrace.cc: reparse_grant_table) * 判断内存访问是否有意义 (xentrace.cc xen_trace_event)。应调整实际的追踪事件处理程序,使其仅存储对您的用例有意义的内存访问。
标签:Capstone, Dom0, Double Fetch, Hypervisor, Kit, libvmi, Simutrace, VMI, Web报告查看器, Xen, XSA-155, 二进制分析, 云安全运维, 内存访问追踪, 开放策略代理, 特权级内存, 硬件辅助虚拟化, 虚拟化安全