本文首发于作者的微信公众号:网络安全生命周期
原文链接: 打造一款开源的WAF网关
【背景】
在互联网行业,Google将安全做到基础设施里面,素来是各大公司学习的榜样,在Web方面,通过GFE (Google Front-End) 统一对外发布,业务只需要在GFE登记,GFE就会调取正确的证书,保障用户到GFE的TLS连接安全。
Microsoft在Web方面,有一款叫做Azure Application Gateway的产品,提供了统一的Web路由、负载均衡,以及WAF(Web应用防火墙)功能。
遗憾的是,这几款产品均不能用于私有化部署,Google Front-End 和 Azure Application Gateway只服务于他们自身业务以及他们自己的云客户。想要使用他们的产品,得使用他们的云服务,不然就只能望洋兴叹了。
【对标与产品方案设计】
鉴于此,笔者希望借鉴GFE和Azure应用网关,打造一款这样的应用安全基础设施级产品,用于自己个人网站的防御,这款产品需要具备:
1.统一的网络入口,可以有多个节点,配合负载均衡进行调度,即应用网关(Application Gateway);
2.WAF (Web应用防火墙) 功能,可拦截常见的Web入侵行为(如SQL注入/命令注入/XSS/Webshell上传或连接)、数据泄露事件等;
上图中红色的叉叉部分表示拦截恶意攻击行为。
3.可应对CC攻击及简单的刷单场景,达到设定阈值时能够拦截或展示验证码。
【特色】
当然,上面这些是基本的功能。笔者还希望这是一款有特点、差异化的产品:
1.不要安装Agent
Agent维护起来比较麻烦,用浏览器配置可以更简单,比如配置应用:
2.支持HTTPS
还要能够把证书管理起来,把私钥保护起来,不再将证书文件、私钥文件直接明文的存放在服务器某个目录下(防止黑客偷走私钥);只让网关管理人员申请和配置证书,业务人员不用接触证书文件就可以启用HTTPS。
3.联动
很多WAF的一条策略只能检查一个地方(如GET或POST参数值),如果请求需要结合响应共同来判定 (或多个组合条件),就做不到了,这一点一定要突破,做到多个检查点可组合,特别是请求(Request)和响应(Response)能够关联(组合)起来。
4.非法域名拦截
曾经有人用fuck_your_domain.com 这样的域名指向your_domain.com 网站,如果服务器配置不当,有可能会正常响应请求,给公司带来公关风险。所以,当非法域名指向过来的时候,应该拒绝响应。
5.证书质量
不是所有的HTTPS都是安全的,错误配置、算法的选用均有可能踩坑,如SSL 1.0, SSL 2.0, SSL 3.0以及TLS 1.0 均已出现漏洞。典型的,如果您的业务涉及到资金支付,PCI-DSS认证会对证书质量有特别的要求,如必须使用TLS 1.1或以上的协议版本、必须使用前向安全算法(Forward Security)用于保障安全的密钥交换等。因此,网关默认就需要启用安全保障。
【开源】
是的,笔者较早前利用周末陪孩子上课的时间,构建了这样一个只有基本功能的版本(Janusec Application Gateway),并用在个人网站上。现在跟大家分享一下:
https://github.com/Janusec/janusec
这是一款基于Golang打造的应用安全网关,具备WAF(Web应用防火墙)功能及组合策略配置,天然支持HTTPS(符合PCI-DSS认证要求),无需Agent,私钥加密存储在数据库,提供负载均衡和统一的Web化管理入口。
还在继续完善过程中,欢迎star、fork、pull request、提交issue,或下载release体验,共同提升应用安全防御能力。
【备注】
该产品并不能解决所有的安全问题,不能替代抗DDoS攻击产品,也不能替代HIDS产品,更不能代替日常的安全运营工作。但当你打算从零开始构建立体的安全防御体系(特别是应用安全防御体系)的时候,能够在关键的路径上,切断典型的入侵尝试,挡住大部分探测payload,大幅提高入侵难度,同时从一开始就能够利用此作为网关基础设施推广使用HTTPS,保护外网数据传输安全。
欢迎关注微信公众号: 网络安全生命周期 ,共同探讨网络安全体系建设~