Detection rules › Panther
AWS Application Load Balancer Web ACL
This policy validates that all application load balancers have an associated Web ACl to enforce protections against various web attacks.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Initial Access | T1190 Exploit Public-Facing Application |
Rule body yaml
AnalysisType: policy
Filename: aws_application_load_balancer_web_acl.py
PolicyID: "AWS.ApplicationLoadBalancer.WebACL"
DisplayName: "AWS Application Load Balancer Web ACL"
Enabled: false
ResourceTypes:
- AWS.ELBV2.ApplicationLoadBalancer
Tags:
- AWS
- Configuration Required
- Security Control
- Initial Access:Exploit Public-Facing Application
Reports:
MITRE ATT&CK:
- TA0001:T1190
Severity: High
Description: >
This policy validates that all application load balancers have an associated Web ACl to enforce protections against various web attacks.
Runbook: >
https://docs.runpanther.io/alert-runbooks/built-in-policies/aws-application-load-balancer-has-web-acl
Reference: https://aws.amazon.com/blogs/aws/aws-web-application-firewall-waf-for-application-load-balancers/
Tests:
- Name: Load Balancer Does Not Have Required WAF Web ACL
ExpectedResult: false
Resource:
{
"AvailabilityZones":
[
{
"LoadBalancerAddresses": null,
"SubnetId": "subnet-111222333",
"ZoneName": "us-west-2d",
},
{
"LoadBalancerAddresses": null,
"SubnetId": "subnet-111222333",
"ZoneName": "us-west-2a",
},
],
"CanonicalHostedZoneId": "111222333AAA",
"CreatedTime": "2019-01-01T00:00:00.00Z",
"DNSName": "example-lb-111222333.us-west-2.elb.amazonaws.com",
"IpAddressType": "ipv4",
"LoadBalancerArn": "TEST_LOAD_BALANCER_ARN",
"LoadBalancerName": "TEST_LOAD_BALANCER",
"Scheme": "internal",
"SecurityGroups": ["sg-111222333444"],
"State": { "Code": "active", "Reason": null },
"Type": "application",
"VpcId": "vpc-111222333",
"WebAcl": null,
}
- Name: Load Balancer Does Not Require WAF Web ACL
ExpectedResult: true
Resource:
{
"AvailabilityZones":
[
{
"LoadBalancerAddresses": null,
"SubnetId": "subnet-111222333",
"ZoneName": "us-west-2d",
},
{
"LoadBalancerAddresses": null,
"SubnetId": "subnet-111222333",
"ZoneName": "us-west-2a",
},
],
"CanonicalHostedZoneId": "111222333AAA",
"CreatedTime": "2019-01-01T00:00:00.00Z",
"DNSName": "example-lb-111222333.us-west-2.elb.amazonaws.com",
"IpAddressType": "ipv4",
"LoadBalancerArn": "TEST_LOAD_BALANCER_ARN_NO_WEB_ACL",
"LoadBalancerName": "TEST_LOAD_BALANCER",
"Scheme": "internal",
"SecurityGroups": ["sg-111222333444"],
"State": { "Code": "active", "Reason": null },
"Type": "application",
"VpcId": "vpc-111222333",
"WebAcl": null,
}
- Name: Load Balancer Has Correct WAF Web ACL
ExpectedResult: true
Resource:
{
"AvailabilityZones":
[
{
"LoadBalancerAddresses": null,
"SubnetId": "subnet-111222333",
"ZoneName": "us-west-2d",
},
{
"LoadBalancerAddresses": null,
"SubnetId": "subnet-111222333",
"ZoneName": "us-west-2a",
},
],
"CanonicalHostedZoneId": "111222333AAA",
"CreatedTime": "2019-01-01T00:00:00.00Z",
"DNSName": "example-lb-111222333.us-west-2.elb.amazonaws.com",
"IpAddressType": "ipv4",
"LoadBalancerArn": "TEST_LOAD_BALANCER_ARN",
"LoadBalancerName": "TEST_LOAD_BALANCER",
"Scheme": "internal",
"SecurityGroups": ["sg-111222333444"],
"State": { "Code": "active", "Reason": null },
"Type": "application",
"VpcId": "vpc-111222333",
"WebAcl":
{
"DefaultAction": { "Type": "ALLOW" },
"MetricName": "examplewebacl",
"Name": "example-web-acl",
"Rules":
[
{
"Action": { "Type": "BLOCK" },
"ExcludedRules": null,
"OverrideAction": null,
"Priority": 2,
"RuleId": "111222-1111-1111-1111-111222333444",
"Type": "REGULAR",
},
{
"Action": { "Type": "COUNT" },
"ExcludedRules": null,
"OverrideAction": null,
"Priority": 1,
"RuleId": "111222-1111-2222-3333-111222333444",
"Type": "REGULAR",
},
],
"WebACLArn": "arn:aws:waf-regional:us-west-2:123456789012:webacl/111222-1111-2222-3333-111222333444",
"WebACLId": "TEST_WAF_WEB_ACL_ID",
},
}
Detection logic
Condition
not (WebAcl is_not_null and LoadBalancerArn not in "TEST_LOAD_BALANCER_ARN")
This rule also runs imperative logic the parser cannot express as a filter; the conditions above are the structured part it could extract.
Exclusions
Top-level NOT(...) conjuncts: predicates this rule actively suppresses.
| Field | Kind | Excluded values |
|---|---|---|
LoadBalancerArn | eq | TEST_LOAD_BALANCER_ARN |
WebAcl | is_not_null |
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.
| Field | Kind | Values |
|---|---|---|
LoadBalancerArn | in |
|