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

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

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

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

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

Категории

Все категории
Loading categories
silifuzz — Фаззит реализации ЦП, генерируя тестовые входные данные из программных прокси, после чего выполняет их на реальном оборудовании для обнаружения дефектов и эррат в микроархитектуре. | Kitploit
Инструменты/GitHubGitHub/google/silifuzz
Анализ уязвимостейФаззингАппаратная БезопасностьАнализ Бинарных Файлов
GitHubgoogle/silifuzz

silifuzz

Фаззит реализации ЦП, генерируя тестовые входные данные из программных прокси, после чего выполняет их на реальном оборудовании для обнаружения дефектов и эррат в микроархитектуре.

Репозиторий
41638245 дней назадПроверено Kitploit

Популярное

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

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

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

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

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

SiliFuzz — фаззинг процессоров через прокси

Что такое SiliFuzz

SiliFuzz — это система, которая находит дефекты процессоров путём фаззинга программных прокси, таких как симуляторы процессора или дизассемблеры, а затем выполняет накопленные тестовые входные данные (известные как корпус) на реальных процессорах в больших масштабах. SiliFuzz находится в стадии разработки; подробности см. в статье.

Терминология

Программный фаззинг и покрытие кода

Фаззинг — это метод тестирования цели (приложения или API) с помощью большого количества тестовых входных данных, генерируемых на лету. Цель состоит в том, чтобы сделать эти входные данные как можно более интересными и разнообразными для запуска крайних случаев. Другими словами, фаззинг направлен на максимизацию совокупного покрытия кода. Покрытие кода может иметь разные значения, например, какие базовые блоки выполняются или какие пути проходятся в программе.

Прокси

Для целей SiliFuzz прокси — это любая программная или аппаратная система, которая ведёт себя аналогично некоторым аспектам целевого процессора. Например, эмулятор процессора или дизассемблер. Прокси необходим, когда мы не можем напрямую собирать информацию о покрытии с цели.

Применяя методы фаззинга к прокси, мы можем сгенерировать серию тестовых входных данных (корпус), которые вызывают интересное поведение в прокси. Наше базовое предположение состоит в том, что это приводит к аналогично интересному поведению на цели. Подробнее в документации.

Корпус / сегмент корпуса

Коллекция входных данных, используемых для тестирования цели, называется корпусом.

Достаточно большой корпус содержит миллионы входных данных и обычно разбивается на несколько непересекающихся фрагментов, называемых сегментами (shards).

Снимок (Snapshot)

Снимок SiliFuzz описывает короткую последовательность инструкций процессора, а также начальное состояние регистров и памяти процессора для детерминированного выполнения этой последовательности. Типичный снимок содержит менее 100 байт кода и выполняется за микросекунды, но может быть сколь угодно большим. Снимки хранятся в виде protocol buffer-сообщений silifuzz.proto.Snapshot.

Снимки обычно создаются из входных данных, сгенерированных фаззинг-движком. Для целей тестирования процессора эти входные данные фильтруются для устранения всех недетерминированных снимков. Подробнее в документации.

Ожидаемое конечное состояние

Конечное состояние описывает содержимое регистров и памяти, которое ожидается по завершении выполнения снимка. Если снимок выполняется по-разному на разных микроархитектурах процессора, у него будет несколько ожидаемых конечных состояний.

Snap

Snap — это представление снимка в памяти, которое может быть легко загружено и выполнено Runner'ом. Snap-файлы обычно загружаются с диска читающим runner'ом. Формат Snap на диске практически идентичен формату в памяти, за исключением того, что нативные указатели заменены смещениями. См. этот заголовочный файл для подробностей. Этот формат часто называют перемещаемым (relocatable). Каждый Snap содержит ровно одно ожидаемое конечное состояние, то есть Snap-файлы специфичны для микроархитектуры. Подробнее в документации.

Runner

Runner — это бинарный файл для тестирования одного ядра процессора. Runner потребляет сегмент корпуса, многократно выполняет случайные Snap-ы и проверяет, достигнуто ли ожидаемое конечное состояние. Runner — это однопоточный процесс.

Оркестратор

Оркестратор — это процесс, который управляет несколькими runner-ами. В типичной конфигурации оркестратор непрерывно выполняет по одному runner-у на каждое логическое ядро процессора, накапливает и сообщает обо всех сбоях, возникающих в отдельных процессах runner-ов.

Поддерживаемые платформы и микроархитектуры

Список поддерживаемых микроархитектур см. в этом файле.

SiliFuzz работает на Linux-системах x86_64 и aarch64. Он был протестирован с ядрами Linux версий 5.x и 6.x. Нет гарантии совместимости с более старыми версиями ядра. Устаревший ABI vsyscall должен быть отключён, чтобы избежать ложных срабатываний.

Трофеи

Неполный список ошибок и дефектов, найденных SiliFuzz.

Баги

Логический баг — это некорректное поведение процессора, присущее конкретной микроархитектуре или степингу процессора. SiliFuzz выявил следующие баги:

  • CVE-2021-26339
  • Erratum #1386
  • Erratum #1468
  • Erratum #3442699 для ARM Neoverse V2
  • Erratum #3213672 для ARM Cortex-X3

Дефекты

(Электрический) дефект — это некорректное поведение процессора, которое происходит только на одном или нескольких чипах. SiliFuzz обнаружил следующие дефекты, описанные в статье:

  • Дефект F2XM1. Статья / Приложение A
  • Перескок недопустимой инструкции. Статья / Приложение B
  • Неверные вычисления FCOS. Статья / Приложение C
  • Отсутствие обновления указателя данных x87. Статья / Приложение D

Связанные проекты

  • Centipede — фаззинг-движок, разработанный в Google для фаззинга больших и медленных целей, таких как эмуляторы процессоров.

Предварительная подготовка

Предварительная подготовка (для Bazel)

git clone https://github.com/google/silifuzz.git && cd silifuzz
SILIFUZZ_SRC_DIR=`pwd`
./install_build_dependencies.sh  # Currently, works for the latest Ubuntu only.
bazel build -c opt @silifuzz//tools:{snap_corpus_tool,fuzz_filter_tool,snap_tool,silifuzz_platform_id,simple_fix_tool_main} \
     @silifuzz//runner:reading_runner_main_nolibc \
     @silifuzz//orchestrator:silifuzz_orchestrator_main
SILIFUZZ_BIN_DIR=`pwd`/bazel-bin
cd "${SILIFUZZ_BIN_DIR}"

ПРИМЕЧАНИЕ: Вы можете использовать Docker-контейнер, чтобы не загрязнять хост-систему: docker run -it --tty --security-opt seccomp=unconfined --mount type=bind,source=${SILIFUZZ_SRC_DIR},target=/app ubuntu:noble /bin/bash -c "cd /app && ./install_build_dependencies.sh && bazel build ... && bazel test ..."

Предварительная подготовка (фаззинг цели Unicorn)

Для Bazel используйте следующие команды.

cd "${SILIFUZZ_SRC_DIR}"
COV_FLAGS_FILE="$(bazel info output_base)/external/fuzztest+/centipede/clang-flags.txt"
bazel build -c opt --copt=-UNDEBUG --dynamic_mode=off \
  --per_file_copt=unicorn/.*@$(xargs < "${COV_FLAGS_FILE}" |sed -e 's/,/\\,/g' -e 's/ /,/g') @//proxies:unicorn_x86_64
bazel build -c opt @fuzztest//centipede:centipede
mkdir -p /tmp/wd

# Fuzz the Unicorn proxy under Centipede 1000 times with parallelism of 30.
"${SILIFUZZ_BIN_DIR}/external/fuzztest+/centipede/centipede" \
  --binary="${SILIFUZZ_BIN_DIR}/proxies/unicorn_x86_64" \
  --workdir=/tmp/wd \
  -j=30 --num_runs=1000
Скачать инструмент