Випуск Snuffleupagus 0.5.1, модуля для блокування вразливостей у PHP-додатках
Після року розробки опубліковано випуск проекту Snuffleupagus 0.5.1, що надає модуль до інтерпретатора PHP7 для підвищення безпеки оточення та блокування типових помилок, що призводять до появи вразливостей у виконуваних PHP-додатках. Модуль також дозволяє створювати віртуальні патчі для усунення конкретних проблем без зміни вихідних текстів вразливого додатка, що зручно для застосування в системах масового хостингу, на яких неможливо домогтися підтримки всіх додатків користувача в актуальному вигляді. Накладні витрати роботи модуля оцінюються як мінімальні. Модуль написаний мовою Сі, підключається у формі бібліотеки, що розділяється («extension=snuffleupagus.so» в php.ini) і поширюється під ліцензією LGPL 3.0.
Snuffleupagus надає систему правил, що дозволяє використовувати як типові шаблони для підвищення захисту, так і створювати власні правила контролю вхідних даних і параметрів функцій. Наприклад, правило "sp.disable_function.function("system").param("command").value_r("[$|;&`\\n]").drop();» дозволяє не змінюючи програми обмежити використання спецсимволів в аргументах функції system(). Надаються вбудовані методи для блокування таких класів уразливостей, як проблеми, пов'язані із серіалізацією даних, небезпечним використанням PHP-функції mail(), витоком вмісту Cookie при проведенні XSS атак, проблемами через завантаження файлів з виконуваним кодом (наприклад, у форматі фар), неякісною генерацією випадкових чисел та підстановкою некоректних конструкцій XML.
Надані в Snuffleupagus режими підвищення захисту PHP:
Автоматичне включення прапорів "secure" та "samesite" (захист від CSRF) для Cookie, шифрування Cookie;
Вбудований набір правил виявлення слідів здійснення атак і компрометації додатків;
Примусове глобальне включення режимустрогий» (наприклад, блокує спробу вказати рядок при очікуванні як аргумент цілісного значення) та захист від маніпуляцій із типами;
Блокування за замовчуванням обгорток для протоколів (наприклад, заборона "phar://") з їх явним дозволом за білим списком;
Заборона виконання файлів, які доступні на запис;
Чорні та білі списки для eval;
Увімкнення обов'язково перевірки сертифікатів TLS під час використання
curl;
Додавання HMAC до серіалізованих об'єктів для гарантування того, що при десеріалізації отримані дані, збережені вихідним додатком;
Режим журналування запитів;
Блокування завантаження зовнішніх файлів у libxml за посиланнями у XML-документах;
Можливість підключення зовнішніх обробників (upload_validation) для перевірки та сканування файлів, що завантажуються;
Серед змін у новому випуску: Покращена підтримка PHP 7.4 і реалізована сумісність з гілкою PHP 8, що знаходиться в розробці. Додана можливість журналування подій через syslog (для включення запропонована директива sp.log_media, яка може приймати значення php або syslog). Оновлено пропонований за замовчуванням набір правил, до якого додано нові правила для виявлених останнім часом вразливостей та технік атак на web-додатки. Покращено підтримку macOS та розширено застосування платформи безперервної інтеграції на базі GitLab.