WAF
2022-04-03 20:52:45 阿炯

WAF是Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。国际上公认的说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

当Web应用越来越为丰富的同时,Web服务器以其强大的计算能力、处理性能及蕴含的较高价值逐渐成为主要攻击目标。SQL注入、网页篡改、网页挂马等安全事件,频繁发生。企业等用户一般采用防火墙作为安全保障体系的第一道防线。但是在现实中,Web服务器和应用存在各种各样的安全问题,并随着黑客技术的进步也变得更加难以预防,因为这些问题是普通防火墙难以检测和阻断的,由此产生了WAF(Web应用防护系统)。Web应用防护系统(Web Application Firewall, 简称:WAF)代表了一类新兴的信息安全技术,用以解决诸如防火墙一类传统设备束手无策的Web应用安全问题。与传统防火墙不同,WAF工作在应用层,因此对Web应用防护具有先天的技术优势。基于对Web应用业务和逻辑的深刻理解,WAF对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,从而对各类网站站点进行有效防护。


将对Web应用防火墙(WAF)做一个简单介绍,主要讨论下面几个主题:
预防的攻击类型
部署方式
安全模式
开放Web应用安全项目(OWASP)
WAF和DDos
WAF和传统防火墙的区别

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

Web应用安全已经变得越来越重要,特别是在Verizon数据泄露调查报告中将Web应用攻击列为最常见的攻击之后,WAF已经变成Web安全最为关键的组件。Waf的某些功能是通过负载均衡来实现的,关于负载均衡的介绍,请参考笔者的另外一篇文章负载均衡简介 。

根据不同的分类方法,WAF可分为许多种。从产品形态上来划分,WAF主要分为以下三大类:

硬件设备类
目前安全市场上,大多数的WAF都属于此类。它们以一个独立的硬件设备的形态存在,支持以多种方式(如透明桥接模式、旁路模式、反向代理等)部署到网络中为后端的Web应用提供安全防护。相对于软件产品类的WAF,这类产品的优点是性能好、功能全面、支持多种模式部署等,但它的价格通常比较贵。国内的绿盟、安恒、启明星辰等厂商生产的WAF都属于此类。

软件产品类
这种类型的WAF采用纯软件的方式实现,特点是安装简单,容易使用,成本低。但它的缺点也是显而易见的,因为它必须安装在Web应用服务器上,除了性能受到限制外,还可能会存在兼容性、安全等问题。这类WAF的代表有ModSecurity、Naxsi、网站安全狗等。

基于云的WAF
随着云计算技术的快速发展,使得其于云的WAF实现成为可能。国内创新工场旗下的安全宝、360的网站宝是这类WAF的典型代表。它的优点是快速部署、零维护、成本低。对于中、小型的企业和个人站长是很有吸引力的。

AF作为一种安全产品为Web应用提供安全防护,可以增大攻击者的攻击难度和攻击成本,这一点是不容至疑的。但是,WAF并不是万能的,世界上没有任何一款安全产品可以提供100%的安全防护。由于产品的设计或实现原理,及其他问题都有可能导致攻击者可以成功绕过WAF的防护,来达到攻击后端Web应用的目的。除了WAF自身的安全性以外,现在讨论最多的就是WAF的绕过技术。在介绍WAF绕过技术之前,我们必须要要搞明白一个问题,那就是WAF为什么会存在被绕过的风险?这是因为WAF对数据包的解析和Web服务器对数据包的解析两者之间存在差异,所以存在被绕过的可能。下面列出了一些在SQL注入过程中主流的WAF绕过技术:
1).转换特征字符大小写
2).利用注释绕过
3).编码特征字符绕过
4).分隔重写特征字符绕过
5).利用截断字符绕过
6).变换变量位置绕过
7).针对域名保护的绕近
8).超大数据包绕过
9).转换数据提交方式绕过
10).HPP(HTTP参数污染)绕过



1、预防的攻击类型

开放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注入的产生原因通常表现在以下几方面:
不当的类型处理。
不安全的数据库配置。
不合理的查询集处理。
不当的错误处理。
转义字符处理不合适。
多个提交处理不当。

1.3 Cookie篡改
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可以按照下面几种方式进行部署:

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可以采用白名单和黑名单两种安全模式,也可以两者相结合。

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

对于新的、还不为开发人员所知晓的攻击类型,白名单可以很好地工作。黑名单相对来说更容易实现,但问题是维护成本高,因为很多时候我们并不能够枚举所有的攻击类型。

4、开放Web应用安全项目(OWASP)

OWASP是一个开源的、非盈利的全球性安全组织,致力于Web应用的安全研究。其使命是使Web应用更加安全,使企业和组织能够对安全风险作出更清晰的决策。OWASP曾经例举了10大常见攻击手段:

1)注入
攻击者把包含一段指令的数据发给应用,应用会当做指令执行。比如上面提到的SQL注入。

2)失效的身份认证和会话管理
应用程序没有能够提供正确的身份认证和会话管理功能,导致攻击者可以冒充他人身份。

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

4)不安全的对象直接引用
一个已经授权的用户通过更改访问时的一个参数,从而访问到原本其并没有得到授权的对象。比如修改URI里的购物车id参数访问他人的购物车。

5)伪造跨站请求(CSRF)
攻击者盗用了用户的身份,以合法用户的名义发送恶意请求。对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以用户的名义发送邮件、发消息。

假设站点A为存在CSRF漏洞的网站,站点B为攻击者构建的恶意网站,CSRF攻击示例如下:


用户打开浏览器,访问站点A,输入用户名和密码登录A。
登录成功后,站点A产生Cookie信息并返回给浏览器。
与此同时,用户在同一浏览器中,打开一个TAB页访问站点B。
站点B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问站点A。
浏览器在接收到这些攻击性代码后,根据站点B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。站点A并不知道该请求其实是由B发起的,所以会根据用户的Cookie信息处理该请求,导致来自站点B的恶意代码被执行。

检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。

6)安全配置问题
Web应用所在的服务器、平台、数据库、各种管理工具的配置或者账密泄露,导致相应设施暴露出安全风险。比如:代码中存在账密信息,被反编译泄露。服务器上的目录列表未被禁用,导致攻击者可以找到服务器上的任何文件并下载。

7)限制URL访问失败
系统虽然明明对url的访问做了权限限制,但这种限制并没有生效。比如系统没有对用户的角色做检查,用户通过修改url能访问到其他用户或者管理员账户才能访问的url。

8)未验证的重定向和转发
先说下重定向和转发的区别。

重定向(Redirect)。浏览器向服务器发送请求,服务器响应状态码302和新的location,浏览器发现状态码是302,会再向location发起一次http请求。所以浏览器发起了两次http请求,而且地址栏最后看到的也是新的location对应的url。
转发(forward)。浏览器向服务器发送请求,服务器在内部完成转发路径的资源请求,并将请求结果返回给浏览器。浏览器只发起了一次http请求,而且地址栏看到的url地址没有改变。

对于重定向和转发来说,目的url请求中一般会带有参数,如果这些url参数未做验证,那么就很容易被攻击者利用。

9)使用已经被发现存在漏洞的组件
Web应用使用带有已知漏洞的组件,比如库文件、框架或者其它软件模块,可能会导致严重的安全问题。比如数据泄露、服务器被黑客接管等。

10)敏感信息暴露
用户敏感信息比如信用卡号、手机号、身份证号等数据,一旦被攻击者窃取或者篡改,会造成非常严重的后果。敏感数据需要特殊的保护,比如存储和传输过程中加密,以及在和浏览器进行交互时进行特殊的预防措施。

WAF以OWASP提出的各种安全隐患作为具体实施时需要考虑的准则。上面提到的这些安全问题,都在WAF的防范范围之内。

5、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测试框架,并根据下面的步骤来测试:
测试在没有部署WAF情况下web应用的表现。
看看在WAF启用默认配置的情况下,攻击能否成功。
修改WAF的配置,看一下能否拦截上面的攻击。

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

7、WAF和传统防火墙的区别

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

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

总结

WAF是Web应用不可缺少的基础安全组件之一,能帮助预防一些常见的攻击手段。所有的云服务厂商都提供了基于云服务的WAF,在云服务商的管理后台点击几下就能完成WAF的接入和使用,极大地降低了WAF的使用门槛。