Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
sgx-step — 一个用于精确执行控制的实际攻击框架 | Kitploit
工具/GitHubGitHub/jovanbulck/sgx-step
漏洞利用渗透测试硬件安全二进制分析
GitHubjovanbulck/sgx-step

sgx-step

一个用于精确执行控制的实际攻击框架

查看仓库
477933021天前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

一个用于精确飞地执行控制的实用攻击框架 CI

logo

SGX-Step 是一个开源框架,旨在促进对 Intel x86 处理器(尤其是 Intel SGX 平台)的侧信道攻击研究。SGX-Step 由一个对抗性 Linux 内核驱动和一个小的用户空间操作系统库组成,允许完全从用户空间配置非信任页表项和/或 x86 APIC 定时器中断。SGX-Step 已被用于我们自己的研究以及独立研究人员的工作中,从而实现了几种新的和改进的飞地执行攻击,这些攻击能够以最大的时间分辨率收集侧信道观测数据(即通过在执行每条指令后中断受害者飞地)。

许可证。 SGX-Step 是自由软件,遵循 GPLv3 许可。SGX-Step 标志源自 Eadweard Muybridge 的标志性 公共领域 "Sallie Gardner at a Gallop" 照片系列,该系列(就像我们的飞地单步执行目标一样)将疾驰马的动态分解为一系列单独的照片帧,以揭示马的整体步态特征。

SGX-Step 版本更新日志特性
v1.5.0稳定性修复(KPTI、内核 ISR 映射);(实验性)Gramine 移植;IPI 支持。
v1.4.0特权中断/调用门(Plundervolt)。
v1.3.0瞬态执行支持(Foreshadow)。
v1.2.0用户空间中断处理和确定性零步过滤(Nemesis)。
v1.1.0IA32 支持。
v1.0.0用户空间页表操作和 APIC 定时器单步执行。

出版物。 SGX-Step 已被多个独立研究小组使用,并催生了一系列新的高分辨率 SGX 攻击。已知使用 SGX-Step 的项目的完整最新列表包含在本 README 的底部 。原始论文的副本可在此处获取。``` @inproceedings{vanbulck2017sgxstep, title = {{SGX-Step}: A Practical Attack Framework for Precise Enclave Execution Control}, author = {Van Bulck, Jo and Piessens, Frank and Strackx, Raoul}, booktitle = {2nd Workshop on System Software for Trusted Execution {(SysTEX)}}, publisher = {{ACM}}, pages = {4:1--4:6}, month = Oct, year = 2017, }

**演示。** [app/memcmp](https://github.com/jovanbulck/sgx-step/blob/master/app/memcmp) 目录包含一个小的演示应用程序,通过单步执行一个包含微妙且非常量时间 `memcmp` 密码比较逻辑的示例飞地,展示了 SGX-Step 攻击的强大功能。与传统的、众所周知的噪声定时攻击不同,SGX-Step 能够以 _线性_ 时间确定性逐字符暴力破解密码:

![sgxstep-memcmp-demo](https://assets.kitploit.com/production/public/readmes/2927/0b35615006c06e0d0b3f3e04f9628ab3deb2402317eb48bd0fce72509bfa91d3.gif)

## 概述

与先前的飞地抢占方案相比,SGX-Step 设计的关键在于为物理内存位置(该位置持有页表条目)以及本地 APIC 内存映射 I/O 配置寄存器和 x86 中断描述符表 (IDT) 创建用户空间虚拟内存映射。这使得不受信任的、攻击者控制的主机进程可以轻松地:(i) 跟踪或修改飞地页表条目,(ii) 配置 APIC 定时器单次/周期性中断源,(iii) 触发处理器间中断,以及 (iv) 完全在 _用户空间_ 内注册自定义中断处理程序。

![sgx-step-framework](https://assets.kitploit.com/production/public/readmes/2927/b46f57fa9f7b93fb9142a28857693034e7cece8f9f675d2e9abb433093bdefe8.png)

上图总结了通过我们的框架中断和恢复 SGX 飞地时硬件和软件步骤的序列。

1. 本地 APIC 定时器中断到达一条飞地指令内。
2. 处理器执行 AEX 过程,该过程安全地将执行上下文存储在飞地的 SSA 帧中,初始化 CPU 寄存器,并向量化到在 IDT 中注册的(用户空间)中断处理程序。
3. 此时,可以轻松插入任何攻击特定的间谍代码。
4. 库返回到用户空间 AEP 跳板。我们修改了官方 SGX SDK 的不可信运行时,以允许轻松注册自定义 AEP 存根。此外,为了能够在攻击者控制的基准调试飞地上精确评估我们的方法,SGX-Step 可以 _可选地_ 进行插桩,以从中断飞地的 SSA 帧中检索存储的指令指针(使用 Linux 的 `/proc/self/mem` 接口和 `EDBGRD` 指令)。
5. 之后,我们配置本地 APIC 定时器以准备下一次中断,通过写入初始计数值内存映射 I/O 寄存器,就在执行 (6) `ERESUME` 之前。

## 源代码概述

该仓库的组织结构如下:```
.
├── app        -- Collection of sample client applications using SGX-Step to
│                 attack different victim enclave scenarios.
├── doc        -- Papers and reference material.
├── kernel     -- Minimal dynamically loadable Linux kernel driver to export
│                 physical memory to user space and bootstrap `libsgxstep`.
├── libsgxstep -- Small user-space operating system library that implements the
│                 actual SGX-Step functionality, including x86 page-table and
│                 APIC timer manipulations.
└── sdk        -- Bindings to use SGX-Step with different SGX SDKs and libOSs.

框架特性与应用

SGX-Step 是一个通用执行控制框架,允许精确地将受害飞地指令与_任意_攻击者代码交错执行。 SGX-Step 框架的一些主要用例总结如下图所示(另请参阅本 README 的底部,获取使用 SGX-Step 的最新出版物列表)。

SGX-Step attacks overview

构建与运行

0. 系统要求

SGX-Step 需要一个支持 SGX 的 Intel 处理器,以及一个现成的 Linux 内核。 我们最初的评估是在 i7-6500U/6700 CPU 上进行的,运行 Ubuntu 18.04 和标准 Linux 4.15.0 内核。 也支持更新的 Linux 内核和发行版。 下面我们总结了 Linux 内核参数。

Linux 内核参数动机
nox2apic可选地将本地 APIC 设备配置为内存映射 I/O 模式(以利用 SGX-Step 的精确单步执行功能)。如果设置,请确保在 libsgxstep/config.h 中将 X2APIC 设置为 0。或者,您可以将 CPU 保留在 x2APIC 模式,最新的 SGX-Step 发行版也应兼容。
iomem=relaxed no_timer_check抑制内核日志中不必要的警告消息。
nmi_watchdog=0抑制内核 NMI 看门狗。
isolcpus=1将受害进程关联到隔离的 CPU 核心。
clearcpuid=308,295,514禁用管理程序模式访问预防(SMAP,位 295)、管理程序模式执行预防(SMEP,位 308)和用户模式指令预防(UMIP,位 514)特性。
pti=off禁用内核页表隔离(以避免用户 IRQ 处理程序导致内核 panic)。
rcupdate.rcu_cpu_stall_suppress=1禁用内核的读取-复制更新(RCU)CPU 停滞检测器(以避免长时间单步执行而不调用内核定时器中断处理程序时出现警告。)
msr.allow_writes=on抑制 SGX-Step 对模型特定寄存器(MSR)写入的内核警告消息。
vdso=0仅适用于最近的 Linux 内核:禁用 vdso_sgx_enter_enclave 库(与 AEP 拦截补丁不兼容)。
dis_ucode_ldr可选地禁用 CPU 微码更新(最近的瞬态执行攻击缓解措施可能需要重新校准单步执行间隔)。

将所需的启动参数传递给内核,如下所示:```bash

if you don't have vim, use nano instead

$ sudo vim /etc/default/grub

Add the following line: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iomem=relaxed no_timer_check clearcpuid=308,295,514 pti=off isolcpus=1 nmi_watchdog=0 rcupdate.rcu_cpu_stall_suppress=1 msr.allow_writes=on vdso=0"

$ sudo update-grub && reboot

要检查当前运行的内核配置是否正确,请执行:```bash
$ sudo ./check_sys.sh
.. Checking recommended SGX-Step parameters          [OK]
.. Checking unknown kernel parameters                [OK]
.. Checking CPU features                             [OK]
.. Checking kernel page-table isolation              [OK]

最后,为了进一步改善执行时间的稳定性,您也可以考虑在BIOS配置中额外禁用C状态(C-States)和SpeedStep技术。

1. 构建并加载 /dev/sgx-step

SGX-Step 附带了一个可加载的内核模块,该模块向 libsgxstep 用户空间库导出了一个 IOCTL 接口。该驱动程序主要负责:(i) 钩挂 APIC 定时器中断处理程序,(ii) 收集不受信任的页表映射,以及 (iii) 可选地为基准飞地(benchmark enclaves)获取被中断的指令指针。

要构建并加载 /dev/sgx-step 驱动程序,请执行:```bash $ cd kernel/ $ ./install_SGX_driver.sh # tested on Ubuntu 20.04/22.04 $ make clean load

**注意 (/dev/sgx_enclave).** SGX-Step 同时支持旧版 Intel 树外驱动 `/dev/isgx`(应在所有平台上工作),以及上游 `/dev/sgx_enclave` 驱动(适用于具有较新 Linux 内核 >5.11 且硬件支持灵活启动控制的平台)。`install_SGX_driver.sh` 脚本应自动检测树内 `/dev/sgx_enclave` 驱动是否可用,如果不可用,则通过指向未修改 v2.14 [linux-sgx-driver](https://github.com/intel/linux-sgx-driver) 的 git 子模块构建并加载树外 `/dev/isgx` 驱动。
下载工具