Detection rules › Panther

GCP Access Attempts Violating IAP Access Controls

Severity
medium
Entities
ip_addresses, trace_ids
Log types
GCP.HTTPLoadBalancer
Reference
https://cloud.google.com/iap/docs/concepts-overview
Source
github.com/panther-labs/panther-analysis

GCP Access Attempts Violating IAP Access Controls

Rule body yaml

AnalysisType: rule
Description: GCP Access Attempts Violating IAP Access Controls
DisplayName: "GCP Access Attempts Violating IAP Access Controls"
Enabled: true
Filename: gcp_access_attempts_violating_iap_access_controls.py
Reference: https://cloud.google.com/iap/docs/concepts-overview
Severity: Medium
Tests:
  - ExpectedResult: true
    Log:
      httprequest:
        latency: 0.048180s
        remoteIp: 1.2.3.4
        requestMethod: GET
        requestSize: 77
        requestUrl: http://6.7.8.9/
        responseSize: 211
        status: 403
        userAgent: curl/7.85.0
      insertid: u94qwjf25yzns
      jsonpayload:
        at_sign_type: type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
        remoteIp: 1.2.3.4
        statusDetails: handled_by_identity_aware_proxy
      logname: projects/gcp-project1/logs/requests
      p_any_ip_addresses:
        - 6.7.8.9
        - 1.2.3.4
      p_any_trace_ids:
        - projects/gcp-project1/traces/dd43c6eb7046da54fa3724d2753262e6
      p_event_time: "2023-03-09 23:19:25.712"
      p_log_type: GCP.HTTPLoadBalancer
      p_parse_time: "2023-03-09 23:21:14.47"
      p_row_id: be93fccee09dd2f1b0b2d9ee16d5d704
      p_schema_version: 0
      p_source_id: 964c7894-9a0d-4ddf-864f-0193438221d6
      p_source_label: panther-gcp-logsource
      receivetimestamp: "2023-03-09 23:19:26.392"
      resource:
        labels:
          backend_service_name: web-backend-service
          forwarding_rule_name: http-content-rule
          project_id: gcp-project1
          target_proxy_name: http-lb-proxy-2
          url_map_name: web-map-http-2
          zone: global
        type: http_load_balancer
      severity: INFO
      spanid: d75cc31c93528953
      timestamp: "2023-03-09 23:19:25.712"
      trace: projects/gcp-project1/traces/dd43c6eb7046da54fa3724d2753262e6
    Name: Blocked By IAP
  - ExpectedResult: false
    Log:
      httprequest:
        latency: 0.048180s
        remoteIp: 1.2.3.4
        requestMethod: GET
        requestSize: 77
        requestUrl: http://6.7.8.9/
        responseSize: 211
        status: 302
        userAgent: curl/7.85.0
      insertid: u94qwjf25yzns
      jsonpayload:
        at_sign_type: type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry
        remoteIp: 1.2.3.4
        statusDetails: handled_by_identity_aware_proxy
      logname: projects/gcp-project1/logs/requests
      p_any_ip_addresses:
        - 6.7.8.9
        - 1.2.3.4
      p_any_trace_ids:
        - projects/gcp-project1/traces/dd43c6eb7046da54fa3724d2753262e6
      p_event_time: "2023-03-09 23:19:25.712"
      p_log_type: GCP.HTTPLoadBalancer
      p_parse_time: "2023-03-09 23:21:14.47"
      p_row_id: be93fccee09dd2f1b0b2d9ee16d5d704
      p_schema_version: 0
      p_source_id: 964c7894-9a0d-4ddf-864f-0193438221d6
      p_source_label: panther-gcp-logsource
      receivetimestamp: "2023-03-09 23:19:26.392"
      resource:
        labels:
          backend_service_name: web-backend-service
          forwarding_rule_name: http-content-rule
          project_id: gcp-project1
          target_proxy_name: http-lb-proxy-2
          url_map_name: web-map-http-2
          zone: global
        type: http_load_balancer
      severity: INFO
      spanid: d75cc31c93528953
      timestamp: "2023-03-09 23:19:25.712"
      trace: projects/gcp-project1/traces/dd43c6eb7046da54fa3724d2753262e6
    Name: Redirected by IAP
DedupPeriodMinutes: 60
LogTypes:
  - GCP.HTTPLoadBalancer
RuleID: "GCP.Access.Attempts.Violating.IAP.Access.Controls"
Threshold: 1

Detection logic

Condition

resource.type eq "http_load_balancer"
jsonPayload.statusDetails eq "handled_by_identity_aware_proxy"
not (httprequest.status starts_with "2" or httprequest.status starts_with "3")

Exclusions

Top-level NOT(...) conjuncts: predicates this rule actively suppresses.

FieldKindExcluded values
httprequest.statusstarts_with2
httprequest.statusstarts_with3

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
jsonPayload.statusDetailseq
  • handled_by_identity_aware_proxy
resource.typeeq
  • http_load_balancer

Output fields

Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.

FieldSource
remoteIpjsonPayload.remoteIp
requestUrlhttprequest.requestUrl