Arhn - архитектура программирования

Modsecurity создает файл конфигурации с правилами для определенного URL-адреса

Я начинаю узнавать о ModSecurity и создании правил, поэтому, скажем, я знаю, что страница в веб-приложении уязвима для межсайтового скриптинга. Ради аргумента предположим, что страница /blah.html подвержена XSS.

Будет ли рассматриваемое правило выглядеть примерно так?:

SecRule ARGS|REQUEST_URI "blah" REQUEST_HEADERS “@rx <script>” id:101,msg: ‘XSS Attack’,severity:ERROR,deny,status:404

Можно ли создать файл конфигурации для этой конкретной страницы (или даже разумно это сделать?) Или, лучше сказать, можно ли создать правила для определенных URL-адресов?


Ответы:


1

Не совсем верно, так как в этом правиле есть несколько неправильных моментов. Но думаю, вы поняли общую концепцию.

Чтобы объяснить, что не так с правилом в его нынешнем виде, требуется немало объяснений:

Во-первых, синтаксис ModSecurity для определения правил состоит из нескольких частей:

  1. SecRule
  2. поле или поля для проверки
  3. значения для проверки этих полей
  4. действия, которые нужно предпринять

У вас есть два набора деталей 2 и 3, которые недействительны. Если вы хотите проверить 2 вещи, вам нужно связать два правила вместе, пример которых я покажу позже.

Затем вы проверяете заголовки запроса на наличие тега сценария. Это не то место, где существует большинство XSS-атак, и вместо этого вам следует проверять аргументы — хотя см. Ниже дальнейшее обсуждение XSS.

Также проверка на <script> не очень тщательная. Например, его легко победить <script type="text/javascript">. Или <SCRIPT> (необходимо добавить t:lowercase, чтобы игнорировать регистр). Или путем экранирования символов, которые могут обрабатываться вашими частями вашего приложения.

Двигаясь дальше, нет необходимости указывать оператор @rx, так как это подразумевается, если не указан другой оператор. Хотя нет ничего плохого в том, чтобы быть явным, немного странно, что вы не дали его для blah, но сделали для <script> бита.

Также рекомендуется указать фазу, а не использовать значение по умолчанию (обычно фаза 2). В этом случае вам нужна фаза 2, когда все заголовки запроса и части тела запроса доступны для обработки, поэтому значение по умолчанию, вероятно, правильное, но лучше указать его явно.

И, наконец, 404 — это код ответа «страница не найдена». 500 или 503 могут быть здесь лучшим ответом.

Поэтому ваше правило было бы лучше переписать как:

SecRule REQUEST_URI "/blah.html" id:101,phase:2,msg: ‘XSS Attack’,severity:ERROR,deny,status:500,chain
   SecRule ARGS "<script" "t:lowercase"

Хотя это по-прежнему не охватывает все способы, которыми можно обойти базовую проверку, которую вы выполняете для тега скрипта, как упоминалось выше. Основной набор правил OWASP — это бесплатный набор правил ModSecurity, созданный со временем и содержит некоторые правила XSS, которые вы можете проверить. Хотя имейте в виду, что некоторые из их регулярных выражений довольно сложны для понимания!

ModSecurity также работает лучше как более общая проверка, поэтому необычно хотеть защитить только одну страницу таким образом (хотя и не совсем неслыханно). Если вы знаете, что какая-то страница уязвима для конкретной атаки, часто лучше закодировать эту страницу или то, как она обрабатывается, чтобы устранить уязвимость, а не использовать ModSecurity для ее обработки. Исправить проблему в источнике, а не исправлять ее, всегда хорошая мантра, которой нужно следовать, где это возможно. Вы бы сделали это, очистив и экранировав входной HTML-код, например, из входов.

Говоря, что часто хорошим краткосрочным решением является использование правила ModSecurity для быстрого исправления, пока вы работаете над более правильным долгосрочным исправлением - это называется «виртуальное исправление». Хотя иногда они имеют тенденцию становиться долгосрочными решениями, поскольку ни у кого нет времени решить основную проблему.

Однако, если вам нужна более общая проверка «скрипта» в любых аргументах для любой страницы, то для этого чаще используется ModSecurity. Это помогает добавить дополнительную защиту тому, что уже должно быть в правильно закодированном приложении, в качестве резервной копии и дополнительной линии защиты. Например, если кто-то забудет защитить одну страницу из многих, очистив пользовательский ввод.

Поэтому, возможно, было бы лучше отказаться от первой части этого правила и просто использовать следующее для проверки всех страниц:

SecRule ARGS "<script" id:101,phase:2,msg: ‘XSS Attack’,severity:ERROR,deny,status:500,"t:lowercase"

Наконец, XSS — довольно сложная тема. Здесь я предположил, что вы хотите проверить параметры, отправленные при запросе страницы. Так что, если он использует пользовательский ввод для построения страницы и отображает ввод, то вы хотите защитить это, известное как «рефлексивный XSS». Однако есть и другие XSS-уязвимости. Например:

  • Если неверные данные хранятся в базе данных и используются для построения страницы. Известен как «хранимый XSS». Чтобы решить эту проблему, вы можете проверить результаты, возвращенные со страницы в параметре RESPONSE_BODY на этапе 4, а не входные данные, отправленные на страницу в параметре ARGS на этапе 2. Хотя обработка страниц ответов обычно медленнее и требует больше ресурсов по сравнению с к запросам, которые обычно намного меньше.

  • Возможно, вы сможете выполнить XSS, не проходя через ваш сервер, например. При загрузке внешнего контента, такого как сторонняя система комментариев. Или страница обслуживается через http и манипулируется между сервером и подключением. Это известно как «XSS на основе DOM», и поскольку ModSecurity находится на вашем сервере, он не может защитить от этих типов атак XSS.

Там было довольно много подробностей, но надеюсь, что это поможет объяснить немного больше. Я нашел Руководство по ModSecurity лучшим ресурсом для изучения ModSecurity, несмотря на его возраст.

14.01.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..