mcpField
I
implementing-cloud-waf-rules

implementing-cloud-waf-rules

github.com/mukul975安全35.2k81 次安装8 周前更新
代码仓库

关于 implementing-cloud-waf-rules

帮助云应用和 API 团队部署及调优云 WAF 规则的技能,涵盖托管规则、速率限制和误报处理。流程建议先以 Count 模式验证,再切换到 Block 模式。

主要功能

  1. 01部署托管规则集
  2. 02配置速率限制规则
  3. 03设置地理与 IP 信誉拦截
  4. 04分析日志并调优误报
  5. 05验证后切换阻止模式

适用场景

  1. 01为新应用启用 OWASP 防护
  2. 02缓解登录端点撞库攻击
  3. 03减少合法请求被误拦

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill implementing-cloud-waf-rules

安装后在 Claude Code 中输入/implementing-cloud-waf-rules确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
agent.py

详细介绍

实施云 WAF 规则

适用场景

  • 在需要 OWASP 防护的云负载均衡器后面部署新的 Web 应用或 API 时
  • 应用渗透测试发现 SQL 注入、XSS 或其他注入漏洞时
  • 认证端点遭遇暴力破解、撞库或机器人攻击时
  • 合规要求强制要求使用 WAF 以满足 PCI-DSS 或类似标准时
  • 调整 WAF 规则以减少误报对合法应用流量的拦截时

不要使用于网络层 DDoS 防护(请使用 AWS Shield 或 Azure DDoS Protection)、API 认证设计(参见 managing-cloud-identity-with-okta),或应用代码级安全修复(WAF 是补偿性控制措施,不能替代安全代码)。

前置条件

  • 已配置 AWS ALB/CloudFront、Azure Application Gateway 或 Cloudflare 作为应用入口点
  • 在部署 WAF 之前,具有用于基线分析的应用流量日志
  • 具有用于在生产环境执行前验证 WAF 规则的测试环境
  • 了解应用请求模式,以尽量减少误报

工作流

第 1 步:部署托管规则集

启用覆盖 OWASP Top 10 漏洞的云提供商托管规则集。先从 Count(检测)模式开始,再切换到 Block(阻止)模式。

# AWS WAF: Create Web ACL with AWS Managed Rules
aws wafv2 create-web-acl \
  --name production-waf \
  --scope REGIONAL \
  --default-action '{"Allow": {}}' \
  --visibility-config '{
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "production-waf"
  }' \
  --rules '[
    {
      "Name": "AWSManagedRulesCommonRuleSet",
      "Priority": 1,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesCommonRuleSet"
        }
      },
      "OverrideAction": {"Count": {}},
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "CommonRuleSet"
      }
    },
    {
      "Name": "AWSManagedRulesSQLiRuleSet",
      "Priority": 2,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesSQLiRuleSet"
        }
      },
      "OverrideAction": {"Count": {}},
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "SQLiRuleSet"
      }
    },
    {
      "Name": "AWSManagedRulesKnownBadInputsRuleSet",
      "Priority": 3,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesKnownBadInputsRuleSet"
        }
      },
      "OverrideAction": {"Count": {}},
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "KnownBadInputs"
      }
    }
  ]'
第 2 步:创建自定义速率限制规则

部署基于速率的规则,以保护登录端点免受暴力破解和撞库攻击。

# Rate limiting rule for login endpoint (100 requests per 5 minutes per IP)
aws wafv2 update-web-acl \
  --name production-waf \
  --scope REGIONAL \
  --id <web-acl-id> \
  --lock-token <lock-token> \
  --default-action '{"Allow": {}}' \
  --rules '[
    {
      "Name": "RateLimitLogin",
      "Priority": 0,
      "Statement": {
        "RateBasedStatement": {
          "Limit": 100,
          "AggregateKeyType": "IP",
          "ScopeDownStatement": {
            "ByteMatchStatement": {
              "FieldToMatch": {"UriPath": {}},
              "PositionalConstraint": "STARTS_WITH",
              "SearchString": "/api/auth/login",
              "TextTransformations": [{"Priority": 0, "Type": "LOWERCASE"}]
            }
          }
        }
      },
      "Action": {"Block": {"CustomResponse": {"ResponseCode": 429}}},
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "RateLimitLogin"
      }
    }
  ]'
第 3 步:配置地理封锁和 IP 信誉

阻止来自应用没有任何合法用户的国家/地区的流量,并利用 IP 信誉列表阻止已知恶意来源。

# AWS WAF: Geo-blocking rule
# Block countries not in the allowed list
aws wafv2 create-ip-set \
  --name blocked-ips \
  --scope REGIONAL \
  --ip-address-version IPV4 \
  --addresses "198.51.100.0/24" "203.0.113.0/24"

# Add Amazon IP Reputation rule
# AWSManagedRulesAmazonIpReputationList blocks IPs flagged by AWS threat intelligence
第 4 步:调整规则以减少误报

在 Count 模式下分析 WAF 日志,识别被标记的合法请求。为特定 URI 路径或请求模式创建规则例外。

# Enable WAF logging to S3
aws wafv2 put-logging-configuration \
  --logging-configuration '{
    "ResourceArn": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/production-waf/id",
    "LogDestinationConfigs": ["arn:aws:s3:::waf-logs-bucket"],
    "RedactedFields": [{"SingleHeader": {"Name": "authorization"}}]
  }'

# Query WAF logs with Athena to find false positives
# Find rules triggered most frequently for legitimate traffic
cat << 'EOF' > waf-analysis.sql
SELECT
  terminatingRuleId,
  httpRequest.uri,
  httpRequest.httpMethod,
  COUNT(*) as block_count
FROM waf_logs
WHERE action = 'BLOCK'
  AND timestamp > date_add('day', -7, now())
GROUP BY terminatingRuleId, httpRequest.uri, httpRequest.httpMethod
ORDER BY block_count DESC
LIMIT 20
EOF
# Exclude specific rule from managed rule set that causes false positives
# Example: Exclude SizeRestrictions_BODY for file upload endpoint
aws wafv2 update-web-acl \
  --name production-waf \
  --scope REGIONAL \
  --id <web-acl-id> \
  --lock-token <lock-token> \
  --rules '[{
    "Name": "AWSManagedRulesCommonRuleSet",
    "Priority": 1,
    "Statement": {
      "ManagedRuleGroupStatement": {
        "VendorName": "AWS",
        "Name": "AWSManagedRulesCommonRuleSet",
        "ExcludedRules": [{"Name": "SizeRestrictions_BODY"}]
      }
    },
    "OverrideAction": {"None": {}},
    "VisibilityConfig": {
      "SampledRequestsEnabled": true,
      "CloudWatchMetricsEnabled": true,
      "MetricName": "CommonRuleSet"
    }
  }]'
第 5 步:验证后切换到 Block 模式

在 Count 模式下运行 7-14 天且误报率可接受后,将托管规则切换到 Block 模式以启用主动防护。

# Change OverrideAction from Count to None (use rule group's default Block action)
# Update each managed rule group from {"Count": {}} to {"None": {}}
# Monitor CloudWatch metrics for sudden changes in blocked request volume

关键概念

术语定义
Web ACLWeb 访问控制列表,定义针对受保护资源的每个 HTTP 请求进行评估的规则集
托管规则组由云提供商或第三方供应商维护的预配置规则集,覆盖常见攻击模式
基于速率的规则按 IP 地址跟踪请求速率,并在时间窗口内阻止超过阈值的 IP 的 WAF 规则
Count 模式记录匹配请求但不阻止它们的 WAF 操作,用于在执行前验证规则
规则优先级决定先评估哪些规则的数值排序;数字越小优先级越高
自定义响应WAF 在阻止请求时返回特定 HTTP 状态码和标头的能力
缩小范围语句将基于速率的规则缩小到特定 URI 路径、方法或标头的条件
误报被 WAF 规则错误阻止的合法请求,需要调整规则或将其排除

工具与系统

  • AWS WAF:与 ALB、CloudFront、API Gateway 和 AppSync 集成的云原生 WAF
  • Azure WAF:Application Gateway 或 Front Door 上的 Web 应用防火墙,具有 OWASP CRS 规则集
  • AWS Firewall Manager:跨 Organization 中多个 AWS 账户的集中式 WAF 策略管理
  • WAF Security Automations:AWS 解决方案,基于日志分析部署基于 Lambda 的自动化 WAF 规则更新
  • CloudWatch Metrics:用于跟踪 WAF 规则匹配率、阻止次数和允许请求的监控仪表板

常见场景

场景:针对身份验证 API 的凭据填充攻击

背景:一个电子商务应用每小时收到来自僵尸网络的 50,000 次登录尝试,使用的是窃取的凭据列表。攻击者每隔几分钟轮换源 IP,以规避简单的基于 IP 的封锁。

方案:

  1. 部署基于速率的规则,将登录端点请求限制为每个 IP 每 5 分钟 10 次
  2. 启用 AWS WAF Bot Control 托管规则组,以检测超越 IP 轮换的自动化请求模式
  3. 添加自定义规则,要求登录请求失败超过 5 次时提供有效的 CAPTCHA 令牌
  4. 使用 AWSManagedRulesAmazonIpReputationList 实现 IP 信誉封锁
  5. 创建自定义规则,匹配凭据填充工具常见的 User-Agent 模式
  6. 监控被封锁请求的指标,并根据正常流量模式调整阈值

陷阱:将速率限制设置得过于激进,会封锁共享 NAT IP 后面的正常用户。仅靠 User-Agent 进行封锁很容易被轮换 agent 字符串绕过。

输出格式

Cloud WAF Configuration Report
================================
Web ACL: production-waf
Scope: Regional (us-east-1)
Protected Resources: ALB (arn:aws:elasticloadbalancing:...)
Report Date: 2025-02-23

RULE CONFIGURATION:
  [P0] RateLimitLogin          - BLOCK (100 req/5min/IP)
  [P1] AWSManagedRulesCommon   - BLOCK (1 exclusion: SizeRestrictions_BODY)
  [P2] AWSManagedRulesSQLi     - BLOCK
  [P3] AWSManagedRulesKnownBad - BLOCK
  [P4] AWSManagedRulesBotControl - COUNT (evaluation phase)
  [P5] GeoBlockRule            - BLOCK (12 countries blocked)

TRAFFIC ANALYSIS (Last 7 Days):
  Total Requests:    2,847,293
  Allowed:           2,791,456 (98.0%)
  Blocked:              51,234 (1.8%)
  Counted:               4,603 (0.2%)

TOP BLOCKED RULES:
  RateLimitLogin:              23,456 blocks (45.8%)
  SQLi Detection:               8,234 blocks (16.1%)
  CommonRuleSet (XSS):          7,891 blocks (15.4%)
  GeoBlockRule:                 6,543 blocks (12.8%)
  KnownBadInputs:              5,110 blocks (10.0%)

FALSE POSITIVE ANALYSIS:
  Reported False Positives: 3
  Confirmed False Positives: 1 (SizeRestrictions_BODY for /api/upload)
  Action Taken: Rule exclusion applied

评论

支持 Markdown