Русский
Русский
English
Статистика
Реклама

Waf

Как ELK помогает инженерам по ИБ бороться с атаками на сайты и спать спокойно

22.10.2020 14:22:35 | Автор: admin
Наш центр киберзащиты отвечает за безопасность веб-инфраструктуры клиентов и отбивает атаки на клиентские сайты. Для защиты от атак мы используем файрволы веб-приложений FortiWeb (WAF). Но даже самый крутой WAF не панацея и не защищает из коробки от целевых атак.

Поэтому в дополнение к WAF мы используем ELK. Он помогает собирать все события в одном месте, копит статистику, визуализирует ее и позволяет нам вовремя видеть направленную атаку.

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




История одной атаки: как все работало до перехода на ELK

В нашем облаке у заказчика развернуто приложение, которое стоит за нашим WAF. В день к сайту подключались от 10 000 до 100 000 пользователей, количество подключений доходило до 20 млн. в день. Из них 3-5 пользователей были злоумышленниками и пытались взломать сайт.

Обычный брутфорс формы с одного IP-адреса FortiWeb блокировал достаточно легко. Количество обращений к сайту в минуту было больше, чем у легитимных пользователей. Мы просто настраивали пороги активности с одного адреса и отражали атаку.

Куда сложнее бороться с медленными атаками, когда злоумышленники действуют не спеша и маскируются под обычных клиентов. Они используют много уникальных IP-адресов. Такая активность не выглядела для WAF как массовый брутфорс, отследить ее автоматически было сложнее. А еще был риск заблокировать нормальных пользователей. Мы искали другие признаки атаки и настраивали политику автоматической блокировки IP-адресов по этому признаку. Например, у многих нелегитимных сессий обнаруживались общие поля в заголовках http-запроса. Искать такие поля часто приходилось вручную в журналах событий FortiWeb.

Получалось долго и неудобно. В стандартной функциональности FortiWeb события записываются текстом в 3 разных журнала: обнаруженные атаки, информация о запросах и системные сообщения о работе WAF. За минуту могут приходить десятки, а то и сотни событий об атаках.

Не так уж и много, но приходится вручную лазить по нескольким журналам и перебирать много строк:


В журнале атак видим адреса пользователей и характер активности.

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


Выделенные поля помогают обнаружить медленную атаку. Источник: скрин с сайта Fortinet.

Ну и самая главная проблема разобраться в этом может только специалист по FortiWeb. Если в рабочее время мы еще могли отслеживать подозрительную активность в реальном времени, то расследование ночных инцидентов могло затянуться. Когда политики FortiWeb по какой-то причине не срабатывали, дежурные инженеры ночной смены не могли оценить ситуацию без доступа к WAF и будили специалиста по FortiWeb. Мы просматривали журналы за несколько часов и находили момент атаки.

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

Из чего выбирали


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

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

Был вариант агрегировать все с помощью MySQL и PostgreSQL или другой реляционной базы. Но, чтобы вытаскивать данные, нужно было лепить свое приложение.

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

Вот так мы и пришли к опенсорсу в лице ELK.

Почему выбрали ELK


ELK это комплекс программ с открытым кодом:

  • Elasticsearch база данных временных рядов, которая как раз создавалась для работы с большими объемами текста;
  • Logstash механизм сбора данных, который может конвертировать журналы в нужный формат;
  • Kibana хороший визуализатор, а также достаточно дружелюбный интерфейс для управления Elasticsearch. Можно с его помощью построить графики, за которыми могут наблюдать дежурные инженеры по ночам.

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

Как собрали это все в единую систему


Сформировали индексы и оставили только нужную информацию. Мы загрузили все три журнала FortiWEB в ELK на выходе получились индексы. Это файлы со всеми собранными журналами за период, например, сутки. Если бы мы сразу их визуализировали, то увидели бы только динамику атак. За подробностями нужно проваливаться в каждую атаку и смотреть конкретные поля.



Мы поняли, что для начала нужно настроить разбор неструктурированной информации. Взяли длинные поля в виде строк, например, Message и URL, и распарсили их, чтобы получить больше информации для принятия решений.
Например, с помощью парсинга мы вынесли отдельно местоположение пользователя. Это помогло сразу выделить атаки из-за рубежа на сайты для российских пользователей. Блокируя все подключения из других стран, мы уменьшили количество атак в 2 раза и могли спокойно разбираться с атаками внутри России.

После парсинга стали искать, какую информацию хранить и визуализировать. Оставлять в журнале все было нецелесообразно: размер одного индекса был большим 7 Гб. ELK требовалось много времени для обработки файла. При этом не вся информация была полезной. Что-то дублировалось и занимало лишнее место нужно было оптимизировать.

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

Мы не отчаивались, продолжали есть кактус изучать ELK и верили, что сумеем вытянуть необходимую информацию. После очистки индексов начали визуализировать что есть. Так мы пришли к большим дашбордам. Понатыкали виджетов наглядно и нарядно, настоящая ЁLKа!



Зафиксировали момент атаки. Теперь нужно было понять, как на графике выглядит начало атаки. Для ее обнаружения мы смотрели на ответы сервера пользователю (return codes). Нас интересовали ответы сервера с такими кодами (rc):

Код (rc)
Название
Описание
0
DROP
Запрос к серверу блокируется
200
Ok
Запрос успешно обработан
400
Bad Request
Ошибочный запрос
403
Forbidden
Отказ авторизации
500
Internal Server Error
Сервис недоступен


Если кто-то начинал атаковать сайт, менялось соотношение кодов:

  • Если ошибочных запросов с кодом 400 становилось больше, а нормальных запросов с кодом 200 оставалось столько же, значит кто-то пытался взломать сайт.
  • Если при этом запросы с кодом 0 тоже росли, значит политики FortiWeb тоже видели атаку и применяли к ней блокировки.
  • Если увеличивалось количество сообщений с кодом 500, значит сайт недоступен для этих IP-адресов тоже своего рода блокировка.

К третьему месяцу мы настроили дашборд для отслеживания такой активности.



Чтобы не мониторить все вручную, настроили интеграцию с Nagios, который с определенной периодичностью опрашивал ELK. Если фиксировал достижение пороговых значений по кодам, отправлял уведомление дежурным о подозрительной активности.

Совместили 4 графика в системе мониторинга. Теперь было важно увидеть на графиках момент, когда атака не блокируется и нужно вмешательство инженера. На 4 разных графиках наш глаз замыливался. Поэтому мы совместили графики и стали наблюдать за всем на одном экране.

На мониторинге мы следили, как меняются графики разных цветов. Всплеск красного цвета показывал, что атака началась, а оранжевый и синий графики демонстрировали реакцию FortiWeb:


Тут все хорошо: был всплеск красной активности, но FortiWeb справился и график атаки сошел на нет.

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


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

Расследовать ночные инциденты тоже стало проще. На графике сразу видно момент, когда пора прийти на защиту сайта.


Вот что иногда происходит ночью. Красный график началась атака. Синий активность FortiWeb. Атака заблокировалась не до конца, пришлось вмешаться.

Куда стремимся


Сейчас мы обучаем дежурных администраторов работать с ELK. Дежурные учатся оценивать ситуацию на дашборде и принимают решение: пора эскалировать на специалиста по FortiWeb, или политик на WAF хватит для автоматического отражения атаки. Так мы снижаем нагрузку на инженеров ИБ по ночам и делим роли в поддержке на уровне систем. Доступ к FortiWeb остается только у центра киберзащиты, и только они вносят изменения в настройки WAF при острой необходимости.

Также мы работаем над отчетностью для заказчиков. Планируем, что данные о динамике работы WAF будут доступны в личном кабинете клиента. ELK сделает ситуацию прозрачнее без необходимости обращаться к самому WAF.

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

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

Web Application Firewall работа на опережение

16.11.2020 14:12:10 | Автор: admin
В одном из предыдущих постов мы рассказывали об отражении DDoS-атак при помощи анализа трафика по протоколу Netflow. Само собой, DDoS далеко не единственная проблема, с которой может столкнуться ресурс. Воображение злоумышленников весьма и весьма велико, да и технических средств у них хватает. Плюс не стоит забывать о том, что какой-то из ваших ресурсов вполне может работать на ПО с zero-day-уязвимостями.

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

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

Зачем вообще нужен WAF


В прошлом году компания Positive Technologies выпустила своё исследование Уязвимости веб-приложений 2019, согласно которому доля веб-приложений, содержащих уязвимости высокого уровня риска, составила уже 67%. Самые частые проблемы недостаточно защищенная зона авторизации, SQL-инъекции и чтение произвольных данных. Плюс растёт процент систем, в которых возможна утечка данных.

О важности защиты веб-приложений говорит и один из отчётов аналитиков Gartner:

  • Межсетевые экраны уровня приложений (WAF) отличаются от экранов нового поколения (NGFW) и систем предотвращения вторжений (IPS). WAF защищает от атак каждое отдельное приложение.
  • Даже при использовании NGFW и IPS система защиты WAF чаще всего является единственным решением, которое проверяет и зашифрованный, и незашифрованный входящий веб-трафик.
  • Важнейшим фактором при выборе WAF является четкое понимание объема работы, которое предстоит выполнять сотрудникам. Особое внимание следует обратить на отсутствие ложных срабатываний.
  • Как правило, предприятия фокусируются на защите общедоступных пользовательских веб-приложений, забывая при этом о не менее важных внутренних приложениях.



Основные различия WAF, IPS и NGFW (Gartner)

Последствия подобных утечек и взломов довольно очевидны и не очень приятны для компаний (и их клиентов особенно): здесь тебе и личные данные, включая платежную информацию, и коммерческие тайны с конфиденциальными документами, и доступы ко внутренним системам. В общем, джекпот, в случае срыва которого компания страдает и репутационно, и материально. Ожидаемо, сильнее всего от подобного страдают финансовые организации, но не только:


По данным Positive Technologies

Для защиты от подобного в компаниях и существуют специалисты по информационной безопасности, определяющие допустимость использования того или иного софта, а также общие политики безопасности. При этом общие тенденции рост числа самих приложений, активное использование различных API, работа в условиях смешанной среды (in-house-приложения, частные и облачные) активно намекают, что многие процессы стоит автоматизировать.

Особенно в области информационной безопасности.

Основные проблемы для компаний при попытках развернуть подобные решения самостоятельно заключались в том, что время реакции на активную угрозу было довольно большим, как и стоимость владения самим решением. Хотелось, как обычно чтобы и побыстрее, и подоступнее. А в идеале ещё и с облачной версией решения, которую можно быстро подключить и комфортно администрировать.

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

Прежде всего, мы взяли список 10 самых главных угроз для веб-приложений 2020 от OWASP и осуществили защиту от них по обеим моделям (позитивная и негативная).

  1. Injection.
  2. Broken Authentication.
  3. Sensitive Data Exposure.
  4. XML External Entities (XXE).
  5. Broken Access Control.
  6. Security Misconfiguration.
  7. Cross-Site Scripting XSS.
  8. Insecure Deserialization.
  9. Using Components with Known Vulnerabilities.
  10. Insufficient Logging & Monitoring.

Вдобавок к этому наш WAF защищает от брутфорса, от извлечения данных, от атак через API, от нежелательного сканирования, ботнетов и от slowloris и HTTP dynamic flood.

Конечно, здесь же есть отражение атак нулевого дня, включая и HTTPS, а также блокировка трафика по географическому признаку.

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

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

Кстати, есть парочка мифов насчёт избыточности самой сути WAF и его необходимости. Обычно приводят в пример вот что:

Шлюз безопасности и мониторинг сессий меня защитит
Веб-приложения должны быть доступны всем, поэтому остается только разрешить весь входящий трафик на порты 80 (HTTP) и 443 (HTTPS) и надеяться, что все будут играть по правилам. Мониторинг сессий на наличие, идентификацию и блокирование исполняемого кода не заменяет анализ трафика веб-приложений, поэтому эксплуатация уязвимости посредством легитимного веб-запроса не составляет труда при наличии шлюза безопасности всё в одном.

Тогда точно защитит сетевой сканер защищенности веб-приложений
Не совсем. Сетевые сканеры безопасности предназначены для выявления небезопасных конфигураций, отсутствия необходимых обновлений и наличия уязвимостей серверов и сетевых устройств, а не уязвимостей веб-приложений. Архитектура решений, огромное количество правил и признаков, подлежащих проверке при сканировании сети, все же иногда позволяют производителям сетевых сканеров предлагать дополнительную функциональность по поиску уязвимостей веб-приложений в рамках отдельной лицензии или даже бесплатно.

Но удобство использования и качество их работы далеки даже от среднего уровня профессиональных сканеров веб-приложений, и доверие к таким продуктам не может быть восстановлено после нахождения критических уязвимостей там, где универсальный сканер отработал на 100%.

Как всё работает


Мы построили решение на оборудовании израильской компании Radware, которая долгое время остается лидером в области услуг информационной безопасности. Один из важных плюсов решения именно автоматическая работа: анализ угроз и оптимизация стандартизированных правил для веб-приложений осуществляются без участия администратора.

Есть три способа подключения, которые определяются тем, где решено проводить анализ трафика:

  1. На наших виртуальных машинах в нашем датацентре
  2. На нашем оборудовании в помещении клиента
  3. На виртуальной машине клиента.

Схематично всё выглядит так:



Кроме трёх вариантов подключения, есть и два варианта развертывания:

  1. Inline (только из облака) мониторинг либо активная блокировка вредоносных запросов.
  2. Out of pass (локально у заказчика) поддерживается только мониторинг вредоносных запросов.

Благодаря автоматической оптимизации стандартизированных правил нам удалось добиться максимально низкого значения срабатываний false positive. Он почти приближен к нулю. Конечно, иногда бывает (менее 1%), это связано с ошибками в описании правил работы конкретного сайта, потому что WAF как механизм описывает только разрешенные действия, а всё остальное запрещено.

Преимущества решения


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

  • обеспечивает полную защиту от 10 самых опасных уязвимостей по версии OWASP;
  • сертифицировано по версии ICSA Labs;
  • обладает уникальной функцией по автоматическому созданию политик;
  • и поддерживает модели отрицательной и положительной безопасности.

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

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

Ещё из полезного:

  • Индивидуальная виртуальная машина для каждого клиента при облачном размещении.
  • WAF автоматически подстраивается под изменение контента сайта, что существенно упрощает администрирование.
  • При облачном размещении SSL-сертификат для доступа к сайту не передается оператору, а загружается клиентом в личном кабинете в криптоконтейнер, который обеспечивает безопасность в соответствии с банковским стандартом PCI DSS.
  • 24х7 поддержка квалифицированными специалистами в области информационной безопасности партнера ЭКОН Технологии.
  • 3 варианта реализации решения облачное, VM клиента, выделенное оборудование в контуре клиента.

Подключить WAF от Билайн можно на странице продукта. У вас будет бесплатный тестовый месяц, не понравится отключите, понравится работаем дальше.
Подробнее..

Я твой WAF payload шатал

09.02.2021 14:04:30 | Автор: admin

Пару недель назад команда Vulners опубликовала сравнение нескольких популярных WAF. Поймав себя на мысли - "а как оценивать качество его работы?", я решил разобрать подробнее тему security-тестов и критериев оценки Web Application Firewall. Статья пригодится, в первую очередь, тем, кому интересна тема веб-безопасности, ровно как и счастливым обладателям WAF.

Критерии оценки

Сравнивая различные решения, мы привыкли ориентироваться на показатели скорости и стабильности работы, удобства настройки, управления, обновления и масштабирования. В контексте WAF к этому списку нужно добавить и точность выявления атак - количество пропусков (False Negative) и ложных срабатываний (False Positive).

Зоопарк из UTF-8

Чтобы понять, сколько тонкостей существует при анализе запросов, рассмотрим в качестве примера особенность работы с UTF-8. Если в поисковой строке сайта мы наберем что-то в английской раскладке, то, скорее всего, будет использоваться набор Basic Latin.

UTF-8: Basic LatinUTF-8: Basic Latin

При этом запрос, который будет передаваться в веб-приложение, выглядит следующим образом: GET /?s=test

Ищем "test", фиксируем выводИщем "test", фиксируем вывод

Теперь попробуем использовать набор символов из Halfwidth and Fullwidth Forms (ищем тот же test, только в другой кодировке).

UTF-8: Halfwidth and Fullwidth FormsUTF-8: Halfwidth and Fullwidth Forms

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

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

Запрос (в URLencode): GET /?s=%EF%BD%94%EF%BD%85%EF%BD%93%EF%BD%94

При этом оба запроса (с разными наборами символов) приведут к выводу одного и того же результата - объекта, содержащего вхождение "test", хотя используем разный набор символов.

Меняем "test" на "tes1", чтобы убедиться в корректности работы поиска - ничего не выводитсяМеняем "test" на "tes1", чтобы убедиться в корректности работы поиска - ничего не выводится

Сперва мы подумали, что само веб-приложение (проверяли на WordPress, но отработает и на других) производит нормализацию данных до Basic Latin, но в итоге выяснили, что данные передаются без нормализации напрямую в БД. Есть ограничения, связанные с использованием Halfwidth and Fullwidth Forms - его нельзя применять при написании оператора SELECT, но можно использовать, к примеру, в конструкции LIKE '%Текст в Halfwidth and Fullwidth Forms%'. Этот набор символов может использоваться не только при составлении SQL-запросов. Есть примеры его применения при поиске XSS и т.д.

Данная особенность позволяет выполнять обход WAF, если он не нормализует символы до Basic Latin. Существует множество техник обхода, и было бы здорово создать инструмент, позволяющий разом их все проверить.

WAF Bypass: инструментарий

На github можно найти множество решений, позволяющих тестировать WAF, есть даже специальные аккаунты, производящие сбор такого инструментария, например waflib.

Помимо основного Unit-теста, который используем для тестирования Nemesida WAF перед каждым релизом (тест на каждую версию ОС занимает примерно 30 часов), мы разработали собственный waf-bypass, позволяющий оценить точность выявления атак. Но всегда интересно и полезно проверить работу продукта с использованием сторонних решений, поэтому в качестве второго (а в рамках этой статьи - основного) инструмента я выбрал Go Test WAF, размещенный в git-репозитории пользователя wallarm.

Для использования waf-bypass, написанного на Python3, необходимо клонировать проект, установить зависимости и запустить скрипт:

git clone https://github.com/nemesida-waf/waf_bypass.git /opt/waf-bypass/python3 -m pip install -r /opt/waf-bypass/requirements.txtpython3 /opt/waf-bypass/main.py --host='example.com'

Если следовать документации, Go Test WAF можно запускать из докер-контейнера, что я и сделал:

docker build . --force-rm -t gotestwafdocker run gotestwaf --url='http://example.com'

Если проводить сравнение инструментов исходя из их использования, то Go Test WAF работает быстрее (за счет многопоточности) и содержит небольшой набор для проверки False Positive. Учтем это в следующих релизах waf-bypass.

Вижу цель, иду к ней!

Тестировать буду 2 версии: Nemesida WAF (полноценную с машинным обучением) и Nemesida WAF Free (бесплатную, но только с сигнатурным анализом).

Когда увидел результаты тестов WAFКогда увидел результаты тестов WAF

В обзоре Vulners, с которым можно ознакомиться по ссылке, в финальной таблице максимальным результатом WAF, полученным путем тестирования Go Test WAF, являлось значение 83.06%, при этом ModSecurity набрал 49.82%. Интересно посмотреть, сколько сможет набрать Nemesida WAF и Nemesida WAF Free.

Nemesida WAF Free bypass

Напомню, анализ в Nemesida WAF Free производится только сигнатурным методом, при этом эта версия имеет качественно написанную и автоматически обновляемую базу сигнатур (ознакомиться с которой можно по ссылке), а также Личный кабинет (также устанавливается локально) - веб-интерфейс для визуализации событий. Nemesida WAF Free представлена в виде динамического модуля, который можно подключать как к новому экземпляру Nginx, так и к уже установленному (или скомпилированному с собственными флагами). Обновляется Nemesida WAF Free из репозитория и доступен для Debian, Ubuntu и CentOS, "быстрый старт" займет 5-7 минут для опытных пользователей.

Часть содержимого первой страницы Личного кабинета Nemesida WAF FreeЧасть содержимого первой страницы Личного кабинета Nemesida WAF Free

Запускаем Go Test WAF, смотрим результаты.

Nemesida WAF Free: GoTestWAFNemesida WAF Free: GoTestWAF

45.47% и 0 ложных срабатываний - довольно неплохо, учитывая, что часть тестов содержит пейлоады в Base64, которые не декодируются в Nemesida WAF Free. Теперь ловким движением руки и не меняя настроек Nemesida WAF Free, проверим его с помощью waf-bypass:

Nemesida WAF Free: waf-bypassNemesida WAF Free: waf-bypass

325 пропусков и 1054 заблокированных пейлоадов. Пытаемся запомнить результаты и двигаемся дальше.

Nemesida WAF bypass

Помимо функционала нормализации данных, Nemesida WAF позволяет производить декодирование запросов в различных кодировках, в том числе и в Base64, поэтому было особенно интересно, какой скор он сможет набрать. Начнем с waf-bypass, запускаем, смотрим результаты:

Nemesida WAF: waf-bypassNemesida WAF: waf-bypass

4 пропуска, остальные запросы заблокированы. Здорово, но все-таки waf-bypass - наша разработка, поэтому очень интересно, какие результаты будут получены при тестировании с использованием Go Test WAF. Запускаем Go Test WAF, смотрим результаты:

Nemesida WAF: gotestwafNemesida WAF: gotestwaf

Проверка заняла немного больше времени, но и показатели в 2 раза лучше - 94.45% - то есть на 11.39% выше, чем наилучший результат в обзоре Vulners. Почти отсутствуют пропуски, но из 8 False Positive заблокировано 5, а хотелось, чтобы 0, поэтому будем разбираться. Сперва посмотрим содержимое всех 8 FP-запросов:

- union was a great select- 'h2<h1'- D'or 1st parfume- "1) a-b=c"- john+or@var.es- DEAR FINN,--I think it would do; copy should reach us second post- The Senora found herself a heroine; more than that, she became aware time he came.

Из них ошибочно заблокированные:

- f971e9ace6=union was a great select- 24d85a0990=D'or 1st parfume- 48105a7f77=john+or@var.es- 18196a6191=DEAR FINN,--I think it would do; copy should reach us second post- e7e5421304=The Senora found herself a heroine; more than that, she became aware

Чтобы понять, почему запросы были заблокированы, нужно понимать, как работает модуль машинного обучения в Nemesida WAF - построение моделей происходит за счет использования 2-х наборов обучающих выборок - базы атак и базы условно чистого трафика. Чем меньше реальных запросов попало в обучающую выборку - тем больше будет False Positive. В данном случае в обучающей выборке не попадались такие или схожие запросы, кроме этого, они содержат признаки атаки (например, --, или union ... select, или 'or), поэтому были заблокированы. Используя модуль дообучения Nemesida WAF Signtest, производим экспорт False Positive в один клик, после чего они войдут в обучающую выборку и не будут учитываться - как сами, так и другие, схожие с ними запросы.

Запускаем тест заново:

Nemesida WAF: gotestwaf (с FP в обучающей выборке)Nemesida WAF: gotestwaf (с FP в обучающей выборке)

Несмотря на то, что содержимое запросов имеет динамический контент 24d85a0990 в 24d85a0990=D'or 1st parfume, ложные срабатывания отсутствуют, при этом количество пропусков не изменилось. Скоринг стал меньше, а должен был увеличиться - вероятно, ошибка в самом Go Test WAF.

Чтобы разобраться в пропусках, я настроил журналирование Nginx таким образом, чтобы фиксировать содержимое запросов, не получивших код ответа 403:

Расширенное журналирование Nginx

Если вы хотите проверить, какие запросы не были заблокированы - активируйте расширенное журналирование в Nginx:

1. В секцию http {} добавив:

logformat extended '$msec $requesttime $timeiso8601 $timelocal $requestid $status $remoteaddr $scheme $host $request $httphost $httpcookie $httpuseragent $contentlength $contenttype $httporigin $requestbody\n';

и

map $status $loggable { 403 0; default 1; }

2. В секцию server {} файла виртуального хоста (например, /etc/nginx/conf.d/1.conf) добавив:

access_log /var/log/nginx/extended_access.log extended if=$loggable;

После перезапуска Nginx в /var/log/nginx/extended_access.log будут попадать все незаблокированные запросы (не получившие код ответа 403).

Фактически пропусков было всего 3, и об их критичности судите сами:

GET /AEAEAFAEAEAFetcAFpasswd

GET / QUIT /

GET /foo_bar=foo bar=foo[barfoo[bar

Визуализация атак: графики, поиск, отчеты

Вне зависимости от того, используется ли Nemesida WAF или Nemesida WAF Free, к любому из них можно подключить Личный кабинет - веб-интерфейс, позволяющий визуализировать работу модулей:

Личный кабинет: графики и диаграммыЛичный кабинет: графики и диаграммыЛичный кабинет: графики и диаграммыЛичный кабинет: графики и диаграммыЛичный кабинет: графики и диаграммыЛичный кабинет: графики и диаграммыNemesida WAF: информация об атакахNemesida WAF: информация об атаках

В Личном кабинете есть и другие разделы - информация по атакам методом перебора и SMS-флуде, статистика работы сканера уязвимостей и т.д. Также можно выгрузить общий отчет в формате PDF или CSV. Личный кабинет написан на Django и устанавливается локально, так же, как и другие модули.

И пока на версусе решают, кто из них круче...

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

Кроме этого, такие тесты позволяют наглядно понять разницу между сигнатурным анализом и машинным обучением, необходимость использовать различные механизмы нормализации и декодирования. Но если по какой-то причине использовать коммерческий продукт нет возможности, всегда можно воспользоваться ModSecurity, NAXSI или Nemesida WAF Free с красивым и удобным Личным кабинетом. Nemesida WAF Free доступен в виде установочных дистрибутивов для Debian/Ubuntu/CentOS, в виде Virtual Appliance для KVM/VirtualBox/VMWare и образа для Docker-контейнера. Больше информации можно найти здесь.

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

Подробнее..

Grammarly исправила XSS-уязвимость, позволяющую обходить AWS WAF

02.04.2021 10:12:46 | Автор: admin

Grammarly компания-единорог, которая в сентябре прошлого года объявила о старте своей программы вознаграждения за найденные ошибки. С тех пор было подано множество заявок, а выплаты составили внушительную сумму. При этом оказалось, что некоторые из обнаруженных у Grammarly уязвимостей можно перенести и на другие ресурсы. Так, недавно выявленная XSS-уязвимость позволяет также обходить AWS WAF.

Отчет об этой уязвимости выделяется на фоне других. Во-первых, данный отчет был представлен Франсом Розеном (Frans Rosen), одним из лучших хакеров платформы HackerOne, где он занимает 6 место в абсолютном рейтинге.

Во-вторых, за отчет было выплачено целых $3000, в то время как сотни постоянно выявляемых XSS-уязвимостей обычно оцениваются платформой в максимум $50-$100.

Заголовок отчета на скрине ниже: Config override using non-validated query parameter allows at least reflected XSS by injecting configuration into state (Переопределение параметра config через непроверяемый атрибут запроса позволяет провести, по крайней мере, отраженную XSS-атаку путем внедрения новой конфигурации) https://hackerone.com/reports/1082847.

Указанная уязвимость это отличный пример глубокого исследования JavaScript, которые проводит Франс. Более того, по какой-то причине код XSS, который Франс использовал для проверки данной уязвимости Grammarly, обходит AWS WAF.

Разберемся, как это происходит

На первый взгляд отправляемый код выглядит как ничем не примечательный XSS:

https://app.grammarly.com/docs/new?config={%22account%22:{%22subscription%22:%22javascript:alert(document.domain)//%22},%22api%22:{%22redirect%22:%22javascript:alert(document.domain)//%22}}

Он содержит параметр config в формате JSON для уязвимого приложения. Атрибуты JSON subscription и redirect содержат обычный XSS-код вызова функции alert(). Отправляя этот запрос, чтобы проверить, как его обнаруживает mod_security WAF, получаем следующее:

2021/03/03 01:10:44 [error] 41#41: *1 [client 172.17.0.1] ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `28' ) [file "/etc/modsecurity.d/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "80"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 28)"] [data ""] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "172.17.0.1"] [uri "/docs/new"] [unique_id "161473384455.381362"] [ref ""], client: 172.17.0.1, server: localhost, request: "GET /docs/new?config={%22account%22:{%22subscription%22:%22javascript:alert(document.domain)//%22},%22api%22:{%22redirect%22:%22javascript:alert(document.domain)//%22}} HTTP/1.1", host: "localhost:8080"

В то же время AWS WAF пропустит этот код без блокировки:

Однако, если удалить объект JSON и отправить тот же код в виде обычного текста, AWS WAF заблокирует его:

Внимательный читатель может заметить, что мы изменили код, добавив атрибут onerror, чтобы код представлял собой инъекцию HTML-атрибута. Все верно. Но если теперь снова добавить префикс JSON, результат будет следующим:

Изначально мы решили, что причина этого обхода кроется в парсере JSON. Как обсуждалось в недавней статье, возможность декодирования JSON в WAF необходима для защиты от угроз API, таких как CVE-2020-13942 Apache Unomi RCE.

Однако причина здесь совсем в другом, поскольку AWS WAF вообще не обладает функцией парсинга JSON. Удаляя все лишнее из кода Grammarly, в итоге получаем, что следующий запрос блокируется AWS WAF:

Однако добавление всего одной дополнительной двойной кавычки приводит к обходу WAF:

Причина не в префиксе JSON, а в самих двойных кавычках. Можно легко убрать все фигурные скобки, а код ""onerror=javascript:alert('I-LOVE-AWS-WAF!') все также будет обходить WAF.

Это кажется абсурдным, но добавление любого числа двойных кавычек перед кодом XSS позволяет обходить AWS WAF. Тестирование было выполнено при 1500 включенных правил.

Надеемся, данные примеры были вам полезны. Спасибо за интерес!

Подробнее..

DevSexOoops или к чему приводят ошибки разработки

25.05.2021 14:04:29 | Автор: admin

Вступление

Современные реалии бизнеса диктуют свои достаточно жёсткие требования к web-разработке. В основном заказчиков интересуют функциональные характеристики продукта, его дизайн и юзабилити, при этом не уделяют достаточно внимания безопасности. Причин сложившейся ситуации много, основная - удорожание продукта при внедрении принципов безопасного программирования. Поэтому, для тех, кто решил закрыть глаза на вопросы безопасности, оправдывая себя фразами типа кому мы нужны? или захотят взломать взломают, мы накидали несколько вредных советов.

Вредный совет первый

Откажитесь от фильтрации и проверки данных на стороне сервера и клиента. Фильтрация данных приведет к появлению лишнего кода, что увеличит возможность ошибки и приведёт к удорожанию разработки. Некорректная фильтрация данных возникает в том случае, когда данные, получаемые веб-приложением от пользователей, недостаточно экранируются или недостаточно фильтруются перед непосредственным выполнением в коде. Подобные ошибки приводят к возникновению уязвимостей SQLi, RCE, XXE, XSS, и тд. Рассмотрим подробнее на примере SQL injection (далее SQLi). Допустим, есть числовой параметр id, с помощью которого веб-приложение запрашивает соответствующую запись в БД. Если код, отвечающий за этот функционал, выглядит примерно так:

$id = $_GET['id']$query = "SELECT * FROM some_table_name WHERE id=$id"

то запрос к БД будет выглядеть так:

SELECT * FROM some_table_name WHERE id=1

Если не производить фильтрацию данных или экранирование символов, которые принимаются в качестве аргумента, то при поиске уязвимости будет подставляться спецсимвол ', а в БД будет отправляться запрос типа:

SELECT * FROM some_table_name WHERE id=1'

который нарушит синтаксис запроса, и в ответе от веб-приложения атакующий получит ошибку от базы данных, которая будет маркером возможности проведения SQLi. Дальнейшая эксплуатация уязвимости приведет к полной компрометации базы данных, где может храниться не только информация о логинах и паролях пользователей, но и другая конфиденциальная информация, например, реквизиты кредитных карт или персональные данные. Однако стоит отметить, на основе информации от багтрекер-площадки HackerOne, что в период за 2019-2020 год наблюдается тенденция к снижению количества случаев эксплуатации популярной уязвимости SQLi. Это подтверждается и статистикой компании Acunetix , которая предоставила отчет веб-уязвимостей за 2019-2020 год, где SQLi были обнаружены у 8% сайтов, так что скоро можно будет спать спокойно.

Вредный совет второй

Например при работе с пользователем ваше приложение создает экземпляр класса, почему бы не хранить его на стороне пользователя, это же удобно?! При этом дополнительными настройками безопасности можно не заморачиваться, мы же доверяем нашим пользователям. Пример использования десериализации. В данном примере есть класс Injection, в котором реализован магический метод __wakeup(). Данный метод выполняется во время десереализации объекта и выполняет код, который хранится в переменной $some_data.

<?phpclass Injection {        public $some_data;        function __wakeup(){                if( isset( $this->some_data ) ){                        eval( $this->some_data );                }        }}if( isset( $_REQUEST['data'] ) ){        $result = unserialize( $_REQUEST['data'] );        // ...}?><?phpclass Injection {        public $some_data;        function __wakeup(){                if( isset( $this->some_data ) ){                        eval( $this->some_data );                }        }}$inj = new Injection();$inj->some_data = "phpinfo();";echo( serialize( $inj ) );?>

Зная исходный код создадим строку с полезной нагрузкой в виде сериализованного объекта, который будет иметь следующий вид:

O:9:"Injection":1:{s:9:"some_data";s:10:"phpinfo();";}

Передав пейлоад в уязвимое веб-приложение выполнится, в нашем случае, функция phpinfo().

Вредный совет третий

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

$LINK = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);    $user_name = $_GET['login'];    $user_password = $_GET['password'];    $query = $LINK->prepare("select id from user where login = '$user_name' and user_password='$user_password'");    $query->execute();

Вредный совет четвертый

Создание приложения со сложной политикой аутентификации, определенно затратно и более длительно по времени, да и зачем усложнять себе и пользователям жизнь, если можно придумать длинный пароль, например от 123456789. А чтобы не заморачиваться с защитой от перебора логина и пароля

можно этот пароль усложнить спецсимволом, например вот так: $123456789 или так 123456789#. Самый надежный пароль - это длинный пароль, и этого вполне достаточно для надежной аутентификации.

Согласно официальной статистике компании NordPass, специализирующейся на разработке менеджера паролей, по-прежнему лидирует пароль 123456, на втором месте 123456789, стоит отметить, что придуманного выше пароля в статистике нет (а там более 200 паролей), значит злоумышленник хапнет горя от перебора.

Внедрение двухфакторной аутентификации имеет смысл если социальные сети и крупнейшие интернет-порталы, поэтому можно обойтись капчей и сложным универсальным паролем.

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

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

Вредный совет пятый

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

  • включены и используются учетные записи по умолчанию. Тут все просто, если заметите это раньше злоумышленника - лучше сразу отключить;

  • включено индексирование директорий веб-приложения, позволяющее просматривать их содержимое.

Такой пример конфигурации ngnix:

http {               autoindex on;               include etc/nginx/mime.types;               default_type   application/octet-stream;

приведет к такой проблеме:

  • включено отображение ошибок веб-приложения для пользователя. Это не так страшно звучит, можно подзабить;

Что делать с обновлением ПО на сервере? Практически в 90% случаев при правильной первой установке компонентов сервера, мы имеем актуальные версии пакетов. Мы рекомендуем после того как сервер будет запущен и ваше приложение уже работает, сделать резервную копию, отключить обновление и забыть навсегда о них. Многие сервера Linux работают десятилетиями без обновлений и перезагрузок. Сам же процесс обновление ПО на сервере особенно под управлением Unix подобных систем, рисковое дело - можно все сломать, а уязвимости одни латают, другие появляются - тут тоже можно пренебречь. Админы сами говорят работает не - трогай!.

Если есть необходимость временно запустить на сервере дополнительный сервис и открыть его в мир - используйте порты выше 1024. Эти порты не так популярны для сканирования у мамкиных хакеров.

В идеале сбор логов должен быть централизован, а значит нужно обзавестись отдельным сервером и настроить перенаправление. С другой стороны, есть человек которому и так вы платите деньги, и следить за ситуацией и читать лог-файлы, входит в его обязанности. Вопрос, успеет ли он вовремя заметить критические сообщения? Да должен! все равно ничего не делает!

Заключение

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

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

Для обеспечения защиты веб-приложения от многих видов информационных атак на прикладном уровне существуют файрволы веб-приложений (WAF). Такие решения достаточно функциональны и надежны, но требуют и внимания, и контроля со стороны администратора, это связанно с ручной обработкой новых типов атак для расширения сигнатур WAF. Для упрощения этой задачи и увеличения процента точности современные WAF используют модули машинного обучения. Примером такого файрвола является наш продукт Nemesida WAF он содержит модуль машинного обучения благодаря которому способен выявлять атаки с минимальным количеством ложных срабатываний. Для отображении информации об атаках и выявленных уязвимостей Nemesida WAF содержит удобный личный кабинет.

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

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru