20 | WAF:如何为漏洞百出的Web应用保驾护航?
你好,我是何为舟。 如果你细心观察的话,应该会发现,随着 Web应用越来越多,黑客的攻击目标也逐渐转向了针对 Web安全的攻击。传统的防火墙主要专注于网络层的攻击防御,对 Web安全的防御能力相对欠缺。因此,WAF(Web Application Firewall,Web应用防护系统)的概念也就被提了出来。WAF说白了就是应用网关防火墙的一种,它只专注于 Web安全的防御,近几年来逐渐被当成一个相对独立的产品方向来研究。 那么,WAF 和防火墙到底有哪些区别呢?针对我们之前讲过的各种 Web攻击手段,WAF是如何提供保护的呢?今天,我们就一起来看!
WAF 的工作模式
前面我说过,WAF 的本质是"专注于 Web 安全的防火墙",Web安全关注于应用层的 HTTP 请求。因此,WAF的分析和策略都工作于应用层。 在 Web 安全这个方向上,WAF 对比防火墙又做出了哪些改进呢?我们可以从WAF的三种工作模式入手,探讨这两者的区别。这三种工作模式分别是:透明代理、反向代理和插件模式。 透明代理和大部分防火墙的工作模式相同:在客户端和服务端通信不需要作出任何改变的情况下,对 HTTP流量进行请求和转发。在这个过程中,为了解密 HTTPS 流量,WAF必须和服务端同步 HTTPS对称密钥。
透明代理的优点就是容易部署,它不需要客户端和服务端进行任何改动。但是,透明代理的缺点也有很多。透明代理本身不是一个Web 服务,所以它无法修改或者响应 HTTP的请求,只能够控制请求的通过或者拒绝。正因为如此,它也无法实现 Web服务所提供的认证、内容过滤等功能。 区别于透明代理,反向代理要求客户端将请求的目标地址指向WAF,而不是服务端。在反向代理工作模式中,服务端接收的请求,实际上也是由 WAF发起的。在这个过程中,WAF 本身就相当于一个 Web 服务,只不过对所有的 HTTP请求都进行了转发。
因为反向代理 WAF本质上是一个 Web 服务,所以 HTTPS 证书可以直接部署在 WAF 上。WAF 在对 HTTPS流量解密之后,就可以在内网中用 HTTP的形式,向服务端发起代理请求了。 而且,反向代理 WAF 作为一个 Web服务,能够提供的功能也更加丰富。比如,WAF可以充当一个前置的认证平台,对所有请求进行身份校验和身份管理。同时,也因为在反向代理工作模式中,客户端和服务端不直接通信,而是将全部请求都先请求到WAF 上,所以反向代理 WAF对服务端的隔离也更加彻底。 但是,反向代理同样存在缺点。首先,功能更丰富意味着性能开销更大。因此,反向代理WAF 对硬件要求更高。其次,反向代理 WAF一旦宕机,就无法响应客户端的任何请求。这样一来,即使服务端仍然正常,但用户已经无法正常使用应用了。而对于透明代理WAF 来说,如果 WAF 宕机了,只是无法提供 Web防护而已,客户端和服务端的通信不会受到任何影响。 最后,我们来看插件模式。在插件模式中,WAF不再是网络中一个独立的安全产品了,而是以插件的形式依附于 Web服务端本身,为 Web安全提供防护。 那怎么才能将 WAF植入到服务端的逻辑中呢?我们最常使用的一种技术就是AOP(Aspect OrientedProgramming,面向切面编程)技术。在 AOP 技术中,WAF可以作为一个切片植入到服务端的逻辑中。
而且,目前 AOP 技术十分流行,各类编程语言都支持。所以,插件模式的 WAF部署同样十分简单。但是,这种将 WAF和服务端强耦合的方式,会带来一定的负向影响。 首先,WAF 和服务端一块工作在服务器上,会消耗服务器额外的资源,对 Web服务本身的性能产生影响。 其次,WAF 和服务端耦合,也就意味着 WAF的所有改动都会直接影响到服务端。对于代理模式的 WAF来说,通常只需要自测就可以升级了。而对于插件模式的WAF,它本身的升级必须和服务端一起进入评估和测试流程,就会增加额外的工作量。 为了帮助你理解这三种工作模式,我总结了一张表格。
总结一下,关于 WAF 的三种工作模式,你需要重点掌握这些内容:首先,WAF将处理的请求协议限定为 HTTP,所以 WAF比应用网关防火墙具备更高的专业性和灵活性;其次,WAF可以以代理的形式,在网络中提供 Web安全防护,也可以作为插件嵌入到服务端中;最后,我们也可以根据需求、成本和硬件环境等因素,选择不同的部署模式对Web 安全进行防护。
WAF 的功能
在了解 WAF 的主要工作模式之后,我们知道,在部署模式上 WAF比防火墙具备更高的灵活性。WAF 可以根据不同的需求,以不同的形式为 Web服务提供保护。同样的,在功能上,WAF 也可以去实现一些 HTTP请求中特有的安全功能。比如去解析 HTTP 数据、解密 HTTPS流量等。下面,我们就来看一下,WAF到底有哪些功能服务?
1. HTTP 解析能力
我们知道,WAF 专注于 Web 安全。因此,对 HTTP 请求进行解析是 WAF最基础的能力。在 HTTP 中,通用的内容包括:请求的 URL以及其中的参数、HTTP 头部信息、POST 的 body内容等。 除此之外,某些攻击特征可能隐藏得比较深,比如 JSON中的某个字段,无法通过 JSON的整体内容检测出来,我们必须一个字段一个字段去判断。因此,WAF 还需要解析XML、JSON 等 RPC 传输协议,能够理解对应的 key 和 value分别是什么。 除了单纯地解析内容,WAF 还需要对 HTTP内容做必要地处理。为什么要这么做呢?这主要有两方面原因。 第一,HTTP 中的内容可能经过了 UrlEncode等编码方式的处理,因此,WAF需要具备解码能力,避免攻击的特征通过编码来进行绕过。 第二,想要看到 HTTPS中的加密内容,WAF 必须能够解密 HTTPS请求。在透明代理模式中,WAF 需要和服务端同步 HTTPS的密钥,才能够获得解密的请求;在反向代理中模式中,WAF自带证书,可以直接解密;在插件模式中,WAF 依靠服务端解密请求之后,再进行HTTP 的解析。
2. Web 安全防护
通过对 HTTP 请求进行解析、对编码内容进行解码和对 HTTPS进行解密之后,WAF 就能够获得全部 HTTP 请求内容了。在此基础之上,WAF就可以对请求内容进行分析,为 Web服务提供安全保护了。 我总结了三种主要的分析手段。
- 签名匹配:和杀毒软件中病毒库的概念类似,WAF也可以维护一个攻击样本库。样本库中存有已知攻击请求的散列签名,只要HTTP 请求内容的散列签名在这个样本库,就说明 HTTP请求中携带了攻击内容。
- 正则匹配:签名匹配需要请求完全一致才能够检测出来,而正则匹配只需要部分特征就可以检测。WAF可以通过抽象一些攻击特征的正则表达式,对 HTTP请求进行检测。比如,如果请求的某个参数中出现了单引号,那么很有可能就是黑客发起的SQL 注入攻击。
- 行为分析:除了针对单次请求的分析之外,WAF还可以针对连续的访问请求特征进行提取和分析。为什么要这么做呢?这是因为,很多时候,我们无法准确判断单次请求是不是攻击请求,但是如果疑似的攻击请求频繁出现,我们就基本能够确定了。也就是说,一个用户不会频繁地访问同一个页面,而黑客需要对一个漏洞点发起多次尝试,才能够实现攻击的效果。 在识别到攻击的请求之后,WAF 就可以对请求进行拦截,从而避免 Web服务受到黑客的攻击了。
3. 审计告警
WAF 还有另外一个重要的功能,就是为 Web服务提供安全相关的审计和告警功能。Web安全相关的审计包括:发生攻击的时间、路径、频次等。通过这些信息,开发人员能够知道自己的Web 服务面对的攻击威胁是什么样的,也就能够更好地评估威胁,完善 Web安全防护机制。 除此之外,WAF 还能提供其他的审计能力。这是因为,WAF 能够解析出 HTTP请求的全部内容,提供审计所需要的全部日志字段。这些日志可以是各个页面的访问次数、用户的访问行为和接口的响应性能等。尽管这些指标和安全没有太多关系,但是它们对于产品设计和服务质量来说都很常见,那么WAF就可以作为一个统计分析工具,来为你提供服务。
4. 数据保护和虚拟补丁
反向代理或者插件模式的 WAF,还能够对 HTTP请求中的数据进行一定的处理,提供额外的数据保护功能。 最简单的,WAF 可以加密 HTTP 响应中的 Cookie 内容,使得 Cookie以保密的形式存储在浏览器中。当浏览器将加密后的 Cookie 附加到 HTTP请求中的时候,WAF又可以进行解密。这样一来,服务端接收到的始终是明文的信息,而实际上,WAF通过加解密为 Cookie 提供了额外的保护。另外,WAF还可以对返回内容中的手机号、身份证号等敏感字段进行统一的打码处理,避免因为开发的疏忽,导致这些敏感信息的泄漏。 在介绍插件漏洞的时候,我们提到了防火墙可以提供虚拟补丁的功能,来临时对插件漏洞进行修复。如果插件是Web 相关的服务,那么 WAF是不是也可以提供虚拟补丁的功能呢?当然是可以的。那 WAF是如何提供虚拟补丁的呢?我来举个简单的例子。 在经典的 Structs 2 漏洞中,黑客是通过 Structs 2中包含的漏洞接口发起攻击的。所以,WAF只需要将这些包含漏洞的接口进行封禁,或者对请求内容中的 Structs 2攻击特征(特定接口的异常序列化数据)进行分析拦截,就能够临时避免 Structs2 受到已公开的漏洞攻击。之后,我们只需要对 Structs 2进行升级再打上补丁,这样就可以下线虚拟补丁了。
总结
好了,今天的内容讲完了。我们来一起总结回顾一下,你需要掌握的重点内容。 在今天的课程中,我们主要介绍了 WAF的工作模式和主要功能。简单来说,WAF 就是专注于 Web安全的防火墙,它能够以透明代理、反向代理和插件的模式,运行在网络和系统的各个环节中。从功能上来说,WAF能够解决绝大部分的 Web 安全问题,对于黑客针对 Web的攻击进行分析和拦截,同时提供额外的审计告警、数据保护等能力。 同样地,在选取 WAF的时候,我们首先需要考虑功能的完整性和易用性。公司能够以较低的成本部署WAF,并解决大部分的 Web 安全问题,这是 WAF最关键的效果。其次,就是可配置和可维护性,对于漏过的攻击请求如何进行补充完善,对于误判的请求如何进行放行,这是我们在使用WAF 过程中必然会遇到的问题。一个好的 WAF产品应该提供友好的入口,供开发和运维人员对漏过和误判的规则进行维护。

思考题
最后,给你留一道思考题。 任何安全产品都不可能达到 100% 的安全。你可以思考一下,在 Web安全中,黑客能够通过哪些方式绕过 WAF的检测和过滤呢? 欢迎留言和我分享你的思考和疑惑,也欢迎你把文章分享给你的朋友。我们下一讲再见!