Atheris, набор инструментов для тестирования кода Python

Google представил недавно выпуск Проект Атерис, который является развитием набор инструментов с открытым исходным кодом специализированный для фаззинга кода Python и расширения для CPython, написанные на C / C ++.

В рамках проекта использует движок на основе libFuzzer и может использоваться вместе с инструментами Address Sanitizer и Undefined Behavior Sanitizer для обнаружения дополнительных ошибок. Код открыт под лицензией Apache 2.0.

О Google Atheris

По словам Google Atheris, это набор инструментов, который можно использовать для автоматического поиска ошибок в коде Python и собственных расширениях. Atheris - фаззер, управляемый охватом, что означает, что Atheris будет многократно пробовать различные входы в ваше шоу, наблюдая за его ходом, и пытаться найти интересные пути.

Поддерживается проверка кода для Python 2.7 и Python 3.3+., но для полного управляемого охвата рекомендуется использовать ветки Python 3.8 и 3.9, которые теперь поддерживают статистику кода операции по коду операции.

В процессе, Atheris перечисляет возможные комбинации входных данных и создает отчет. обо всех обнаруженных неисправностях и необнаруженных исключениях.

Например, при проверке библиотеки синтаксического анализа YAML в Atheris было обнаружено, что некоторые конструкции YAML, такие как указание «-_» вместо целочисленного значения или использование списка вместо ключа, вызывают неожиданное исключение вместо YAMLErrors стандартная ошибка.

Тест фаззинга - это хорошо известный метод обнаружения ошибок программирования. Многие из этих обнаруживаемых ошибок имеют серьезные последствия для безопасности. При использовании этого метода Google обнаружил тысячи уязвимостей и других ошибок. Фаззинг традиционно используется в нативных языках, таких как C или C ++, но в прошлом году мы создали новый движок фаззинга Python. Сегодня мы выпустили фаззинг-движок Atheris с открытым исходным кодом.

Atheris также может использоваться для выявления различий в поведении библиотек, ориентированных на идентичные задачи. Например, сводная проверка пакета Python «idna» и библиотеки «libidn2», которые выполняют задачу декодирования интернационализированных доменных имен, обнаружила, что они не всегда дают одинаковый результат.

Одно из лучших применений Atheris - это дифференциальные диффузоры. Это фаззеры, которые ищут различия в поведении двух библиотек, которые должны делать одно и то же. Один из примеров фаззеров, поставляемых с Atheris, делает именно это, чтобы сравнить пакет Python "idna" с пакетом C "libidn2".

В частности, если домен использовал последовательности Unicode, то «idna» и «libidn2» преобразовывали интернационализированное доменное имя для разных хостов.

В общем, Atheris полезен в чистом коде Python до тех пор, пока он имеет способ выразить, что является «правильным» поведением, или, по крайней мере, выразить, какое поведение определенно неверно. Это может быть так сложно, как настраиваемый код в фаззере, который оценивает точность вывода библиотеки, или так просто, как проверка отсутствия непредвиденных исключений.

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

Если какая-либо последовательность приводит к исключению или не соответствует ожидаемому ответу, это, скорее всего, указывает на ошибку или уязвимость.

Наконец, как уже упоминалось Atheris работает с кодом Python версий 2.7 и 3.3+, хотя Google настоятельно рекомендует использовать 3.8+ и собственные расширения, написанные для CPython.

Windows еще не входит в число поддерживаемых операционных систем, поэтому движок пока интересен только пользователям Linux и Mac OS X.

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

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


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Будьте первым, чтобы комментировать

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.