Fuzzing для Go отсутствовала п... Заметка
RSS Блог "След бит"

Fuzzing для Go отсутствовала половина инструментария. Мы разделили инструментарий, чтобы исправить это.

Родная фаззинг Go лишена продвинутых функций, найденных в экосистемах Rust, C и C++, не в состоянии обнаруживать общие ошибки, такие как переполнения целых чисел и утечки горутин. Чтобы устранить эти ограничения, gosentry была разработана как фаззинг-ориентированная ветка инструментария Go. Gosentry интегрирует LibAFL, обеспечивая родную фаззинг структур, грамматическую фаззинг с Nautilus и обнаружение ранее пропущенных классов ошибок. Она сохраняет стандартный поток тестирования testing.F, позволяя использовать существующие фаззинг-оболочки Go с новыми флагами командной строки. Gosentry улучшает качество входных данных за счет фаззинга, осведомленного о структурах, обрабатывая составные типы, такие как структуры, срезы и указатели. Она также поддерживает грамматическую фаззинг, где Nautilus генерирует и мутирует грамматически допустимые входные данные для сложных структур, таких как JSON. Инструмент выявляет различные плохие поведения, которые обычный фаззер Go пропустит, включая переполнения целых чисел, гонки данных, утечки горутин и таймауты выполнения. Захватывая фаззинг-колбэк и запуская его через запускатор LibAFL на основе Rust, gosentry улучшает фаззинг-движок, планирование и детекторы. Она уже обнаружила значительные ошибки в проектах, таких как Optimism и Revm, которые были бы трудно найти с помощью родной фаззинг Go. Проект имеет открытый исходный код на GitHub, предоставляя полную документацию для всех его функций.