libfuzzer-workshop
Материалы воркшопа "Современный фаззинг проектов на C/C++".
Первая версия воркшопа была представлена на конференции по безопасности ZeroNights'16.
Отказ от ответственности
Этот воркшоп был первоначально разработан в 2016 году. По состоянию на сегодняшний день (2021 и далее)
практическая часть воркшопа может работать не сразу, так как
libFuzzer сильно эволюционировал за эти годы. Теоретическая часть воркшопа
все еще является хорошим учебным материалом, но для практических занятий
рекомендуется следовать самой последней версии libFuzzer tutorial.
Требования
- 2-3 часа вашего времени
- ОС на базе Linux
- Опыт работы с C/C++ (ничего особенного, но нужно уметь читать, писать и компилировать код на C/C++)
- последняя версия компилятора clang. Дистрибутивы из менеджеров пакетов слишком стары и, скорее всего, не будут работать (воркшоп ведь называется "современный", не так ли?), у вас есть два варианта:
- склонировать репозиторий llvm и собрать его самостоятельно. Чтобы упростить задачу, можете использовать скрипт checkout_build_install_llvm.sh; он протестирован на чистой Ubuntu 16.04.
- доступна VirtualBox VM с рабочей средой, учётные данные:
fuzzer:zeronights
sudo apt-get install -y make autoconf automake libtool pkg-config zlib1g-dev
Опыт фаззинга не требуется.
Содержание
- Введение в фазз-тестирование
- Пример традиционного фаззинга
- Фаззинг с использованием покрытия кода
- Написание фаззеров (простые примеры)
- Поиск Heartbleed (CVE-2014-0160)
- Поиск ошибки c-ares за $100,000 (CVE-2016-5180)
- Как улучшить свой фаззер
- Фаззинг libxml2: изучение улучшения фаззера и анализ производительности
- Фаззинг libpng: изучение важности начального корпуса и прочего
- Фаззинг re2
- Фаззинг pcre2
- Интеграция с Chromium и домашнее задание
Большинство примеров взято из libFuzzer tutorial и Fuzzer Test Suite.
Предварительные требования
libFuzzer
Собрать libFuzzer очень просто:
cd libFuzzer
Fuzzer/build.sh
Репозиторий libFuzzer можно найти внутри проекта compiler-rt LLVM.
Ссылки