
Автоматизированная платформа обнаружения уязвимостей для уязвимостей спекулятивного выполнения (IEEE S&P '26)
Мы поддерживаем следующие окружения:
Trevex разрабатывается и тестируется на Ubuntu 22.04 LTS и 24.04 LTS.
Хотя другие дистрибутивы могут работать, некоторые части фреймворка, например, проверка и установка зависимостей, предполагают использование apt в качестве менеджера пакетов.
В настоящее время Trevex ориентирован только на x86. Поддержка других архитектур появится в ближайшем будущем.
Рекомендуем добавить следующий псевдоним оболочки в ваши dotfiles:
function tvx() {<repo-root>/tvx.py $@}
Затем установите зависимости фреймворка:
pip install -r ./requirements.txt
sudo apt-get update
sudo apt-get install build-essential cmake tmux cpuid linux-tools-common
Trevex управляется через утилиту командной строки tvx.
tvx следует следующему синтаксису:
tvx <command> <subcommand>
и поддерживает следующие команды:
runКоманда run используется для управления локальными запусками фаззинга:
# запустить фаззер
tvx run start
# очистить прогресс и все результаты
tvx run cleanup
resultКоманда result используется для просмотра и обработки результатов фаззинга:
# классифицировать результаты
# (обычно первое, что вы хотите сделать после фаззинга)
tvx result classify
# просмотреть содержимое тестового файла
tvx result view <result-file.json>
# экспортировать заданный тестовый файл в автономный «воспроизводитель»
# позволяет дальше исследовать результат
tvx result export <result-file.json>
# повторно запустить тестовый случай внутри фаззера
tvx result rerun
setup (будет опубликована в ближайшем будущем)Команда setup используется для установки и загрузки зависимостей.
# установить/проверить системные зависимости Trevex (пакеты apt и python)
tvx setup install
# загрузить Python-окружение tvx
tvx setup load
ctrl (будет опубликована в ближайшем будущем)Команда ctrl используется для оркестровки кампаний фаззинга Trevex, состоящих из нескольких машин.
Она позволяет запускать Trevex на нескольких машинах и забирать результаты на вашу машину.
Набор машин определяется файлом конфигурации машин.
Файл машин состоит из одного имени конфигурации SSH на строку.
Дополнительно формат поддерживает комментарии, начинающиеся с #.
Trevex предполагает, что у вас есть доступ по SSH без пароля к этим машинам.
Обычно это делается с помощью аутентификации по ключам и хранения ключей в локальном SSH-агенте, например, с помощью ssh-add.
Допустимая конфигурация выглядит так:
uarch-lab01 # my server
uarch-lab03 # my dev machine
uarch-lab07 # my other dev machine
Команда ctrl требует указать файл машин перед подкомандой:
tvx ctrl -m <machine_file.cfg> <subcommand>
Типичная кампания фаззинга выглядит следующим образом:
# prepare the machines for the fuzzing campaign
# ATTENTION: this might change the running kernel and reboot the machine
# This is not always needed, you can just try skipping the step.
tvx ctrl -m ./my-servers.cfg setup
# Start Trevex on the remote machines and attach to their tmux sessions
# Note: If Trevex fails to start, the skipped setup step might be the reason.
tvx ctrl -m ./my-servers.cfg spawn
# Detach from all tmux sessions and let it run for a while
tvx ctrl -m ./my-servers.cfg detach
# Attach again to the tmux sessions
tvx ctrl -m ./my-servers.cfg attach
# Stop all Trevex instances once you're done
tvx ctrl -m ./my-servers.cfg stop
# Retrieve the results and store them on your local machine
# Note: While this is often useful for organization, actual
# reproduction steps should executed on the *exact same*
# CPU that was fuzzed.
tvx ctrl -m ./my-servers.cfg pull-results
# Reset the state on all machines. This cleans all progress
# made and deletes all results.
tvx ctrl -m ./my-servers.cfg cleanup
devЭта команда используется исключительно для целей разработки. Поэтому она пока остается без документации.
«Новая» означает находки, которые являются полностью новыми или в которых TREVEX обнаружил дополнительные аспекты, такие как новые варианты или экземпляры на микроархитектурах, ранее не считавшихся затронутыми.
Перейдите в каталог ./pocs.
Папка ./pocs/amd-fpdss содержит наш PoC для Floating-Point Divider State Sampling (FP-DSS).
FP-DSS — это атака временного выполнения, которая извлекает состояние из блоков деления чисел с плавающей запятой SSE и AVX.
Она отслеживается как CVE-2025-54505 и обсуждается AMD в Security Advisory.
Затрагивает процессоры AMD Zen 1 и Zen+.
Папка ./pocs/amd-fpvi-variant содержит наш PoC для варианта FPVI, который не требует денормализованных входных значений.
AMD обсуждает находку в Security Advisory.
Затрагивает процессоры AMD.
Папка ./pocs/intel-zero-at-ret содержит наш PoC для варианта LVI NULL, известного как Zero-at-Ret.
Папка ./pocs/zhaoxin-fpvi содержит наш PoC, вызывающий поведение FPVI на микроархитектуре LuJiaZui компании Zhaoxin.
Статья доступна здесь. Вы можете процитировать нашу работу с помощью следующей записи BibTeX:
@inproceedings{Weber2026Trevex,
author = {Weber, Daniel and Thomas, Fabian and Trampert, Leon and Zhang, Ruiyi and Schwarz, Michael},
booktitle = {{IEEE S\&P}},
title = {{Trevex: A Black-Box Detection Framework For Data-Flow Transient Execution Vulnerabilities}},
year = {2026}
}
Мы предоставляем этот код как есть. Вы несете ответственность за защиту себя, своего имущества и данных, а также других лиц от любых рисков, связанных с этим кодом. Этот код может вызвать неожиданное и нежелательное поведение на вашем компьютере.
| Vulnerability | Status | Notes |
|---|
| FP-DSS | Новая | Утечка устаревших данных из блока выполнения операций с плавающей запятой |
| LVI-NULL | Новая | Обнаружена на микроархитектурах, ранее не считавшихся уязвимыми |
| FPVI | Новая | Обнаружен новый вариант FPVI и FPVI на Zhaoxin |
| GDS (Downfall) | Воспроизведена | Первый фаззер, обнаруживший её |
| MDS (ZombieLoad, RIDL, VRS, ...) | Воспроизведена | - |
| Meltdown-US | Воспроизведена | Оригинальная уязвимость Meltdown |
| Meltdown-CPL-REG | Воспроизведена | Требует систему с nofsgsbase |