WAF简介
WAF,即Web Application Firewall(Web应用防火墙),是一种针对Web应用层恶意请求的访问控制措施,是立体防御体系的组成部分和一种辅助性防御手段。
目前WAF的产品形态主要有:
(1)硬件产品
硬件WAF串行或旁路部署在网络上,通过Web界面进行管理和规则配置,价格较高,但部署方便,运维管理比较省心。
(2)纯软件产品
软件WAF以ModSecurity、Naxsi等免费开源软件为代表,部署在每一台Web服务器上,需要网络安全人员熟悉其配置规则,但服务器数量多了之后,这种单机模式安装的软件,维护管理很快就会变得不太方便,因为不同的服务器可能使用不同的规则。
(3)云WAF产品
以各类云加速+CDN类产品为代表,如国外的CloudFlare、国内的各种云加速等,对用户隐藏真实服务器地址,云WAF作为反向代理执行安全控制,是用户浏览器和真实服务器之间的中间人。应该说,云WAF是一种比较可行的模式,在商业上已有较多成功案例。但对于流量比较大、服务器比较多的大中型企业、或者涉及商业秘密等场景,可能就不太合适了。
(4)自研WAF产品
如果上述几种WAF无法满足业务的需求,则需要考虑自己开发定制WAF了。
WAF实现方案
笔者所在的公司,流量巨大、服务器很多,前面几种方案都不太适用。最终,我们决定自己开发WAF,主要需求有:
(1) 能够通过服务器(云端)统一配置和下发策略;
(2) 能够自动上报拦截日志;
(3) 拦截黑客入侵行为,包括但不限于:SQL注入、跨站脚本、路径操纵、上传/利用网页木马、CC攻击等;
(4) 规则要少,允许漏报,但不能误报。
关于第4点,我们一开始就将WAF定位为辅助性防御设施,根本性的防御措施还是放在安全流程、安全规范的落地和推行上。
我们的服务器操作系统统一采用Linux,Web服务器统一采用Nginx,这就降低了开发的难度,不用适配其它各种操作系统和Web服务器版本。
上图是我们在借鉴业界多款WAF架构的基础上,在公司实施落地的WAF方案。
安全模块(WAF Agent)执行实际的拦截动作,它基于ngx_lua开发,执行访问控制,嵌入Web服务器Nginx当中,如果用户提交的URL或某一项参数匹配上拦截规则,则直接拦截并将拦截日志报告给WAF Center,不再传递给应用服务器。自动连续记录黑客攻击行为 + 改进完善:黑客在入侵尝试时一般会至少触发多条规则,只要触发一次,就连续记录其随后一段指定时间内的所有访问请求并报告给WAF Center,可供人工分析改进。
WAF Center即WAF的集中管理中心,主要功能有两点:
(1)规则库,设立规则库更新接口,用于防御规则更新;
(2)日志库,设立日志库,接收各WAF Agent上报过来的拦截日志以及可疑的访问日志。
WAF Center采用Web化界面进行管理,将入侵情况变得可视化起来:以前不知道黑客攻击的情况(因为没有数据),WAF上线后,已部署Agent的应用可直观看到攻击的情况;
可用性方面,WAF Center如果宕机,不影响安全模块继续按照之前获取的规则进行服务。
WAF的局限性
无论是哪一种WAF,它的定位就决定了只能是一款辅助性安全防御产品,无法从根本上解决产品自身存在的安全缺陷。考虑到安全与效率,WAF也不可能去拦截所有的入侵尝试,毕竟绕过WAF的奇技淫巧还是非常之多的。
根本性的防御措施还是需要放在安全开发流程、安全规范的落地和推行上面。
在众多的安全防御产品中,有的产品和方案需要花很多钱,但是收益却并不怎么明显。而WAF,笔者认为它性价比超高,虽然治标不治本,但对于提高攻击成本、降低入侵概率还是很有帮助的。