Virtual Patching Best Practices
虚拟补丁是 DevSecOps 框架中的一项关键安全策略,它提供了一种快速有效的方法来缓解 Web 应用程序中的漏洞,而无需修改底层代码。在动态开发环境中,可能会在生产环境或遗留系统中发现漏洞,而这些系统无法立即进行代码修复。虚拟补丁通过利用 Web 应用防火墙(WAF)或入侵防御系统(IPS)来检测和阻止针对特定漏洞的攻击来解决这个问题。这种方法有助于确保持续的安全性,为开发团队提供实施永久补丁所需的时间,同时不会中断部署周期或降低运营效率。
在 DevSecOps 的环境中,虚拟补丁通过在开发生命周期中自动化威胁缓解,与持续安全实践保持一致。通过将 WAF 集成到 CI/CD 流水线中,组织可以在推送新代码时实时保护应用程序的安全,在满足 DevOps 快速部署需求的同时减少攻击面。这种方法支持开发、运维和安全团队之间的协作,确保应用程序在不断发展的过程中始终受到保护,从而在开发的每个阶段都强化安全性。
注入攻击防护
虚拟补丁是一种帮助保护应用程序免受常见漏洞(如 SQL 注入和命令注入)影响的方法,无需修改应用程序的源代码。在 Web 应用防火墙(WAF)中,虚拟补丁通过分析传入流量和阻止恶意请求来防止攻击。以下是不同 WAF 解决方案中虚拟补丁工作原理的详细说明,包括示例和命令。
1. FortiWeb:SQL 注入虚拟补丁
FortiWeb 提供了一个强大的 WAF,可以帮助防御注入攻击。您可以通过过滤可疑请求模式来创建自定义安全规则,从而为 SQL 注入漏洞创建虚拟补丁。
创建自定义策略的步骤:
-
登录 FortiWeb 并转到 Web Protection > Signature Rules。
-
选择 Create New 来定义用于检测 SQL 注入模式的自定义签名。
SQL 注入规则示例:
SELECT.*FROM|INSERT.*INTO|DELETE.*FROM|DROP.*TABLE|UNION.*SELECT|--|/*
该规则通过搜索危险的 SQL 关键字(如 SELECT
、INSERT
、DELETE
、DROP
和 UNION
)来捕获常见的 SQL 注入尝试。
强制执行虚拟补丁:
-
创建签名后,通过导航到 Web Protection Profiles 并将规则与必要的 Web 应用程序关联,将自定义规则应用于 HTTP 流量。
2. F5 BIG-IP ASM:命令注入的虚拟补丁
F5 的 BIG-IP ASM(应用程序安全管理器)具有高度可定制性,允许通过手动攻击签名或策略进行虚拟补丁。您可以配置安全策略来阻止命令注入攻击。
命令注入阻止:
-
转到 Security > Application Security > Attack Signatures。
-
创建针对命令注入模式的新攻击签名。
命令注入模式示例:
(;|||&|$|`|<|>|"|'|(|)|{|})
该模式针对命令注入负载中经常使用的字符,如 ;
、|
和 &
。
应用策略:
-
定义签名后,在应用于 Web 应用程序的安全策略中启用它。这确保所有流量都通过虚拟补丁。
3. AWS WAF:SQL 注入的虚拟补丁
AWS WAF 允许您使用基于 SQL 注入模式的条件创建规则。通过 AWS WAF,您可以使用托管规则自动阻止 SQL 注入尝试,或者创建自定义 SQL 注入检测。
创建 SQL 注入规则的步骤:
-
导航到 AWS WAF & Shield > Web ACLs > Create Rule。
-
选择 Add rule 并选择 SQL injection match condition。
AWS WAF SQL 注入规则示例:
statement:
"queryArguments":
[
{"union select", "insert into", "drop table", "--"}
]
此自定义匹配规则可识别常见的 SQL 注入负载,如 UNION SELECT
和 DROP TABLE
。
应用规则:
-
将规则附加到您的 Web ACL,它将监控传入流量以阻止包含 SQL 注入尝试的请求。
4. Azure WAF:SQL 和命令注入的虚拟补丁
Azure WAF 在应用程序网关上通过托管规则提供开箱即用的虚拟补丁,以防御 SQL 和命令注入。您还可以定义自定义规则以实现更精细的控制。
SQL 注入的自定义规则:
-
在 Azure 门户中导航到 WAF 策略 > 自定义规则。
-
为 SQL 注入模式添加新的自定义规则。
自定义规则表达式示例:
SELECT|INSERT|DELETE|DROP|UNION|%27|%22
此自定义正则表达式规则可过滤注入攻击中使用的 SQL 关键字和编码,如 %27
(单引号)和 %22
(双引号)。
应用虚拟补丁:
-
创建规则后,将其应用到与 Azure 应用程序网关关联的 WAF 策略中。
5. Cloudflare:SQL 注入和命令注入的虚拟补丁
Cloudflare WAF 提供托管规则集,并能够使用表达式创建自定义防火墙规则来防御注入攻击。
自定义虚拟补丁步骤:
-
在 Cloudflare 仪表板中转到 Firewall > Firewall Rules。
-
使用自定义表达式为 SQL 注入创建新的防火墙规则。
Cloudflare WAF 规则示例(用于 SQL 注入):
(http.request.uri.query contains "SELECT" or
http.request.uri.query contains "DROP" or
http.request.uri.query contains "'--")
此规则检查请求 URI 是否包含典型的 SQL 注入模式。
执行:
-
启用此规则以实时保护您的网站免受 SQL 注入攻击。
6. OpenRASP:用于 SQL 注入的运行时应用程序自我保护(RASP)
OpenRASP 提供运行时应用程序自我保护,通过实时监控代码执行来防御注入攻击。与 WAF 不同,它直接集成到应用程序运行时中,提供对应用程序行为的深度可见性。
在 OpenRASP 中防御 SQL 注入的示例:
-
为您的应用程序安装 OpenRASP。例如,在 Java 环境中,将 OpenRASP 作为 JVM 代理添加。
-
在
openrasp.yml
中配置sql
模块以监控 SQL 注入模式。
OpenRASP SQL 注入检测配置示例:
plugin.filter.sql_policy:
action: "block"
rules:
- "SELECT.*FROM.*"
- "INSERT.*INTO.*"
- "UNION.*SELECT.*"
此配置会阻止包含 SELECT FROM
和 UNION SELECT
等模式的 SQL 注入尝试。
应用虚拟补丁:
-
OpenRASP 将在运行时自动阻止包含恶意 SQL 语句的请求。
请求伪造
虚拟补丁通过在恶意请求到达应用程序层之前阻止它们,为常见的 Web 漏洞(如服务器端请求伪造(SSRF)和跨站请求伪造(CSRF))提供了一个强大的防御层。以下是关于如何在各种平台(FortiWeb、F5、AWS、Azure、Cloudflare 和 OpenRASP)中配置虚拟补丁以缓解 SSRF 和 CSRF 攻击的详细指南。
1. FortiWeb:
FortiWeb 是一个 Web 应用程序防火墙(WAF)解决方案,提供强大的虚拟补丁功能来防御 SSRF 和 CSRF。它可以检查和阻止匹配恶意模式的 HTTP 请求,例如伪造的请求。
FortiWeb 中的 CSRF 防御:
FortiWeb 提供了一个反 CSRF 模块,用于跟踪用户会话并验证请求令牌。
-
步骤 1: 启用 CSRF 保护:
-
导航至 Web Protection → CSRF Protection。
-
为表单和 AJAX 请求启用 Insert CSRF Token。
-
设置 Token Expiry(以分钟为单位)以限制令牌重用
config waf csrf-protection
set status enable
set csrf-token-timeout 300
end
FortiWeb 中的 SSRF 防御:
-
步骤 1: 配置 URL 限制策略以阻止针对内部服务器的请求(用于防御 SSRF)。
config waf url-rewrite-policy
edit "block_ssrf"
set url /api/*
set action block
set server-internal-network 192.168.1.0/24
next
end
2. F5 BIG-IP:
F5 的 BIG-IP ASM(应用安全管理器)允许创建自定义签名和 URL 过滤器,可以有效阻止伪造请求,特别是针对 SSRF 和 CSRF 攻击。
F5 ASM 中的 CSRF 防护:
BIG-IP 包含 CSRF 保护机制,可对所有敏感请求强制执行令牌验证。
-
步骤 1: 在 ASM 策略中启用 CSRF 保护:
-
导航至 Security → Application Security → Policy Building → CSRF Protection。
-
为表单添加基于令牌的验证。
tmsh modify asm policy my_asm_policy csrf-protection enable
F5 ASM 中的 SSRF 防御:
-
步骤 1: 创建 ASM 签名规则,通过过滤可疑负载(如内部 IP 地址或异常 DNS 查询)来阻止 SSRF 请求。
tmsh modify asm signature-sets SSRF-signature-set enable
3. AWS WAF:
AWS WAF 可以通过使用自定义规则来过滤基于请求头检查、负载模式和 IP 过滤的请求,从而阻止 SSRF 和 CSRF 攻击。
AWS WAF 中的 CSRF 防护:
AWS WAF 本身不支持 CSRF 令牌管理,但您可以使用自定义规则来检测缺失或不匹配的令牌。
-
步骤 1: 创建一个规则来检查请求头中是否存在 CSRF 令牌。
{
"Name": "csrf-token-check",
"Priority": 1,
"Action": {
"Block": {}
},
"Statement": {
"ByteMatchStatement": {
"SearchString": "csrf-token",
"FieldToMatch": {
"Headers": {
"Name": "X-Csrf-Token"
}
},
"TextTransformations": [
{
"Type": "LOWERCASE"
}
]
}
}
}
AWS WAF 中的 SSRF 防护:
-
步骤 1: 创建规则通过过滤 IP 范围和限制目标为内部 IP 或本地网络请求的 URL 模式来阻止 SSRF 攻击。
{
"Name": "ssrf-detect",
"Priority": 2,
"Action": {
"Block": {}
},
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:region:account-id:ipset/internal-ips"
}
}
}
4. Azure WAF:
Azure WAF 通过 Azure Front Door 或应用程序网关中的自定义规则集提供虚拟补丁功能。
Azure WAF 中的 CSRF 防护:
-
步骤 1: 启用自定义规则以验证请求头中的 CSRF 令牌
az network application-gateway waf-policy custom-rule create
--name block-missing-csrf
--action block
--priority 1
--match-variable RequestHeaders.csrf-token
--operator Equal
--value 0
Azure WAF 中的 SSRF 防护:
-
步骤 1: 通过定义基于 IP 范围、URL 模式或特定请求头的规则来阻止 SSRF 攻击。
az network application-gateway waf-policy custom-rule create
--name block-ssrf
--action block
--priority 2
--match-variable RequestUri
--operator Contains
--value "169.254.169.254" # block AWS/Azure metadata IP
5. Cloudflare WAF:
Cloudflare 通过自定义防火墙规则提供虚拟补丁功能,可以有效阻止 SSRF 和 CSRF 攻击。
Cloudflare 中的 CSRF 防护:
-
步骤 1: 添加自定义规则以验证请求头中的 CSRF 令牌。
http.request.headers["X-Csrf-Token"] eq "" or http.request.body.empty
Cloudflare 中的 SSRF 防护:
-
步骤 1: 使用 Cloudflare 的防火墙规则通过检测私有 IP 地址和异常请求模式来阻止 SSRF 攻击。
ip.src in {192.168.0.0/16 10.0.0.0/8} and http.request.uri contains "internal"
6. OpenRASP:
OpenRASP 是一款运行时应用程序安全防护工具,通过分析应用程序行为,能够在运行时检测 SSRF 和 CSRF 攻击。
OpenRASP 中的 CSRF 防护:
-
步骤 1: 在 OpenRASP 的策略文件中配置 CSRF 检测。
{
"csrf_protection": {
"enable": true,
"csrf_token": "X-Csrf-Token",
"check_ajax": true
}
}
OpenRASP 中的 SSRF 防护:
-
步骤 1: 在 OpenRASP 配置中启用 SSRF 检测。
{
"ssrf_protection": {
"enable": true,
"block_internal": true,
"whitelist": ["127.0.0.1", "localhost"]
}
}
安全配置错误
虚拟补丁在防御各种安全配置错误方面发挥着重要作用,例如 XML 外部实体 (XXE) 注入或不安全的文件上传。这些漏洞可能会暴露敏感信息或允许攻击者上传恶意文件。通过利用 Web 应用程序防火墙 (WAF) 和运行时应用程序自我保护 (RASP) 解决方案,我们可以部署即时虚拟补丁来缓解这些威胁,而无需更改应用程序代码。以下是在 FortiWeb、F5、AWS、Azure、Cloudflare 和 OpenRASP 等流行平台中实施安全配置错误虚拟补丁的详细说明。
1. FortiWeb:XXE 和不安全文件上传的虚拟补丁
FortiWeb 提供了一个强大的 WAF,可帮助创建针对常见漏洞(如 XXE 或不安全文件上传)的虚拟补丁。
步骤 1:创建 XXE 缓解的自定义签名
-
登录 FortiWeb。
-
导航至 Web Protection > Custom Signature。
-
创建用于检测恶意 XML 内容的新签名规则:
Signature ID: xxe-detect-01
Attack Type: XXE Injection
Signature Pattern: `<!ENTITYs+%|]]>|SYSTEMs+".+"|SYSTEMs+'w+:'`
Action: Block
-
将签名应用到保护配置文件:Web Protection > Signature Rules > Apply to Policy。
步骤 2:防御不安全的文件上传
-
在 File Upload Security 下启用 File Upload Restrictions:
Max File Size: 5MB
Allowed Extensions: .jpg, .png, .pdf
Action: Block and Log
-
将这些设置添加到相关策略中。
curl -X POST -d "<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>" https://yourdomain.com/endpoint
如果配置正确,FortiWeb 将阻止恶意的 XXE 负载。
2. F5 Big-IP ASM:防御 XXE 和不安全的文件上传
F5 的高级 WAF 可以配置为阻止安全配置错误,如 XXE 和不安全的文件上传。
步骤 1:创建 XXE 检测 iRule
-
创建自定义 iRule 以检测 XXE 模式:
when HTTP_REQUEST {
if {[HTTP::payload] contains "ENTITY"} {
log local0. "XXE Attack Detected"
drop
}
}
-
将 iRule 附加到相关的虚拟服务器。
步骤 2:启用文件类型强制执行
-
导航至 Security > Application Security > Policy > File Types。
-
启用 严格文件上传验证:
Allowed File Types: .jpg, .png, .txt
Maximum File Size: 10MB
Action: Block
curl -X POST --data-binary @malicious_file.xml https://yourdomain.com/upload
该 iRule 将阻止包含 XXE 攻击的恶意上传。
3. AWS WAF:防御 XXE 和不安全的文件上传
AWS WAF 可以通过自定义规则来检测和阻止 XXE 和不安全的文件上传。
步骤 1:为 XXE 配置 Web ACL
-
在 AWS 控制台中,导航至 AWS WAF > Web ACL。
-
使用正则表达式模式创建规则以阻止 XXE 负载:
<!DOCTYPEs+|]]>s+|&xxe;
-
将操作设置为阻止。
步骤 2:安全的文件上传
-
使用 AWS Lambda@Edge 与 AWS WAF 结合,根据文件类型进行过滤:
def lambda_handler(event, context):
request = event['Records'][0]['cf']['request']
if not request['headers']['content-type'][0]['value'].startswith('image/'):
return {
'status': '403',
'body': 'File type not allowed.'
}
return request
-
将此 Lambda 函数部署到 AWS WAF。
aws wafv2 get-web-acl --name your-acl-name --scope REGIONAL --id your-acl-id
AWS WAF 现在将阻止 XXE 和不安全的文件上传尝试。
4. Azure WAF:防御 XXE 和文件上传漏洞
Azure WAF 可以通过 Azure 防火墙管理器中的自定义规则来阻止 XXE 和不安全的文件上传。
步骤 1:添加用于防御 XXE 的自定义 WAF 规则
-
导航至 Azure Front Door > WAF 策略 > 自定义规则。
-
添加规则以阻止 XXE 攻击尝试:
Rule Name: Block-XXE
Match Condition: Request Body
Pattern: <!DOCTYPE|SYSTEM|ENTITY
Action: Block
步骤 2:保护文件上传
-
在 Azure Application Gateway WAF 中,添加文件上传验证。
-
使用自定义规则阻止特定内容类型并强制执行大小限制。
az network waf-policy rule add --policy-name my-waf-policy --custom-rule block-xxe --priority 1 --rule-type Match
Azure WAF 将执行虚拟补丁并阻止恶意负载。
5. Cloudflare WAF:针对 XXE 和文件上传防御的虚拟补丁
Cloudflare WAF 提供可自定义的防火墙规则来阻止 XXE 和控制文件上传。
步骤 1:创建用于防御 XXE 的防火墙规则
-
在 Cloudflare 控制面板中,导航至 WAF > 防火墙规则 > 创建规则。
-
添加新规则以阻止 XXE
Field: Body
Operator: contains
Value: <!DOCTYPE
Action: Block
步骤 2:保护文件上传
-
通过创建另一条规则来强制执行文件上传限制:
Field: Content-Type
Operator: does not contain
Value: image/
Action: Block
curl -X POST -d "<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>" https://yourdomain.com
Cloudflare WAF 将检测并阻止 XXE 攻击尝试。
6. OpenRASP:用于 XXE 和不安全文件上传的运行时应用程序自我保护
OpenRASP 在应用程序内部工作,实时检测和阻止恶意活动,如 XXE 或不安全的文件上传。
步骤 1:启用 XXE 保护
-
修改 rasp-conf.json
文件以启用 XXE 检测:
"xxe": {
"enabled": true,
"action": "block"
}
步骤 2:启用文件上传安全
-
在同一个 rasp-conf.json
文件中,配置文件上传保护:
"fileUpload": {
"enabled": true,
"maxFileSize": 5242880, # 5MB
"allowedExtensions": [".jpg", ".png", ".pdf"]
}
curl -X POST -F '[email protected]' https://yourdomain.com/upload
OpenRASP 将实时阻止恶意文件上传或 XXE 攻击。
访问控制缺陷
访问控制缺陷漏洞,如不安全的直接对象引用(IDOR)和函数级访问控制问题,对 Web 应用程序构成严重威胁。攻击者可以利用这些缺陷获得对资源的未授权访问或执行受限操作。当无法立即修复源代码时,使用 Web 应用防火墙(WAF)和运行时应用程序自我保护(RASP)解决方案实施的虚拟补丁是一种有效的防御策略。
以下是使用 FortiWeb、F5、AWS WAF、Azure WAF、Cloudflare 和 OpenRASP 等多个平台对访问控制漏洞进行虚拟补丁的详细方法。
1. FortiWeb (Fortinet WAF)
FortiWeb 提供高级保护机制,包括基于自定义签名的虚拟补丁,以防止访问控制漏洞。
示例:使用 FortiWeb 阻止 IDOR
步骤 1:创建自定义签名
# Define a custom signature that matches unauthorized URL access or parameter tampering
config waf custom-signature
edit "idor_prevention"
set signature "GET /api/user/{ID} where {ID} should match the logged-in user"
set action block
end
步骤 2:将签名应用到受保护策略
# Apply the custom signature to your WAF protection policy
config waf policy
edit "app_policy"
set custom-signature "idor_prevention"
end
该签名会监控对敏感 API 端点的请求,检查不当访问尝试,并阻止任何未经授权的操作。
2. F5 (BIG-IP ASM)
F5 的 BIG-IP ASM 模块提供了详细的策略和可自定义的规则,用于防止通过 URL 参数操纵或直接对象引用进行的未授权访问。
示例:为函数级访问控制实施虚拟补丁
步骤 1:创建参数保护规则
-
转到 Security ›› Application Security ›› Parameters ›› Add New Parameter。
-
创建规则以监控可能被篡改的特定参数(例如
user_id
)。
步骤 2:强制执行 URL 访问规则
-
使用 Request Blocking ›› URL Access 配置基于角色的访问控制。例如,除非用户具有适当的权限,否则阻止用户访问某些功能。
# Example blocking based on request violations
set asm policy parameter-value-enforcement "user_id"
add user_id_validation_rule "Only accessible by authorized users"
apply user_id_validation_rule "user_id" action deny
F5 支持集成自定义表达式或利用会话数据来实施适当的访问控制,确保有效防御 IDOR 漏洞利用。
3. AWS WAF
AWS WAF 提供了灵活的自定义规则编写功能,可以防止对 API 端点的未授权访问或篡改请求。
示例:使用 AWS WAF 阻止 IDOR 漏洞利用
步骤 1:创建自定义 WAF 规则
-
进入 AWS WAF 控制台,选择 Web ACLs,然后选择您的 Web ACL。
-
添加规则以阻止对敏感端点的请求,除非请求与已登录用户的 ID 匹配。
{
"Statement": {
"Effect": "Deny",
"Condition": {
"IpAddress": {
"aws:SourceIp": "BLOCKED_IP"
},
"StringEquals": {
"Request.User_Id": "Authenticated_User"
}
}
}
}
步骤 2:应用规则
-
将规则附加到 Web ACL,以阻止对指定资源的任何未授权请求。
4. Azure WAF (应用程序网关)
Azure WAF 在应用程序网关上通过创建自定义规则来实现虚拟补丁,这些规则可以检查 HTTP 头、方法和参数。
示例:函数级访问的虚拟补丁
步骤 1:在 Azure WAF 中定义自定义规则
-
进入 Azure 门户,选择 Application Gateway ›› WAF 策略 ›› 自定义规则。
-
添加自定义规则,根据用户角色阻止未授权操作。
{
"RuleType": "Match",
"MatchConditions": [
{
"MatchVariables": [
{
"VariableName": "RequestHeader",
"Selector": "Authorization"
}
],
"Operator": "Equal",
"MatchValues": ["ROLE_ADMIN"]
}
],
"Action": "Block"
}
步骤 2:应用 WAF 策略
-
将自定义规则应用到应用程序中,对敏感操作(如 DELETE
、POST
或PUT
)实施访问控制。
5. Cloudflare WAF
Cloudflare WAF 允许创建自定义防火墙规则,以阻止对应用程序特定部分的未授权访问。
步骤 1:在 Cloudflare 中创建 WAF 规则
-
导航至 Cloudflare 控制面板中的防火墙规则。
-
添加规则以阻止对敏感端点的未授权访问。
# Block access to user profiles unless authenticated
if (http.request.uri.path contains "/user" and not http.request.headers["Authorization"] contains "Bearer") {
action = "block"
}
该规则会阻止未携带正确授权令牌的用户数据访问请求。
6. OpenRASP(运行时应用自我保护)
OpenRASP 通过直接监控和拦截运行时操作,分析应用内部行为,为访问控制漏洞提供虚拟补丁保护。
示例:使用 OpenRASP 防止 IDOR
步骤 1:定义自定义 RASP 钩子
-
创建自定义规则以在处理对象引用之前验证其有效性。
{
"rules": [
{
"type": "request_parameter",
"name": "Validate ID in Request",
"desc": "Prevent unauthorized ID access",
"action": "block",
"condition": {
"parameter": "user_id",
"operator": "not_equals",
"value": "session.user_id"
}
}
]
}
步骤 2:执行规则
-
RASP 引擎在运行时执行此规则,确保对象引用与会话用户匹配,从而防止 IDOR 攻击。
身份识别和认证失败
针对身份识别和认证失败的虚拟补丁是一种重要的防御策略,用于防范常见漏洞,如凭证填充攻击或暴力破解攻击。虚拟补丁使用 Web 应用防火墙(WAF)在恶意请求到达应用程序之前将其阻止。下面,我们将通过在 FortiWeb 和 Cloudflare 上设置虚拟补丁来演示如何防御两种攻击——凭证填充和暴力破解。
1. 在 FortiWeb 上防御凭证填充
凭证填充是指攻击者使用被盗凭证列表尝试登录。FortiWeb 中的虚拟补丁可以通过检测和阻止使用无效凭证的过度登录尝试来提供帮助。
配置
为防止凭证填充:
-
启用暴力破解检测:此功能会在一段时间内跟踪失败的登录尝试,并在达到阈值后阻止访问。
FortiWeb 命令:
config server-policy
edit "web-login-policy"
config waf
set brute-force-prevention enable
set max-login-attempts 5
set block-period 600
end
next
end
此配置:
-
跟踪登录尝试,在 5 次无效尝试后阻止用户。
-
阻止 IP 600 秒(10 分钟)。
通过防止自动化机器人快速尝试多个用户名和密码的方式来阻止凭证填充攻击。
2. 在 Cloudflare 上防御暴力破解
暴力破解攻击涉及尝试多种密码组合以破解账户。使用 Cloudflare WAF,我们可以通过创建速率限制规则来实现虚拟补丁,以阻止来自单个 IP 的重复登录尝试。
配置
为防止暴力破解:
-
对登录端点设置速率限制。
-
在达到特定阈值后对请求进行挑战。
Cloudflare 仪表板步骤:
-
转到 Security > WAF > Rate Limiting。
-
为登录 URL 创建新的速率限制规则(例如,
/login
)。 -
将速率限制设置为每个 IP 每分钟 10 个请求。
示例规则:
Login Rate Limit Rule:
- URL: "/login"
- Methods: POST
- Requests per minute: 10
- Action: Block or Challenge
如果同一 IP 在一分钟内发送超过 10 次登录尝试,Cloudflare 将阻止或对其进行挑战,从而有效地缓解暴力破解攻击。
攻击防护说明
-
凭证填充:FortiWeb 的虚拟补丁通过限制单个用户的登录尝试来阻止凭证填充。它可以防止自动化工具测试大量的凭证列表。
-
暴力破解:Cloudflare 的速率限制通过防止单个 IP 地址在短时间内进行过多的登录尝试来阻止暴力破解攻击。
单点登录
1. FortiWeb
FortiWeb 提供了定义自定义规则的功能,通过仅允许指定的 URL 来防止开放重定向漏洞。
-
创建自定义规则:要创建一个检测开放重定向并强制执行允许的 URL 白名单的自定义签名:
config waf custom-signature
edit "OpenRedirectProtection"
set action block
set signature "http.request.uri.path contains "/redirect" and not http.request.uri.query contains "allowed-url.com""
set severity high
next
end
-
白名单配置:确保应用程序仅允许重定向到指定的 URL:
config webapp firewall
edit "WebAppProtection"
set allow-http-redirect yes
set whitelist-url "https://allowed-url.com"
end
该配置将阻止任何不在白名单上的 URL 重定向尝试,同时记录这些事件。
2. F5 (BIG-IP)
F5 的 ASM(应用安全管理器)允许创建安全策略,可以有效管理开放重定向和 postMessage 攻击。
-
创建 ASM 策略:设置一个策略来检查有效的重定向 URL 并阻止恶意尝试:
tmsh create security policy <policy-name> rules <rule-name> {
match "http.request.uri.path" {
string "redirect"
operator "contains"
}
action block
}
PostMessage 验证:为防止 postMessage 配置错误,您可以创建一个 iRule 来限制消息仅发送到白名单域:
when HTTP_REQUEST {
if { [HTTP::header "Origin"] ne "https://allowed-url.com" } {
log local0. "Blocked postMessage from unauthorized origin"
HTTP::respond 403
}
}
这些配置对 URL 重定向和 postMessage 使用实施了严格的规则,确保只发生安全的交互。
3. AWS WAF
AWS WAF 允许创建 Web ACL 来有效管理流量,帮助防止开放重定向和 postMessage 攻击。
-
Web ACL 配置:创建一个包含开放重定向攻击规则的 Web ACL,仅允许白名单中的 URL:
aws wafv2 create-web-acl --name "OpenRedirectProtection"
--scope "REGIONAL" --default-action Allow
--rules file://open-redirect-rules.json --visibility-config SampleVisibilityConfig
示例 JSON 规则 (open-redirect-rules.json
):
{
"Name": "RedirectRule",
"Priority": 1,
"Statement": {
"ByteMatchStatement": {
"SearchString": "/redirect",
"FieldToMatch": { "UriPath": {} },
"TextTransformations": [{ "Priority": 0, "Type": "NONE" }],
"PositionalConstraint": "CONTAINS"
}
},
"Action": { "Block": {} },
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "RedirectRule"
}
}
该规则会阻止任何未经授权 URL 的重定向,同时记录监控到的尝试行为。
4. Azure WAF
Azure WAF 同样支持自定义规则来防御开放重定向和 postMessage 配置错误。
-
创建自定义规则:定义一个检查特定路径的规则来阻止任何未经授权的重定向:
az network application-gateway waf-policy rule create
--policy-name "WAFPolicy" --name "BlockOpenRedirect"
--rule-type "MatchRule" --match-variables "RequestUri"
--operator "Contains" --values "/redirect" --action Block --priority 1
-
URL 白名单:确保重定向只能访问特定的 URL:
az network application-gateway waf-policy set --policy-name "WAFPolicy" --whitelist-url "https://allowed-url.com"
此配置确保 Azure WAF 能够阻止未经授权的重定向并监控所有被阻止的尝试。
5. Cloudflare
Cloudflare 通过其防火墙规则提供对流量的精细控制,可以配置这些规则来阻止开放重定向和配置错误的 postMessage 交互。
-
创建防火墙规则:
curl -X POST "https://api.cloudflare.com/client/v4/zones/<zone_id>/firewall/rules"
-H "X-Auth-Email: <email>"
-H "X-Auth-Key: <api_key>"
-H "Content-Type: application/json"
--data '{
"action": "block",
"filter": {
"expression": "(http.request.uri.path contains "/redirect") and (not http.request.uri.path matches "^https://allowed-url.com")"
},
"description": "Block open redirect attacks"
}'
该规则会阻止任何不在白名单中的 URL 重定向,确保只处理安全的 URL。
6. OpenRASP
OpenRASP 直接集成到应用程序中,使其能够在运行时监控和防护开放重定向和 postMessage 配置错误。
-
用于开放重定向防护的 RASP 规则:
{
"name": "OpenRedirectProtection",
"description": "Block open redirect attempts",
"action": "block",
"condition": {
"type": "OPEN_REDIRECT",
"pattern": ["/redirect"],
"whitelist": ["https://allowed-url.com"]
}
}
-
配置:将此规则添加到 OpenRASP 配置中,以确保重定向仅发生在指定的 URL:
openrasp build --rules ./open-redirect-rules.json --output ./output.json
该规则会阻止未经授权的 URL 重定向尝试,主动防止潜在的攻击。
跨站脚本攻击
虚拟补丁是防御跨站脚本(XSS)和 DOM 篡改攻击的关键策略。通过在各种 Web 应用防火墙(WAF)和安全解决方案中实施虚拟补丁,组织可以在不更改应用程序代码的情况下有效地缓解漏洞。以下是在 FortiWeb、F5、AWS、Azure、Cloudflare 和 OpenRASP 中部署针对 XSS 和 DOM 篡改模式的虚拟补丁的示例。
1. FortiWeb
FortiWeb 通过自定义签名和安全策略提供了一个强大的平台来防御 XSS 攻击。以下是如何实施针对 XSS 和 DOM 篡改的虚拟补丁。
-
创建 XSS 防护的自定义签名:
config waf custom-signature
edit "Custom_XSS_Protection"
set action block
set signature "pattern-to-detect-xss"
set severity high
next
end
在安全策略中启用 XSS 防护:
config web-app
edit "my_web_app"
set xss-protection enable
set action block
set log enable
end
通过此配置,FortiWeb 将阻止包含潜在 XSS 攻击向量的请求,并记录所有尝试以供进一步分析。
2. F5 (BIG-IP)
F5 的高级 WAF 允许使用 iRules 和 ASM(应用程序安全管理器)策略实施虚拟补丁来防御 XSS 攻击。
-
用于阻止 XSS 攻击尝试的 iRule:
when HTTP_REQUEST {
set suspicious_user_agent [HTTP::header "User-Agent"]
if { $suspicious_user_agent contains "XSS" } {
log local0. "XSS attempt detected from [IP::client_addr]"
HTTP::respond 403
}
}
创建阻止 XSS 的 ASM 策略:
tmsh modify security policy <policy-name> waf-violations add { xss { action block } }
此配置将有效监控 XSS 攻击尝试并阻止它们,同时记录可疑活动。
3. AWS WAF
AWS WAF 允许您创建专门用于检测和阻止 XSS 模式的 Web ACL 规则。
-
创建具有 XSS 防护功能的 Web ACL:
aws wafv2 create-web-acl --name "XSSProtectionACL"
--scope "REGIONAL" --default-action Allow
--rules file://xss-rules.json --visibility-config SampleVisibilityConfig
阻止 XSS 的示例规则 (xss-rules.json
):
{
"Name": "XSSDefenseRule",
"Priority": 1,
"Statement": {
"ByteMatchStatement": {
"SearchString": "<script>",
"FieldToMatch": { "Body": {} },
"TextTransformations": [
{ "Priority": 0, "Type": "NONE" }
]
}
},
"Action": { "Block": {} },
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "XSSDefenseRule"
}
}
该规则将阻止任何包含 <script>
标签的请求,从而缓解 XSS 漏洞。
4. Azure WAF
Azure WAF 支持实现自定义规则来有效检测和缓解 XSS 攻击。
-
创建 XSS 自定义规则:
az network application-gateway waf-policy rule create
--policy-name "XSSWAFPolicy" --name "BlockXSS" --rule-type "MatchRule"
--match-variables "RequestBody" --operator "Contains" --values "<script>"
--action Block --priority 1
启用 XSS 攻击尝试的日志记录:
az network application-gateway waf-policy set --enabled true --log-config {cloudwatch=true}
这种方法确保 XSS 攻击尝试在 WAF 层面被阻止,并记录日志以供进一步调查。
5. Cloudflare
Cloudflare 允许您创建防火墙规则,通过过滤恶意输入来防止 XSS 和 DOM Clobbering 攻击。
-
Cloudflare XSS 防火墙规则:
curl -X POST "https://api.cloudflare.com/client/v4/zones/<zone_id>/firewall/rules"
-H "X-Auth-Email: <email>"
-H "X-Auth-Key: <api_key>"
-H "Content-Type: application/json"
--data '{
"action": "block",
"filter": {
"expression": "(http.request.body contains "<script>")"
},
"description": "Block XSS attacks"
}'
该规则确保阻止任何包含 <script>
标签的请求,从而防止 XSS 攻击利用。
6. OpenRASP
OpenRASP 通过将自身嵌入到应用程序中来提供运行时保护,以检测和防止 XSS 和 DOM Clobbering 攻击。
-
用于 XSS 防护的 RASP 规则:
{
"name": "XSS Protection",
"description": "Block XSS attempts",
"action": "block",
"condition": {
"type": "XSS",
"pattern": ["<script>", "javascript:"]
}
}
配置命令:
openrasp build --rules ./xss-rules.json --output ./output.json
此配置将使 OpenRASP 能够实时主动监控和阻止恶意的 XSS 攻击尝试。
原文始发于微信公众号(securitainment):WAF 虚拟补丁最佳实践
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论