Soluciona problemas de Google Cloud Armor

Usa estas instrucciones para solucionar los problemas con las políticas de seguridad de Google Cloud Armor.

Problemas generales

Se permite el tráfico a pesar de tener configurada una regla de denegación en la política de seguridad de Google Cloud Armor

Para solucionarlo, siga estos pasos:

  1. Asegúrate de que la política de seguridad de Google Cloud Armor esté vinculada a un servicio de backend de destino. Por ejemplo, mediante el siguiente comando, se describen todos los datos asociados con el servicio de backend BACKEND. En los resultados que se muestran, se debe incluir el nombre de la política de seguridad de Google Cloud Armor asociada con este servicio de backend.

    gcloud compute backend-services describe BACKEND
    
  2. Revisa los registros de HTTP(S) para determinar la política y la regla que coincidieron con el tráfico y la acción asociada. Para ver los registros, usa Cloud Logging.

    El siguiente es un registro de muestra de una solicitud permitida con los campos interesantes destacados. Verifica los siguientes campos y asegúrate de que coincidan con la regla que configuraste para denegar el tráfico:

    • configuredAction debe coincidir con la acción configurada en la regla.
    • name debe coincidir con el nombre de la política de seguridad de Google Cloud Armor que se vinculó a este servicio de backend.
    • outcome debe coincidir con configuredAction.
    • priority debe coincidir con el número de prioridad de la regla.
      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. Revisa la jerarquía de reglas para asegurarte de que se establezca la coincidencia con la regla correcta. Es posible que una regla con una prioridad más alta que tiene una acción de admisión coincida con tu tráfico. Usa el comando describe en security-policies en la herramienta de línea de comandos de gcloud para ver el contenido de la política de seguridad de Google Cloud Armor.

    Por ejemplo, se muestra cómo una regla de permiso de mayor prioridad (con prioridad 100) coincide con el tráfico proveniente de la dirección IP 1.2.3.4, lo que evita que se active y bloquee la regla de rechazo de menor prioridad (con prioridad 200) el tráfico.

    gcloud compute security-policies describe POLICY_NAME
    

    Salida:

      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
    

La regla preconfigurada muestra falsos positivos

La detección de XSS y SQLi se basa en la coincidencia de firmas estáticas en los encabezados de la solicitud HTTP y en otros parámetros de L7. Estos patrones de expresión regular son propensos a mostrar falsos positivos. Puedes usar la regla preconfigurada para la detección de XSS y SQLi en el modo de vista previa y, luego, verificar el registro en busca de falsos positivos.

Si encuentras un falso positivo, puedes comparar el contenido del tráfico con las reglas de CRS de ModSecurity. Si la regla es no es válida o no es relevante, inhabilítala mediante la expresión evaluatePreconfiguredExpr y especifica el ID de la regla en el argumento exclude ID list.

Después de revisar los registros y quitar todos los falsos positivos, inhabilita el modo de vista previa.

Para agregar una regla preconfigurada en el modo de vista previa, haz lo siguiente:

  1. Crea una política de seguridad con el conjunto de expresiones preconfiguradas en el modo de vista previa:

    gcloud compute security-policies rules create 1000
       --security-policy POLICY_NAME
       --expression "evaluatePreconfiguredExpr('xss-stable')"
       --action deny-403
       --preview
    
  2. Revisa los registros de HTTP(S) en busca de campos de la solicitud HTTP como url y cookie. Por ejemplo, requestUrl se compara positivamente con el ID 941180 de la regla de ModSecurity 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. Excluye el ID 941180 de la regla de CRS de ModSecurity mediante la actualización de la regla en la política de seguridad de Google Cloud Armor.

    gcloud compute security-policies rules update 1000 \
        --security-policy POLICY_NAME \
        --expression "evaluatePreconfiguredExpr('xss-stable', ['owasp-crs-v030001-id941180-xss'])" \
        --action deny-403 \
        --preview
    
  4. Vuelve a revisar los registros y, luego, inhabilita el modo de vista previa para implementar la regla.

No se bloquean ni rechazan los clientes con firmas rechazadas

Si usas Google Cloud Armor con Cloud CDN, las políticas de seguridad solo se aplican a las solicitudes de contenido dinámico, errores de caché u otras solicitudes que están destinadas al servidor de origen de CDN. Los aciertos de caché se entregan incluso si la política de seguridad posterior de Google Cloud Armor impide que esa solicitud llegue al servidor de origen de CDN.

Problemas con las listas de direcciones IP con nombre

En esta sección, se proporciona información para resolver problemas con las listas de direcciones IP con nombre.

Direcciones IP dentro de una lista de direcciones IP con nombre

Las direcciones IP de las listas siempre coinciden con las direcciones IP de los sitios web del proveedor que se enumeran en la guía de las Listas de direcciones IP con nombre de Google Cloud Armor. Si tienes preguntas sobre las listas, comunícate con el equipo de asistencia de Cloud.

Las direcciones IP dentro de una lista de direcciones IP con nombre están inactivas en Google Cloud Armor

Google Cloud Armor sincroniza sus listas a diario con los proveedores de listas de direcciones IP. Es posible que haya datos inactivos que tienen un retraso de unas horas o un día en relación con los datos en un proveedor. Sin embargo, si crees que los datos inactivos se retrasan más de lo previsto, por ejemplo, durante más de una semana, comunícate con el equipo de asistencia de Cloud.

Hay dificultad para crear una política de seguridad que haga referencia a una lista de direcciones IP con nombre

Puedes crear una política de seguridad que haga referencia a una lista de direcciones IP con nombre, mediante un comando como este:

gcloud beta compute security-policies rules create 750 \
    --security-policy my \
    --expression "evaluatePreconfiguredExpr('sourceiplist-abc')" \
    --action "allow"

Si el comando falla, el error que observa se verá así:

ERROR: (gcloud.beta.compute.security-policies.rules.create) Could not fetch resource:
 - Invalid value for field 'resource.match.expr': '{  "expression": "evaluatePreconfiguredExpr(\u0027sourceiplist-abc\u0027)"}'. Error parsing Cloud Armor rule matcher expression: sourceiplist-abc is not a valid preconfigured expression set.

Asegúrate de que el proveedor determinado sea compatible y que se proporcione el nombre correcto de la lista de direcciones IP. Para verificar esto, usa el siguiente comando de gcloud a fin de enumerar los conjuntos de expresiones ya configurados:

gcloud beta compute security-policies list-preconfigured-expression-sets

El tráfico se bloquea a pesar de tener una regla preconfigurada para una lista de direcciones IP permitidas con nombre

Es posible que se haya bloqueado el tráfico de una dirección IP que está incluida en una lista de direcciones IP con nombre.

  1. Asegúrate de que el tráfico provenga de una dirección IP que está incluida en una lista de direcciones IP permitidas con nombre.

  2. Verifica si hay otras reglas de seguridad con mayor prioridad que puedan bloquear el tráfico. Si aún ves el problema, comunícate con el equipo de asistencia de Cloud.

  3. Asegúrate de que la política de seguridad esté adjunta al servicio de backend correcto:

    gcloud compute backend-services describe BACKEND_SERVICE
    
  4. Verifica las reglas que se encuentran en la política de seguridad. Por ejemplo:

     gcloud compute security-policies describe POLICY_NAME
    

    El comando muestra información similar a la siguiente:

    ---
    …
    name: POLICY_NAME
    rules:
    -action: allow
     description: allow fastly ip addresses
     kind: compute#securityPolicyRule
     match:
        expr:
          expression: evaluatePreconfiguredExpr('sourceiplist-fastly')
     preview: false
     priority: 100
    -action: deny(403)
     description: Default rule, higher priority overrides it
     kind: compute#securityPolicyRule
     match:
        config:
          srcIpRanges:
          -'*'
        versionedExpr: SRC_IPS_V1
     preview: false
     priority: 2147483647
    -action: deny(404)
     description: deny xyz referer
     kind: compute#securityPolicyRule
     match:
        expr:
          expression: request.headers['Referer'].contains('xyz')
     preview: false
     priority: 50
    …
    

    La política de seguridad anterior contiene tres reglas: una regla de rechazo predeterminada, una regla de permiso para las direcciones IP de Fastly y una regla de rechazo para una referencia que contiene xyz. También se enumeran sus respectivas prioridades.

  5. Revisa los registros para determinar qué regla coincide con tu tráfico y con la acción asociada. Para obtener información sobre el registro, consulta Visualiza los registros en el visor de registros heredados de la API de Cloud Logging.

    A continuación, se muestra un ejemplo de un registro:

     httpRequest: {
        referer: "http://www.xyz.com/"
        remoteIp: "23.230.32.10"
        requestMethod: "HEAD"
        requestSize: "79"
        requestUrl: "http://www.abc.com/"
        responseSize: "258"
        status: 404
        userAgent: "Mozilla/5.0"
      }
      …
      jsonPayload: {
        @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
        enforcedSecurityPolicy: {
          configuredAction: "DENY"
          name: "POLICY_NAME"
          outcome: "DENY"
          priority: 50
        }
        statusDetails: "denied_by_security_policy"
      }
      …
    

    En el registro anterior, la solicitud proviene de 23.230.32.10, que está cubierto por la lista de direcciones IP públicas de Fastly. Sin embargo, la solicitud coincide con una regla de denegación que tiene una prioridad más alta, con un valor de 50. En comparación con el contenido de la política de seguridad, la regla corresponde a la regla de denegación de un referente que contiene xyz. Debido a que la solicitud tiene un referente de http://www.xyz.com/, la aplicación de la regla de seguridad funciona de forma adecuada.

Problemas con los hallazgos de Security Command Center

La tarjeta de Google Cloud Armor no aparece en Security Command Center

Habilita los hallazgos de Google Cloud Armor en la interfaz de Security Command Center.

Los resultados de Google Cloud Armor no aparecen en Security Command Center

Si los resultados de Google Cloud Armor no aparecen en Security Command Center, es posible que el tráfico a los servicios de backend no cumpla con los criterios para generar un resultado.

Si tienes preguntas sobre el volumen de tráfico para tus backends, verifica las estadísticas de las solicitudes en los paneles de Cloud Monitoring en Políticas de seguridad de red.

Los hallazgos contienen demasiada información irrelevante

Para obtener ayuda con este problema, comunícate con el equipo de asistencia de Cloud.

¿Qué sigue?