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

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

Проектът използва двигател, базиран на libFuzzer и може да се използва заедно с инструментите за дезинфекция на адреси и дефинирано поведение за детекция за откриване на допълнителни грешки. Кодът е отворен под лиценза Apache 2.0.

Всичко за Google Atheris

По думите на Google Atheris, това е набор от инструменти, който може да се използва за автоматично намиране на грешки в кода на Python и родните разширения. Atheris е разпръсквач, „задвижван от покритие“, което означава, че Atheris многократно ще изпробва различни входове към вашата програма, докато гледа как тя работи и ще се опита да намери интересни пътеки.

Поддържа се преглед на код за Python 2.7 и Python 3.3+, но за пълно ориентирано покритие се препоръчва използването на клонове Python 3.8 и 3.9, които сега поддържат статистика на opcode по opcode.

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

Например при проверка на YAML синтактичната библиотека в Atheris беше установено, че някои YAML конструкции, като например указване на "-_" вместо целочислена стойност или използване на списък вместо ключ, хвърлят неочаквано изключение вместо стандарт YAMLErrors грешка.

Тестът за размиване е добре позната техника за откриване на програмни грешки. Много от тези откриваеми грешки имат сериозни последици за сигурността. Google е открил хиляди уязвимости в сигурността и други грешки при използването на тази техника. Fuzzing се използва традиционно в родните езици като C или C ++, но миналата година създадохме нов механизъм за размиване на Python. Днес пуснахме раздвижващия двигател Atheris като отворен код.

Атерис може да се използва и за идентифициране на различия в поведението на библиотеките, насочени към идентични задачи. Например, обобщена проверка на Python пакета „idna“ и библиотеката „libidn2“, които изпълняват задачата за декодиране на интернационализирани имена на домейни, установи, че те не винаги дават един и същ резултат.

Едно от най-добрите приложения за Atheris е за диференциални дифузори. Това са размирици, които търсят разлики в поведението на две библиотеки, които са предназначени да правят едно и също нещо. Един от примерите за разбъркване, свързан с Atheris, прави точно това, за да сравнява пакета "idna" на Python с пакета 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. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.