1.
准备工作与测试环境搭建
步骤:1) 在阿里云控制台打开WAF服务并确保目标域名已接入(CNAME/托管规则已生效)。
2) 在非生产环境(测试域名或子域)进行实验,避免误伤线上业务;准备一个备份的应用镜像和日志采集(SLS/OSS)配置。
3) 本地准备sqlmap(最新版),并准备一个测试账户与测试数据。
2.
开启观察模式并收集基线日志
步骤:1) 在WAF控制台将策略先置为“观察/检测”而非直接拦截以免误封。
2) 启用详尽日志(攻击类型、规则ID、原始请求、Client IP、UA、参数)并导出到SLS或本地保存。
3) 使用sqlmap对测试域发起扫描(示例:sqlmap -u "https://test.example.com/vuln.php?id=1" --batch --random-agent --threads=5),记录命中条目。
3.
分析日志,提取常见sqlmap特征
步骤:1) 在WAF日志中筛选短时间内大量包含SQL注入关键词(union select, ' OR '1'='1, information_schema等)的请求样本。
2) 注意sqlmap常用UA(例如包含"sqlmap")和常见payload模式,但不要只依赖UA。
3) 汇总触发规则的URI、参数名、IP、时间分布,用以制作规则条件。
4.
编写并下发自定义阻断规则(优先级设置)
步骤:1) 在WAF控制台进入“防护策略->自定义规则->新建规则”。
2) 以组合条件为主:例如 (请求方法=GET或POST) && (参数或Body匹配正则) && (短时间内同IP重复请求次数>阈值)。
3) 示例正则(慎用,需测试):(?i)(union.*select|select.*from|information_schema|sleep\(|benchmark\(|'or'|\"or\"\\s*\\d*=\\d*)。设置规则为“拦截”或“验证码挑战”,并设定较高优先级。
5.
使用速率限制与行为特征识别降低漏报
步骤:1) 针对扫描行为启用访问频率控制(同一IP/UA在1分钟内请求数阈值),超过阈值先进行验证码挑战,再直接拦截。
2) 开启WAF的bot管理或基于会话的防护(如果可用),通过会话粘性、Referer、Cookie等综合判断是否为爬虫。
3) 对频繁扫描的IP加入短期黑名单并观察效果。
6.
误报排查与白名单策略
步骤:1) 误报发生时,先在日志中导出被误杀的请求全量样本(包括业务正常请求)。
2) 找到误报特征:例如合法搜索关键词误触正则、复杂JSON body被误判。针对性调整:收窄正则、增加参数名限定(只针对某些参数名如 id, query),或对特定URI添加例外规则。
3) 使用基于Cookie或JWT的白名单:对登录后可信会话放宽检测,避免阻断真实用户。
7.
实战测试与回归:用sqlmap多场景验证
步骤:1) 按场景测试:默认UA、--random-agent、--tor、--tamper脚本等多种组合,验证规则是否可靠。示例命令:sqlmap -u "https://test.example.com/vuln.php?id=1" --batch --level=5 --risk=3 --threads=10 --tamper=space2comment。
2) 每次测试后查看WAF日志,记录未拦截的payload并据此优化规则。
3) 对规则做A/B测试:在小流量域名先下发,再全量下发。
8.
自动化与运维建议
步骤:1) 将WAF日志定期导出至SLS并建立报警(如同一IP在10分钟内触发N次sql注入类规则则告警)。
2) 建立误报回收流程:开发/运维可在工单系统提交误报样本,安全团队在WAF中下发例外或更精确规则并记录版本。
3) 定期更新规则库与正则,关注sqlmap新特征并在测试域验证后下发。
9.
问:如何在不影响用户体验的情况下严格拦截sqlmap扫描?
10.
答:合理采用观察模式、验证码挑战和分级拦截。
做法:先在观察模式收集样本;对疑似扫描首先下发验证码或JS挑战,确认后再步进为拦截;结合速率限制和行为特征而不是单纯依赖正则,从而减少对真实用户的误伤。
11.
问:sqlmap使用tamper和随机UA后如何有效检测?
12.
答:靠组合行为特征与会话分析,而非仅凭UA或单一payload。
做法:关注短时高频请求模式、异常参数变换序列、异常Referer/缺失Cookie,以及多参数同时出现注入痕迹;并基于这些组合条件创建自定义规则,配合速率控制和挑战机制提高命中率。
13.
问:出现大量误报时如何快速定位并修复?
14.
答:导出误报样本、回溯触发规则并收紧匹配条件。
做法:导出被误封的请求原文,确定是哪些规则触发,优先调整优先级或加入参数/URI白名单;对正则使用参数名限定或负向断言来减少合法请求误触,同时保持日志记录以便回归验证。
来源:实战演练阿里云waf sqlmap配置规则增强与误报优化技巧