AWS - WAF Enum

AWS - WAF 枚举

支持 HackTricks

AWS WAF

AWS WAF 是一个旨在保护 Web 应用程序或 API 免受各种可能影响其可用性、安全性或资源消耗的 Web 攻击的 Web 应用程序防火墙。它使用户能够通过设置 安全规则 来控制传入流量,以减轻典型的攻击向量,如 SQL 注入或跨站脚本,同时还可以定义自定义过滤规则。

关键概念

Web ACL(访问控制列表)

Web ACL 是一组规则,您可以将其应用于您的 Web 应用程序或 API。当您将 Web ACL 与资源关联时,AWS WAF 根据 Web ACL 中定义的规则检查传入请求并执行指定的操作。

规则组

规则组是一组可应用于多个 Web ACL 的可重用规则集合。规则组有助于管理和维护不同 Web 应用程序或 API 之间的一致规则集。

每个规则组都有其关联的 容量,有助于计算和控制用于运行您的规则、规则组和 Web ACL 的操作资源。一旦在创建期间设置了其值,就无法修改它。

规则

规则定义了 AWS WAF 用于检查传入 Web 请求的一组条件。有两种主要类型的规则:

  1. 常规规则:此规则类型使用指定的条件来确定是否允许、阻止或计数 Web 请求。

  2. 基于速率的规则:在五分钟内计算来自特定 IP 地址的请求次数。在这里,用户定义一个阈值,如果 IP 地址的请求次数在五分钟内超过此限制,则该 IP 地址的后续请求将被阻止,直到请求速率降至阈值以下。基于速率的规则的最小阈值为 2000 个请求

托管规则

AWS WAF 提供预配置的、由 AWS 和 AWS Marketplace 卖家维护的托管规则集。这些规则集提供对常见威胁的保护,并定期更新以解决新的漏洞。

IP 集

IP 集是一个 IP 地址或 IP 地址范围的列表,您希望允许或阻止。IP 集简化了管理基于 IP 的规则的过程。

正则表达式模式集

正则表达式模式集包含一个或多个定义要在 Web 请求中搜索的模式的正则表达式(regex)。这对于更复杂的匹配场景非常有用,比如过滤特定字符序列。

锁令牌

锁令牌用于在对 WAF 资源进行更新时进行并发控制。它确保更改不会被多个用户或尝试同时更新同一资源的进程意外覆盖。

API 密钥

AWS WAF 中的 API 密钥用于对某些 API 操作进行身份验证的请求。这些密钥经过加密并安全管理,以控制访问并确保只有授权用户可以对 WAF 配置进行更改。

  • 示例:集成验证码 API。

权限策略

权限策略是指定谁可以在 AWS WAF 资源上执行操作的 IAM 策略。通过定义权限,您可以控制对 WAF 资源的访问,并确保只有授权用户可以创建、更新或删除配置。

范围

AWS WAF 中的范围参数指定 WAF 规则和配置是否适用于区域应用程序还是 Amazon CloudFront 分发。

  • REGIONAL:适用于区域服务,如应用程序负载均衡器(ALB)、Amazon API Gateway REST API、AWS AppSync GraphQL API、Amazon Cognito 用户池、AWS App Runner 服务和 AWS Verified Access 实例。您指定这些资源所在的 AWS 区域。

  • CLOUDFRONT:适用于全球的 Amazon CloudFront 分发。CloudFront 的 WAF 配置通过 us-east-1 区域管理,无论内容在何处提供。

主要特点

监控标准(条件)

条件 指定 AWS WAF 监控的传入 HTTP/HTTPS 请求的元素,包括 XSS、地理位置(GEO)、IP 地址、大小约束、SQL 注入和模式(字符串和正则表达式匹配)。重要的是要注意,基于国家在 CloudFront 级别限制的请求不会到达 WAF。

每个 AWS 帐户可以配置:

  • 每种类型的 100 个条件(正则表达式除外,只允许 10 个条件,但此限制可以增加)。

  • 100 个规则50 个 Web ACL

  • 最多 5 个基于速率的规则

  • 当将 WAF 与应用程序负载均衡器实现时,每秒 10,000 个请求 的吞吐量。

规则操作

每个规则都分配了操作,选项包括:

  • 允许:将请求转发到适当的 CloudFront 分发或应用程序负载均衡器。

  • 阻止:立即终止请求。

  • 计数:统计符合规则条件的请求。这对于规则测试很有用,在将其设置为允许或阻止之前,可以确认规则的准确性。

  • CAPTCHA 和挑战:通过 CAPTCHA 拼图和静默挑战验证请求是否不是来自机器人。

如果请求不匹配 Web ACL 中的任何规则,则会执行 默认操作(允许或阻止)。在 Web ACL 中定义的规则执行顺序至关重要,通常遵循以下顺序:

  1. 允许白名单 IP。

  2. 阻止黑名单 IP。

  3. 阻止匹配任何有害签名的请求。

CloudWatch 集成

AWS WAF 与 CloudWatch 集成以进行监控,提供诸如 AllowedRequests、BlockedRequests、CountedRequests 和 PassedRequests 等指标。这些指标默认每分钟报告一次,并保留两周。

枚举

为了与 CloudFront 分发进行交互,您必须指定区域 US East(弗吉尼亚北部):

  • CLI - 在使用 CloudFront 范围时指定区域 US East:--scope CLOUDFRONT --region=us-east-1

  • API 和 SDK - 对于所有调用,请使用区域端点 us-east-1。

为了与区域服务进行交互,您应该指定区域:

  • 例如,使用欧洲(西班牙)区域:--scope REGIONAL --region=eu-south-2

# Web ACLs #

## Retrieve a list of web access control lists (Web ACLs) available in your AWS account
aws wafv2 list-web-acls --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve details about the specified Web ACL
aws wafv2 get-web-acl --name <value> --id <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

## Retrieve a list of resources associated with a specific web access control list (Web ACL)
aws wafv2 list-resources-for-web-acl --web-acl-arn <value> # Additional permissions needed depending on the protected resource type: cognito-idp:ListResourcesForWebACL, ec2:DescribeVerifiedAccessInstanceWebAclAssociations or apprunner:ListAssociatedServicesForWebAcl
## Retrieve the Web ACL associated with the specified AWS resource
aws wafv2 get-web-acl-for-resource --resource-arn <arn> # Additional permissions needed depending on the protected resource type: cognito-idp:GetWebACLForResource, ec2:GetVerifiedAccessInstanceWebAcl, wafv2:GetWebACL or apprunner:DescribeWebAclForService

# Rule groups #

## List of the rule groups available in your AWS account
aws wafv2 list-rule-groups --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve the details of a specific rule group
aws wafv2 get-rule-group [--name <value>] [--id <value>] [--arn <value>] [--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>]
## Retrieve the IAM policy attached to the specified rule group
aws wafv2 get-permission-policy --resource-arn <rule-group-arn> # Just the owner of the Rule Group can do this operation

# Managed rule groups (by AWS or by a third-party) #

## List the managed rule groups that are available
aws wafv2 list-available-managed-rule-groups --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## List the available versions of the specified managed rule group
aws wafv2 list-available-managed-rule-group-versions --vendor-name <value> --name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve high-level information about a specific managed rule group
aws wafv2 describe-managed-rule-group --vendor-name <value> --name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--version-name <value>]
## Retrieve high-level information about all managed rule groups
aws wafv2 describe-all-managed-products --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve high-level information about all managed rule groups from a specific vendor
aws wafv2 describe-managed-products-by-vendor --vendor-name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

# IP sets #

## List the IP sets that are available in your AWS account
aws wafv2 list-ip-sets --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve the specific IP set
aws wafv2 get-ip-set --name <value> --id <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve the keys that are currently being managed by a rate-based rule.
aws wafv2 get-rate-based-statement-managed-keys --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>\
--web-acl-name <value> --web-acl-id <value> --rule-name <value> [--rule-group-rule-name <value>]

# Regex pattern sets #

## List all the regex pattern sets that you manage
aws wafv2 list-regex-pattern-sets --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieves the specified regex pattern sets
aws wafv2 get-regex-pattern-set --name <value> --id <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

# API Keys #

## List API keys for the specified scope
aws wafv2 list-api-keys --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve decrypted API key
aws wafv2 get-decrypted-api-key --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> --api-key <value>

# Logs #

## List of logging configurations (storage location of the logs)
aws wafv2 list-logging-configurations --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--log-scope <value>]
## Retrieve the logging configuration settings associated with a specific web ACL
aws wafv2 get-logging-configuration --resource-arn <value> [--log-scope <CUSTOMER | SECURITY_LAKE>] [--log-type <value>]

# Miscelaneous #

## Retrieve a list of the tags associated to the specified resource
aws wafv2 list-tags-for-resource resource-arn <value>

## Retrieve a sample of web requests that match a specified rule within a WebACL during a specified time range
aws wafv2 get-sampled-requests --web-acl-arn <value> --rule-metric-name <value> --time-window <value> --max-items <1-500> --scope <value>

## Obtains the web ACL capacity unit (WCU) requirements for a specified scope and ruleset
aws wafv2 check-capacity --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> --rules <value>

## List of available releases for the AWS WAFv2 mobile SDK
aws wafv2 list-mobile-sdk-releases --platform <IOS | ANDROID>
## Retrieves information for the specified mobile SDK release
aws wafv2 get-mobile-sdk-release --platform <value> --release-version <value>

后渗透 / 绕过

从攻击者的角度来看,这项服务可以帮助攻击者识别 WAF 保护和网络暴露,从而帮助他 compromise 其他网站。

然而,攻击者也可能对破坏这项服务感兴趣,以便使网站不受 WAF 保护。

在许多删除和更新操作中,需要提供 锁定令牌。该令牌用于对资源进行并发控制,确保更改不会被多个用户或进程意外覆盖,这些用户或进程试图同时更新同一资源。为了获取此令牌,您可以对特定资源执行相应的 列出获取 操作。

wafv2:CreateRuleGroupwafv2:UpdateRuleGroupwafv2:DeleteRuleGroup

攻击者可以通过以下方式 compromise 受影响资源的安全性:

  • 创建规则组,例如可以阻止来自合法 IP 地址的合法流量,导致拒绝服务。

  • 更新规则组,能够修改其操作,例如从 Block 更改为 Allow

  • 删除提供关键安全措施的规则组。

# Create Rule Group
aws wafv2 create-rule-group --name <value> --capacity <value> --visibility-config <value> \
--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--rules <value>] [--description <value>]
# Update Rule Group
aws wafv2 update-rule-group --name <value> --id <value> --visibility-config <value> --lock-token <value>\
--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--rules <value>] [--description <value>]
# Delete Rule Group
aws wafv2 delete-rule-group --name <value> --id <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

以下示例显示了一个规则组,该规则组将阻止特定IP地址的合法流量:

aws wafv2 create-rule-group --name BlockLegitimateIPsRuleGroup --capacity 1 --visibility-config SampledRequestsEnabled=false,CloudWatchMetricsEnabled=false,MetricName=BlockLegitimateIPsRuleGroup --scope CLOUDFRONT --region us-east-1 --rules file://rule.json

rule.json 文件将如下所示:

[
{
"Name":"BlockLegitimateIPsRule",
"Priority":0,
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:us-east-1:123456789012:global/ipset/legitIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
},
"Action":{
"Block":{}
},
"VisibilityConfig":{
"SampledRequestsEnabled":false,
"CloudWatchMetricsEnabled":false,
"MetricName":"BlockLegitimateIPsRule"
}
}
]

潜在影响:未经授权访问、数据泄露和潜在的DoS攻击。

wafv2:CreateWebACLwafv2:UpdateWebACLwafv2:DeleteWebACL

拥有这些权限的攻击者可以:

  • 创建新的Web ACL,引入允许恶意流量通过或阻止合法流量的规则,有效地使WAF无效或导致拒绝服务。

  • 更新现有的Web ACL,能够修改规则以允许诸如SQL注入或跨站脚本攻击之类的攻击,这些攻击在先前被阻止,或通过阻止有效请求来干扰正常流量。

  • 删除Web ACL,使受影响的资源完全无保护,暴露于各种网络攻击之中。

仅当ManagedByFirewallManager为false时,才能删除指定的WebACL

# Create Web ACL
aws wafv2 create-web-acl --name <value> --default-action <value> --visibility-config <value> \
--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--rules <value>] [--captcha-config <value>] [--description <value>]
# Update Web ACL
aws wafv2 update-web-acl --name <value> --id <value> --default-action <value> --visibility-config <value> --lock-token <value>\
--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--rules <value>] [--captcha-config <value>] [--description <value>]
# Delete Web ACL
aws wafv2 delete-web-acl --name <value> --id <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

原始 Web ACL

{
"WebACL": {
"Name": "AllowLegitimateIPsWebACL",
"Id": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f",
"ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/AllowLegitimateIPsWebACL/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f",
"DefaultAction": {
"Allow": {}
},
"Description": "",
"Rules": [
{
"Name": "AllowLegitimateIPsRule",
"Priority": 0,
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/ipset/LegitimateIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
},
"Action": {
"Allow": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": false,
"CloudWatchMetricsEnabled": false,
"MetricName": "AllowLegitimateIPsRule"
}
}
],
"VisibilityConfig": {
"SampledRequestsEnabled": false,
"CloudWatchMetricsEnabled": false,
"MetricName": "AllowLegitimateIPsWebACL"
},
"Capacity": 1,
"ManagedByFirewallManager": false,
"LabelNamespace": "awswaf:123456789012:webacl:AllowLegitimateIPsWebACL:"
},
"LockToken": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}

更新 Web ACL 的命令:

aws waf update-web-acl --web-acl-id <value> --updates <value>
aws wafv2 update-web-acl --name AllowLegitimateIPsWebACL --scope REGIONAL --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --default-action Block={} --visibility-config SampledRequestsEnabled=false,CloudWatchMetricsEnabled=false,MetricName=AllowLegitimateIPsWebACL --rules file://rule.json --region us-east-1

rule.json 文件将如下所示:

[
{
"Name": "BlockLegitimateIPsRule",
"Priority": 0,
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/ipset/LegitimateIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
},
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": false,
"CloudWatchMetricsEnabled": false,
"MetricName": "BlockLegitimateIPRule"
}
}
]

潜在影响:未经授权访问、数据泄露和潜在的DoS攻击。

wafv2:AssociateWebACLwafv2:DisassociateWebACL

wafv2:AssociateWebACL 权限将允许攻击者将 Web ACL(访问控制列表)与资源关联,从而绕过安全控制,使未经授权的流量到达应用程序,可能导致利用如SQL注入或跨站脚本(XSS)。相反,使用 wafv2:DisassociateWebACL 权限,攻击者可以暂时禁用安全保护,暴露资源的漏洞而不被检测到。

根据受保护资源类型,可能需要额外的权限:

  • 关联

    • apigateway:SetWebACL

    • apprunner:AssociateWebAcl

    • appsync:SetWebACL

    • cognito-idp:AssociateWebACL

    • ec2:AssociateVerifiedAccessInstanceWebAcl

    • elasticloadbalancing:SetWebAcl

  • 取消关联

    • apigateway:SetWebACL

    • apprunner:DisassociateWebAcl

    • appsync:SetWebACL

    • cognito-idp:DisassociateWebACL

    • ec2:DisassociateVerifiedAccessInstanceWebAcl

    • elasticloadbalancing:SetWebAcl

# Associate
aws wafv2 associate-web-acl --web-acl-arn <value> --resource-arn <value>
# Disassociate
aws wafv2 disassociate-web-acl --resource-arn <value>

潜在影响:在受AWS WAF保护的AWS环境中,资源安全受损,利用风险增加,可能导致服务中断。

wafv2:CreateIPSetwafv2:UpdateIPSetwafv2:DeleteIPSet

攻击者可以创建、更新和删除由AWS WAF管理的IP集。这可能很危险,因为可以创建新的IP集以允许恶意流量,修改IP集以阻止合法流量,更新现有IP集以包含恶意IP地址,移除受信任的IP地址或删除旨在保护关键资源的关键IP集。

# Create IP set
aws wafv2 create-ip-set --name <value> --ip-address-version <IPV4 | IPV6> --addresses <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
# Update IP set
aws wafv2 update-ip-set --name <value> --id <value> --addresses <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
# Delete IP set
aws wafv2 delete-ip-set --name <value> --id <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

以下示例显示如何覆盖现有IP集合以使用所需的IP集合

aws wafv2 update-ip-set --name LegitimateIPv4Set --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --addresses 99.99.99.99/32 --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --scope CLOUDFRONT --region us-east-1

潜在影响:未经授权访问和阻止合法流量。

wafv2:CreateRegexPatternSetwafv2:UpdateRegexPatternSetwafv2:DeleteRegexPatternSet

拥有这些权限的攻击者可以操纵 AWS WAF 使用的正则表达式模式集,以控制和过滤基于特定模式的传入流量。

  • 创建新的正则表达式模式可以帮助攻击者允许有害内容

  • 更新现有模式,攻击者可以绕过安全规则

  • 删除旨在阻止恶意活动的模式可能导致攻击者发送恶意有效负载并绕过安全措施。

# Create regex pattern set
aws wafv2 create-regex-pattern-set --name <value> --regular-expression-list <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--description <value>]
# Update regex pattern set
aws wafv2 update-regex-pattern-set --name <value> --id <value> --regular-expression-list <value> --lock-token <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
# Delete regex pattern set
aws wafv2 delete-regex-pattern-set --name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> --id <value> --lock-token <value>

潜在影响:绕过安全控制,允许恶意内容进入,可能暴露敏感数据或干扰由 AWS WAF 保护的服务和资源。

(wavf2:PutLoggingConfiguration & iam:CreateServiceLinkedRole), wafv2:DeleteLoggingConfiguration

拥有 wafv2:DeleteLoggingConfiguration 权限的攻击者可以从指定的 Web ACL 中移除日志配置。随后,通过 wavf2:PutLoggingConfigurationiam:CreateServiceLinkedRole 权限,攻击者可以在删除日志配置后创建或替换日志配置,以防止记录日志或将日志重定向到未经授权的目的地,如 Amazon S3 存储桶、Amazon CloudWatch Logs 日志组或受攻击者控制的 Amazon Kinesis Data Firehose。

在创建过程中,服务会自动设置必要的权限,以允许日志写入指定的日志目的地:

  • Amazon CloudWatch Logs: AWS WAF 在指定的 CloudWatch Logs 日志组上创建资源策略。该策略确保 AWS WAF 具有写入日志到日志组所需的权限。

  • Amazon S3 存储桶: AWS WAF 在指定的 S3 存储桶上创建存储桶策略。该策略授予 AWS WAF 将日志上传到指定存储桶所需的权限。

  • Amazon Kinesis Data Firehose: AWS WAF 专门为与 Kinesis Data Firehose 交互创建了服务关联角色。此角色允许 AWS WAF 将日志传送到配置的 Firehose 流。

每个 Web ACL 只能定义一个日志记录目的地。

# Put logging configuration
aws wafv2 put-logging-configuration --logging-configuration <value>
# Delete logging configuration
aws wafv2 delete-logging-configuration --resource-arn <value> [--log-scope <CUSTOMER | SECURITY_LAKE>] [--log-type <value>]

潜在影响: 降低对安全事件的可见性,使事件响应过程变得困难,并促进在受AWS WAF保护的环境中进行隐蔽恶意活动。

wafv2:DeleteAPIKey

拥有此权限的攻击者可以删除现有的API密钥,使CAPTCHA失效,并破坏依赖于它的功能,如表单提交和访问控制。根据CAPTCHA的实现方式,这可能导致CAPTCHA绕过或者如果资源中未正确设置错误管理,则可能导致DoS攻击。

# Delete API key
aws wafv2 delete-api-key --api-key <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>

潜在影响:禁用验证码保护或破坏应用功能,导致安全漏洞和潜在数据窃取。

wafv2:TagResourcewafv2:UntagResource

攻击者可以向AWS WAFv2资源(如Web ACL、规则组、IP集、正则表达式模式集和日志配置)添加、修改或移除标签。

# Tag
aws wafv2 tag-resource --resource-arn <value> --tags <value>
# Untag
aws wafv2 untag-resource --resource-arn <value> --tag-keys <value>

潜在影响:资源篡改、信息泄露、成本操纵和运营中断。

参考

支持 HackTricks

Last updated