Advanced
Тема интерфейса

Защита веб-приложения с помощью WAF

В этой лабораторной работе вы защитите уязвимое веб-приложение, размещенное на виртуальной машине в облаке Advanced, с помощью сервиса Web Application Firewall.

Для этого вы будете использовать следующие сервисы и инструменты:

  • Web Application Firewall (WAF) — межсетевой экран уровня приложений для выявления и блокировки атак на веб-приложения.

  • Elastic Cloud Server (ESC) — сервис, в рамках которого предоставляется виртуальная машина.

  • Elastic IP (EIP) — публичный IP-адрес для доступа к веб-сайту через интернет.

  • Data Encryption Workshop (DEW) — сервис шифрования данных и управления ключевыми парами.

  • nip.io — бесплатный сервис для сопоставления любого IP-адреса с доменным именем.

  • Уязвимое веб-приложение OWASP Juice Shop (en).

Шаги:

Перед началом работы

Если вы уже зарегистрированы, войдите в консоль управления Advanced через личный кабинет Cloud.ru или как IAM-пользователь.

1. Настройте виртуальную машину

На этом шаге вы подготовите ресурсы и создадите виртуальную машину в облаке Advanced с необходимыми параметрами.

  1. Создайте сеть и подсеть VPC со следующими параметрами:

    В блоке Basic Information задайте:

    • Name — название сети «vpc-test-WAF».

    • IPv4 CIDR Block — диапазон IP-адресов 192.168.0.0/24.

    • Enterprise Project — проект по умолчанию default.

    В блоке Default Subnet задайте:

    • Name — название подсети, например «subnet-test-WAF».

    • IPv4 CIDR Block — диапазон IP-адресов для подсети 192.168.0.0/24.

  2. Определите свой публичный IP-адрес в интернете с помощью любого онлайн-сервиса, например 2ip.ru, reg.ru или pr-cy.ru. Эти сервисы автоматически отображают ваш публичный IP-адрес при посещении их веб-страницы.

  3. Настройте группу безопасности:

    Создайте группу безопасности со следующими параметрами:

    • Name — название группы безопасности, например «sg-test-WAF».

    • Enterprise Project — проект по умолчанию default.

    • Template — шаблон с правилами группы безопасности Fast-add rule.

    Чтобы ограничить доступ к стенду на время тестирования только вашим публичным IP, в созданной группе безопасности добавьте правило группы безопасности Fast-Add Rule со следующими параметрами:

    • Protocols and Ports — протоколы SSH, ICMP, HTTP, HTTPS.

    • Type — тип IP-адресов IPv4.

    • Source IP — ваш публичный IP, определенный на предыдущем шаге.

    • Action — действие правила Allow — разрешающее.

  4. Создайте ключевую пару со следующими параметрами:

    • Key Pair Name — название пары ключей, например «KeyPair-test-WAF».

    • Type — алгоритм по умолчанию.

    Предложение «I agree to host the private key of the key pair» можно не принимать.

    Ключевая пара потребуется в дальнейшем для входа в операционную систему виртуальной машины по SSH.

    Рекомендуется перенести пару ключей в каталог .ssh, который расположен в домашнем каталоге. Если каталога .ssh нет, создайте его.

    Чтобы найти домашний каталог:

    • В Windows — в графическом интерфейсе в проводник вставьте %userprofile% и нажмите ENTER.

    • В Linux — выполните команду:

    cd ~
  5. Создайте виртуальную машину со следующими параметрами:

    • Specificationsспецификация виртуальной машины General-purpose s7n.medium.2.

    • ImagePublic Image Ubuntu 22.04.

    • Network — созданные ранее сеть и подсеть VPC.

    • Security Group — созданная ранее группа безопасности, остальные нужно исключить.

    • EIP — автоматическое назначение Auto assign.

    • Billed By — способ тарификации By bandwidth.

    • Bandwidth Size — ширина полосы пропускания, например 10.

    • Release Option — активируйте опцию удаления EIP вместе с виртуальной машиной.

    • ECS Name — название виртуальной машины, например «ecs-test-WAF».

    • Login Mode — способ аутентификации по ключевой паре Key Pair.

    • Key Pair — созданная ранее ключевая пара.

    • Активируйте чекбокс с уведомлением.

    • Key Pair — созданная ранее ключевая пара.

    • Enterprise Project — проект по умолчанию default.

  6. Подключитесь к виртуальной машине по SSH:

    1. Убедитесь, что статус созданной ВМ «Running».

    2. Скопируйте EIP ВМ в столбце IP Address.

    3. Используя утилиту cmd или другую, выполните команду:

    ssh root@X.X.X.X

    Где X.X.X.X — публичный IP виртуальной машины.

  7. Подготовьте ВМ для установки веб-приложения:

    sudo apt update
Внимание

Для упрощения задания мы будем подключаться к ВМ под именем root. Такой способ является небезопасным и может использоваться только в тестовой среде.

2. Разверните уязвимое веб-приложение «OWASP Juice Shop»

  1. Установите веб-приложение OWASP Juice Shop (en) методом «Docker Container». Для запуска контейнера замените команду из инструкции в шаге выше на следующую:

    docker run -rm -d -p 80:3000 bkimminich/juice-shop
  2. Проверьте работу вашего веб-приложения, перейдя в веб-браузере по адресу http://X.X.X.X.nip.io/, где X.X.X.X — публичный IP виртуальной машины.

Сервис nip.io позволяет разрешать доменное имя в соответствующий IP-адрес без настройки DNS-записи. Вместо него вы можете использовать собственное зарегистрированное доменное имя с TLS/SSL-сертификатом.

3. Выполните атаку на веб-приложение

  1. Очистите кеш браузера.

  2. Откройте в веб-браузере страницу аутентификации веб-приложения.

  3. Выполните атаку типа SQL-инъекция на форму авторизации. Для этого в поле email и пароль введите следующие значения:

    • Any_text' OR 1=1 --

    • любое значение, например pass

  4. Нажмите log in.

Аутентификация пройдет успешно. Вы вошли в личный кабинет под именем admin.

Запрос в систему выглядит так: «Верни мне пользователя, если логин равен Any_text' или если условие 1=1 истинно». SQL-инъекция с условием «OR 1=1» в строке запроса «обманывает» систему проверки данных аутентификации, так как условие 1=1 — всегда истинно и критерий отбора не ограничивается конкретным логином. Знак -- в SQL означает комментарий до конца строки. Символы пароля после этого знака игнорируются сервером баз данных, и проверка пароля не выполняется.

4. Подключите защиту атак на веб-приложения WAF

  1. В списке сервисов выберите Web Application Firewall.

  2. В правом верхнем углу нажмите Create WAF.

  3. Задайте следующие параметры:

    • WAF ModeCloud Mode.

    • Note — подтвердите ознакомление с условиями.

      Примечание

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

      Чтобы использовать выделенный под вас инстанс WAF, создайте WAF с режимом Dedicated Mode.

  4. В консоли Web Application Firewall в меню слева перейдите в раздел Website Settings и нажмите Add Website.

  5. Задайте следующие параметры:

    • Website Name — название «OWASP-Juice-Shop».

    • Domain Name — HTTP-адрес вашего веб-приложения.

    • Protected PortStandard port.

    • Server Configuration:

      • Client ProtocolHTTP.

      • Server ProtocolHTTP.

      • Server Address — публичный IP виртуальной машины.

      • Server Port — 80.

    • Proxy ConfiguredNo proxy.

    • PolicySystem-generated policy. При необходимости можно создать собственные политики.

  6. Нажмите Whitelist WAF now, когда консоль предложит настроить Whitelist, или в списке созданных веб-сайтов в столбце Access Progress нажмите Whitelist.

  7. На вопрос об использовании Firewall, ACL или security groups ответьте Yes, чтобы увидеть сеть, в которой расположен WAF и создать разрешающее правило для него.

  8. Скопируйте адрес сети Cloud WAF для настройки разрешающего правила.

  9. Чтобы ограничить доступ к стенду на время тестирования только вашим публичным IP, в созданной группе безопасности добавьте правило группы безопасности со следующими параметрами:

    • Protocols and Ports — TCP.

    • Type — тип IP-адресов IPv4.

    • Source IP — адрес сети Cloud WAF, скопированный на предыдущем шаге.

    • Action — действие правила Allow — разрешающее.

  10. Протестируйте прохождение трафика до вашего веб-приложения, следуя инструкциям в веб-консоли:

    1. Определите IP-адрес Cloud WAF.

    2. В операционной системе своей рабочей станции свяжите IP-адрес Cloud WAF и доменное имя вашего веб-приложения на nip.io. Для этого внесите запись в файл hosts.

    3. Проверьте командой ping, что запросы к доменному имени вашего веб-приложения направляются на IP Cloud WAF.

    4. Убедитесь в доступности веб-приложения в веб-браузере, перейдя на его страницу.

  11. Повторите атаку типа SQL-инъекция, которую совершали на шаге 3.

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

  12. В консоли Web Application Firewall в меню слева перейдите в раздел Event и убедитесь, что событие атаки обнаружено и информация об атаке и атакующем IP зафиксирована.

  13. В консоли Web Application Firewall в меню слева перейдите в раздел Policies и выберите политику, используемую для защиты.

  14. На вкладке Protection Status выберите режим Block.

Если вы использовали зарегистрированное доменное имя вместо сервиса nip.io, для завершения настройки WAF внесите изменения в DNS-запись (en). Это необходимо для направления трафика пользователей в интернете через подключенный Cloud WAF.

5. Отразите атаку на веб-приложение с помощью WAF

  1. Очистите кеш браузера и повторите атаку типа SQL-инъекция, которую совершали на шаге 3.

    Аутентификация пользователя не выполнена.

  2. В консоли Web Application Firewall в меню слева перейдите в раздел Event и просмотрите информацию об отраженной атаке.

Вы также можете настроить уведомления о событиях WAF на внешний сервер и Telegram.

Что дальше

В этой лабораторной работе вы настроили защиту уязвимого веб-приложения, размещенного на виртуальной машине в облаке Advanced, с помощью сервиса Web Application Firewall, а также проверили защиту с помощью атак на веб-приложение. Узнавайте больше о работе с сервисами и получайте практические навыки управления облаком, выполняя лабораторные работы.