Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
sgx-step — Практический фреймворк для атак с точным контролем выполнения анклавов | Kitploit
Инструменты/GitHubGitHub/jovanbulck/sgx-step
ЭксплуатацияТестирование на ПроникновениеАппаратная БезопасностьАнализ Бинарных Файлов
GitHubjovanbulck/sgx-step

sgx-step

Практический фреймворк для атак с точным контролем выполнения анклавов

Репозиторий
477932 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

A Practical Attack Framework for Precise Enclave Execution Control CI

logo

SGX-Step — это фреймворк с открытым исходным кодом, предназначенный для облегчения исследований атак по побочным каналам на процессоры Intel x86 в целом и на платформы Intel SGX в частности. SGX-Step состоит из враждебного драйвера ядра Linux и небольшой библиотеки операционной системы пользовательского пространства, которая позволяет настраивать ненадёжные записи таблицы страниц и/или прерывания таймера APIC x86 полностью из пользовательского пространства. SGX-Step использовался в наших собственных исследованиях, а также независимыми исследователями для реализации нескольких новых и улучшенных атак на выполнение в анклавах, которые собирают наблюдения побочных каналов с максимальным временным разрешением (т.е. прерывая анклав жертвы после каждой отдельной инструкции).

Лицензия. SGX-Step — это свободное программное обеспечение, распространяемое по лицензии GPLv3. Логотип SGX-Step взят из культовой серии фотографий общественного достояния Эдварда Мейбриджа «Салли Гарднер на галопе», которая, как и наша цель пошагового выполнения анклавов, разбивает динамику скачущей лошади на серию отдельных кадров, чтобы выявить общие свойства походки лошади.

Публикации. 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, }

root@kitploit:~
**Демо.** Каталог [app/memcmp](https://github.com/jovanbulck/sgx-step/blob/HEAD/app/memcmp) содержит небольшое демонстрационное приложение, иллюстрирующее мощь атак SGX-Step путем пошагового выполнения образца анклава, содержащего тонкую, непостоянную во времени логику сравнения паролей `memcmp`. В отличие от традиционных, известных своей шумностью атак по времени, SGX-Step может детерминированно подобрать пароль посимвольно за _линейное_ время:

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

## Обзор

Ключевым аспектом дизайна SGX-Step, в отличие от предыдущих предложений по вытеснению анклавов, является создание отображений виртуальной памяти пользовательского пространства для физических ячеек памяти, содержащих записи таблиц страниц, а также для конфигурационных регистров локального APIC, отображенных в память ввода-вывода, и дескрипторной таблицы прерываний 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 анклава, инициализирует регистры ЦП и направляет к (пользовательскому) обработчику прерываний, зарегистрированному в IDT.
3. На этом этапе можно легко подключить любой специфический для атаки шпионский код.
4. Библиотека возвращается к трамплину AEP пользовательского пространства. Мы изменили ненадежную среду выполнения официального SDK SGX, чтобы обеспечить простую регистрацию пользовательского заглушки AEP. Кроме того, для точной оценки нашего подхода на контролируемых атакующим отладочных анклавах-бенчмарках SGX-Step может _опционально_ быть инструментирован для извлечения сохраненного указателя инструкции из кадра SSA прерванного анклава (с использованием интерфейса Linux `/proc/self/mem` и инструкции `EDBGRD`).
5. После этого мы настраиваем локальный таймер APIC для следующего прерывания, записывая в регистр начального счета, отображенный в память ввода-вывода, непосредственно перед выполнением (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 — это универсальный фреймворк управления выполнением, который позволяет точно чередовать инструкции внутри vicitm enclave с произвольным кодом атакующего. Некоторые основные варианты использования фреймворка SGX-Step обобщены на рисунке ниже (см. также нижнюю часть этого README для актуального списка публикаций, использующих SGX-Step).

Обзор атак SGX-Step

Сборка и запуск

0. Требования к системе

SGX-Step требует совместимый с SGX процессор Intel и стандартное ядро Linux. Наша первоначальная оценка проводилась на процессорах i7-6500U/6700 с Ubuntu 18.04 и стандартным ядром Linux 4.15.0. Также поддерживаются более новые ядра и дистрибутивы Linux. Ниже приведены параметры ядра Linux, которые мы используем.

Передайте желаемые параметры загрузки ядру следующим образом:```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

root@kitploit:~
Чтобы убедиться, что текущее работающее ядро настроено правильно, выполните:```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]

Наконец, для повышения общей стабильности времени выполнения, вы можете дополнительно отключить технологию C-States и SpeedStep в конфигурации BIOS.

1. Сборка и загрузка /dev/sgx-step

SGX-Step поставляется с загружаемым модулем ядра, который экспортирует интерфейс IOCTL для пользовательской библиотеки libsgxstep. Драйвер в основном отвечает за (i) перехват обработчика прерываний таймера APIC, (ii) сбор непроверенных отображений таблиц страниц и, опционально, (iii) получение прерванного указателя инструкции для бенчмарк-анклавов.

Для сборки и загрузки драйвера /dev/sgx-step выполните:```bash $ cd kernel/ $ ./install_SGX_driver.sh # tested on Ubuntu 20.04/22.04 $ make clean load

root@kitploit:~
**Примечание (/dev/sgx_enclave).** SGX-Step поддерживает как устаревший драйвер Intel
`/dev/isgx` (вне дерева), который должен работать на всех платформах, так и
драйвер основного ядра `/dev/sgx_enclave` для платформ с новыми ядрами Linux
>5.11 и аппаратной поддержкой гибкого управления запуском. Скрипт
`install_SGX_driver.sh` должен автоматически определить, доступен ли драйвер
`/dev/sgx_enclave` из дерева, и, если нет, собрать и загрузить драйвер
`/dev/isgx` (вне дерева) через git-подмодуль, указывающий на неизмененную
версию v2.14 [linux-sgx-driver](https://github.com/intel/linux-sgx-driver).

**Примечание (/dev/mem).** Мы полагаемся на виртуальное устройство Linux `/dev/mem` для создания
пользовательских отображений виртуальной памяти для физических регистров ввода-вывода
APIC с отображением в память и записей таблицы страниц, представляющих интерес.
Однако современные дистрибутивы Linux обычно включают опцию `CONFIG_STRICT_DEVMEM`,
которая предотвращает такое использование. Поэтому наш драйвер `/dev/sgx-step`
включает [подход](https://www.libcrack.so/index.php/2012/09/02/bypassing-devmem_is_allowed-with-kprobes/)
для обхода проверок `devmem_is_allowed` без необходимости перекомпиляции ядра.

### 2. Пропатчить и установить SGX SDK

Чтобы обеспечить простую регистрацию пользовательской точки асинхронного выхода (AEP),
мы модифицировали ненадежную среду выполнения официального Intel SGX SDK.
Выполните следующие действия, чтобы клонировать [linux-sgx](https://github.com/01org/linux-sgx) v2.29
и применить наши патчи.```bash
$ cd sdk/intel-sdk/
$ ./install_SGX_SDK.sh                 # tested on Ubuntu 20.04/22.04
$ source /opt/intel/sgxsdk/environment # add to ~/.bashrc to preserve across terminal sessions
$ sudo service aesmd status            # stop/start aesmd service if needed

Приведённые выше скрипты установки протестированы на Ubuntu 22.04 LTS. Для других дистрибутивов GNU/Linux, пожалуйста, следуйте инструкциям в проекте linux-sgx, чтобы собрать и установить пакеты Intel SGX SDK и PSW. Вам также потребуется собрать и загрузить (немодифицированный) модуль ядра SGX linux-sgx-driver для использования SGX-Step.

Примечание (локальная установка). Патченные пакеты SGX SDK и PSW могут быть установлены локально, не затрагивая совместимую общесистемную установку 'linux-sgx'. Для этого примеры Makefiles поддерживают переменную окружения SGX_SDK, указывающую на локальный каталог установки SDK. При обнаружении нестандартного пути SDK (т.е. не /opt/intel/sgxsdk), цели Makefile "run" дополнительно динамически линкуются с патченной ненадёжной средой выполнения libsgx_urts.so, собранной в локальном каталоге linux-sgx (с использованием переменной окружения LD_LIBRARY_PATH).

Примечание (поддержка 32-бит). Инструкции (устаревшие и не поддерживаются!) по сборке 32-битных версий SGX SDK и SGX-Step можно найти в README-m32.md.

3. Сборка и запуск тестовых приложений

Пользовательские приложения могут линковаться с библиотекой libsgxstep, чтобы использовать функции пошагового выполнения и манипуляции таблицами страниц SGX-Step. Посмотрите на примеры приложений в каталоге "app".

interrupt abstract box

Сначала проверьте настройку APIC и таблицы дескрипторов прерываний:```bash $ cd app/selftest/idt $ make run # fires interrupts in an infinite loop to stress-test stability; exit with CTRL-C

root@kitploit:~
Например, чтобы собрать и запустить простой пример приложения для проверки функций манипуляции таблицами страниц и патчей SDK:```bash
$ cd app/aep-redirect
$ make run

Чтобы протестировать функциональность пошагового выполнения с таймером, попробуйте, например, собрать и запустить эталонное анклавное приложение для пошагового выполнения слайда из 100 последовательных инструкций nop:```bash $ cd app/bench $ NUM=100 make parse # alternatively vary NUM and use STRLEN=1 or ZIGZAG=1

root@kitploit:~
Предыдущая команда собирает `libsgxstep`, эталонное анклавное приложение-жертву и процесс-нарушитель на хосте, где сценарий атаки и размер экземпляра настраиваются через соответствующие переменные окружения. Эта же команда также запускает полученный двоичный файл в неинтерактивном режиме (для обеспечения детерминированных интервалов таймера) и, наконец, вызывает специфичный для атаки постобрабатывающий скрипт на Python для разбора полученных результатов бенчмарка указателя инструкций анклава.

**Примечание (производительность).** Пошаговое выполнение кода внутри анклава приводит к значительному замедлению. Мы измерили время выполнения до 15 минут для экспериментов, описанных в статье. Функции управления таблицами страниц SGX-Step позволяют инициировать пошаговый режим только для выбранных функций, например, отзывая права доступа на определенные страницы кода или данных, представляющие интерес.

**Примечание (интервал таймера).** Точное значение интервала таймера зависит от частоты процессора и, следовательно, остается по своей природе платформозависимым (см. также [app/selftest/apic](https://github.com/jovanbulck/sgx-step/blob/HEAD/app/selftest/apic) для подробных микробенчмарков, оценивающих точность различных режимов таймера APIC). Настройте подходящее значение в `/app/bench/main.c`. Мы установили точные интервалы таймера для наших оценочных платформ (см. таблицу ниже), настраивая и наблюдая результаты трассировки указателя инструкций микробенчмарка NOP в анклаве, как дополнительно описано ниже.

**Примечание (стабильность).** Во избежание зависания или паники ядра Linux, SGX-Step должен автоматически восстанавливать таблицу дескрипторов прерываний и локальный таймер APIC после выхода из процесса `libsgxstep`. Вы можете проверить, продолжает ли таймер APIC срабатывать на всех ядрах, следующим образом:```bash
$ watch -n0.1 "cat /proc/interrupts | grep 'Local timer interrupts'"

Калибровка интервала одиночного шага

В таблице ниже перечислены поддерживаемые в настоящее время процессоры Intel с указанием их интервала таймера APIC для одиночного шага (libsgxstep/config.h). Обратите внимание, что точный интервал одиночного шага может зависеть от версии микрокода процессора, когда применяются недавние средства защиты от атак с временным выполнением, которые сбрасывают микроархитектурные буферы при входе/выходе из анклава. Некоторые разные версии микрокода приведены для справки в таблице ниже.

Примечание (калибровка). В настоящее время самый простой способ настроить надежный интервал таймера — использовать инструмент для бенчмаркинга app/bench с длинной NOP-горкой и постепенно увеличивать/уменьшать SGX_STEP_TIMER_INTERVAL. Вероятно, можно начать с 20, а затем выполнить NUM=100 make parse, чтобы получить сводку по одиночным шагам, нулевым шагам и множественным шагам для NOP-горки из 100 инструкций (как только у вас будет более или менее стабильный интервал, можно перейти на более длинные горки). Слишком много нулевых шагов указывает на то, что необходимо увеличить интервал таймера, тогда как множественные шаги требуют его уменьшения.

Примечание (фильтрация нулевых шагов). Важно: не беспокойтесь, если осталось несколько нулевых шагов; пока вы продвигаетесь, вы всегда можете детерминированно отфильтровать нулевые шаги, проверяя бит доступа PTE кода анклава (который устанавливается только тогда, когда инструкция фактически завершается и происходит одиночный шаг). Таким образом, после настройки консервативного интервала таймера, который всегда исключает множественные шаги, SGX-Step может обеспечить бесшумный одиночный шаг с идеальной гранулярностью на уровне инструкций.

Примечание (расширение «окна посадки» прерывания). Как поясняется в анализе первопричин ниже, чем медленнее обход таблицы страниц для разрешения адреса (кода) первой инструкции анклава после ERESUME, тем длиннее «окно посадки» прерывания и, следовательно, тем надежнее будет скорость одиночного шага SGX-Step. Например, мы обнаружили, что в дополнение к очистке бита доступа PMD анклава, окно посадки можно еще больше расширить, сбросив одну или несколько незащищенных записей таблицы страниц из кэша ЦП перед ERESUME, тем самым заставляя ЦП ждать медленную память во время обхода таблицы страниц. Таким образом, если вы не можете найти надежную конфигурацию интервала таймера, убедитесь, что вы (i) очистили бит «доступа» PTE/PMD кода анклава и (ii) сбросили (CLFLUSH) одну или несколько записей таблицы страниц анклава в обработчике AEP.

Примечание (микрокод). Еще одно предостережение касается недавних исправлений микрокода для Foreshadow/ZombieLoad/RIDL и т. д., которые сбрасывают уязвимые микроархитектурные буферы при входе/выходе из анклава. Имейте в виду, что когда эти средства защиты включены, интервал таймера придется увеличить, так как вход в анклав занимает больше времени (например, на моем ЦП i7-8650U я обнаружил, что интервал таймера одиночного шага увеличивается до 54 с новым микрокодом, по сравнению с всего 34 с микрокодом до Foreshadow). Дополнительные операции сброса могут также несколько увеличить дисперсию времени входа в анклав, что означает, что вам, возможно, придется настроить таймер более консервативно с большим количеством нулевых шагов (которые можно детерминированно отфильтровать, как объяснено выше).

Анализ первопричин SGX-Step

Подробный анализ первопричин того, как именно SGX-Step удается надежно прерывать первую (возможно, очень короткую!) инструкцию анклава после крайне сложной инструкции ERESUME, описан в статье AEX-Notify. Мы обнаружили, что ключ к успеху SGX-Step заключается в использовании бита «доступа» (A). В частности, SGX-Step всегда очищает A-бит в каталоге средних страниц (PMD) анклава-жертвы перед включением APIC для генерации одноразового прерывания. A-бит устанавливается процессором только тогда, когда анклав выполняет хотя бы одну инструкцию, и, следовательно, может использоваться для детерминированного различения нулевых шагов и одиночных шагов.

assist window root-cause analysis

Критически важно, что поскольку обработчик промахов страниц процессора оптимизирован для общего быстрого пути и использует гораздо более медленную «микрокодную ассистентную» обработку для менее частого и более сложного случая, когда необходимо изменить PMD или PTE, эта ассистентная обработка приводит к удлинению выполнения первой инструкции анклава после ERSUME на несколько сотен циклов. Таким образом, это «ассистентное окно» эффективно создает просторное посадочное пространство для грубозернистого, нормально распределенного прерывания таймера APIC, чтобы оно прибыло с высокой точностью.

Использование SGX-Step в собственных проектах

Самый простой способ начать использовать фреймворк SGX-Step в своих проектах — через git-подмодули:```bash $ cd my/git/project $ git submodule add https://github.com/jovanbulck/sgx-step.git $ cd sgx-step # Now build /dev/sgx-step and libsgxstep as described above

root@kitploit:~
Посмотрите на Makefile'ы в каталоге `app`, чтобы увидеть, как клиентское приложение может линковаться с `libsgxstep` и любыми локальными пакетами SGX SDK/PSW.

<a name="bottom"></a>
Ниже приведён список известных проектов, использующих SGX-Step. Не стесняйтесь открывать pull request, если ваш проект использует SGX-Step, но не указан в списке.

| Название                                                                                         | Детали публикации                                                                             | Исходный код                                                                    | Используемые возможности SGX-Step                    |
| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------- |
| AEX-NStep: Атаки вероятностного подсчёта прерываний на Intel SGX                                 | [S&P'26](https://arxiv.org/pdf/2510.14675)                                                    | [Zenodo](https://zenodo.org/records/17338383)                                   | Сбои страниц, IPI, шлюз прерываний WRMSR             |
| MDPeek: Взлом сбалансированных ветвей в SGX с помощью побочных каналов блока устранения неоднозначности памяти | [ASPLOS'25](https://www.comp.nus.edu.sg/~tcarlson/pdfs/liu2025mbbbiswmdusc.pdf)               | [GitHub (оценено артефактом и функционально)](https://github.com/CPU-THU/MDPeek) | Сбои страниц                                          |
| Activation Functions Considered Harmful: Восстановление весов нейронных сетей через управляемые каналы | [RAID'25](https://ieeexplore.ieee.org/document/11352487)                                      | [Артефакт на GitHub](https://github.com/heavyimage/afch_paper)                  | Одиночный шаг, PTE A/D                               |
| TLBlur: Автоматизированная компиляторная защита от управляемых каналов на платформах Intel SGX      | [USEC'25](https://vanbulck.net/files/usenix25-tlblur.pdf)                                     | [GitHub (полный)](https://github.com/TLBlur-SGX)                                | Одиночный шаг, PTE A/D, сбои страниц                 |
| POSTER: О возможности определения выполнения SGX через PMU                                        | [AsiaCCS'24](https://dl.acm.org/doi/pdf/10.1145/3634737.3659434)                              | -                                                                               | Одиночный шаг, нулевой шаг                           |
| SIGY: Взлом анклавов Intel SGX с помощью вредоносных исключений и сигналов                         | [ArXiv'24](https://arxiv.org/abs/2404.13998)                                                  | -                                                                               | Таймерные прерывания, сбои страниц                    |
| О (отсутствии) конфиденциальности кода в доверенных средах выполнения                              | [S&P24](https://ivanpuddu.com/files/papers/TEE_WASM_code_Leakage.pdf)                         | [GitHub (пустой)](https://github.com/dn0sar/TEE-WASM-Code-Extraction)           | Одиночный шаг                                         |
| TeeJam: Утечки на уровне подкэш-линии возвращаются                                                | [CHES24](https://doi.org/10.46586/tches.v2024.i1.457-500)                                     | [GitHub (полный)](https://github.com/UzL-ITS/teejam)                            | Задержка прерываний одиночного шага, PTE A/D         |
| AEX-Notify: Предотвращение точных атак одиночного шага через осведомлённость о прерываниях для анклавов Intel SGX | [USEC23](https://jovanbulck.github.io/files/usenix23-aexnotify.pdf)                           | [GitHub (смягчение SDK SGX)](https://github.com/intel/linux-sgx/blob/master/sdk/trts/linux/trts_mitigation.S) | Одиночный шаг, PTE A/D                                |
| Контролируемые состояния гонки в анклавах: атаки и обнаружение                                    | [USEC23](https://www.usenix.org/system/files/usenixsecurity23-chen-sanchuan.pdf)              | [GitHub (не атака)](https://github.com/OSUSecLab/SGXRacer)                     | Одиночный шаг, APIC                                  |
| BunnyHop: Эксплуатация предвыборки команд                                                         | [USEC23](https://www.usenix.org/system/files/usenixsecurity23-zhang-zhiyuan-bunnyhop.pdf)      | [GitHub (не SGX PoC)](https://github.com/0xADE1A1DE/BunnyHop)                  | Одиночный шаг, PTE A/D                               |
| Downfall: Эксплуатация спекулятивного сбора данных                                                | [USEC23](https://www.usenix.org/system/files/usenixsecurity23-moghimi.pdf)                     | [GitHub (не SGX PoC)](https://github.com/flowyroll/downfall/tree/main/POC)     | Одиночный шаг, нулевой шаг                           |
| All Your PC Are Belong to Us: Эксплуатация обновлений BTB без передачи управления для динамического извлечения PC | [ISCA23](https://dl.acm.org/doi/pdf/10.1145/3579371.3589100?casa_token=Q5jf5nOgiLIAAAAA:cT0ltJh7vk943buODuR4oMFKmuhg2Tp-djFm2kUu6DzlxtBhNhEw2WteRggn0k99D7ft-P6pluVrFA) | -                                                                               | Одиночный шаг                                         |
| Атака по времени кэша на HQC                                                                     | [CHES23](https://eprint.iacr.org/2023/102.pdf)                                                | -                                                                               | Одиночный шаг, PTE A/D                               |
| FaultMorse: Автоматизированная атака по управляемому каналу через самую длинную повторяющуюся последовательность | [ComSec23](https://www.sciencedirect.com/science/article/pii/S0167404822003959)               | [GitHub (постобработка)](https://github.com/Ezekiel-1998/FaultMorse)            | Сбой страницы                                          |
| AEPIC Leak: Архитектурная утечка неинициализированных данных из микроархитектуры                  | [USEC22](https://www.usenix.org/system/files/sec22-borrello.pdf)                              | [GitHub (полный)](https://github.com/IAIK/AEPIC)                                | Одиночный шаг, PTE A/D                               |
| MoLE: Смягчение атак по побочным каналам на SGX через динамическое сокрытие расположения данных   | [ACSAC22](https://dl.acm.org/doi/fullHtml/10.1145/3564625.3568002)                            | -                                                                               | Одиночный шаг, сбой страницы, транзиентное выполнение |
| WIP: Атака прерыванием на роботизированные транспортные средства, защищённые TEE                   | [AutoSec22](https://www.ndss-symposium.org/wp-content/uploads/autosec2022_23001_paper.pdf)    | -                                                                               | Одиночный шаг, многошаговый режим                    |
| К самоконтролируемым анклавам: обнаружение побочных каналов с помощью счетчиков производительности | [NordSec22](https://link.springer.com/chapter/10.1007/978-3-031-22295-5_7)                    | -                                                                               | Сбой страницы, LVI                                    |
| ENCLYZER: Автоматизированный анализ транзиентных утечек данных в Intel SGX                        | [SEED22](https://ieeexplore.ieee.org/document/9935016)                                        | [GitHub (полный)](https://github.com/bloaryth/enclyser)                         | Манипуляция таблицами страниц                         |
| Побочный канал при развёртывании ключа Kalyna                                                     | [CT-RSA22](https://cs.adelaide.edu.au/~yval/pdfs/ChuengsatiansupGYZ22.pdf)                    | -                                                                               | Одиночный шаг, PTE A/D                               |
| Быстрое прототипирование микроархитектурных атак                                                    | [USENIX22](https://www.usenix.org/system/files/sec22summer_easdon.pdf)                        | [GitHub (полный)](https://github.com/libtea/frameworks)                          | Одиночный шаг, сбой страницы, PTE A/D и др.          |
| Util::Lookup: Эксплуатация декодирования ключей в криптографических библиотеках                    | [CCS21](https://dl.acm.org/doi/abs/10.1145/3460120.3484783)                                   | [GitHub (полный)](https://github.com/UzL-ITS/util-lookup)                        | Одиночный шаг, PTE A/D                               |
| SmashEx: Разрушение анклавов SGX с помощью исключений                                               | [CCS21](https://dl.acm.org/doi/pdf/10.1145/3460120.3484821)                                   | -                                                                               | Одиночный шаг                                         |
| Онлайн-шаблонные атаки: пересмотр                                                                  | [CHES21](https://tches.iacr.org/index.php/TCHES/article/view/8967/8545)                       | [Zenodo (симуляция)](https://zenodo.org/record/4680071)                         | Одиночный шаг, сбой страницы, PTE A/D                |
| Aion Attacks: Манипуляция программными таймерами в доверенной среде выполнения                      | [DIMVA21](http://individual.utoronto.ca/shengjiexu/publication/whuang-dimva2021-aion_v2.pdf)  | -                                                                               | Одиночный шаг, прерывания(?)                          |
| Platypus: Атаки по побочному каналу питания на x86 на основе ПО                                     | [S&P21](https://platypusattack.com/platypus.pdf)                                              | [GitHub (симулированный PoC)](https://github.com/0xhilbert/Platypus)             | Одиночный шаг, нулевой шаг                           |
| CrossTalk: Спекулятивные утечки данных между ядрами реальны                                         | [S&P21](https://download.vusec.net/papers/crosstalk_sp21.pdf)                                 | -                                                                               | Одиночный шаг, сбой страницы                         |
| Frontal Attack: Утечка потока управления в SGX через фронтальный процессор CPU                      | [USEC21](https://www.usenix.org/system/files/sec21-puddu.pdf)                                 | [GitHub (полный, оценено артефактом)](https://github.com/dn0sar/frontal_poc)    | Задержка прерываний одиночного шага, PTE A/D         |
| PThammer: Rowhammer через неявные доступы на границе пользователь-ядро                            | -                                                                                             | [MICRO20](https://arxiv.org/pdf/2007.08707v2.pdf)                               | Обход таблицы страниц                                 |
| SpeechMiner: Фреймворк для исследования и измерения уязвимостей спекулятивного выполнения           | [NDSS20](https://www.ndss-symposium.org/wp-content/uploads/2020/02/23105-paper.pdf)           | [GitHub (полный)](https://github.com/teecert/SpeechMiner)                       | Манипуляция таблицами страниц                         |
| Déjà Vu: Анализ побочных каналов NSS Mozilla                                                        | [CCS20](https://dl.acm.org/doi/pdf/10.1145/3372297.3421761)                                   | -                                                                               | Сбой страницы                                          |
| От A до Z: Утечка проективных координат в реальных условиях                                         | [CHES20](https://eprint.iacr.org/2020/432.pdf)                                                | -                                                                               | Сбой страницы                                          |
| LVI: Перехват транзиентного выполнения через микроархитектурную инъекцию значений загрузки         | [S&P20](https://lviattack.eu/lvi.pdf)                                                         | [GitHub (PoC)](https://github.com/jovanbulck/sgx-step-lvi/tree/master/app/lvi)  | Одиночный шаг, манипуляция таблицами страниц          |
| CopyCat: Контролируемые атаки на уровне команд на анклавы                                            | [USEC20](https://arxiv.org/pdf/2002.08437.pdf)                                                | -                                                                               | Одиночный шаг, сбой страницы, PTE A/D                |
| Когда одна уязвимая примитива становится вирусной: новые атаки по одному следу на ECDSA и RSA      | [CHES20](https://eprint.iacr.org/2020/055.pdf)                                                | -                                                                               | Одиночный шаг, сбой страницы, PTE A/D                |
| Big Numbers - Big Troubles: Систематический анализ утечки nonce в реализациях (EC)DSA              | [USEC20](https://www.usenix.org/system/files/sec20summer_weiser_prepub_0.pdf)                 | -                                                                               | Сбой страницы                                          |
| Plundervolt: Атаки инжекции ошибок на основе ПО против Intel SGX                                    | [S&P20](https://plundervolt.com/doc/plundervolt.pdf)                                          | [GitHub (полный)](https://github.com/KitMurdock/plundervolt)                    | Привилегированные шлюзы прерываний/вызовов, MSR      |
| Bluethunder: Атака по побочному каналу на SGX на основе 2-уровневого направленного предсказателя    | [CHES20](https://heartever.github.io/files/bluethunder_sgx_ches.pdf)                          | -                                                                               | Одиночный шаг                                         |
| Fallout: Утечка данных на процессорах, устойчивых к Meltdown                                         | [CCS19](https://mdsattacks.com/files/fallout.pdf)                                             | -                                                                               | PTE A/D                                               |
| Сказ о двух мирах: Оценка уязвимости сред изоляции анклавов                                          | [CCS19](https://people.cs.kuleuven.be/~jo.vanbulck/ccs19-tale.pdf)                            | [GitHub (полный)](https://github.com/jovanbulck/0xbadc0de)                      | Одиночный шаг, сбой страницы, PTE A/D                |
| ZombieLoad: Сбор данных через границы привилегий                                                    | [CCS19](https://zombieloadattack.com/zombieload.pdf)                                          | [GitHub (PoC)](https://github.com/IAIK/ZombieLoad/)                             | Одиночный шаг, нулевой шаг, манипуляция таблицами страниц |
| SPOILER: Спекулятивные риски загрузки усиливают Rowhammer и кэш-атаки                               | [USEC19](https://arxiv.org/pdf/1903.00446.pdf)                                                | -                                                                               | Задержка прерываний одиночного шага                   |
| Nemesis: Изучение микроархитектурных временных утечек в элементарной логике прерываний CPU           | [CCS18](https://people.cs.kuleuven.be/~jo.vanbulck/ccs18.pdf)                                 | [GitHub (полный)](https://github.com/jovanbulck/nemesis)                        | Задержка прерываний одиночного шага, сбой страницы, PTE A/D |
| Foreshadow: Извлечение ключей к королевству Intel SGX с помощью транзиентного внеочередного выполнения | [USEC18](https://foreshadowattack.eu/foreshadow.pdf)                                          | [GitHub (PoC)](https://github.com/jovanbulck/sgx-step/tree/master/app/foreshadow) | Одиночный шаг, нулевой шаг, манипуляция таблицами страниц |
| Атака по одному следу против генерации ключей RSA в Intel SGX SSL                                   | [AsiaCCS18](https://rspreitzer.github.io/publications/proc/asiaccs-2018-paper-1.pdf)          | -                                                                               | Сбой страницы                                          |
| Off-Limits: Злоупотребление устаревшей сегментацией памяти x86 для слежки за выполнением анклавов     | [ESSoS18](https://people.cs.kuleuven.be/~jo.vanbulck/essos18.pdf)                             | [ссылка (полная, оценено артефактом)](https://distrinet.cs.kuleuven.be/software/off-limits/) | Одиночный шаг, сегментация IA32, сбой страницы        |
| SGX-Step: Практический каркас атак для точного контроля выполнения анклавов                          | [SysTEX17](https://people.cs.kuleuven.be/~jo.vanbulck/systex17.pdf)                           | [GitHub (полный)](https://github.com/jovanbulck/sgx-step/tree/master/app/bench) | Одиночный шаг, сбой страницы, PTE A/D                 |
Скачать инструмент
Версия SGX-StepОсобенности изменений
v1.5.0Исправления стабильности (KPTI, отображение ISR ядра); (экспериментальный) порт Gramine; поддержка IPI.
v1.4.0Привилегированные шлюзы прерываний/вызовов (Plundervolt).
v1.3.0Поддержка транзиентного выполнения (Foreshadow).
v1.2.0Обработка прерываний в пользовательском пространстве и детерминированная фильтрация нулевого шага (Nemesis).
v1.1.0Поддержка IA32.
v1.0.0Манипуляция таблицами страниц в пользовательском пространстве и пошаговое выполнение с таймером APIC.
Параметр ядра LinuxНазначение
nox2apicДополнительно настраивает локальный APIC в режиме отображения ввода-вывода в память (чтобы использовать возможности точного пошагового выполнения SGX-Step). Если установлен, обязательно установите X2APIC в 0 в libsgxstep/config.h. В качестве альтернативы можно оставить 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Отключает изоляцию таблиц страниц ядра (чтобы избежать паники ядра при обработчиках прерываний пользовательского режима).
rcupdate.rcu_cpu_stall_suppress=1Отключает детектор зависаний CPU при обновлении RCU (чтобы избежать предупреждений при длительном пошаговом выполнении без вызова обработчика прерываний таймера ядра).
msr.allow_writes=onПодавляет предупреждающие сообщения ядра при записи в модельно-специфические регистры (MSR) от SGX-Step.
vdso=0Только для современных ядер Linux: отключает библиотеку vdso_sgx_enter_enclave (несовместимо с патчами перехвата AEP).
dis_ucode_ldrДополнительно отключает обновления микрокода CPU (современные меры защиты от атак с использованием транзиентного выполнения могут потребовать перекалибровки интервала пошагового выполнения).
МодельЦПБазовая частотаМикрокод (дата)Интервал таймера APIC
Skylakei7-67003.4 GHz?19
Skylakei7-6500U2.5 GHz?25
Skylakei5-6200U2.3 GHz?28
Kaby Lake Ri7-8650U1.9 GHz?34
Kaby Lake Ri7-8650U1.9 GHz0xca (2019-10-03)54
Coffee Lake Ri7-97003 GHz0xf4 (2022-07-31)26
Coffee Lake Ri9-9900K3.6 GHz?21
Coffee Lake HRi7-9750H2.6 GHz0xf4 (2023-02-23)37
Ice Lakei5-1035G11.00 GHz0x32 (2019-07-05)135
Ice Lakei5-1035G11.00 GHz0xb0 (2022-03-09)255
Comet Lakei9-10900K3.70 GHz0xfc (2024-02-01)24
Emerald RapidsXeon Gold 5515+3.2 GHz0x21000230 (2024-02-05)32