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, які тепер підтримують статистику коду операцій за кодом операцій.

В процесі, 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. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.