Проект Snuffleupagus развивает PHP-модуль для блокирования уязвимостей

В рамках проекта Snuffleupagus развивается модуль для подключения к интерпретатору PHP7, предназначенный для повышения безопасности окружения и блокирования типовых ошибок, приводящих к появлению уязвимостей в выполняемых PHP-приложениях. Модуль также позволяет создавать виртуальные патчи для устранения конкретных проблем без изменения исходных текстов уязвимого приложения, что удобно для применения в системах массового хостинга, на которых невозможно добиться поддержания всех пользовательских приложений в актуальном виде. Модуль написан на языке Си, подключается в форме разделяемой библиотеки («extension=snuffleupagus.so» в php.ini) и распространяется под лицензией LGPL 3.0.

Snuffleupagus предоставляет систему правил, позволяющую использовать как типовые шаблоны для повышения защиты, так и создавать собственные правила для контроля входных данных и параметров функций. Например, правило «sp.disable_function.function(«system»).param(«command»).value_r(«[$|;&`\n]»).drop();» позволяет не изменяя приложения ограничить использование спецсимволов в аргументах функции system(). Аналогично можно создавать виртуальные патчи для блокирования известных уязвимостей.

Судя по проведённым разработчиками тестам Snuffleupagus почти не снижает производительность. Для обеспечения собственной безопасности (возможные уязвимости в прослойке для защиты могут служить дополнительным вектором для атак) в проекте применяется доскональное тестирование каждого коммита в разных дистрибутивах, используются системы статического анализа, код оформляется и документируется для упрощения проведения аудита.

Предоставляются встроенные методы для блокирования таких классов уязвимоcтей, как проблемы, связанные с сериализацией данных, небезопасным использованием PHP-функции mail(), утечкой содержимого Cookie при проведении XSS атак, проблемами из-за загрузки файлов с исполняемым кодом (например, в формате phar), некачественной генерацией случайных чисел и подстановкой некорректных конструкций XML.

Из режимов для повышения защиты PHP поддерживаются:

  • Автоматическое включение флагов «secure» и «samesite» (защита от CSRF) для Cookie, шифрование Cookie;
  • Встроенный набор правил для выявления следов совершения атак и компрометации приложений;
  • Принудительное глобальное включение режима «strict» (например, блокирует попытку указания строки при ожидании в качестве аргумента целочисленного значения) и защита от манипуляций с типами;
  • Блокирование по умолчанию обёрток для протоколов (например, запрет «phar://») с их явным разрешением по белому списку;
  • Запрет на исполнение файлов, которые доступны на запись;
  • Чёрные и белые списки для eval;
  • Включение обязательно проверки сертификатов TLS при использовании curl;
  • Добавление HMAC к сериализованным объектам для гарантирования, что при десериализации получены данные, сохранённые исходным приложением;
  • Режим журналирования запросов;
  • Блокирование загрузки внешних файлов в libxml по ссылкам в XML-документах;
  • Возможность подключения внешних обработчиков (upload_validation) для проверки и сканирования загружаемых файлов;

Проект создан и используется для защиты пользователей в инфраструктуре одного из крупных французских операторов хостинга. Отмечается, что просто подключение Snuffleupagus позволило бы защититься от многих опасных уязвимостей, выявленных в этом году в Drupal, WordPress и phpBB. Уязвимости в Magento и Horde могли бы быть блокированы включением режима «sp.readonly_exec.enable()».

Источник: http://www.opennet.ru/opennews/art.shtml?num=51031