Вопрос или проблема
Я пытаюсь использовать 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
-
Скачивание OpenSSL: Загрузите последнюю версию OpenSSL с официального сайта.
-
Конфигурация:
Откройте терминал, перейдите в папку с загруженным OpenSSL и выполните команду:./config
Важный момент: если вы отключили какие-то опции (например,
no-comp
), вам необходимо выполнитьmake depend
, чтобы обновить зависимости. -
Замена компилятора:
РедактируйтеMakefile
в директории OpenSSL, заменивgcc
наafl-gcc
. Это обеспечит добавление инструментирования к объектным файлам для последующего анализа AFL. -
Компиляция:
Выполните команды: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, что поможет повысить безопасность вашего кода.