Google відкрила вихідні коди проекту Atheris
Google відкрив вихідний код проекту Atheris
Компанія Google оголосила про відкриття вихідного коду проекту Atheris , який розробляє спеціалізований інструментарій для нечіткого тестування коду python і розширень для CPython, написаних на C / C ++. Проект використовує двигун на основі libFuzzer і може використовуватися спільно з інструментами адресного санітайзера та дезінфікуючого засобу невизначеної поведінки для виявлення додаткових помилок. Код відкритий під ліцензією Apache 2.0.
Підтримується перевірка коду в Python 2.7 і Python 3.3+, але для повного обліку покриття коду (з урахуванням покриття) рекомендується використовувати гілки Python 3.8 і 3.9, в яких підтримується статистика по коду операції. У процесі Atheris ітерує через можливі комбінації вхідних даних і формує звіт про всі виявлені збої і неінтерпретованих винятках. Наприклад, коли Atheris тестував бібліотеку аналізу YAML, було виявлено, що деякі конструкції YAML, такі як вказівка "-_" замість цілочисельного значення або використання списку замість ключа, призводять до несподіваного винятку замість звичайної помилки YAMLErrors.
Atheris також може бути використаний для виявлення відмінностей в поведінці бібліотек, спрямованих на виконання ідентичних завдань. Наприклад, підсумкова перевірка пакета Python "idna" і бібліотеки "libidn2", які виконують завдання по розшифровці інтернаціоналізованих доменних імен, виявила, що вони не завжди дають однаковий результат. Зокрема, якщо в домені використовувалися послідовності юнікоду [U+0130, U+1df9], то «idna» і «libidn2» переводили інтернаціоналізоване доменне ім'я в різні хости.
Нагадаємо, що нечітке тестування генерує потік всіляких випадкових комбінацій вхідних даних, близьких до реальних даних (наприклад, html-сторінки з випадковими параметрами тегів, архіви або зображення з аномальними заголовками і т.д.), і фіксує можливі збої в процесі їх обробки. Якщо послідовність призводить до виключення або не відповідає очікуваній відповіді, то така поведінка, швидше за все, вкаже на помилку або вразливість.
