Как использовать afl-fuzz (American Fuzzy Lop) с openssl

Вопрос или проблема

Я пытаюсь использовать afl-fuzz с openssl в Ubuntu. Обычное использование afl-fuzz будет следующим:

afl-gcc test.c //-- это создаст a.out

mkdir testcases
echo "Тестовый случай здесь." > testcases/case1

afl-fuzz -i testcases -o findings ./a.out

Теперь для openssl это будет примерно так:

afl-gcc ./config
make //-- не уверен в этом :)
afl-fuzz -i test -o findings <имя_исполняемого_файла>

где “test” – это папка с тестами для openssl

Мой вопрос: каков параметр для “имя_исполняемого_файла” для openssl? И пожалуйста, поправьте меня, если я ошибаюсь в остальной части кода. Спасибо

Я точно не понимаю, что вы имеете в виду под “параметр для ‘имя_исполняемого_файла’ для openssl”, но:

afl-fuzz -i test -o findings ~/путь/к/binарнику/для/фuzz @@

будет фуззить бинарник по ~/путь/к/binарнику/для/фuzz, substituting @@ с путем к измененному тестовому случаю, созданному из файлов семян в test.

Вы не можете использовать бинарник openssl просто так. Вам нужно написать отдельную программу, которая будет использовать библиотеки openssl, а затем фуззить ее exe с помощью afl-fuzz.

Весь процесс будет выглядеть следующим образом

Скачайте openssl

1. ./config // Если вы отключили что-то здесь, например, no-comp, тогда вам нужно запустить `make depend`.
2. Замените gcc на afl-gcc в Makefile 
3. make && make install

Этот процесс скомпилирует openssl с afl-gcc, и вы сможете увидеть, как инструментирование будет добавлено в объектные файлы. В конце вы получите файлы libssl.a и libcrypto.a в директории openssl.

После успешной компиляции openssl используйте его в образце приложения, например sample.c, а затем скомпилируйте этот файл

4. afl-gcc sample.c -o sample libssl.a libcrypto.a -ldl

и затем, наконец, выполните фуззинг
5. afl-fuzz -i testcases -o findings -m none — ./sample

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

Ответ или решение

Использование American Fuzzy Lop (AFL) с OpenSSL на Ubuntu

В данном руководстве мы рассмотрим, как использовать AFL (American Fuzzy Lop) для фуззинга библиотек OpenSSL. Процесс включает в себя несколько этапов, начиная с установки OpenSSL и заканчивая настройкой и запуском AFL для фуззинга определенной программы, использующей эти библиотеки.

Шаг 1: Загрузка и установка OpenSSL

  1. Скачивание OpenSSL: Загрузите последнюю версию OpenSSL с официального сайта.

  2. Конфигурация:
    Откройте терминал, перейдите в папку с загруженным OpenSSL и выполните команду:

    ./config

    Важный момент: если вы отключили какие-то опции (например, no-comp), вам необходимо выполнить make depend, чтобы обновить зависимости.

  3. Замена компилятора:
    Редактируйте Makefile в директории OpenSSL, заменив gcc на afl-gcc. Это обеспечит добавление инструментирования к объектным файлам для последующего анализа AFL.

  4. Компиляция:
    Выполните команды:

    make && make install

    На выходе вы получите статические архивы библиотек: libssl.a и libcrypto.a в директории OpenSSL.

Шаг 2: Создание тестовой программы

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

#include <openssl/ssl.h>
#include <openssl/err.h>

int main(int argc, char **argv) {
    SSL_library_init();
    // Ваша логика работы с SSL
    return 0;
}

Шаг 3: Компиляция тестовой программы с AFL

Скомпилируйте вашу тестовую программу с помощью инструмента afl-gcc, указав подключаемые библиотеки:

afl-gcc sample.c -o sample libssl.a libcrypto.a -ldl

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

Шаг 4: Подготовка тестовых данных

Создайте папку с тестовыми входными данными, например, testcases, и добавьте туда несколько тестовых файлов, которые AFL будет использовать как начальные данные для мутации.

mkdir testcases
echo "Тестовый случай для OpenSSL." > testcases/case1

Шаг 5: Запуск AFL для фуззинга

Теперь вы готовы запустить AFL. Выполните следующую команду, указывая входные и выходные директории:

afl-fuzz -i testcases -o findings -m none -- ./sample @@
  • -i testcases: указывает на папку с тестовыми входными данными.
  • -o findings: папка, куда будут сохраняться результаты фуззинга.
  • -m none: отключает ограничение по памяти (по необходимости, можно убрать).
  • — ./sample @@: указывает на исполняемый файл, который будет фуззинговаться, где @@ заменяется на каждому мутированному файлу.

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...