什么WAF

Web应用防护墙(Web Application Firewall)简称WAF。是一种特定形式的应用程序防火墙,用于过滤、监控和阻断通过网页服务的HTTP流量。通过监察HTTP流量,它可以防止利用网页应用程序已知漏洞的攻击,例如SQL 注入、跨网站脚本(XSS)、文件包含和不正确的系统配置。

为什么需要WAF

因为HTTP是一个开放的协议,如果我们的产品要对外提供用户服务,那Web服务一般部署运行在公网上,任何人都可以访问,所以天然就会成为黑客的攻击目标。而黑客攻击方式包含但不局限于下面几种攻击手段:

  1. DDOS:黑客会控制许多“僵尸”计算机,向目标服务器发起大量无效请求,造成带宽、CPU、内存耗尽而无法提供正常服务
  2. SQL注入:利用了服务器字符串拼接形成 SQL 语句的漏洞,构造出非正常的 SQL 语句,获取数据库内部的敏感信息。
  3. HTTP 头注入:在http请求头中加入恶意数据和代码,如果服务端程序解析不当就会执行预设的恶意代码
  4. XSS:存储 / 反射型的XSS漏洞,很常见的一种漏洞会带来很严重的后果
  5. CSRF:跨站点的请求伪造,如果服务端没有做好甄别就会造成损失
  6. 零日攻击:黑客在软件开发人员发布补丁之前利用未知的安全漏洞或软件缺陷

WAF本身工作在网络分层模型中的第七层应用层,即面向具体的应用传输数据。能够帮助我们对请求的报文做深入细致的审核,使用一些列复杂的逻辑条件、检查规则来过滤数据,起到保护服务的作用。过程如下图所示:

WAF通常都具备下列的功能:

  1. IP 黑名单和白名单,拒绝黑名单上地址的访问,或者只允许白名单上的用户访问
  2. URI 黑名单和白名单,与 IP 黑白名单类似,允许或禁止对某些 URI 的访问
  3. 防护 DDoS 攻击,对特定的 IP 地址限连限速限流
  4. 过滤请求报文,防御“代码注入”攻击
  5. 过滤响应报文,防御敏感信息外泄
  6. 审计日志,记录所有检测到的入侵操作
  7. API发现和保护:提供对各种形式的API滥用和操纵的可见性、对策实施和风险缓解(无论是针对内部部署环境还是​​云托管环境)

WAF与防火墙的区别

WAF与防火墙的最主要的区别就是,”防火墙“一般工作在第三,第四层用于隔离外网和内网。使用预设的规则,只允许某些特定 IP 地址和端口号的数据包通过,拒绝不符合条件的数据流入或流出内网,实质上是一种网络数据过滤设备。
某种意义上WAF也是一种”防火墙“但他工作在第七层。这样不仅能看到IP地址和端口,也能看到完整的HTTP请求报文。所以可以针对报文的内容做出一些更细致 / 复杂的检查,来过滤数据进而起到保护服务器的作用。说白了,WAF 就是一种“HTTP 入侵检测和防御系统”。

WAF产品

ModSecurity这个产品在WAF领域内非常有影响力,并且是一个开源的,生产级别的WAF工具包。我们可以把他做为一个功能模块,集成到nginx中。更多更完整的信息可以这里查看:ModSecurity

总结

  1. web 服务部署在公网容易受到来自黑客的各种攻击,所以有必要使用WAF来加以保护
  2. WAF工作在第七层,是一种根据HTTP请求报文来检测入侵和防御的系统
  3. WAF实质上是解析HTTP的请求报文来进行各种模式匹配和数据过滤,所以会消耗一定的CPU,有一定的计算成本。需要我们再安全和性能之间找到一个”平衡点“

参考文档

网页应用程序防火墙 – 维基百科
What Is A WAF
ModSecurity