author: echo-x-echo
Web 应用程序防火墙(WAF)是位于 Web 应用程序和客户端端点之间的安全策略实施点。此功能可以在软件或硬件中实现,在专有设备中运行,或在运行通用操作系统的典型服务器中实现。它可以是独立设备或集成到其他网络组件中。
WAF会在HTTP流量抵达应用服务器之前检测可疑访问,同时它也能防止从Web应用获取某些未经授权的数据。
WAF 的工作原理:
- 使用一组规则来区分正常请求和恶意请求。
- 使用机器学习自主生成规则。
操作模式:
- 否定模型(基于黑名单) - 黑名单模型使用预设签名来阻止明显恶意的 Web 流量,以及旨在防止利用某些网站和 Web 应用程序漏洞进行攻击的签名。黑名单模型 Web 应用程序防火墙是公共 Internet 上的网站和 Web 应用程序的绝佳选择,并且对主要类型的 DDoS 攻击非常有效。例如。阻止所有<script>*</script>输入的规则。
- 正面模型(基于白名单) - 白名单模型仅允许根据特定配置标准的网络流量。例如,它可以配置为仅允许来自某些 IP 地址的 HTTP GET 请求。这种模型对于阻止可能的网络攻击非常有效,但白名单会阻止大量合法流量。白名单模型防火墙可能最适合内部网络上的 Web 应用程序,这些应用程序设计为仅供有限的一群人使用,例如员工。
- 混合/混合模型(包含模型) - 混合安全模型是一种混合了白名单和黑名单的模型。根据各种配置细节,混合防火墙可能是内部网络上的 Web 应用程序和公共 Internet 上的 Web 应用程序的最佳选择。
目前WAF的产品形态主要有:
- 硬件产品
硬件WAF串行或旁路部署在网络上,通过Web界面进行管理和规则配置,价格较高,但部署方便,运维管理比较省心。
- 纯软件产品
软件WAF以ModSecurity、Naxsi等免费开源软件为代表,部署在每一台Web服务器上,需要网络安全人员熟悉其配置规则,但服务器数量多了之后,这种单机模式安装的软件,维护管理很快就会变得不太方便,因为不同的服务器可能使用不同的规则。
- 云WAF产品
以各类云加速+CDN类产品为代表,如国外的CloudFlare、国内的各种云加速等,对用户隐藏真实服务器地址,云WAF作为反向代理执行安全控制,是用户浏览器和真实服务器之间的中间人。
- 自研WAF产品
如果上述几种WAF无法满足业务的需求,则需要考虑自己开发定制WAF了。
开源的WAF项目列表
1. ModSecurity
ModSecurity已经有10多年的历史,最开始是一个Apache的安全模块,后来发展成为开源的、跨平台的WEB应用防火墙。它可以通过检查WEB服务接收到的数据,以及发送出去的数据来对网站进行安全防护。
著名安全社区OWASP,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS),几乎覆盖了如SQL注入、XSS跨站脚本、DDOS等几十种常见WEB方法。
项目地址:https://github.com/SpiderLabs/ModSecurity
2. hihttps
hihttps是一款 高性能WEB应用 + MQTT物联网防火墙,兼容ModSecurity规则并开源。
特点是使用简单,就一个约10M的可执行文件,但防护功能一应俱全,包括:漏洞扫描、CC &DDOS、密码破解、SQL注入、XSS***等。
TA基于机器学习的商业版本,也是免费的,由机器自动采集样本无监督学习,自动生成对抗规则。
项目地址:https://github.com/qq4108863/
3. Naxsi
Naxsi 是一款基于Nginx模块的防火墙,有自己规则定义,崇尚低规则。项目由C语言编写。
项目地址:https://github.com/nbs-system/naxsi
使用介绍: https://cloud.tencent.com/developer/article/1644808
4. OpenWAF
基于 Nginx_lua API来分析HTTP请求信息,它由行为分析引擎和规则引擎两大功能引擎构成.其中规则引擎主要对单个请求进行分析,行为分析引擎主要负责跨请求信息追踪。规则引擎的启发来自modsecurity及freewaf(lua-resty-waf),将ModSecurity的规则机制用lua实现。
基于规则引擎可以进行协议规范,自动工具,SQL注入,跨站***,信息泄露,异常请求等安全防护,支持动态添加规则,及时修补漏洞。
缺点是复杂,不适合不熟悉Nginx和lua语言的开发者。
项目地址:https://github.com/titansec/OpenWAF
5. VeryNginx
基于 lua_Nginx_module(openrestry) 开发,实现了高级的防火墙、访问统计和其他的一些功能。集成在 Nginx 中运行,扩展了 Nginx 本身的功能,并提供了友好的 WEB 交互界面。
项目地址:https://github.com/alexazhou/VeryNginx/
6. ngx_waf
基于 lua-nginx-module 实现的一个高性能的轻量级 web 应用防火墙,使用简单,功能也不少, 诸如:
- SQL 注入防护(Powered By libinjection)。
- XSS 攻击防护(Powered By libinjection)。
- 支持 IPV4 和 IPV6。
- 支持开启验证码(CAPTCHA),支持 hCaptcha、reCAPTCHAv2 和 reCAPTCHAv3。此功能仅限最新的 Current 版本。
- 支持识别友好爬虫(如 BaiduSpider)并自动放行(基于 User-Agent 和 IP 的识别)。此功能仅限最新的 Current 版本。
- CC 防御,超出限制后自动拉黑对应 IP 一段时间。
- IP 黑白名单,同时支持类似
192.168.0.0/16
和fe80::/10
,即支持点分十进制和冒号十六进制表示法和网段划分。 - POST 黑名单。
- URL 黑白名单
- 查询字符串(Query String)黑名单。
- UserAgent 黑名单。
- Cookie 黑名单。
- Referer 黑白名单。
- 高级规则,将动作(如拦截或放行)和多个条件表达式组合起来。
项目地址: https://github.com/ADD-SP/ngx_waf/
中文文档: https://github.com/ADD-SP/ngx_waf/blob/master/README-ZH-CN.md
案例介绍: https://blog.hibobmaster.com/ngx_waf/
商业WAF产品
下图是从网络检索到的海外厂商提供的商业waf产品.
AWS WAF
项目介绍: https://aws.amazon.com/cn/waf/
AWS WAF是一种 Web 应用程序防火墙,可帮助保护您的 Web 应用程序或 API 免遭常见 Web 漏洞和机器人程序的攻击,这些漏洞可能会影响可用性、损害安全性或消耗过多的资源。AWS WAF 允许您创建控制机器人程序流量和防范常见攻击模式(例如 SQL 注入或跨站点脚本)的安全规则,从而让您可以控制流量到达您的应用程序的方式。您还可以自定义滤除特定流量模式的规则。您可以使用 AWS WAF 的托管规则快速入门,这是由 AWS 或 AWS Marketplace 卖家管理的一系列预先配置的规则,可用于解决 OWASP 10 大安全风险和消耗过多资源、扭曲指标或可能导致停机的自动机器人程序等问题。这些规则会随新问题的出现定期更新。AWS WAF 包含功能全面的 API,借此您可以让安全规则的创建、部署和维护实现自动化。
您可以将 AWS WAF 作为 CDN 解决方案的一部分部署到 Amazon CloudFront 上,也可以将其部署到位于 Web 服务器或来源服务器(运行于 EC2 上)之前的 Application Load Balancer、适用于您的 REST API 的 Amazon API Gateway 或者是适用于您的 GraphQL API 的 AWS AppSync 上。 AWS WAF 仅需按实际使用量付费,定价基于您部署的规则数量和您的应用程序收到的 Web 请求数量。
WAF自研方案
如果前面几种方案都不太适用, 可能就需要自己开发WAF。作为辅助性防御设施, 那就需要考虑以下几点:
- 能够通过服务器(云端)统一配置和下发策略;
- 能够自动上报拦截日志;
- 拦截黑客入侵行为,包括但不限于:SQL注入、跨站脚本、路径操纵、上传/利用网页木马、CC攻击等;
- 规则要少,允许漏报,但不能误报。
参考开源架构,能实现如下图的落地WAF方案
安全模块(WAF Agent)执行实际的拦截动作,它基于ngx_lua开发,执行访问控制,嵌入Web服务器Nginx当中,如果用户提交的URL或某一项参数匹配上拦截规则,则直接拦截并将拦截日志报告给WAF Center,不再传递给应用服务器。自动连续记录黑客攻击行为 + 改进完善:黑客在入侵尝试时一般会至少触发多条规则,只要触发一次,就连续记录其随后一段指定时间内的所有访问请求并报告给WAF Center,可供人工分析改进。
WAF Center即WAF的集中管理中心,主要功能有两点:
- 规则库,设立规则库更新接口,用于防御规则更新;
- 日志库,设立日志库,接收各WAF Agent上报过来的拦截日志以及可疑的访问日志。
WAF Center采用Web化界面进行管理,将入侵情况变得可视化起来:以前不知道黑客攻击的情况(因为没有数据),WAF上线后,已部署Agent的应用可直观看到攻击的情况;
可用性方面,WAF Center如果宕机,不影响安全模块继续按照之前获取的规则进行服务。
上面所列举的WAF应用都是单独部署在应用程序之外的, 也有一些与应用程序集成在一起的防护工具库,下面挑选了php语言
实现的几款:
- https://github.com/ZoaChou/WAFPHP
- https://github.com/riverside/php-waf
- https://github.com/NonupleBroken/AWD_PHP_WAF
- https://github.com/leohearts/awd-watchbird [带界面,功能多]
- https://github.com/DasSecurity-HatLab/AoiAWD [带界面,功能多]
-
https://shieldon.io/en [带界面,功能多, 持续更新, 推荐]
仓库地址: https://github.com/terrylinooo/shieldon
这些就是操作简单,便于集成到项目代码中
后记
无论是哪一种WAF,它的定位就决定了只能是一款辅助性安全防御产品,无法从根本上解决产品自身存在的安全缺陷。考虑到安全与效率,WAF也不可能去拦截所有的入侵尝试,毕竟绕过WAF的技巧还是非常之多的。
根本性的防御措施还是需要放在安全开发流程、安全规范的落地和推行上面。
参考文章:
https://docs.addesp.com/ngx_waf/zh-cn/guide/overview.html
https://zhuanlan.zhihu.com/p/20472864
https://aws.amazon.com/cn/waf/
https://cloud.tencent.com/developer/article/1401355
https://zhuanlan.zhihu.com/p/72897733
https://github.com/Bypass007/Safety-Project-Collection
https://github.com/0xInfection/Awesome-WAF