AWS - WAF Enum

AWS - WAF Enum

支持 HackTricks

AWS WAF

AWS WAF 是一个 Web 应用防火墙,旨在 保护 Web 应用程序或 API 免受可能影响其可用性、安全性或资源消耗的各种 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 配置。

  • 示例:CAPTCHA API 的集成。

权限策略

权限策略是一个 IAM 策略,指定谁可以对 AWS WAF 资源执行操作。通过定义权限,您可以控制对 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 (N. Virginia):

  • 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>

Post Exploitation / Bypass

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

然而,攻击者也可能对干扰此服务感兴趣,以便网站不受 WAF 保护。

在许多删除和更新操作中,必须提供 lock token。此令牌用于对资源进行并发控制,确保更改不会被多个用户或进程同时尝试更新同一资源而意外覆盖。为了获得此令牌,您可以对特定资源执行相应的 listget 操作。

wafv2:CreateRuleGroup, wafv2:UpdateRuleGroup, wafv2:DeleteRuleGroup

攻击者将能够通过以下方式危害受影响资源的安全性:

  • 创建规则组,例如,可以阻止来自合法 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"
}
}
]

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

wafv2:CreateWebACL, wafv2:UpdateWebACL, wafv2: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 以阻止来自特定 IP 集的合法流量。如果源 IP 不匹配这些 IP 中的任何一个,默认操作也将是阻止它,从而导致 DoS。

原始 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 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"
}
}
]

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

wafv2:AssociateWebACL, wafv2: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:CreateIPSet , wafv2:UpdateIPSet, wafv2: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:CreateRegexPatternSet , wafv2:UpdateRegexPatternSet, wafv2: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>

潜在影响:禁用 CAPTCHA 保护或干扰应用程序功能,导致安全漏洞和潜在数据泄露。

wafv2:TagResource, wafv2: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