【WAF】web应用防火墙

本文将对 Web 应用防火墙(WAF)做一个简单介绍,主要会讨论下面几个主题:

  1. WAF 预防的攻击类型
  2. WAF 部署方式
  3. WAF 安全模式
  4. 开放 Web 应用安全项目(OWASP)
  5. WAF 和 DDos
  6. WAF 测试
  7. WAF 和传统防火墙的区别

Web 应用防火墙可以防止 Web 应用免受各种常见攻击,比如 SQL注入,跨站脚本漏洞(XSS)等。WAF 也能够监测并过滤掉某些可能让应用遭受DOS(拒绝服务)攻击的流量。WAF 会在 HTTP 流量抵达应用服务器之前检测可疑访问,同时,它们也能防止从Web应用获取某些未经授权的数据。

近年来,Web应用安全已经变得越来越重要,特别是在Verizon数据泄露调查报告中将Web应用攻击列为最常见的攻击之后,WAF已经变成Web安全最为关键的组件。

1. WAF 预防的攻击类型

开放 Web 应用安全项目(OWASP)所例举的攻击类型,都在WAF实施时考虑的范围内,其中几种比较常见的攻击类型如下:

1.1 跨站脚本漏洞(XSS)

攻击者通过往 Web 页面里插入恶意 Script 代码,当用户浏览该页面时,嵌入在 Web 页面里的 Script 代码会被执行,从而达到恶意攻击用户的目的。

XSS大概分为两类:

  • 反射型攻击。恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击。
  • 存储型攻击。恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性,比较常见的场景是在博客,论坛等社交网站上。

XSS 攻击能够:

  • 获取用户 Cookie,将用户 Cookie 发送回黑客服务器。
  • 获取用户的非公开数据,比如邮件、客户资料、联系人等。

1.2 SQL 注入

通过在目标数据库执行可疑 SQL 代码,以达到控制 Web 应用数据库服务器或者获取非法数据的目的。SQL 注入攻击可以用来未经授权访问用户的敏感数据,比如客户信息、个人数据、商业机密、知识产权等。

SQL 注入攻击是最古老,最流行,最危险的 Web 应用程序漏洞之一。比如查询?id=1,如果不对输入的 id 值 1 做检查,可以被注入?id=1 or 1=1从而得到所有数据。

SQL 注入的产生原因通常表现在以下几方面:

  • 不当的类型处理。
  • 不安全的数据库配置。
  • 不合理的查询集处理。
  • 不当的错误处理。
  • 转义字符处理不合适。
  • 多个提交处理不当。

Cookie 篡改是攻击者通过修改用户 Cookie 获得用户未授权信息,进而盗用身份的过程。攻击者可能使用此信息打开新账号或者获取用户已存在账号的访问权限。

很多 Web 应用都会使用 Cookie 保存用户的 Session 信息,当用户使用 Cookie 访问该应用时,Web 应用能够识别用户身份,监控用户行为并提供个性化的服务。而如果 Cookie 的使用缺乏安全机制的话,也很容易被人篡改和盗用,并被攻击者用来获取用户的隐私信息。

1.4 未经验证的输入

Web 应用往往会依据 HTTP 的输入来触发相应的执行逻辑。而攻击者则很容易对 HTTP 的任何部分做篡改,比如 URL 地址、URL 请求参数、HTTP 头、Cookies 等,以达到攻破 Web 应用安全策略的目的。

1.5 第七层 Dos 攻击

我们将在下文中详细介绍WAF针对第七层(应用层)的Dos攻击防护。

1.6 网页信息检索(Web scraping)

通过一些工具来获取网页内容,并从中提炼出有用的网站数据信息。

2 WAF 部署方式

WAF可以按照下面几种方式进行部署:

2.1 透明代理模式

WAF 代理了 WEB 客户端和服务器之间的会话,并对客户端和 server 端都透明。从 WEB 客户端的角度看,WEB 客户端仍然是直接访问服务器,感知不到 WAF 的存在。

这种部署模式的优点是对网络的改动最小,通过 WAF 的硬件 Bypass 功能在设备出现故障或者掉电时可以不影响原有网络流量,只是 WAF 自身功能失效。

缺点是网络的所有流量都经过 WAF,对 WAF 的处理性能要求高。采用该工作模式无法实现负载均衡功能。

2.2 反向代理模式

反向代理模式是指将真实服务器的地址映射到反向代理服务器上,此时代理服务器对外就表现为一个真实服务器。当代理服务器收到 HTTP 的请求报文后,将该请求转发给其对应的真实服务器。后台服务器接收到请求后将响应先发送给 WAF,由 WAF 再将应答发送给客户端。

这种部署模式需要对网络进行改动,配置相对复杂,除了要配置 WAF 自身的地址和路由外,还需要在 WAF 上配置后台真实 WEB 服务器的地址和虚地址的映射关系。

优点则是可以在 WAF 上实现负载均衡。

2.3 路由代理模式

它与网桥透明代理的唯一区别就是该代理工作在路由转发模式而非网桥模式,其它工作原理都一样。由于工作在路由(网关)模式因此需要为 WAF 的转发接口配置 IP 地址以及路由。

这种部署模式需要对网络进行简单改动,要设置该设备内网口和外网口的IP地址以及对应的路由。工作在路由代理模式时,可以直接作为WEB服务器的网关,但是存在单点故障问题,同时也要负责转发所有的流量。该种工作模式也不支持服务器负载均衡功能。

3 WAF 安全模式

WAF 可以采用白名单和黑名单两种安全模式,也可以两者相结合。

在白名单安全模式下,所有不在名单中的请求类型都会被拒绝;而黑名单正好相反,只会拒绝在黑名单上的请求类型,其它通通放行。

对于新的、还不为开发人员所知晓的攻击类型,白名单可以很好地工作。

黑名单相对来说更容易实现,但问题是维护成本高,因为很多时候我们并不能够枚举所有的攻击类型。

4 WAF 和 DDos

DDos 的全称是 Distributed Denial of service。主要依靠一组计算机来发起对一个单一的目标系统的请求,从而造成目标系统资源耗尽而拒绝正常的请求。

根据 OSI 的 7 层网络模型,网络可以从上到下分为:

  • 第七层:应用层,SMTP,HTTP,DNS等各种协议。
  • 第六层:表示层,信息的语法语义以及他们的关联,如加密解密,压缩解压缩。
  • 第五层:会话层,建立和维持连接,。
  • 第四层:传输层,TCP,UDP。
  • 第三层:网络层,IP和路由。
  • 第二层:数据链路层,MAC地址。
  • 第一层:物理层,基于光纤的信号。

数据的发送是从第七层发起,逐层往下传输,并最终回到第七层的。

根据 OSI 网络模型,最常见的 DDos 有三类:第三层(网络层)DDos、第四层(传输层)DDos和第七层(应用层)DDos。

  • 第三层DDOs,基于IP的攻击。IP数据包在网络传递时,数据包可以分成更小的片段。到达目的地后再进行合并重装。在实现分段重新组装的进程中存在漏洞,缺乏必要的检查。利用IP报文分片后重组的重叠现象攻击服务器,进而引起服务器内核崩溃。
  • 第四层DDos,基于TCP的攻击。SYN Flood攻击的过程在TCP协议中被称为三次握手(Three-way Handshake),而SYN Flood拒绝服务攻击就是通过三次握手而实现的。TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接。服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。
  • 第七层DDos,基于应用层的攻击。基于应用层的DDos攻击会更复杂,处理起来更棘手。这类攻击往往会模仿用户和Web应用之间的交互行为,增加判断的难度。

WAF 主要处理第七层DDos攻击,它在处理第七层DDos攻击时会比其它防护手段更高效一些。WAF会对HTTP流量做详细的分析,这样WAF就能针对正常的访问请求进行建模,然后使用这些模型来区分正常的请求和攻击者使用机器人或者脚本触发的请求。

6 WAF 测试

针对WAF实施的测试需要一个严格的流程。我们需要知道WAF能够有效防止哪些真实的攻击,漏掉了哪些真实的攻击。同时,我们还需要知道哪些有效的访问也被拦截了。

在针对部署了WAF的Web应用做测试时,最好使用WAF测试框架,并根据下面的步骤来测试:

  1. 测试在没有部署WAF情况下web应用的表现。
  2. 看看在WAF启用默认配置的情况下,攻击能否成功。
  3. 修改WAF的配置,看一下能否拦截上面的攻击。

WAF测试工具不但需要能够触发各种攻击,而且能够产生合法的请求,这样才能检测WAF在预防攻击的情况下能够让合法请求顺利通行。

7 WAF 和传统防火墙的区别

传统防火墙主要用来保护服务器之间传输的信息,而WAF则主要针对Web应用程序。网络防火墙和WAF工作在OSI7层网络模型的不同层,相互之间互补,往往能搭配使用。

网络防火墙工作在网络层和传输层,它们没有办法理解HTTP数据内容,而这个正式WAF所擅长的。网络防火墙一般只能决定用来响应HTTP请求的服务器端口是开还是关,没办法实施更高级的、和数据内容相关的安全防护。

总结

WAF 是 Web 应用不可缺少的基础安全组件之一,能帮助我们预防一些常见的攻击手段。

所有的云服务厂商都提供了基于云服务的 WAF,在云服务商的管理后台点击几下就能完成WAF的接入和使用,极大地降低了 WAF 的使用门槛。

我们很难有理由在使用这些云服务时拒绝使用 WAF 服务。


【WAF】web应用防火墙
https://flepeng.github.io/081-security-【WAF】web应用防火墙/
作者
Lepeng
发布于
2021年3月8日
许可协议