Resolva problemas do Cloud Armor

Use estas instruções para resolver problemas com as políticas de segurança do Google Cloud Armor.

Problemas gerais

Depuração de políticas de segurança

Se precisar de informações adicionais sobre o que um evento específico aciona as regras pré-configuradas, leia o artigo Usar o registo de pedidos e, em seguida, ative o registo detalhado. O Cloud Logging regista um nível mais elevado de detalhes nos seus registos que pode usar para analisar e depurar as suas políticas e regras.

O tráfego é permitido apesar de existir uma regra de recusa configurada na política de segurança do Cloud Armor

Para corrigir este problema, siga estes passos:

  1. Certifique-se de que a política de segurança do Cloud Armor está anexada a um serviço de back-end de destino. Por exemplo, o comando seguinte descreve todos os dados associados ao serviço de back-end BACKEND. Os resultados devolvidos devem incluir o nome da política de segurança do Cloud Armor associada a este serviço de back-end.

    gcloud compute backend-services describe BACKEND
    
  2. Reveja os registos HTTP(S) para determinar a política e a regra que corresponderam ao seu tráfego, juntamente com a ação associada. Para ver os registos, use os Registos na nuvem.

    Segue-se um exemplo de um registo de um pedido permitido com os campos interessantes realçados. Verifique os seguintes campos e certifique-se de que correspondem à regra que configurou para recusar o tráfego:

    • configuredAction deve corresponder à ação configurada na regra.
    • name deve corresponder ao nome da política de segurança do Cloud Armor anexada a este serviço de back-end.
    • outcome deve corresponder a configuredAction.
    • priority deve corresponder ao número de prioridade da regra.
      httpRequest:
       remoteIp: 104.133.0.95
       requestMethod: GET
       requestSize: '801'
       requestUrl: http://74.125.67.38/
       responseSize: '246'
       serverIp: 10.132.0.4
       status: 200
       userAgent: curl/7.35.0
         insertId: ajvis5ev4i60
         internalId:
           projectNumber: '895280006100'
         jsonPayload:
           '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
           enforcedSecurityPolicy:
             configuredAction: ACCEPT
             name: mydev-policy-log-test1
             outcome: ACCEPT
             priority: 2147483647
           statusDetails: response_sent_by_backend
         logName: projects/mydev-staging/logs/requests
         resource:
           labels:
             backend_service_name: BACKEND_SERVICE_NAME
             forwarding_rule_name: FORWARDING_RULE_NAME
             project_id: PROJECT_ID
             target_proxy_name: TARGET_HTTP_PROXY_NAME
             url_map_name: URL_MAP_NAME
             zone: global
           type: http_load_balancer
         severity: INFO
         timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Reveja a hierarquia das regras para garantir que é encontrada a regra correta. É possível que uma regra de prioridade mais elevada com uma ação de permissão esteja a corresponder ao seu tráfego. Use o comando describe na security-policies na CLI gcloud para ver o conteúdo da política de segurança do Cloud Armor.

    Por exemplo, o exemplo seguinte mostra como uma regra de permissão de prioridade mais elevada (com prioridade 100) corresponde ao tráfego proveniente do endereço IP 1.2.3.4, impedindo que a regra de rejeição de prioridade mais baixa (com prioridade 200) seja acionada e bloqueie o tráfego.

    gcloud compute security-policies describe POLICY_NAME
    

    Saída:

      creationTimestamp: '2017-04-18T14:47:58.045-07:00
      description: ''
      fingerprint: Yu5spBjdoC0=
      id: '2560355463394441057'
      kind: compute#securityPolicy
      name: POLICY_NAME
      rules:
      -action: allow
       description: allow high priority rule
       kind: compute#securityPolicyRule
       match:
         srcIpRanges:
         -'1.2.3.4/32'
       preview: false
       priority: 100
      -action: deny
       description: deny lower priority rule
       kind: compute#securityPolicyRule
       match:
         srcIpRanges:
         -'1.2.3.0/24
       preview: false
       priority: 200
      -action: deny
       description: default rule
       kind: compute#securityPolicyRule
       match:
         srcIpRanges:
         -'*'
       preview: false
       priority: 2147483647
       selfLink: http://www.googleapis.com/compute/v1/projects/bigclustertestdev0-devconsole/global/securityPolicies/sp
    

A regra pré-configurada devolve falsos positivos

A deteção de XSS e SQLi baseia-se na correspondência de assinaturas estáticas nos cabeçalhos de pedidos HTTP e noutros parâmetros da camada 7. Estes padrões de expressões regulares são propensos a falsos positivos. Pode usar a regra pré-configurada para a deteção de XSS e SQLi no modo de pré-visualização e, em seguida, verificar o registo para quaisquer falsos positivos.

Se encontrar um falso positivo, pode comparar o conteúdo do tráfego com as regras da CRS da OWASP. Se a regra for inválida ou não for relevante, desative-a através da expressão evaluatePreconfiguredWaf e especifique o ID da regra no argumento exclude ID list.

Depois de rever os registos e remover todos os falsos positivos, desative o modo de pré-visualização.

Para adicionar uma regra pré-configurada no modo de pré-visualização:

  1. Crie uma política de segurança com o conjunto de expressões pré-configurado no modo de pré-visualização:

    gcloud compute security-policies rules create 1000
       --security-policy POLICY_NAME
       --expression "evaluatePreconfiguredWaf('xss-stable')"
       --action deny-403
       --preview
    
  2. Reveja os registos HTTP(S) para campos de pedidos HTTP, como url e cookie. Por exemplo, a requestUrl tem uma comparação positiva com o ID da regra 941180 do OWASP CRS:

    httpRequest:
      remoteIp: 104.133.0.95
      requestMethod: GET
      requestSize: '801'
      requestUrl: http://74.125.67.38/foo?document.cookie=1010"
      responseSize: '246'
      serverIp: 10.132.0.4
      status: 200
      userAgent: curl/7.35.0
    insertId: ajvis5ev4i60
    internalId:
      projectNumber: '895280006100'
    jsonPayload:
      '@type': type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
      enforcedSecurityPolicy:
        configuredAction: ACCEPT
        name: POLICY_NAME
        outcome: ACCEPT
        priority: 2147483647
        preconfiguredExprIds: [ 'owasp-crs-v030001-id941180-xss' ]
      statusDetails: response_sent_by_backend
    logName: projects/mydev-staging/logs/requests
    resource:
      labels:
        backend_service_name: BACKEND_SERVICE
        forwarding_rule_name: mydev-forwarding-rule
        project_id: mydev-staging
        target_proxy_name: mydev-target-http-proxy
        url_map_name: mydev-url-map
        zone: global
      type: http_load_balancer
    severity: INFO
    timestamp: '2017-04-18T18:57:05.845960288Z'
    
  3. Exclua o ID da regra OWASP CRS 941180 atualizando a regra na política de segurança do Cloud Armor:

    gcloud compute security-policies rules update 1000 \
        --security-policy POLICY_NAME \
        --expression "evaluatePreconfiguredWaf('xss-stable', ['owasp-crs-v030001-id941180-xss'])" \
        --action deny-403 \
        --preview
    
  4. Reveja novamente os registos e, em seguida, desative o modo de pré-visualização para implementar a regra.

Os clientes com assinaturas recusadas não são bloqueados nem recusados

Se estiver a usar o Cloud Armor com o Cloud CDN, as políticas de segurança são aplicadas apenas a pedidos de conteúdo dinâmico, falhas de cache ou outros pedidos destinados ao servidor de origem da RFC. Os resultados da cache são apresentados mesmo que a política de segurança do Cloud Armor a jusante impeça esse pedido de chegar ao servidor de origem da RFC.

Problemas com a limitação de taxa

O tráfego não é limitado como esperado

Pode verificar que um endereço IP do cliente está a enviar níveis elevados de tráfego para uma aplicação a uma taxa que excede o limite definido, mas o tráfego não é limitado como esperado. Siga estes passos para investigar o problema.

Primeiro, confirme se uma regra de prioridade mais elevada está a permitir tráfego desse endereço IP. Examine os registos para ver se foi acionada uma regra ALLOW para o endereço IP. Pode ser uma regra ALLOW por si só ou noutra regra THROTTLE ou RATE_BASED_BAN.

Se encontrar uma regra de prioridade mais elevada, faça uma das seguintes ações:

  1. Altere as prioridades para garantir que a regra de limitação de taxa tem uma prioridade mais elevada, atribuindo-lhe um valor numérico inferior.
  2. Exclua o endereço IP da expressão correspondente na regra que tem uma prioridade mais alta.

O problema também pode ser o facto de o limite estar definido incorretamente. Se for este o caso, é feita a correspondência precisa dos pedidos, mas a ação de conformidade é acionada. Examine os registos para confirmar se é este o caso e, em seguida, reduza o limite na sua regra.

Por último, o endereço IP pode não corresponder à regra de limitação ou proibição baseada na taxa. Para corrigir este problema, verifique se existe um erro na condição de correspondência e, em seguida, altere a condição de correspondência da regra para o valor correto.

O que se segue?