Файрвол веб-приложений

Наша компания немного помешана на интернет безопасности, поэтому, хотя оно и не совсем в сфере моих интересов, раз в пару недель приходится узнавать что-то новое по теме. Иногда случаются приколы, когда «что-то новое» — это идея, которой я пользовался достаточно давно, но теперь вот выяснилось, что у этой штуки есть собственное имя. В последний раз это был файрвол веб-приложений.

Немного о типах файрволов

В моей упрощенной картине мира слово «файрвол» обозначало одну конкретную вещь: нечто на границе сети, что разрешает или запрещает траффик по определённым портам и айпишкам. И хотя такое определение не ошибочно, оно и не раскрывает всей картины.

Сетевые файрволы именно этим и занимаются: сидят на краю и фильтруют траффик. Некоторые сделаны прямо на железе, другие — софтовые. Какие-то без состояния, а какие-то могут запомнить последовательность пакетов и догадаться, что отправлять TCP ACK фрейм, не отправив перед этим TCP SYN, — глупость, и поэтому такой стоит проигнорировать. Сетевые файрволы не догадываются, какие приложения спровоцировали траффик, и зачем он вообще есть. Да и не нужно это им.

Есть ещё один тип файрволов — файрволы приложения. Эти уже поумнее. Они догадываются, как именно работает приложение или сервис, и потому могут отфильтровывать траффик, который вроде как и корректный, но в контексте приложения бессмысленный или даже беспощадный.

Ну и наконец, есть подвид файрволов приложений — файрволы веб-приложений. Эти уже знают, что такое HTTP, чем занимаются веб-приложения, и как их обычно атакуют.

Файрвол веб-приложений (web application firewall, WAF)

А вот, каким образом я начал использовать WAF ещё до того, как узнал, что они существуют. Когда-то давно я написал небольшое контейнерное приложение для сбора и показа метрик с нашей CI/CD системы. Три контейнера занимались сбором, хранением и отображением данных, и ещё один — nginx — подрабатывал роутером для них.

Контейнерное приложение

Но был и ещё один nginx — без контейнера, и юридически не часть приложения. Единственным предназначением этого nginx было отпинывать запросы, приходящие не из офиса, и давать мне возможность отключить приложение от внешнего мира, приложение при этом не выключая. И знаете что, по всем внешним признакам этот nginx — вполне себе WAF.

контейнерное приложение и файрвол веб-приложения

Взрослые WAFы кроме фильтрации по GeoIP умеют делать и более тонкие штуки. Если процитировать OWASPовский ModSecurity набор базовых правил, то вот что уважающий себя WAF должен уметь отражать:

  • SQL инъекции
  • Межсайтовый скриптинг (XSS)
  • Инъекция локальных и удалённых файлов (LFI, RFI)
  • Удалённое выполнение кода (RCE)
  • PHP инъекции
  • HTTProxy
  • Shellshock
  • Фиксация сессии
  • Обнаружение сканнеров
  • Утечки ошибок и метаданных
  • ну и блокировка по гео-IP

Это реально много! Есть уже готовые бесплатные WAF-продукты, самым известным их которых, судя по всему, явяется ModSecurity. Он поддерживает IIS/Apache/Nginx и понимает весь этот базовый набор правил.

Кроме этого облачные провайдеры часто предлагают WAF в качестве сервиса (AWSAzure). У гугла, кстати, подобного файрвола я не нашёл.

Мораль

Файрволы веб-приложений предлагают огромный набор фич, многие из которых нам когда-то приходилось внедрять самостоятельно. Что самое любопытное, WAF можно получить бесплатно, и это удивляет меня до сих пор. Как бы безопасность — горячий топик, и людям полагается рубить баблос по полной. С другой стороны, у того же ModSecurity есть коммерческий сиблинг, облачные файрволы стоят денег по определению, так что может они и рубят.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *