Как включить декодирование base64 глобально в modsecurity?

Вопрос или проблема

Я тестирую modsecurity с атаками XSS, используя последние правила OWASP CRS, включив только правила XSS. Я обнаружил, что декодирование base64 не выполняется, и это одна из причин обхода защиты. Однако если мне нужно добавить преобразование к каждому правилу в XSS для декодирования base64, это приводит к блокировке двух атак. Есть ли способ, с помощью которого я могу применить это декодирование глобально, вместо того чтобы добавлять его к каждому правилу?

Ответ или решение

Как включить глобальное декодирование Base64 в ModSecurity

В процессе работы с ModSecurity и правил OWASP Core Rule Set (CRS) может возникнуть необходимость в обработке данных, закодированных в формате Base64, особенно когда речь идет о защите веб-приложений от атак XSS. К сожалению, стандартные правила CRS могут не учитывать эту специфику, что в свою очередь может привести к пропуску некоторых типов атак, поскольку декодирование в Base64 не происходит автоматически. В данной статье мы рассмотрим, как можно включить глобальное декодирование Base64 на уровне модулей ModSecurity, чтобы избежать необходимости добавления декодирования в каждое правило индивидуально.

Шаг 1: Включение модуля Transformations

Для начала убедитесь, что у вас установлен и активирован ModSecurity, а также что вы используете подходящую версию, поддерживающую трансформации. Чтобы использовать трансформации, вам нужно убедиться, что в конфигурации модуля включены необходимые опции. Убедитесь, что в конфигурационном файле ModSecurity (modsecurity.conf) или в файле вашего виртуального хоста присутствуют следующие строки:

SecTransformations On

Шаг 2: Создание глобального правила для декодирования Base64

Чтобы избежать необходимости в добавлении декодирования в каждое правило XSS, вы можете создать одно глобальное правило, которое будет перехватывать и декодировать все входящие данные, закодированные в Base64. Включите это правило в основной конфигурационный файл ModSecurity или в файл, где вы загружаете свои пользовательские правила.

Вы можете использовать следующее правило для декодирования Base64:

SecRule ARGS "@rx ^[A-Za-z0-9+/=]+$" "id:1000001,phase:1,t:base64Decode,pass,nolog,ctl:requestBodyAccess=On,ctl:ruleRemoveById=900000"

В данном правиле:

  • SecRule ARGS указывает, что правило применяется ко всем аргументам запроса.
  • @rx проверяет, соответствует ли переданное значение регулярному выражению для строки, закодированной в Base64.
  • t:base64Decode вызывает трансформацию, декодирующую данные из Base64.
  • pass указывает на то, что после обработки действия в дальнейшем не нужно блокировать или логировать запрос.
  • ctl:requestBodyAccess=On позволяет модулю работать с телом запроса.
  • ctl:ruleRemoveById=900000 исключает все другие правила, которые могут блокировать этот запрос.

Шаг 3: Проверка и тестирование

После внесения изменений в конфигурацию, обязательно перезапустите сервер, чтобы изменения вступили в силу. Затем проведите тестирование, чтобы убедиться, что декодирование Base64 происходит корректно и что правила XSS теперь более эффективно обрабатывают входящие данные.

  1. Создайте запрос с использованием XSS, закодированного в Base64.
  2. Проверьте журналы ModSecurity и убедитесь, что запросы, содержащие закодированные атаки, теперь обнаруживаются и обрабатываются как следует.

Заключение

Глобальное декодирование Base64 в ModSecurity — это мощный способ улучшения защиты вашего веб-приложения от атак XSS, особенно когда вы используете последние правила OWASP CRS. Создавая одно универсальное правило для декодирования, вы минимизируете риск пропуска потенциально опасных запросов, улучшаете управляемость конфигурационных файлов и сохраняете гибкость в настройке правил.

Следуя приведенным инструкциям, вы сможете настроить ModSecurity таким образом, чтобы он проходил через закодированные данные, обеспечивая надежное декодирование на глобальном уровне и увеличивая безопасность вашего веб-приложения.

Оцените материал
Добавить комментарий

Капча загружается...