1. Введение
Привет! Добро пожаловать в лабораторию предварительно настроенных правил WAF Cloud Armor!
Google Cloud Armor — это решение Google для обеспечения безопасности периферийной сети предприятия, обеспечивающее защиту от DDOS, соблюдение правил WAF и адаптивное управление в любом масштабе.
Cloud Armor расширил предварительно настроенные наборы правил WAF для устранения уязвимостей безопасности веб-приложений , входящих в десятку лучших по версии OWASP . Наборы правил основаны на базовом наборе правил OWASP Modsecurity версии 3.0.2 для защиты от некоторых наиболее распространенных угроз безопасности веб-приложений, включая локальное включение файлов (lfi), удаленное включение файлов (rfi), удаленное выполнение кода (rce), и многое другое.
В этой лаборатории кода вы узнаете, как устранить некоторые распространенные уязвимости с помощью правил Google Cloud Armor WAF.
Что вы узнаете
- Как настроить группу экземпляров и глобальный балансировщик нагрузки для поддержки службы
- Как настроить политики безопасности Cloud Armor с предварительно настроенными правилами WAF для защиты от lfi, rce, сканеров, атак на протоколы и фиксации сеанса
- Как проверить, что Cloud Armor смягчил атаку, просматривая журналы.
Что вам понадобится
- Базовые знания Google Compute Engine ( codelab ).
- Базовые знания сетевых технологий и TCP/IP.
- Базовые знания командной строки Unix/Linux.
- Полезно пройти экскурсию по сетям в GCP с помощью Networking в Google Cloud.
- (Необязательно) Пройдите лабораторную работу Cloudnet20 Cloud Armor, чтобы научиться защищать рабочие нагрузки с помощью SQL-инъекций, правил на основе IP и географического положения.
Топология Codelab и вариант использования
Рис. 1. Топология кодовой лаборатории правил Cloud Armor WAF
Приложение OWASP Juice Shop полезно для обучения и повышения осведомленности в области безопасности, поскольку оно содержит примеры каждой из 10 наиболее уязвимых мест безопасности OWASP — по замыслу. Злоумышленник может использовать его в целях тестирования. В этой лаборатории кода мы будем использовать его для демонстрации некоторых атак на приложения с последующей защитой приложения с помощью правил Cloud Armor WAF. Приложение будет работать под управлением Google Cloud Load Balancer, к которому будут применяться политика и правила безопасности Cloud Armor. Он будет обслуживаться в общедоступном Интернете, поэтому доступен практически из любого места и защищен с помощью правил Cloud Armor и брандмауэра VPC.
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID
.
- Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.
Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.
В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять с помощью простого браузера.
Прежде чем начать
В Cloud Shell убедитесь, что идентификатор вашего проекта настроен.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Включить API
Включите все необходимые сервисы
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Создайте сеть VPC.
Создать сеть VPC
Из Cloud Shell
gcloud compute networks create ca-lab-vpc --subnet-mode custom
Выход
Created NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 ca-lab-vpc CUSTOM REGIONAL
Создать подсеть
Из Cloud Shell
gcloud compute networks subnets create ca-lab-subnet \ --network ca-lab-vpc --range 10.0.0.0/24 --region us-central1
Выход
Created NAME REGION NETWORK RANGE ca-lab-subnet us-central1 ca-lab-vpc 10.0.0.0/24
Создание правил брандмауэра VPC
После создания VPC и подсети вам нужно настроить несколько правил брандмауэра. Первое правило брандмауэра будет использоваться для разрешения всем IP-адресам доступа к внешнему IP-адресу веб-сайта тестового приложения через порт 3000. Второе правило брандмауэра будет использоваться для разрешения проверок работоспособности с исходного IP-адреса балансировщиков нагрузки .
Из Cloud Shell
gcloud compute firewall-rules create allow-js-site --allow tcp:3000 --network ca-lab-vpc
Выход
Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED allow-js-site ca-lab-vpc INGRESS 1000 tcp:3000 False
Создайте правила FW, чтобы разрешить проверки работоспособности из диапазонов проверок работоспособности Google.
Из Cloud Shell
gcloud compute firewall-rules create allow-health-check \ --network=ca-lab-vpc \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-healthcheck \ --rules=tcp
Выход
Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED allow-health-check ca-lab-vpc INGRESS 1000 tcp False
4. Настройте тестовое приложение
Следующим шагом будет создание тестового приложения, в данном случае веб-сервера OWASP Juice Shop.
При создании вычислительного экземпляра мы используем образ контейнера, чтобы убедиться, что на сервере есть соответствующие службы. Этот сервер будет развернут в us-central1-c и будет иметь сетевой тег, который позволит проверять работоспособность.
Создайте приложение OWASP Juice Shop.
В качестве уязвимого приложения используйте известное приложение OWASP Juice Shop с открытым исходным кодом. Вы также можете использовать это приложение для решения проблем безопасности OWASP через их веб-сайт .
Из Cloud Shell
gcloud compute instances create-with-container owasp-juice-shop-app --container-image bkimminich/juice-shop \ --network ca-lab-vpc \ --subnet ca-lab-subnet \ --private-network-ip=10.0.0.3 \ --machine-type n1-standard-2 \ --zone us-central1-c \ --tags allow-healthcheck
Выход
NAME ZONE MACHINE_TYPE PREEMPTIBLE owasp-juice-shop-app us-central1-c n1-standard-2 INTERNAL_IP EXTERNAL_IP STATUS 10.0.0.3 <public IP> RUNNING
Настройте компонент балансировки нагрузки Cloud: группа экземпляров.
Создайте группу неуправляемых экземпляров.
Из Cloud Shell
gcloud compute instance-groups unmanaged create juice-shop-group \ --zone=us-central1-c
Выход
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES juice-shop-group us-central1-c zone 0
Добавьте экземпляр GCE Juice Shop в группу неуправляемых экземпляров.
Из Cloud Shell
gcloud compute instance-groups unmanaged add-instances juice-shop-group \ --zone=us-central1-c \ --instances=owasp-juice-shop-app
Выход
Updated [https://www.googleapis.com/compute/v1/projects/<project name>/zones/us-central1-c/instanceGroups/juice-shop-group].
Установите в качестве именованного порта порт приложения Juice Shop.
Из Cloud Shell
gcloud compute instance-groups unmanaged set-named-ports \ juice-shop-group \ --named-ports=http:3000 \ --zone=us-central1-c
Выход
Updated [https://www.googleapis.com/compute/v1/projects/<project name>/zones/us-central1-c/instanceGroups/juice-shop-group].
Теперь, когда вы создали неуправляемую группу экземпляров, следующим шагом будет создание проверки работоспособности, внутренней службы, сопоставления URL-адресов, целевого прокси-сервера и правила переадресации.
Настройте компонент балансировки нагрузки Cloud: проверка работоспособности
Создайте проверку работоспособности для сервисного порта Juice Shop.
Из Cloud Shell
gcloud compute health-checks create tcp tcp-port-3000 \ --port 3000
Выход
Created NAME PROTOCOL tcp-port-3000 TCP
Настройте компонент балансировки нагрузки Cloud: серверную службу.
Создайте параметры серверной службы.
Из Cloud Shell
gcloud compute backend-services create juice-shop-backend \ --protocol HTTP \ --port-name http \ --health-checks tcp-port-3000 \ --enable-logging \ --global
Выход
NAME BACKENDS PROTOCOL juice-shop-backend HTTP
Добавьте группу экземпляров Juice Shop во внутреннюю службу.
Из Cloud Shell
gcloud compute backend-services add-backend juice-shop-backend \ --instance-group=juice-shop-group \ --instance-group-zone=us-central1-c \ --global
Выход
Updated [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/backendServices/juice-shop-backend].
Настройте компонент балансировки нагрузки Cloud: карта URL-адресов
Создайте карту URL-адресов для отправки на серверную часть.
Из Cloud Shell
gcloud compute url-maps create juice-shop-loadbalancer \ --default-service juice-shop-backend
Выход
NAME DEFAULT_SERVICE juice-shop-loadbalancer backendServices/juice-shop-backend
Настройте компонент облачного балансировщика нагрузки: целевой прокси.
Создайте целевой прокси-сервер для отображения карты URL-адресов.
Из Cloud Shell
gcloud compute target-http-proxies create juice-shop-proxy \ --url-map juice-shop-loadbalancer
Выход
NAME URL_MAP juice-shop-proxy juice-shop-loadbalancer
Настройте компонент балансировки нагрузки Cloud: правило переадресации.
Создайте правило переадресации для балансировщика нагрузки.
Из Cloud Shell
gcloud compute forwarding-rules create juice-shop-rule \ --global \ --target-http-proxy=juice-shop-proxy \ --ports=80
Выход
Created [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/forwardingRules/juice-shop-rule].
Убедитесь, что служба Juice Shop подключена к сети.
Из Cloud Shell
PUBLIC_SVC_IP="$(gcloud compute forwarding-rules describe juice-shop-rule --global --format="value(IPAddress)")"
Из Cloud Shell
echo $PUBLIC_SVC_IP
Выход
<public VIP of service>
Подождите несколько минут, прежде чем продолжить, иначе вы можете получить ответ HTTP/1.1 404 Not Found.
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP
Выход
HTTP/1.1 200 OK <...>
Вы также можете зайти в браузер, чтобы просмотреть магазин соков!
Теперь мы готовы изучить уязвимости Juice Shop и способы защиты от них с помощью наборов правил Cloud Armor WAF.
5. Демонстрация известных уязвимостей
В целях экономии времени мы продемонстрируем состояния до и после распространения правил Cloud Armor WAF в сокращенном виде.
Обратите внимание на уязвимость LFI: обход пути
Включение локальных файлов — это процесс наблюдения за файлами, присутствующими на сервере, путем использования отсутствия проверки входных данных в запросе для потенциального раскрытия конфиденциальных данных. Следующее просто показывает, что обход пути возможен. В своем браузере или с помощью Curl просмотрите существующий путь, обслуживаемый приложением.
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/ftp
Выход
HTTP/1.1 200 OK <...>
А также обратите внимание, что обход пути тоже работает:
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/ftp/../
Выход
HTTP/1.1 200 OK <...>
Обратите внимание на уязвимость RCE
Удаленное выполнение кода включает в себя различные сценарии внедрения команд UNIX и Windows, позволяющие злоумышленникам выполнять команды ОС, которые обычно доступны только привилегированным пользователям. Ниже показано простое выполнение переданной команды ls.
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls
Выход
HTTP/1.1 200 OK <...>
Вы можете удалить флаги скручивания, чтобы увидеть полный вывод.
Наблюдайте за доступом известного сканера
Как коммерческие приложения, так и приложения с открытым исходным кодом для сканирования для различных целей, включая сканирование на наличие уязвимостей. Эти инструменты используют известный User-Agent и другие заголовки. Обратите внимание, что Curl работает с известным заголовком User-Agent:
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"
Выход
HTTP/1.1 200 OK <...>
Наблюдайте за атакой на протокол: разделение HTTP
Некоторые веб-приложения используют вводимые пользователем данные для создания заголовков в ответах. Если приложение не фильтрует входные данные должным образом, злоумышленник потенциально может отравить входной параметр последовательностью %0d%0a (последовательность CRLF, которая используется для разделения разных строк). Затем ответ может быть интерпретирован как два ответа всем, что его анализирует, например, промежуточным прокси-сервером, потенциально предоставляющим ложный контент в последующих запросах. Вставьте последовательность %0d%0a во входной параметр, что может привести к показу вводящей в заблуждение страницы.
Из Cloud Shell
curl -Ii "http://$PUBLIC_SVC_IP/index.html?foo=advanced%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2035%0d%0a%0d%0a<html>Sorry,%20System%20Down</html>"
Выход
HTTP/1.1 200 OK <...>
Наблюдайте за фиксацией сеанса
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP -H session_id=X
Выход
HTTP/1.1 200 OK <...>
6. Определите правила Cloud Armor WAF.
Перечислите предварительно настроенные правила WAF:
Из Cloud Shell
gcloud compute security-policies list-preconfigured-expression-sets
Выход
EXPRESSION_SET Sqli-canary RULE_ID owasp-crs-v030001-id942110-sqli owasp-crs-v030001-id942120-sqli <...>
Создайте политику безопасности Cloud Armor.
Из Cloud Shell:
gcloud compute security-policies create block-with-modsec-crs \ --description "Block with OWASP ModSecurity CRS"
Обновите правило политики безопасности по умолчанию.
Обратите внимание, что приоритет правила по умолчанию имеет числовое значение 2147483647.
Из Cloud Shell:
gcloud compute security-policies rules update 2147483647 \ --security-policy block-with-modsec-crs \ --action "deny-403"
Поскольку правило по умолчанию настроено с действием запрета, мы должны разрешить доступ с вашего IP. Найдите свой общедоступный IP-адрес (curl, ipmonkey, whatismyip и т. д.).
Из Cloud Shell:
MY_IP=$(curl ifconfig.me)
Добавьте первое правило, разрешающее доступ с вашего IP (ВСТАВЬТЕ СВОЙ IP НИЖЕ).
Из Cloud Shell:
gcloud compute security-policies rules create 10000 \ --security-policy block-with-modsec-crs \ --description "allow traffic from my IP" \ --src-ip-ranges "$MY_IP/32" \ --action "allow"
Обновите политику безопасности, чтобы блокировать атаки LFI.
Примените основной набор правил OWASP ModSecurity, который предотвращает обход пути для включения локальных файлов.
Из Cloud Shell:
gcloud compute security-policies rules create 9000 \ --security-policy block-with-modsec-crs \ --description "block local file inclusion" \ --expression "evaluatePreconfiguredExpr('lfi-stable')" \ --action deny-403
Обновите политику безопасности, чтобы заблокировать удаленное выполнение кода (rce).
В соответствии с базовым набором правил OWASP ModSecurity примените правила, которые ищут rce, включая внедрение команд. Типичные команды ОС обнаруживаются и блокируются.
Из Cloud Shell:
gcloud compute security-policies rules create 9001 \ --security-policy block-with-modsec-crs \ --description "block rce attacks" \ --expression "evaluatePreconfiguredExpr('rce-stable')" \ --action deny-403
Обновите политику безопасности, чтобы заблокировать сканеры безопасности.
Примените основной набор правил OWASP ModSecurity, чтобы заблокировать известные сканеры безопасности, скриптовые HTTP-клиенты и веб-сканеры.
Из Cloud Shell:
gcloud compute security-policies rules create 9002 \ --security-policy block-with-modsec-crs \ --description "block scanners" \ --expression "evaluatePreconfiguredExpr('scannerdetection-stable')" \ --action deny-403
Обновите политику безопасности, чтобы блокировать атаки протокола.
В соответствии с базовым набором правил OWASP ModSecurity применяются правила, которые ищут символы возврата каретки (CR) %0d и перевода строки (LF) %0a, а также другие типы атак по протоколу, такие как контрабанда HTTP-запросов.
Из Cloud Shell:
gcloud compute security-policies rules create 9003 \ --security-policy block-with-modsec-crs \ --description "block protocol attacks" \ --expression "evaluatePreconfiguredExpr('protocolattack-stable')" \ --action deny-403
Обновите политику безопасности, чтобы заблокировать фиксацию сеанса.
В соответствии с базовым набором правил OWASP ModSecurity применяются правила, которые...
Из Cloud Shell:
gcloud compute security-policies rules create 9004 \ --security-policy block-with-modsec-crs \ --description "block session fixation attacks" \ --expression "evaluatePreconfiguredExpr('sessionfixation-stable')" \ --action deny-403
Прикрепите политику безопасности к серверной службе
Из Cloud Shell:
gcloud compute backend-services update juice-shop-backend \ --security-policy block-with-modsec-crs \ --global
Для распространения правил может потребоваться некоторое время (но не более 10 минут). Убедившись, что прошло достаточно времени, протестируйте ранее продемонстрированные уязвимости, чтобы подтвердить соблюдение правил Cloud Armor WAF на следующем этапе.
7. Обеспечьте защиту Cloud Armor с помощью основного набора правил OWASP ModSecurity.
Подтвердите, что уязвимость LFI устранена
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/?a=../
Выход
HTTP/1.1 403 Forbidden <...>
Подтвердите, что атака RCE смягчена
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls
Выход
HTTP/1.1 403 Forbidden <..>
Подтвердите обнаружение известного сканера
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"
Выход
HTTP/1.1 403 Forbidden <..>
Подтвердите, что атака на протокол устранена
Согласно набору основных правил OWASP ModSecurity версии 3.0.2, атака на протокол смягчается
Из Cloud Shell
curl -Ii "http://$PUBLIC_SVC_IP/index.html?foo=advanced%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2035%0d%0a%0d%0a<html>Sorry,%20System%20Down</html>"
Выход
HTTP/1.1 403 Forbidden <..>
Подтвердите, что попытки фиксации сеанса заблокированы
Из Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/?session_id=a
Выход
HTTP/1.1 403 Forbidden <..>
8. Ознакомьтесь с правилами безопасности Cloud Armor.
Теперь, когда мы создали политику безопасности, давайте посмотрим, какие именно правила были настроены.
Правила оцениваются по приоритету: сначала оцениваются меньшие номера, а после срабатывания обработка не продолжается для правил с более высокими значениями приоритета.
- Приоритет 9000 — Блокировать LFI (включение локального файла)
- Приоритет 9001 — Блокировка RCE (удаленное выполнение кода/введение команд)
- Приоритет 9002 — обнаружены сканеры блоков
- Приоритет 9003 — блокировка атак на протоколы, таких как разделение HTTP и контрабанда HTTP.
- Приоритет 9004 — Блокировка атак фиксации сеанса
- Приоритет 10000 – разрешить доступ к веб-сайту с вашего IP-адреса.
- Приоритет по умолчанию — Запретить.
*Обратите внимание, что правило «разрешить ваш IP» настроено с наивысшим приоритетом, чтобы разрешить доступ к сайту, однако блокирует любую атаку.
9. Наблюдайте за журналами политики безопасности Cloud Armor.
На странице консоли Cloud Armor вы можете просмотреть подробную информацию о политике безопасности и щелкнуть вкладку Logs
, а затем ссылку View policy logs
, чтобы перейти на страницу «Журналирование в облаке». Он будет автоматически фильтроваться на основе интересующей политики безопасности, например, resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(block-with-modsec-crs)
. Просмотрите коды ответа об ошибке 403 и разверните сведения журнала, чтобы увидеть имя принудительной политики безопасности, соответствующее значение поля и, далее, предварительно настроенные идентификаторы выражений (или идентификатор подписи). На следующих снимках экрана показаны примеры журналов для примененных политик безопасности, настроенных в этой лаборатории кода.
журнал LFI
журнал RCE
Журнал обнаружения сканера
Журнал атак на протокол
Журнал фиксации сеанса
10. Уборка лаборатории
Очистите ресурсы теперь, когда вы завершили лабораторию.
Запустите эти команды, чтобы удалить политику безопасности Cloud Armor, балансировщик нагрузки, экземпляры, правила брандмауэра и сеть VPC.
Удалите политику безопасности Cloud Armor из серверной службы.
gcloud -q compute backend-services update juice-shop-backend --security-policy "" --global
Удалите политику безопасности Cloud Armor.
Удаление политики безопасности приведет к автоматическому удалению связанных правил.
gcloud -q compute security-policies delete block-with-modsec-crs
Удалить ресурсы балансировщика нагрузки
К этим ресурсам балансировщика нагрузки, которые необходимо удалить, относятся правило переадресации, целевые HTTP-прокси, карты URL-адресов, серверная часть, проверки работоспособности и группа экземпляров.
gcloud -q compute forwarding-rules delete juice-shop-rule --global gcloud -q compute target-http-proxies delete juice-shop-proxy gcloud -q compute url-maps delete juice-shop-loadbalancer gcloud -q compute backend-services delete juice-shop-backend \ --global gcloud -q compute health-checks delete tcp-port-3000 gcloud -q compute instance-groups unmanaged delete juice-shop-group --zone=us-central1-c
Удалить экземпляр
gcloud -q compute instances delete owasp-juice-shop-app --zone us-central1-c
Удалите правила брандмауэра, подсеть и VPC.
gcloud -q compute firewall-rules delete allow-health-check gcloud -q compute firewall-rules delete allow-js-site gcloud -q compute networks subnets delete ca-lab-subnet --region us-central1 gcloud -q compute networks delete ca-lab-vpc
11. Поздравляем!
Поздравляем с завершением работы над кодом предварительно настроенных правил WAF Cloud Armor!
Что мы рассмотрели
- Как настроить группу экземпляров и глобальный балансировщик облачной нагрузки
- Как настроить политики безопасности Cloud Armor с предварительно настроенными правилами WAF для защиты от lfi, rce, сканеров, атак на протоколы и фиксации сеанса
- Как проверить, что Cloud Armor смягчил некоторые из 10 основных атак OWASP с помощью журналов
Следующие шаги
- Защитите свое приложение от 10 основных уязвимостей OWASP с помощью предварительно настроенных правил WAF Cloud Armor.
- Правила точной настройки на основе уровней чувствительности
- Используйте справочник по языку пользовательских правил для более конкретного обеспечения безопасности.