漏洞被利用的时间窗口越来越小,防火墙规则的作用就是在补丁发布之前进行拦截。规则不是一次性写入的静态列表,要随着攻击特征、业务变化而不断调整。

规则来源有三种。公开漏洞情报提供的利用路径和特征串可以直接转换成匹配条件;访问日志中异常请求最接近实际情况,高频出现的探测路径、可疑参数以及扫描器标识都应该沉淀成规则;业务自身的历史攻击记录可以补充通用情报无法覆盖的定制化攻击。
匹配条件要落到具体的位置。查询参数中出现联合查询、延时函数、注释截断等组合,路径中出现多级向上跳转或编码绕过,请求头中出现命令拼接符号,这些都能在应用层规则中精确命中。网络层规则适用于来源维度的封禁,比如短时高频请求、恶意地址库命中、非常规端口探测,两层分工而不是互相替代。
规则顺序决定了执行的效果。放行比拦截要优先,白名单放在前面,防止管理后台、接口回调以及健康检查被错误地拦截。拦截规则按照危害程度由高到低进行排序,一旦命中就停止,减少后面的匹配成本。
变更可以回滚。新规则先以观察模式运行,记录命中样本,人工核对无误之后才切换为阻断;每条规则都标明来源和生效时间,设置到期复核,防止临时规则长期堆积。上线之后同步观察正常请求的错误率和响应时延,出现异常波动马上回退。
最后进行审计。防火墙日志和访问日志相关联保存,定期对每条规则进行命中量的统计,长期没有命中的规则应该被删除,规则库保持精简才可以保证可维护性。