Google выпустила инструмент OSS-Fuzz для постоянного fuzz-тестирования Open Source-проектов
1 декабря компания Google представила OSS-Fuzz — новый инструмент, разработанный в рамках Core Infrastructure Initiative (CII) для постоянного тестирования базового свободного программного обеспечения по технике fuzzing.
«Недавние истории из мира ИТ-безопасности подтверждают, что ошибки вроде переполнения буфера или use-after-free [обращения к памяти после её освобождения] могут иметь серьёзные и далекоидущие последствия, когда происходят в критически важном Open Source-софте. Эти ошибки не только серьёзны, но и сложны в обнаружении путём аудита кода, даже для опытных разработчиков. И тогда приходит на помощь fuzz testing. Техника fuzzing, генерируя случайные входные данные для проверяемой программы, быстро и последовательно выявляет ошибки и помогает их устранять», — поясняют назначение OSS-Fuzz разработчики из Google.
На данном (первом) этапе существования OSS-Fuzz, имеющего статус бета-версии, для реализации основной техники используется библиотека libFuzzer, которую в Google также применяют для fuzz-тестирования различных компонентов веб-браузера Chrome. Ей помогают утилиты Sanitizers, вместе с которыми инструмент помогает выявлять: проблемы в безопасности (переполнения буфера, use-after-free, плохие приведения типа, переполнения integer), баги в безопасности (утечки памяти, out-of-memory, сбои в утверждениях assertions) и иногда даже бреши в логике. Официально поддерживается код на языках C и C++ с примечанием, что «другие языки, поддерживаемые в LLVM, тоже могут работать».
С помощью OSS-Fuzz, который выполняет около 4 триллионов тестов в неделю, уже было обнаружено 150 багов в популярных Open Source-проектах. Разработчики Google призывают сделать fuzzing «стандартной частью разработки Open Source-проектов» и говорят о желании работать с широким сообществом разработчиков и тестеров, чтобы обнаружить и исправить ошибки в критически важных свободных приложениях, библиотеках и API.
Для запуска OSS-Fuzz подготовлены сценарии его развёртывания в Docker-контейнерах, реализована интеграция с Jenkins CI. В исходниках проекта, опубликованных на GitHub, представлен код на shell, Python и C++. Лицензия — Apache License 2.0.
Среди Open Source-проектов, уже принятых в репозиторий OSS-Fuzz для проверки кода, числятся coreutils, util-linux, zlib и libarchive, libxml2, libyaml, BoringSSL и OpenSSL, SQLite3 и PostgreSQL, Tor, FreeType 2, FFmpeg и многие другие.
P.S. Прошлым летом организация The Linux Foundation сообщала, что The Fuzzing Project стал одним из трёх проектов, получивших финансовые средства в рамках Core Infrastructure Initiative (CII) для поддержки важных инфраструктурных Open Source-проектов.
Дмитрий Шурупов по материалам Google Online Security Blog.