在当今数字化时代,Web应用的广泛使用使得其安全性面临着严峻的挑战。Web应用防火墙(WAF)应运而生,成为保护Web应用免受恶意攻击的关键防线。然而,攻击者也在不断寻找突破WAF的方法,这就引发了WAF识别与绕过这一复杂而又关键的技术领域的激烈对抗。了解这些技术对于网络安全专业人员加强防御和渗透测试人员强化进攻都有着至关重要的意义。
WAF的基本原理与架构
WAF主要是通过对Web应用的网络流量进行实时监测和过滤,来防止恶意请求到达Web应用服务器。它就像是一个智能的守门员,在网络请求和Web应用之间筑起一道屏障。其功能包括但不限于:检测和阻止SQL注入攻击,这种攻击通过在用户输入中插入恶意的SQL语句来试图获取数据库信息;防范跨站脚本攻击(XSS),防止攻击者将恶意脚本注入到网页中,从而窃取用户信息或执行其他恶意操作;抵御文件包含攻击,避免攻击者通过包含恶意文件来破坏服务器的文件系统;以及应对命令注入攻击,阻止攻击者在服务器上执行恶意命令。
1. 基于规则的检测
这是最常见的WAF工作模式。WAF管理员会根据已知的攻击模式和漏洞特征制定一系列规则。例如,对于SQL注入攻击,规则可能会禁止包含特定SQL关键字(如“union”、“select”、“drop”等)的请求。当一个请求进入时,WAF会将请求内容与这些规则进行匹配。如果匹配到恶意模式,WAF就会拦截该请求。这种模式的优点是易于理解和实施,能够快速应对已知的攻击类型。但缺点是对于新型攻击或经过巧妙变形的攻击可能会失效,因为新的攻击模式可能不在已有的规则范围内。
2. 基于行为的检测
这种模式是通过分析请求的行为模式来判断其是否恶意。它不依赖于特定的攻击特征,而是观察请求的一系列行为指标。比如,一个正常用户在登录页面的请求频率是相对稳定的,如果某个IP地址在短时间内发起大量的登录请求,这可能是暴力破解攻击的迹象。WAF会根据这些行为异常来拦截请求。基于行为的检测能够发现一些基于规则检测无法发现的新型攻击,但它也可能存在误报的情况,因为某些正常的高流量情况可能会被误判为攻击行为。
3. 混合模式
为了充分发挥两种检测模式的优势,许多现代WAF采用混合模式。即同时运用基于规则和基于行为的检测方法,综合判断请求的合法性。这种模式可以在保证对已知攻击有效拦截的同时,提高对新型攻击的检测能力。
1. 网络型WAF
这种类型的WAF通常是作为网络设备部署在Web服务器之前,直接对网络流量进行过滤。它就像一个网络中的关卡,所有进入和离开Web应用的流量都要经过它。网络型WAF具有高性能和高吞吐量的特点,能够处理大量的网络流量。它可以基于硬件实现,也可以是虚拟的网络设备。例如,一些企业级的网络防火墙中集成了WAF功能,能够同时保护整个企业网络中的多个Web应用。
2. 主机型WAF
主机型WAF是安装在Web服务器上的软件,它直接在服务器层面保护Web应用。这种WAF可以与服务器的操作系统和Web服务器软件紧密结合,对服务器上运行的特定Web应用进行有针对性的保护。它的优点是能够根据服务器和应用的具体情况进行定制化的配置,缺点是如果服务器数量较多,管理和维护成本相对较高。
3. 云WAF
随着云计算的发展,云WAF也越来越流行。它是基于云计算平台提供的WAF服务,用户的Web应用可以通过将域名解析指向云WAF服务提供商的服务器来获得保护。云WAF具有易于部署、可扩展性强等优点,特别适合中小企业和创业公司。它可以根据用户的业务需求动态调整资源,而且由专业的安全团队负责维护和更新规则,减轻了用户的安全管理负担。
WAF识别的方法与技巧
1. 错误页面分析
当WAF拦截一个请求时,通常会返回一个错误页面给客户端。这个错误页面可能包含很多有用的信息。一些商业WAF产品会在错误页面上显示自己的品牌名称、产品标识或版权信息。例如,某知名WAF的错误页面上会有醒目的公司标志和“此请求被[公司名称]WAF拦截”的提示。通过识别这些信息,攻击者可以确定目标使用的WAF类型,进而研究其可能的绕过方法。以下是一些常见WAF拦截页面:
360安域:
阿里云盾:
安全狗:
长亭Safeline:
腾讯云waf:
2. 错误码与消息分析
除了品牌信息,错误页面上的错误码和错误消息也可以提供线索。不同的WAF在拦截不同类型的攻击时可能会返回特定的错误码或消息。比如,对于SQL注入攻击,某些WAF可能会返回“403 Forbidden - SQL Injection Detected”这样的错误消息,通过收集和分析这些具有特征的错误信息,可以推断出WAF的存在和它对特定攻击的检测机制。
1. 特定头字段检查
部分WAF会在HTTP请求或响应的头信息中添加特定的标识字段。例如,可能会有“X - WAF - Product: [产品名称]”或“X - Security - Header: [值]”这样的字段。攻击者可以通过检查这些头字段来识别WAF。此外,一些WAF会修改原有的头信息,如调整“Content - Type”或“Server”头的值,通过观察这些头信息的异常变化,也可以推断出WAF的存在。
2. 头信息处理模式分析
不同的WAF对头信息的处理方式可能不同。有些WAF可能会对某些头信息进行加密或编码,或者在头信息中添加额外的安全相关元数据。通过发送一些特殊构造的请求,并分析头信息在经过WAF后的变化情况,可以发现WAF的特征。例如,发送一个包含自定义头信息的请求,观察WAF是否对其进行了修改或添加了新的内容。
1. wafw00f
wafw00f 通过发送多种类型的异常请求和攻击向量来探测目标网站的响应。它会分析响应中的各种特征,如特定的错误页面、响应头中的指纹信息、响应内容中的特定字符串等,以确定是否存在 WAF 以及识别其类型。wafw00f 拥有一个庞大且不断更新的 WAF 特征数据库,这使得它能够更准确地识别出各种常见和不常见的 WAF 产品。
2. identYwaf
identYwaf 会向目标网站发送一系列精心构造的 HTTP 请求,这些请求包含了可能触发 WAF 规则的特征。然后,它根据目标网站返回的响应状态码、响应头信息、响应内容等,与已知的 WAF 特征库进行比对和分析,从而判断是否存在 WAF 以及 WAF 的具体类型。
WAF绕过技术的深度剖析
1. URL编码绕过
URL编码是一种常见的绕过方法。攻击者将恶意请求中的关键字符进行URL编码。例如,将SQL注入语句
“union select user,password from users”编码为
“%75%6e%69%6f%6e+%73%65%6c%65%63%74+%75%73%65%72%2c%70%61%73%73%77%6f%72%64+%66%72%6f%6d+%75%73%65%72%73”。
一些简单的基于规则的WAF可能只对原始形式的攻击语句进行检测,而忽略了编码后的情况。这种方法利用了WAF检测规则的局限性,通过改变字符的表示形式来绕过检测。
2. HTML实体编码绕过
对于跨站脚本攻击(XSS),HTML实体编码可以被利用。攻击者将恶意脚本中的字符转换为HTML实体形式。例如,将“<script>alert('XSS');</script>”编码为
在某些情况下,WAF可能无法正确识别这种编码后的恶意脚本,尤其是当它只对原始的脚本标签进行检测时。这种编码方式使得恶意脚本在形式上看起来像是正常的HTML内容,从而绕过WAF的检测。
3. Base64编码与加密绕过
Base64编码可以将任意的二进制数据转换为可打印的ASCII字符。攻击者可以将恶意请求先进行Base64编码,然后再进行传输。例如,将一个包含攻击载荷的命令注入语句编码后发送。一些WAF可能没有对Base64编码内容进行解码和检测的功能,导致攻击成功绕过。此外,更复杂的加密算法也可以被使用,如使用对称加密算法对攻击载荷进行加密,然后在目标服务器端通过某种方式(如利用服务器的漏洞来植入解密代码)进行解密,这种方法对于没有加密检测能力的WAF来说是一种有效的绕过手段。
1. 添加无关字符与空格混淆
攻击者在恶意请求中添加大量无关的字符、空格、制表符或换行符。例如,对于SQL注入语句“union select user,password from users”,可以修改为
“u n i o n %09s e l e c t %0auser, password%0afrom%0ausers”。
这些额外的字符会干扰WAF的规则匹配,尤其是那些基于简单模式匹配的WAF。因为WAF在检测时可能是寻找特定的连续字符序列,而这些无关字符的插入打破了原有的模式,使得攻击语句在形式上不再符合WAF的检测规则。
2. 大小写混合与字符顺序变换
通过使用大小写混合的方式和改变字符的顺序来绕过WAF。例如,将“union select”写成“uNiOn SeLeCt”。在某些情况下,数据库在执行SQL语句时对大小写并不敏感,而WAF的检测规则可能没有考虑到这种大小写混合的情况,从而导致攻击语句能够成功绕过检测。此外,改变字符顺序,如将“select”写成“tselc”(当然,这种情况需要根据目标数据库对语句的解析能力来确定是否可行),也可能迷惑WAF,使其无法正确识别攻击意图。
3. 使用相似字符替换
利用一些在视觉上相似但ASCII码不同的字符来替换恶意请求中的关键字符。例如,使用“l”(全角的l)代替“l”,或者使用“0”(全角的0)代替“0”。在某些字体显示下,这些字符看起来非常相似,但对于基于字符匹配的WAF来说,它们是不同的字符。这种方法可以绕过一些简单的基于文本匹配的WAF检测。
1. 分块传输编码(Transfer - Encoding: chunked)利用
攻击者利用HTTP请求的分块传输编码特性,将恶意请求分割成多个小块进行传输。在分块传输中,每个小块都有自己的长度标识。攻击者可以精心设计每个小块的内容,将恶意代码分散在不同的小块中。例如,将一个SQL注入攻击的语句分成几块,每块包含部分关键字和一些正常的请求内容。当这些小块到达后端服务器时,它们又可以重新组合成完整的恶意请求,而WAF可能由于无法完整地检测每个小块的组合情况而导致攻击成功绕过。
2. HTTP请求方法滥用
利用一些不常见的HTTP请求方法来传递恶意载荷。常见的WAF可能对GET和POST方法有较为严格的检测,但对其他方法如HEAD、OPTIONS、TRACE等检测可能较为宽松。攻击者可以尝试通过这些不常用的方法发送包含恶意代码的请求。例如,通过HEAD方法发送一个包含SQL注入语句的请求,虽然HEAD方法通常用于获取头部信息,但攻击者可以利用WAF对其检测的不足,将恶意代码隐藏在其中,当后端服务器处理这种非标准请求时,可能会受到攻击。
3. HTTP协议版本差异利用
不同版本的HTTP协议在实现和处理请求上可能有一些细微的差异。攻击者可以利用这些差异来绕过WAF。例如,某些旧版本的HTTP协议可能对某些字符的处理方式与新版本不同,攻击者可以构造符合旧版本协议规范但包含恶意内容的请求,使得WAF在按照默认的当前版本协议检测时无法识别出攻击,而后端服务器可能仍然支持旧版本协议的处理,从而导致攻击成功。
WAF绕过技术的发展趋势与应对策略
1. 智能化与自动化
随着人工智能和机器学习技术的发展,攻击者可能会利用这些技术来自动生成更复杂、更难以检测的绕过方法。例如,通过机器学习算法分析大量的WAF检测规则和成功绕过案例,生成针对特定WAF的新型绕过策略。这些策略可能更加隐蔽和难以防范,因为它们不再是基于简单的手工构造,而是通过智能算法生成的优化方案。
2. 组合攻击手段增多
未来的攻击者将更多地采用多种绕过技术的组合。不再是单一的编码绕过或字符混淆,而是将编码、字符混淆、协议利用等多种方法结合起来。例如,先对攻击载荷进行多层编码,然后再通过添加无关字符和利用分块传输编码进行进一步的混淆和隐藏,这种组合攻击将大大增加WAF检测的难度。
3. 针对新兴技术的攻击
随着Web应用中新兴技术的不断涌现,如WebRTC、WebSocket等,攻击者将开始寻找这些新技术相关的WAF绕过方法。这些新兴技术的安全机制可能还不完善,WAF对它们的保护能力也相对较弱,攻击者会利用这些漏洞来实施攻击。
1. 强化WAF自身能力
动态规则更新:WAF厂商需要更及时地更新检测规则,以应对不断变化的攻击手段。通过建立全球威胁情报网络,及时获取新的攻击模式信息,并将其转化为WAF的规则更新,确保WAF能够对最新的攻击保持敏感。
智能分析与学习:在WAF中引入人工智能和机器学习技术,使其能够自动学习和识别新型攻击模式。通过对大量正常和恶意请求的分析,建立模型来区分两者,提高对未知攻击的检测能力。
深度协议分析:加强对HTTP等相关协议的深度分析能力,不仅要检测常见的请求内容,还要对协议的各种特性和版本差异进行全面的分析。例如,对分块传输编码的内容进行更严格的重组和检测,防止攻击者利用其特性进行绕过。
2. 多层防御机制构建
结合其他安全技术:不能仅仅依赖WAF来保护Web应用,还应该结合其他安全技术,如入侵检测系统(IDS)、入侵防御系统(IPS)、代码审计、渗透测试等。
应用安全开发流程:在Web应用的开发过程中,遵循安全开发流程,从需求分析、设计、编码到测试,都要融入安全意识。例如,对用户输入进行严格的验证和过滤,避免在代码中出现可能导致SQL注入、RCE、XSS等攻击的漏洞,这样可以减轻WAF的负担,同时提高整体的安全性。
原文始发于微信公众号(安全驾驶舱):【WEB安全】WAF识别与绕过:网络安全攻防的深度探索
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论