1. Introdução
Olá! Este é o codelab sobre regras de WAF pré-configuradas do Cloud Armor.
O Google Cloud Armor é a solução de segurança de rede de borda empresarial do Google que oferece proteção contra DDoS, aplicação de regras de WAF e gerenciamento adaptativo em larga escala.
O Cloud Armor ampliou os conjuntos de regras pré-configuradas de WAF para mitigar as vulnerabilidades de segurança de aplicativos da Web do OWASP Top 10. Os conjuntos de regras são baseados na versão 3.0.2 do conjunto de regras essenciais do OWASP ModSecurity para proteger contra alguns dos riscos de segurança para aplicativos da Web mais comuns, como inclusão de arquivos locais (LFI), inclusão de arquivos remotos (RFI), execução remota de código (RCE) e muito mais.
Neste codelab, você vai aprender a mitigar algumas das vulnerabilidades comuns usando regras do WAF do Google Cloud Armor.
O que você vai aprender
- Como configurar um grupo de instâncias e um balanceador de carga global para oferecer suporte a um serviço
- Como configurar políticas de segurança do Cloud Armor com regras de WAF pré-configuradas para proteção contra LFI, RCE, verificadores, ataques de protocolo e fixação de sessão
- Como validar se o Cloud Armor mitigou um ataque observando os registros.
O que é necessário
- Conhecimento básico do Google Compute Engine ( codelab)
- Conhecimento básico de TCP/IP e redes
- Conhecimento básico de linha de comando do Unix/Linux
- É recomendável ter concluído um tour de redes no GCP com o curso Redes no Google Cloud.
- (Opcional) Conclua o laboratório do Cloud Armor Cloudnet20 para aprender a proteger cargas de trabalho com regras de injeção de SQL, baseadas em IP e em localização geográfica.
Topologia e caso de uso do codelab

Figura 1: topologia do codelab de regras de WAF do Cloud Armor
O aplicativo OWASP Juice Shop é útil para treinamento de segurança e reconhecimento, porque contém, intencionalmente, instâncias de cada uma das dez principais vulnerabilidades de segurança do OWASP. Um invasor pode explorar o app para fins de teste. Neste codelab, vamos usá-lo para demonstrar alguns ataques a aplicativos e proteger o aplicativo com regras de WAF do Cloud Armor. O aplicativo será protegido por um balanceador de carga do Google Cloud, ao qual serão aplicadas a política e as regras de segurança do Cloud Armor. Ele será veiculado na Internet pública e, portanto, poderá ser acessado de quase qualquer lugar e protegido usando o Cloud Armor e as regras de firewall da VPC.
2. Configuração e requisitos
Configuração de ambiente autoguiada
- Faça login no console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.



Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID.
- Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.
A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$300 de avaliação sem custos.
Inicie o Cloud Shell
Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.
No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Todo o trabalho neste laboratório pode ser feito apenas com um navegador.
Antes de começar
No Cloud Shell, verifique se o ID do projeto está configurado.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Ativar APIs
Ative todos os serviços necessários
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. criar a rede VPC
Crie uma rede VPC
No Cloud Shell
gcloud compute networks create ca-lab-vpc --subnet-mode custom
Saída
Created NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 ca-lab-vpc CUSTOM REGIONAL
Criar uma sub-rede
No Cloud Shell
gcloud compute networks subnets create ca-lab-subnet \
--network ca-lab-vpc --range 10.0.0.0/24 --region us-central1
Saída
Created NAME REGION NETWORK RANGE ca-lab-subnet us-central1 ca-lab-vpc 10.0.0.0/24
Criar regras de firewall da VPC
Depois de criar a VPC e a sub-rede, configure algumas regras de firewall. A primeira regra de firewall será usada para permitir que todos os IPs acessem o IP externo do site do aplicativo de teste na porta 3000. A segunda regra de firewall será usada para permitir verificações de integridade do IP de origem dos balanceadores de carga.
No Cloud Shell
gcloud compute firewall-rules create allow-js-site --allow tcp:3000 --network ca-lab-vpc
Saída
Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED allow-js-site ca-lab-vpc INGRESS 1000 tcp:3000 False
Crie regras de firewall para permitir verificações de integridade dos intervalos de verificação de integridade do Google.
No 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
Saída
Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED allow-health-check ca-lab-vpc INGRESS 1000 tcp False
4. Configurar o aplicativo de teste
A próxima etapa é criar o aplicativo de teste, nesse caso, o servidor da Web da OWASP Juice Shop.
Ao criar a instância de computação, usamos uma imagem do contêiner para garantir que o servidor tenha os serviços apropriados. Esse servidor será implantado em us-central1-c e terá uma tag de rede que permitirá verificações de integridade.
Criar o aplicativo OWASP Juice Shop
Use o aplicativo de código aberto OWASP Juice Shop como o aplicativo vulnerável. Você também pode usar esse aplicativo para fazer desafios de segurança do OWASP no site deles.
No 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
Saída
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
Configure o componente do balanceador de carga do Cloud: grupo de instâncias
Crie o grupo de instâncias não gerenciadas.
No Cloud Shell
gcloud compute instance-groups unmanaged create juice-shop-group \
--zone=us-central1-c
Saída
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES juice-shop-group us-central1-c zone 0
Adicione a instância do GCE da Juice Shop ao grupo de instâncias não gerenciado.
No Cloud Shell
gcloud compute instance-groups unmanaged add-instances juice-shop-group \
--zone=us-central1-c \
--instances=owasp-juice-shop-app
Saída
Updated [https://www.googleapis.com/compute/v1/projects/<project name>/zones/us-central1-c/instanceGroups/juice-shop-group].
Defina a porta nomeada como a do aplicativo Juice Shop.
No Cloud Shell
gcloud compute instance-groups unmanaged set-named-ports \ juice-shop-group \ --named-ports=http:3000 \ --zone=us-central1-c
Saída
Updated [https://www.googleapis.com/compute/v1/projects/<project name>/zones/us-central1-c/instanceGroups/juice-shop-group].
Agora que você criou o grupo de instâncias não gerenciado, a próxima etapa é criar uma verificação de integridade, um serviço de back-end, um mapa de URLs, um proxy de destino e uma regra de encaminhamento.
Configurar o componente do balanceador de carga do Cloud: verificação de integridade
Crie a verificação de integridade para a porta de serviço do Juice Shop.
No Cloud Shell
gcloud compute health-checks create tcp tcp-port-3000 \
--port 3000
Saída
Created NAME PROTOCOL tcp-port-3000 TCP
Configurar o componente do balanceador de carga do Cloud: serviço de back-end
Crie os parâmetros do serviço de back-end.
No Cloud Shell
gcloud compute backend-services create juice-shop-backend \
--protocol HTTP \
--port-name http \
--health-checks tcp-port-3000 \
--enable-logging \
--global
Saída
NAME BACKENDS PROTOCOL juice-shop-backend HTTP
Adicione o grupo de instâncias do Juice Shop ao serviço de back-end.
No Cloud Shell
gcloud compute backend-services add-backend juice-shop-backend \
--instance-group=juice-shop-group \
--instance-group-zone=us-central1-c \
--global
Saída
Updated [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/backendServices/juice-shop-backend].
Configure o componente do balanceador de carga do Cloud: mapa de URLs
Crie o mapa de URL para enviar ao back-end.
No Cloud Shell
gcloud compute url-maps create juice-shop-loadbalancer \
--default-service juice-shop-backend
Saída
NAME DEFAULT_SERVICE juice-shop-loadbalancer backendServices/juice-shop-backend
Configure o componente do balanceador de carga do Cloud: proxy de destino
Crie o proxy de destino para ficar na frente do mapa de URLs.
No Cloud Shell
gcloud compute target-http-proxies create juice-shop-proxy \
--url-map juice-shop-loadbalancer
Saída
NAME URL_MAP juice-shop-proxy juice-shop-loadbalancer
Configure o componente do balanceador de carga do Cloud: regra de encaminhamento
Crie a regra de encaminhamento para o balanceador de carga.
No Cloud Shell
gcloud compute forwarding-rules create juice-shop-rule \
--global \
--target-http-proxy=juice-shop-proxy \
--ports=80
Saída
Created [https://www.googleapis.com/compute/v1/projects/cythom-host1/global/forwardingRules/juice-shop-rule].
Verifique se o serviço Juice Shop está on-line
No Cloud Shell
PUBLIC_SVC_IP="$(gcloud compute forwarding-rules describe juice-shop-rule --global --format="value(IPAddress)")"
No Cloud Shell
echo $PUBLIC_SVC_IP
Saída
<public VIP of service>
Aguarde alguns minutos antes de continuar, caso contrário, você poderá receber uma resposta HTTP/1.1 404 Not Found.
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP
Saída
HTTP/1.1 200 OK <...>
Você também pode acessar o navegador para visualizar a Juice Shop.

Agora você já pode analisar as vulnerabilidades do Juice Shop e se proteger contra elas com os conjuntos de regras do WAF do Cloud Armor.
5. Demonstrar vulnerabilidades conhecidas
Para economizar tempo, vamos demonstrar os estados antes e depois da propagação das regras de WAF do Cloud Armor em etapas condensadas.
Observar uma vulnerabilidade de LFI: travessia de caminho
A inclusão de arquivos locais é o processo de observar arquivos presentes no servidor explorando a falta de validação de entrada na solicitação para potencialmente expor dados sensíveis. A seguir, vemos que a travessia de caminho é possível. No navegador ou com curl, observe um caminho atual veiculado pelo aplicativo.
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/ftp
Saída
HTTP/1.1 200 OK <...>
Observe também que a travessia de caminho também funciona:
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/ftp/../
Saída
HTTP/1.1 200 OK <...>
Observar uma vulnerabilidade de RCE
A execução remota de código inclui vários cenários de injeção de comandos UNIX e Windows que permitem que invasores executem comandos do SO normalmente restritos a usuários privilegiados. O exemplo a seguir mostra a execução de um simples comando ls inserido.
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls
Saída
HTTP/1.1 200 OK <...>
Remova as flags do curl para observar a saída completa.
Observar o acesso de um verificador conhecido
Os aplicativos de verificação comerciais e de código aberto têm várias finalidades, incluindo a busca de vulnerabilidades. Essas ferramentas usam o user agent e outros cabeçalhos. Observe que o curl funciona com um cabeçalho de user agent conhecido:
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"
Saída
HTTP/1.1 200 OK <...>
Observar um ataque de protocolo: divisão de HTTP
Alguns aplicativos da Web usam a entrada do usuário para gerar os cabeçalhos nas respostas. Se o aplicativo não filtrar a entrada corretamente, um invasor poderá contaminar o parâmetro de entrada com a sequência %0d%0a (a sequência CRLF usada para separar diferentes linhas). A resposta pode ser interpretada como duas respostas por qualquer coisa que a analise, como um servidor proxy intermediário, o que pode veicular conteúdo falso em solicitações subsequentes. Insira a sequência %0d%0a no parâmetro de entrada, o que pode levar à exibição de uma página enganosa.
No 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>"
Saída
HTTP/1.1 200 OK <...>
Observar a fixação da sessão
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP -H session_id=X
Saída
HTTP/1.1 200 OK <...>
6. Definir regras de WAF do Cloud Armor
Liste as regras de WAF pré-configuradas:
No Cloud Shell
gcloud compute security-policies list-preconfigured-expression-sets
Saída
EXPRESSION_SET
Sqli-canary
RULE_ID
owasp-crs-v030001-id942110-sqli
owasp-crs-v030001-id942120-sqli
<...>
Criar a política de segurança do Cloud Armor
No Cloud Shell:
gcloud compute security-policies create block-with-modsec-crs \
--description "Block with OWASP ModSecurity CRS"
Atualizar a regra padrão da política de segurança
A prioridade da regra padrão tem um valor numérico de 2147483647.
No Cloud Shell:
gcloud compute security-policies rules update 2147483647 \
--security-policy block-with-modsec-crs \
--action "deny-403"
Como a regra padrão está configurada com a ação "negar", precisamos permitir o acesso do seu IP. Encontre seu IP público (curl, ipmonkey, whatismyip etc.).
No Cloud Shell:
MY_IP=$(curl ifconfig.me)
Adicione a primeira regra para permitir o acesso do seu IP (INSIRA SEU IP ABAIXO)
No 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"
Atualizar a política de segurança para bloquear ataques de LFI
Aplique o conjunto de regras essenciais do OWASP ModSecurity que impede a travessia de caminhos para inclusões de arquivos locais.
No 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
Atualizar a política de segurança para bloquear a execução remota de código (RCE)
De acordo com o conjunto de regras essenciais do OWASP ModSecurity, aplique regras que procurem RCE, incluindo injeção de comandos. Comandos típicos do SO são detectados e bloqueados.
No 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
Atualize a política de segurança para bloquear verificadores de segurança
Aplique o conjunto de regras essenciais do OWASP ModSecurity para bloquear verificadores de segurança conhecidos, clientes HTTP de scripting e rastreadores da Web.
No 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
Atualize a política de segurança para bloquear ataques de protocolo
De acordo com o conjunto de regras essenciais do OWASP ModSecurity, aplique regras que procurem caracteres de retorno de carro (CR) %0d e quebra de linha (LF) %0a e outros tipos de ataques de protocolo, como o contrabando de solicitações HTTP.
No 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
Atualize a política de segurança para bloquear a fixação de sessão
De acordo com o conjunto de regras essenciais do OWASP ModSecurity, aplique regras que...
No 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
Anexe a política de segurança ao serviço de back-end
No Cloud Shell:
gcloud compute backend-services update juice-shop-backend \
--security-policy block-with-modsec-crs \
--global
As regras podem levar algum tempo para serem propagadas (mas não mais de 10 minutos). Depois de um tempo suficiente, teste as vulnerabilidades demonstradas anteriormente para confirmar a aplicação da regra do WAF do Cloud Armor na próxima etapa.
7. Observar a proteção do Cloud Armor com o conjunto de regras essenciais do OWASP ModSecurity
Confirmar se a vulnerabilidade de LFI foi mitigada
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/?a=../
Saída
HTTP/1.1 403 Forbidden <...>
Confirme se o ataque de RCE foi mitigado
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/ftp?doc=/bin/ls
Saída
HTTP/1.1 403 Forbidden <..>
Confirmar a detecção de um verificador conhecido
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP -H "User-Agent: blackwidow"
Saída
HTTP/1.1 403 Forbidden <..>
Confirmar que um ataque de protocolo foi mitigado
De acordo com o conjunto de regras essenciais do OWASP ModSecurity ver.3.0.2, o ataque de protocolo é mitigado por
No 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>"
Saída
HTTP/1.1 403 Forbidden <..>
Confirmar se as tentativas de fixação de sessão foram bloqueadas
No Cloud Shell
curl -Ii http://$PUBLIC_SVC_IP/?session_id=a
Saída
HTTP/1.1 403 Forbidden <..>
8. Revisar as regras de segurança do Cloud Armor
Agora que criamos a política de segurança, vamos conferir exatamente quais regras foram configuradas.

As regras são avaliadas por prioridade: números menores são avaliados primeiro e, uma vez acionadas, o processamento não continua para regras com valores de prioridade mais altos.
- Prioridade 9000: bloquear LFI (inclusão de arquivos locais)
- Prioridade 9001: bloquear RCE (execução remota de código/injeção de comandos)
- Prioridade 9002: bloquear verificadores detectados
- Prioridade 9003: bloquear ataques de protocolo, como divisão e contrabando de HTTP
- Prioridade 9004: bloquear ataques de fixação de sessão
- Prioridade 10000: permitir que seu IP acesse o site
- Prioridade padrão: negar.
*A regra "permitir seu IP" está configurada com o número de prioridade mais alto para permitir o acesso ao site, mas bloqueia qualquer ataque.
9. Observar registros de políticas de segurança do Cloud Armor
Na página do console do Cloud Armor, é possível conferir os detalhes da política de segurança e clicar na guia Logs e no link View policy logs para acessar a página do Cloud Logging. Ele filtra automaticamente com base na política de segurança de interesse, por exemplo, resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(block-with-modsec-crs). Observe os códigos de resposta de erro 403 e expanda os detalhes do registro para observar o nome da política de segurança aplicada, o valor do campo correspondente e, mais abaixo, os IDs de expressão pré-configurados (ou o ID da assinatura). As capturas de tela a seguir mostram exemplos dos registros das políticas de segurança aplicadas configuradas neste codelab.
Registro de LFI

Registro de RCE

Registro de detecção de verificadores

Registro de ataques de protocolo

Registro de fixação de sessão

10. Limpeza do laboratório
Limpe os recursos agora que você concluiu o laboratório.
Execute estes comandos para excluir a política de segurança do Cloud Armor, o balanceador de carga, as instâncias, as regras de firewall e a rede VPC.
Remova a política de segurança do Cloud Armor do serviço de back-end
gcloud -q compute backend-services update juice-shop-backend --security-policy "" --global
Excluir a política de segurança do Cloud Armor
A exclusão da política de segurança exclui automaticamente as regras associadas.
gcloud -q compute security-policies delete block-with-modsec-crs
Excluir os recursos do balanceador de carga
Os recursos do balanceador de carga a serem excluídos incluem a regra de encaminhamento, os proxies HTTP de destino, os mapas de URL, o back-end, as verificações de integridade e o grupo de instâncias.
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
Excluir a instância
gcloud -q compute instances delete owasp-juice-shop-app --zone us-central1-c
Exclua as regras de firewall, a sub-rede e a 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. Parabéns!
Parabéns por concluir o codelab sobre regras de WAF pré-configuradas do Cloud Armor.
O que vimos
- Como configurar um grupo de instâncias e um balanceador de carga global do Cloud
- Como configurar políticas de segurança do Cloud Armor com regras de WAF pré-configuradas para proteção contra LFI, RCE, verificadores, ataques de protocolo e fixação de sessão
- Como validar se o Cloud Armor mitigou alguns dos 10 principais ataques da OWASP usando registros
Próximas etapas
- Proteja seu aplicativo contra as 10 principais vulnerabilidades do OWASP com as regras de WAF pré-configuradas do Cloud Armor
- Ajustar regras com base nos níveis de sensibilidade
- Use a referência da linguagem de regras personalizadas para uma aplicação de segurança mais específica.