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

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

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

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

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

Категории

Все категории
Loading categories
efcf-framework — EF/CF — Экстремально быстрый фаззинг смарт-контрактов | Kitploit
Инструменты/GitHubGitHub/uni-due-syssec/efcf-framework
Анализ уязвимостейЭксплуатацияФаззингАнализ Бинарных Файлов
GitHubuni-due-syssec/efcf-framework

efcf-framework

EF/CF — Экстремально быстрый фаззинг смарт-контрактов

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

Популярное

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

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

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

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

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

EF/CF - сверхбыстрый фаззер смарт-контрактов Ethereum

EF/CF — это новый подход к фаззингу смарт-контрактов: вместо создания нового фаззера с нуля, он переиспользует существующую инфраструктуру фаззинга кода на C/C++ для смарт-контрактов. В настоящее время основным поддерживаемым фаззером является AFL++, хотя также есть некоторая базовая поддержка libfuzzer и honggfuzz.

Зачем использовать существующую инфраструктуру фаззинга?

  • Скорость. Мы можем фаззить быстрее. Обычно мы получаем около 20k execs/sec/core.
  • Фаззеры для нативного кода хорошо спроектированы и оптимизированы.
  • Правильная coverage-guidance, управление очередью, детерминированное воспроизведение тест-кейсов и т.д.

С какими проблемами мы сталкиваемся на этом пути?

  • Нам нужно объяснить фаззеру структуру: а именно, что такое транзакция и что такое ABI смарт-контракта. Для этого мы используем собственный мутатор: ./src/ethmutator/
  • Чтобы повысить скорость и получать полезную обратную связь о покрытии, мы транслируем EVM-байткод в C++ с помощью собственного транспилятора ./src/evm2cpp/

Этот репозиторий — основная точка входа для проекта EF/CF. Он содержит весь соответствующий код в виде подпроектов в ./src/, а также несколько вспомогательных скриптов для установки, скриптов для запуска фаззинг-кампаний и различные наборы данных для тестирования фаззера (и сравнения с другими инструментами).

  • ./src/ — содержит весь исходный код, необходимый для сборки и запуска EF/CF; для воспроизводимости все прямые зависимости добавлены как git-подмодули.
  • ./data/ — содержит наборы данных, использованные при оценке
  • ./scripts — содержит скрипты для запуска экспериментов, установки и т.д.
  • ./docker — Dockerfile для работы в контейнере
    • Стандартный — Ubuntu, но при желании можно использовать контейнер на базе Fedora или Arch Linux.
    • ./docker/tools/ содержит docker-файлы для инструментов, с которыми мы сравнивали EF/CF. Мы постарались зафиксировать в docker-файлах версии, которые использовали в нашей оценке в статье.
  • ./EXPERIMENTS.md — содержит руководство по воспроизведению экспериментов из нашей статьи
  • ./examples — содержит примеры результатов, созданных EF/CF

Статья об EF/CF

Мы описываем архитектуру и реализацию EF/CF, а также обобщаем результаты нашей оценки в нашей статье: препринт arxiv.org

Цитирование в академических работах

При ссылке на EF/CF в академических работах, пожалуйста, используйте следующую bibtex-запись для цитирования:```bibtex @InProceedings{efcf2023, author = "Michael Rodler and David Paaßen and Wenting Li and Lukas Bernhard and Thorsten Holz and Ghassan Karame and Lucas Davi", title = "EF/CF: High Performance Smart Contract Fuzzing for Exploit Generation", booktitle = "{IEEE} European Symposium on Security and Privacy ({EuroS&P})", publisher = "{IEEE}", year = "2023", }

## Быстрый старт

Рекомендуемый способ — запустить EF/CF как интерактивный docker-контейнер.

1. Войдите в контейнер с оболочкой   ```
   docker run --rm -it ghcr.io/uni-due-syssec/efcf-framework

или соберите контейнер из клонированного репозитория ``` make gitmodules # to fetch the git submodules make container-enter

1. Скомпилируйте, а затем фаззите контракт solidity до тех пор, пока не будет
обнаружен первый сбой/баг:   ```
efcfuzz --until-crash --out ./baby_bank_results/ --source ./data/examples/baby_bank.sol
  1. Изучите выявленный сбой ``` cd /tmp/baby_bank_results/ ./r.sh crashes_min/default_id:000000*

Installation / Setup

Git-подмодули

Нет git? если вы используете tarball/docker release, игнорируйте это.

Выполните git submodule update --init, чтобы получить последние коммиты подмодулей в уже клонированных репозиториях. Убедитесь, что вы также выполните это в ./src/eEVM.``` git submodule update --init; cd src/eEVM/; git submodule update --init; cd ../../

*Предупреждение:* Выполнение `git clone --recursive $repo` или передача аргумента `--recursive` команде `git sumbodule (update|init)` приведёт к рекурсивному переходу git в подмодули репозитория AFL++, которые не нужны для этого проекта. Поэтому для экономии места лучше избегать рекурсивной проверки подмодулей.


### Контейнер

Мы предоставляем следующие удобные make-цели для рабочих процессов на основе контейнеров:```sh
make container-build  # build default efcf container
make container-enter  # enter default efcf container in current working dir

Если вы хотите обеспечить чистую сборку, вы можете использовать следующую команду```sh make container-build CLEAN_CHECKOUT=1

В качестве альтернативы контейнер можно собрать с помощью следующей команды docker:```sh
docker build \
    -f docker/ubuntu.Dockerfile \
    -t efcf:latest \
    .

Обратите внимание, что существует также Dockerfile на основе Archlinux и Fedora. Они должны работать, но не так хорошо протестированы.

Для ручного распространения Docker-образа (например, если вы включаете некоторые локальные изменения), используйте:``` make container-release docker load -i ./efcf*.tar

Рекомендуем следующие параметры Docker для запуска:

* `--security-opt seccomp=unconfined` — лучшая производительность фаззинга
* `--net=host` — для удобного доступа к локальному узлу Ethereum
* `--tmpfs "/tmp/efcf/":exec,size=6g` — поместить временные файлы EF/CF на ramdisk, если возможно (меньше износ диска)
* `--privileged` — для запуска `afl-system-config` или `efcfuzz --configure-system`
* `-v` — для сохранения выходных данных EF/CF


### VM / Bare-Metal

Для рабочих процессов на основе VM или bare-metal:```sh
make system-install   # install efcf to current system (requires root or sudo rights)

Обратите внимание, что многие скрипты в любом случае работают с относительной структурой каталогов, так что в основном это устанавливает зависимости и некоторые инструменты, которые полезно иметь в вашем PATH. Мы тестировали запуск EF/CF на следующих дистрибутивах Linux:

  • Ubuntu Jammy (или новее)
  • Fedora ($ > 35 $)
  • Archlinux

(Дистрибутив не так важен: мы тестировали LLVM 13 и 14, причём 14 предпочтительнее. LLVM 11 или 12, возможно, всё ещё работают, но, как всегда, чем новее, тем лучше. Важно, чтобы был LLVM, совместимый с нашим форком AFL++.)

На Mac OS / M1

Мы не тестировали EF/CF на Mac OS нативно. Вероятно, что-то не заработает (например, afl-clang-lto на Mac OS, похоже, не работает). Лучший вариант — использовать docker.```sh

make sure that the submodules are initialized

make gitmodules

pull the linux/amd64 base image

docker pull ubuntu:jammy --platform linux/amd64

build the ef/cf image

docker build -t efcf:latest -f docker/ubuntu.Dockerfile --platform linux/amd64 .

launch the EF/CF container

docker run --tmpfs "/tmp/efcf/":exec,size=8g --platform linux/amd64 --rm -it -v $(pwd):$(pwd) -w $(pwd) efcf:latest

Мы тестировали с использованием docker desktop v4.21.1, и базовое использование EF/CF работает. Однако учтите следующее:
* Если при сборке вы видите segfault: попробуйте увеличить лимит памяти виртуальной машины, которую docker использует в Mac OS.
* Попробуйте включить ускорение с помощью rosetta в docker — возможно, так будет немного быстрее.


### Настройка окружения для разработки
Скачать инструмент