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

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

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

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

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

Категории

Все категории
Loading categories
sfuzz — Высокопроизводительный фаззинг на основе бинарной трансляции riscv в x86 и современных методов фаззинга | Kitploit
Инструменты/GitHubGitHub/seal9055/sfuzz
Динамический анализ (песочница)Анализ уязвимостейФаззингАнализ Бинарных Файлов
GitHubseal9055/sfuzz

sfuzz

Высокопроизводительный фаззинг на основе бинарной трансляции riscv в x86 и современных методов фаззинга

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

Популярное

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

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

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

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

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

SFUZZ

Дата начала: декабрь 2021 г.

Это фаззер с покрытием кода, основанный на эмуляции, который использует собственный Just-In-Time компилятор для достижения производительности, близкой к нативной. Он работает путём подъёма RISC-V ELF-бинарников до промежуточного представления перед JIT-компиляцией в x86 во время выполнения. В процессе JIT-компиляции код инструментируется для поддержки улучшений фаззинга, таких как отслеживание покрытия, asan, cmpcov или снапшот-ориентированный фаззинг.


Возможности

  • Многопоточность, поддержка произвольного количества потоков с почти линейным масштабированием
  • Собственный JIT-компилятор для высокой производительности и, что важнее, кастомизации, которую сложнее достичь с другими решениями, такими как qemu
  • Собственный блок управления памятью, который снова позволяет высокую кастомизацию и крайне полезные функции, такие как проверки разрешений на уровне байтов и сброс эмулятора на основе dirty-bit. Кроме того, реализованы хуки для безопасного использования heap-функций.
  • Виртуализированное управление файлами для лёгкого фаззинга в памяти
  • Снапшот-ориентированный фаззинг, позволяющий сохранять состояние памяти/регистров цели во время выполнения и использовать его как базовое для всех будущих фазз-кейсов
  • Отслеживание покрытия на уровне рёбер и фаззинг, управляемый покрытием на основе этой обратной связи
  • Различные мутаторы, дедупликация крашей и простой алгоритм планирования сидов

Описание

Цель этого проекта — подчеркнуть преимущества использования эмулируемого окружения для фаззинга. Ранее существовало множество фаззеров на основе эмуляции, но почти все они используют для базовой эмуляции движок qemu. Хотя этот движок имеет довольно зрелый just-in-time компилятор и генерирует очень хороший код, он не предназначен для фаззинга. При фаззинге мы намерены запускать один и тот же процесс тысячи раз в секунду. Это открывает возможности для специализированных оптимизаций, которые qemu не использует активно, таких как повторное использование одного и того же пространства памяти для каждого запуска процесса и сброс лишь ограниченного объёма памяти с помощью механик dirty bit.

Во многом это скорее proof-of-concept, над которым я хотел поработать, чтобы изучить внутренности компиляторов и иметь площадку на основе эмуляции для экспериментов с различными техниками фаззинга, такими как разные метрики покрытия, планировщики сидов и снапшот-ориентированный фаззинг. С добавлением дополнительных JIT-оптимизаций и, что наиболее важно, расширений для поддержки более популярных архитектур, таких как mips или arm, он, однако, вполне мог бы использоваться для эффективного фаззинга закрытого исходного кода, который нельзя просто инструментировать через перекомпиляцию.

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

Более подробная информация о возможностях и решениях, принятых для этого фаззера, приведена в сопутствующем блог-посте (https://seal9055.com/blog/fuzzing/sfuzz) и в файлах документации, перечисленных ниже:

  • Управление памятью - memory_management.md
  • Генерация кода - code_gen.md
  • Реализация/возможности фаззера - fuzzing.md
  • Некоторые простые тесты - benchmarking.md

Использование

Весь фаззер написан на rust, поэтому после клонирования репозитория просто запустите cargo build --release для компиляции.

Поскольку фаззер в настоящее время поддерживает только RISC-V, цель должна быть скомпилирована в RISC-V с использованием указанного ниже тулчейна (или аналогичного). Альтернативно, если у вас уже есть RISC-V бинарник, он тоже подойдёт.

После этого просто создайте входной/выходной каталоги, добавьте несколько начальных сид-файлов во входной каталог и запустите фаззер.

./sfuzz -i in -o out -- ./test_cases/simple_test @@

Дополнительные флаги могут быть переданы через параметры командной строки, чтобы указать количество потоков, включить снапшот-фаззинг, добавить словарь в мутатор и т.д. Дополнительные опции можно посмотреть, запустив sfuzz с флагом -h.

Если вы хотите протестировать фаззер на целях различной сложности, можно использовать progrem_generator из tools/program_generator для автоматической генерации программ различной сложности. Обратите внимание, что для компиляции цели вам потребуется RISC-V тулчейн.

Инструментарий RISC-V для компиляции бинарников для фаззера

Это настраивает тулчейн для компиляции бинарников riscv, которые могут быть загружены/использованы этим проектом.

root@kitploit:~
Riscv компилятор/инструменты:
    sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev \
    libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev \
    libexpat-dev
    git clone https://github.com/riscv/riscv-gnu-toolchain && cd riscv-gnu-toolchain
    ./configure --prefix=/opt/riscv --with-arch=rv64i
    sudo make

Отладчик:
    gdb-multiarch

TODO

Этот список представляет набор функций, которые я планирую реализовать в будущем.

  • Работающий блок управления памятью
  • JIT-компилятор
  • Виртуализированные файлы для фаззинга в памяти
  • Проверки разрешений на уровне байтов + хукаемые/безопасные аллокаторы
  • Отслеживание покрытия на уровне рёбер
  • Постоянный режим для фаззинга в небольших циклах вокруг целевых функций
  • Дедупликация крашей / уникальные краши
  • Обновление мутаторов для включения дополнительных опций
  • Планирование сидов
  • CmpCov для обхода магических значений и контрольных сумм
  • Добавление инструментов вокруг фаззера
  • Надлежащее бенчмаркирование
  • Реализация расширений RISC-V M и A, чтобы JIT мог использовать glibc вместо newlib
  • Замена ассемблера для улучшения скорости компиляции
  • Поддержка большего количества архитектур (например, mips, arm)

Ссылки

  • Все статьи, перечисленные в fuzzing.md
  • Emulation based fuzzing - Brandon Falk GamozoLabs
  • Intel Software Developer Manuals
  • RISCV User ISA specification
  • Rv8: a high performance RISC-V to x86 binary translator - Michael Clark & Bruce Hoult
  • Engineerining a compiler Keith D. Cooper & Londa Torczon
  • Cranelift [https://cfallin.org/blog/] - Chris Fallin
  • Generating Low-Overhead Dynamic Binary Translators - Mathias Payer & Thomas R. Gross
  • Efficiently Computing Static Single Assignment Form and the Control Dependence Graph - Cytron et al
  • Computing Liveness Sets for SSA-Form Programs - Brandner et al
  • Linear Scan Register Allocation on SSA Form - Christian Wimmer & Michael Franz
  • http://web.cs.ucla.edu/~palsberg/course/cs132/linearscan.pdf
  • AddressSanitizer: A Fast Address Sanity Checker https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
Скачать инструмент
  • JIT-оптимизации и ещё одна попытка распределения регистров