一、前言
当我们面对定点渗透测试,重大活动保障时的挑战和平时是不一样的,要求更高的安全防护等级。渗透测试攻击方往往是一个团队,从踩点信息收集到漏洞利用整个过程都对业务系统具有高度针对性,投入的时间和资源往往是普通攻击者和自动攻击工具的数倍。重大活动保障期间公众对业务站点关注度往往也是平时的几倍甚至几十倍,任何成功的入侵事件都有可能造成严重的影响,例如将站点热点内容改成涉政涉恐、反动、色情等信息,或盗取客户和商业数据,不仅对业务所属机构造成反面影响,甚至管理者会被追究刑事责任。
本文档主要是针对此类场景,通过对阿里云Web应用防火墙在过去参与过的众多重点活动保障总结,形成的一个具有实操价值的手册,希望对大家有所帮助。需要注意的是WAF只是整个防护体系中非常重要和有效的一环,并不能完全抵御住攻击者的所有攻击方式,如物理攻击、邮件欺诈、暴力破解远程登录等。
二、WAF接入
本文主要介绍安全策略相关的配置,WAF的基础接入不做详细介绍,参考官方帮助文档即可:
https://help.aliyun.com/document_detail/45251.html三、防护策略最佳实践
(一)策略配置和优化流程
安全策略优化流程
说明:
域名接入WAF后的默认策略防护并非是最严格的状态,而是在防护效果和误拦截之间取的一个良好的平衡,我们这里根据上面的流程图将策略在没有误拦截的情况下调整到最严格,达到较好的防护状态。
- 域名接入WAF
- 在各个防护功能预警模式下将策略调整到最严格
- 观察是否出现误拦截,如果是则需进行策略优化,直到没有误拦截
- 切换到拦截模式进行防护
(二)观察模式下的严格策略推荐配置
1.Web应用攻击防护
- 状态:开启
- 模式:预警
- 防护规则策略:严格规则
说明:Web应用防火墙默认将规则按照严格程度高低,分成3个规则集,分别是严格、正常、宽松,对应不同的防护能力和误报水平,推荐默认使用严格模式,观察误报情况,如果出现误报使用自定义规则组将导致误报的规则排除掉即可。
2.CC安全防护
- 模式:正常
- 自定义规则:开启
CC防护最佳实践:
- 对于重要的接口,可以配置合理的IP限速策略并配合拦截动作:
- 对于重要的静态页面,可以设置较低的单IP访问阈值并配合人机识别防护,因人机识别即使触发后也不会直接拦截,使用正常浏览器的用户依然能够正常访问;
- 请注意完全匹配和前缀匹配的区别:如实际的防护接口为/index.php?action=login,则配置完全匹配“/index.php?action=login”或者前缀匹配“/index.php”都可以匹配到;
- 不要对API、APP业务选择紧急模式,会产生大量误杀。普通网页(包括H5)在攻击量很大拦截效果不佳的情况下可以尝试开启紧急模式;
- 重点的IP(如公司出口)和接口(如支付回调接口)等为了避免误伤,建议在上线之初在精准访问控制中进行加白,选择放行且后续不继续执行CC防护:
3.大数据深度学习引擎
4.精准访问控制
- 说明:规则根据实际需要配置,例如对站点后台做访问控制只允许特定IP访问,添加IP黑名单来封禁恶意IP等。
5.封禁地区
- 说明:根据实际需要配置,例如只对境内用户提供服务可以对海外的IP进行封禁,实际场景中的攻击IP往往是来自海外。
6.高频Web攻击IP自动封禁
-
策略建议值:60秒内Web攻击超过3次,封禁IP 1800秒
说明:防护自动化工具攻击,通过定义攻击的频次来识别自动化攻击事件,阻断来源IP。
7.目录扫描防护
- 策略建议值:默认
8.扫描威胁情报
- 扫描工具封禁:开启
-
协同防御:开启
说明:内置阿里云全球攻击IP情报库,拦截攻击过其它用户的IP地址。
9.主动防御
- 说明:开启后WAF会开始学习该域名的一段时间(取决于流量大小)历史流量,生成一套针对域名合法流量基线的定制白名单规则,可以做到只放行合法的请求。
(三)误拦截和策略优化
1.命中正则规则误拦截处理
说明:此类正则规则引发的误拦截可以通过安全报表中的规则ID使用自定义规则组将导致误报的规则去掉即可。
2.命中深度学习模型导致的误拦截处理
说明:大数据深度学习导致误拦截概率较小,一般不会有误拦截的情况,如果有遇到欢迎及时向我们反馈。
3.命中主动防御导致的误拦截处理
说明:主动防御使用流量白基线,因此当部分流量没有被模型学习到时需要手动定义合法流量规则。
主动防御的防护逻辑
(四)开启拦截
注意:确保在观察模式下策略优化之后无误拦截后再将以下功能模块切换到防护模式
a)模式切换到“防护”状态
2.大数据深度学习引擎
3.主动防御
4.重保过程中的运营技巧:通过API调用WAF功能快速处置
每个Web应用防火墙的功能都有对应的API提供批量化或者快速操作。
Web应用防火墙的API帮助文档见:
https://help.aliyun.com/document_detail/86349.htmlAPI在线调试见:
https://api.aliyun.com/#/?product=waf-openapi#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
client = AcsClient('这里填AccessKey', '这里填SecretKey, 'default')
import json
import sys
import re
def get_waf_instance():#获取账号下WAF的实例名称
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('wafopenapi.cn-hangzhou.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https') # https | http
request.set_version('2018-01-17')
request.set_action_name('DescribePayInfo')
response = client.do_action(request)
# python2: print(response)
# print(response)
aa = json.loads(response)
return aa['Result']['InstanceId']
def add_aclrule(waf_instance, rules, domian):#添加ACL实现
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('wafopenapi.cn-hangzhou.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https') # https | http
request.set_version('2018-01-17')
request.set_action_name('CreateAclRule')
request.add_query_param('Rules', rules)
request.add_query_param('Domain', domian)
request.add_query_param('InstanceId', waf_instance)
request.add_query_param('Region', "cn-hongkong") # 海外域名,国内域名请注释掉该行
response = client.do_action(request)
# python2: print(response)
# print(response)
if __name__ == '__main__':#从IP文件列表(一行一个IP)读取IP,每条ACL添加50个IP/IP段
try :
domain = sys.argv[1]
ipfile = sys.argv[2]
waf_instance = get_waf_instance()
iplist = open(ipfile,'r')
ip_string = iplist.read()
ip_list = ip_string.split(',')
l = [i for i in range(len(ip_list))]
n = 50 # 按照每条ACL添加50个IP对文件内容切分
a = [l[i:i + n] for i in range(0, len(l), n)]
for x in a:
dd = ip_list[x[0]:x[-1]+1]
tmp = ','.join(dd)
rules = '''{
"conditions": [
{
"key": "IP",
"contain": 1,
"value": "''' + tmp +'''"
}
],
"continueComponent": {
"post_action_cc": 1,
"post_action_waf": 1,
"post_action_sa": 1,
"post_action_block_geo": "0",
"post_action_data_risk_control": "1"
},
"action": "0",
"name": "block_'''+ dd[0] + '''"
}'''
add_aclrule(waf_instance, rules, domain)
print tmp + ' add succes'
except Exception,e:
print "Usage: waf_options.py domain ipfile.txt"
脚本中用到的库安装:
https://help.aliyun.com/document_detail/53090.htmle)附加:推荐配置对照表
功能名称 | 是否开启 | 建议策略 |
---|---|---|
Web应用攻击防护 | 是 | 严格规则 |
CC安全防护 | 正常策略,自定义规则根据需求配置 | |
大数据深度学习引擎 | ||
精准访问控制 | 访问控制规则根据需求配置 | |
封禁地区 | 封禁业务提供服务以外的区域 | |
网站防篡改 | 否 | |
数据风控 | ||
防敏感信息泄露 | ||
高频Web攻击自动封禁 | 60秒内Web攻击超过3次,封禁IP 1800秒 | |
目录扫描防护 | 10秒内请求总次数超过50次且404状态码比例大余70%封禁1800秒 | |
扫描威胁情报 | ||
主动防御 |