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

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

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

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

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

Категории

Все категории
Loading categories
sandsifter — The x86 processor fuzzer | Kitploit
Инструменты/GitHubGitHub/battelle/sandsifter
Vulnerability AnalysisReverse EngineeringFuzzingHardware SecurityBinary AnalysisPapers & ResearchLearning & Education
GitHubbattelle/sandsifter

sandsifter

The x86 processor fuzzer

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

Популярное

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

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

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

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

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

s a n d s i f t e r

: фаззер для процессоров x86

Обзор

Sandsifter проверяет процессоры x86 на наличие скрытых инструкций и аппаратных ошибок, путем систематической генерации машинного кода для поиска по набору инструкций процессора и мониторинга выполнения на предмет аномалий. Sandsifter обнаружил секретные инструкции процессоров от каждого крупного производителя; повсеместные программные ошибки в дизассемблерах, ассемблерах и эмуляторах; недостатки в корпоративных гипервизорах; а также как безобидные, так и критичные для безопасности аппаратные ошибки в чипах x86.

Учитывая множество существующих процессоров x86, цель инструмента — дать пользователям возможность проверить свои собственные системы на наличие скрытых инструкций и ошибок.

Для запуска базовой проверки вашего процессора:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

demo_sandsifter

Компьютер систематически сканируется на предмет аномальных инструкций. В верхней половине вы можете видеть инструкции, которые sandsifter в данный момент тестирует на процессоре. В нижней половине sandsifter сообщает об обнаруженных аномалиях.

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

root@kitploit:~
./summarize.py data/log

demo_summarizer

Обычно будет найдено несколько миллионов недокументированных инструкций на вашем процессоре, но они, как правило, попадают в небольшое количество различных групп. После группировки аномалий инструмент обобщения пытается отнести каждую инструкцию к категории проблемы:

  • Ошибка в программном обеспечении (например, ошибка в вашем гипервизоре или дизассемблере),
  • Аппаратная ошибка (ошибка в вашем CPU), или
  • Недокументированная инструкция (инструкция, которая существует в процессоре, но не признана производителем)

Нажмите 'Q' для выхода и получения текстовой сводки сканирования системы:

Результаты сканирования иногда могут быть сложны для автоматической классификации инструментами и могут потребовать ручного анализа. Для помощи в анализе ваших результатов, смело отправляйте файл ./data/log на адрес [email protected]. Никакой личной информации, кроме марки, модели и ревизии процессора (из /proc/cpuinfo), в этом логе не содержится.

Результаты

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

Подробности результатов можно найти в документе проекта.

(TODO: подробное перечисление результатов)

Сборка

Sandsifter требует предварительной установки дизассемблера Capstone: http://www.capstone-engine.org/. Capstone обычно можно установить с помощью:

root@kitploit:~
sudo apt-get install libcapstone3 libcapstone-dev
sudo pip install capstone

Sandsifter можно собрать с помощью:

root@kitploit:~
make

а затем запустить с помощью

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

Флаги

Флаги передаются sifter через --flag, а инжектору через -- -f.

Пример:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

Флаги sifter:

root@kitploit:~
--len
	поиск различий в длине для всех инструкций (инструкций, которые
	выполнились иначе, чем ожидал дизассемблер, или не
	существовали, когда дизассемблер их ожидал)

--dis
	поиск различий в длине для корректных инструкций (инструкций, которые
	выполнились иначе, чем ожидал дизассемблер)

--unk
	поиск неизвестных инструкций (инструкций, о которых дизассемблер не
	знает, но которые успешно выполняются)

--ill
	обратное --unk, поиск некорректных дизассемблирований (инструкций, которые
	не выполняются успешно, но которые дизассемблер распознает)

--tick
	периодическая запись текущей инструкции на диск

--save
	сохранение прогресса поиска при выходе

--resume
	возобновление поиска с последнего сохраненного состояния

--sync
	запись результатов поиска на диск по мере их обнаружения

--low-mem
	не хранить результаты в памяти

Флаги инжектора:

root@kitploit:~
-b
	режим: перебор

-r
	режим: рандомизированный фаззинг

-t
	режим: туннелированный фаззинг

-d
	режим: фаззинг с внешним управлением

-R
	режим сырого вывода

-T
	режим текстового вывода

-x
	запись периодического прогресса в stderr

-0
	разрешить разыменование нулевого указателя (требует sudo)

-D
	разрешить дублирование префиксов

-N
	без поддержки бита NX

-s seed
	в случайном поиске, начальное значение

-B brute_depth
	в поиске перебором, максимальная глубина поиска

-P max_prefix
	максимальное количество префиксов для поиска

-i instruction
	инструкция, с которой начать поиск (включительно)

-e instruction
	инструкция, на которой закончить поиск (исключительно)

-c core
	ядро, на котором выполнять поиск

-X blacklist
	игнорировать указанную инструкцию

-j jobs
	количество одновременно выполняемых задач

-l range_bytes
	количество байт базовой инструкции в каждом поддиапазоне

Клавиши

m: Режим - изменить режим поиска (перебор, случайный или туннелированный) для sifter

q: Выход - выйти из sifter

p: Пауза - приостановить или возобновить поиск

Алгоритмы

Сканирование поддерживает четыре различных алгоритма поиска, которые можно задать в командной строке или переключать с помощью горячих клавиш.

  • Случайный поиск генерирует случайные инструкции для тестирования; обычно он дает результаты быстро, но не способен найти сложные скрытые инструкции и ошибки.
  • Поиск перебором пробует инструкции последовательно, до заданной пользователем длины; почти во всех ситуациях он работает хуже, чем случайный поиск.
  • Управляемый или мутационный поиск предназначен для создания новых, все более сложных инструкций с помощью генетических алгоритмов; хотя это многообещающе, данный подход так и не был полностью реализован и оставлен как заготовка для будущих исследований.
  • Туннелирование — это подход, описанный в презентации и документе, и практически во всех случаях обеспечивает наилучший компромисс между полнотой и скоростью.

Советы

  • sudo

    Для наилучших результатов инструмент следует запускать от имени root. Это необходимо для того, чтобы процесс мог отобразить в память страницу по адресу 0, что требует прав root. Эта страница предотвращает segfault многих инструкций при обращениях к памяти, что позволяет проводить более точный анализ ошибок.

  • Префиксы

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

  • Цвета

    Интерфейс sifter спроектирован для терминала с 256 цветами. Хотя детали сильно различаются в зависимости от вашего терминала, это можно примерно сделать с помощью:

    root@kitploit:~
    export TERM='xterm-256color'
    
  • GUI

    Интерфейс предполагает, что терминал имеет как минимум определенный размер; если интерфейс отображается неправильно, попробуйте увеличить размер терминала; это часто можно сделать, уменьшив размер шрифта в терминале.

    В некоторых случаях может быть желательно или необходимо запустить инструмент без графического интерфейса. Это можно сделать, запустив инжектор напрямую:

    root@kitploit:~
    sudo ./injector -P1 -t -0
    

    Для фильтрации результатов прямого вызова инжектора можно использовать grep. Например,

    root@kitploit:~
    sudo ./injector -P1 -r -0 | grep '\.r' | grep -v sigill
    

    ищет инструкции, по которым процессор и дизассемблер разошлись в длине инструкции (grep '.r'), но инструкция успешно выполнилась (grep -v sigill).

  • Целевой фаззинг

    Во многих случаях полезно направить фаззер на конкретную цель. Например, если вы подозреваете, что эмулятор имеет недостатки, связанные с повторяющимися префиксами 'lock' (0xf0), вы можете направить фаззер на поиск в этой области пространства инструкций с помощью флагов -i и -e:

    root@kitploit:~
    sudo ./sifter.py --unk --dis --len --sync --tick -- -t -i f0f0 -e f0f1 -D -P15
    
  • Устаревшие системы

    Для сканирования более старых систем (процессоры i586, системы с малым объемом памяти), передайте флаг --low-mem sifter и флаг -N инжектору:

Ссылки

  • Обсуждение методов и результатов можно найти в презентации на Black Hat.
  • Технические детали описаны в документе.
  • Слайды презентации с Black Hat находятся здесь.

Автор

sandsifter — исследовательский проект Кристофера Домаса (@xoreaxeaxeax).

Скачать инструмент
root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick --low-mem -- -P1 -t -N

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

  • 32 против 64 бит

    По умолчанию sandsifter собирается для разрядности хост-операционной системы. Однако некоторые инструкции ведут себя по-разному при выполнении в 32-битном процессе по сравнению с 64-битным. Для изучения этих сценариев иногда полезно запускать 32-битный sandsifter на 64-битной системе.

    Чтобы собрать 32-битный sandsifter на 64-битной системе, Capstone должен быть установлен как 32-битный; инструкции для этого можно найти на http://www.capstone-engine.org/.

    Затем sandsifter должен быть собран для 32-битной архитектуры:

    root@kitploit:~
    make CFLAGS=-m32
    

    Таким образом, 32-битное пространство инструкций можно исследовать на 64-битной системе.