28.07.2021

Google открыл Atheris, инструментарий для fuzzing-тестирования кода на языке Python


Компания Google объявила об открытии исходных текстов проекта Atheris, развивающего специализированный инструментарий для fuzzing-тестирования кода на языке Python и расширений для CPython, написанных на C/C++. Проект использует движок на основе libFuzzer и может применяться совместно с инструментами Address Sanitizer и Undefined Behavior Sanitizer для выявления дополнительных ошибок. Код открыт под лицензией Apache 2.0.

Поддерживается проверка кода на Python 2.7 и Python 3.3+, но для полноценного учёта покрытия кода (coverage guided) рекомендуется использовать ветки Python 3.8 и 3.9, в которых появилась поддержка статистики opcode-by-opcode. В процессе работы Atheris перебирает возможные комбинации входных данных и генерирует отчёт о всех выявленных сбоях и неперехваченных исключениях. Например, при проверке в Atheris библиотеки разбора формата YAML было выявлено, что некоторые YAML-конструкции, такие как указание «-_» вместо целого значения или использование списка вместо ключа, приводят к возникновению непредусмотренного исключения вместо штатной ошибки YAMLErrors.

Atheris также можно применять для выявления отличий в поведении библиотек, нацеленных для выполнения идентичных задач. Например, при сводной проверке Python-пакета «idna» и библиотеки «libidn2», которые выполняют задачу декодирования интернационализированных доменных имён, было выявлено, что они не всегда выдают одинаковый результат. В частности, если в домене использовались Unicode-последовательности [U+0130, U+1df9], то «idna» и «libidn2» преобразовывали интернационализированное доменное имя в разные хосты.

Напомним, что при fuzzing-тестировании осуществляется генерация потока всевозможных случайных комбинаций входных данных, приближенных к реальным данным (например, html-страницы с случайными параметрами тегов, архивы или изображения с аномальными заголовками и т.п.), и фиксация возможных сбоев в процессе их обработки. Если какая-то последовательность приводит к исключению или не соответствует ожидаемой реакции, то такое поведение с высокой вероятностью свидетельствует об ошибке или уязвимости.

Источник: https://www.opennet.ru/opennews/art.shtml?num=54204

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