AFL++ (American Fuzzy Lop) — один из самых популярных и мощных инструментов для автоматического фаззинга. Кстати, мы уже рассказывали про установку AFL на Kali Linux. Сегодня рассмотрим установку и использование AFL++.
Еще по теме: Фаззинг ядра Linux
Что такое фаззинг
Фаззинг (Fuzzing) — это методология и техника тестирования программного обеспечения, которая заключается в автоматической генерации и вводе большого количества непредсказуемых, случайных или некорректных данных в цель тестирования (например, программу или компонент системы) с целью обнаружения ошибок, сбоев и уязвимостей.
Основной идеей фаззинга является подача входных данных, которые могут быть недопустимыми или неожиданными для цели тестирования, с целью вызвать некорректные реакции или неожиданное поведение. Таким образом, фаззер генерирует и вводит автоматически созданные тестовые входные данные, и затем наблюдает за реакцией цели тестирования на эти данные. Если программа или компонент системы реагирует некорректно, например, падает или проявляет аномальное поведение, это может указывать на наличие ошибки или уязвимости.
Установка и использование фаззера AFL++
AFL++ — форк популярного фаззера AFL. Он предлагает ряд улучшений и дополнительных функций, которые улучшают эффективность и гибкость.
Установка AFL++
Ставим зависимости:
1 2 3 4 |
sudo apt-get update sudo apt-get install -y build-essential python3-dev automake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools sudo apt-get install -y lld-11 llvm-11 llvm-11-dev clang-11 || sudo apt-get install -y lld llvm llvm-dev clang sudo apt-get install -y gcc-$(gcc --version|head -n1|sed 's/.* //'|sed 's/\..*//')-plugin-dev libstdc++-$(gcc --version|head -n1|sed 's/.* //'|sed 's/\..*//')-dev |
Качаем AFL++ из официального репозитория и устанавливаем:
1 2 3 4 5 |
cd $HOME git clone https://github.com/AFLplusplus/AFLplusplus && cd AFLplusplus export LLVM_CONFIG="llvm-config-11" make distrib sudo make install |
После сборки можно запустить бинарь afl-fuzz и посмотреть краткую справку.
У AFL++ есть форк WinAFL. По нему рекомендую эти статью «Фаззинг программ с помощью WinAFL».
Запускаем фаззер:
1 |
afl-fuzz -i /path/to/testcases -o /path/to/crashes /path/to/binary @@ |
Здесь
- -i /path/to/testcases указывает на путь к тесткейсам;
- -o /path/to/crashes — место, куда будут попадать краши;
- @@ — этот параметр означает, что на ввод будут поступать данные при запуске программы. Грубо говоря, через argv[], а не через scanf().
После запуска появится окно фаззера.
И вот результат запуска фаззинга.
Спустя некоторое время в правом верхнем углу можно увидеть найденные краши.
Все найденные краши хранятся по пути:
1 |
/your_directory/out/default/crashes |
AFL++ обеспечивает хорошую скорость фаззинга. Он может быть применен для обнаружения ошибок и уязвимостей в различных типах программного обеспечения.
С фаззингом закончили, в следующей статье займемся реверсом!
ПОЛЕЗНЫЕ ССЫЛКИ: