zoukankan      html  css  js  c++  java
  • 【WAF技巧拓展】————1、浅谈WAF

    什么是waf

    waf是web应用防火墙(Web Application Firewall)的简称,对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,为web应用提供防护,也称作应用防火墙,是网络安全纵深防御体系里重要的一环。waf属于检测型及纠正型防御控制措施。waf分为硬件waf、软件waf(ModSecurity)、代码级waf。

    waf的原理是什么

    waf对请求的内容进行规则匹配、行为分析等识别出恶意行为,并执行相关动作,这些动作包括阻断、记录、告警等。

    waf工作在web服务器之前,对基于HTTP协议的通信进行检测和识别。通俗的说,waf类似于地铁站的安检,对于HTTP请求进行快速安全检查,通过解析HTTP数据,在不同的字段分别在特征、规则等维度进行判断,判断的结果作为是否拦截的依据从而决定是否放行。

    从事前、事中、事后来看,waf是在攻击进行时,用于阻断攻击的安全产品。

    绕过waf防御都有哪些技巧

    (1)请求真实ip绕过waf:部分waf部署架构的特性,部分waf并不是直接串在目标站点线路上,而是通过DNS解析的形式部署,此时可以先探测到目标站点的真实ip,直接请求ip以此绕过waf的检测;

    (2)检测内容范围绕过:waf性能限制,检测特定内容前几k或几十K的内容,然后在此特定内容段内填充物用数据,payload放于物用数据后,以此绕过检测;

    (3)协议盲区绕过:waf根据自己的防御策略所支持的协议特性,针对该协议内的请求进行检查,但是存在一些协议检测或协议运行机制上的缺陷导致被绕过,例如协议未覆盖、协议解析不正确、协议解析遗漏等;

    (4)检测规则绕过:waf工程师规则编写经验、规则覆盖面等问题,来绕过检测,例如利用MySQL对一些特殊字符处理的特性、语法特性绕过;

    (5)文件包含绕过:相对路径、绝对路径。

    在规则绕过里,常见的就是各种编码(urlencode、unicode、多重编码、大小写、换行符等),填充符号(填充注释符、空格换加号、x00等特殊字符),比较特色的就是sqlmap的tamper脚本。缺陷绕过的话,一般有填充无用数据、特殊HTTP请求方法、耦合白名单等绕过方式。其实,绕waf就是一句话,想别人之所想。人写的规则难免会有遗漏,去考虑安全工程师会有那些遗漏,往往很有效。 

    经典的waf漏洞案例

    CVE-2007-1359漏洞里,mod_security就被特殊字符x00绕过了,算是比较经典。

    PHP DOS漏洞的新利用:CVE-2015-4024 Reviewed。利用漏洞进行bypass的案例,当时秒杀所有WAF的。

    XXX的SQL注入:

    处理waf漏报、误报问题的成熟方案

    这是两个非常大的课题,也是waf体系建设必不可少的。
    在互联网企业,waf每天拦截的请求量都是千万级别的,发现waf误报的运营工作对waf建设很重要,量很大,不可能一条条看,必定需要集合自动化。
    发现waf的漏报,更是在亿级别的请求海量数据发现waf未拦截的请求。而且有个悖论:waf未拦截,说明攻击特征有问题,所以不能从攻击特征的角度去发现waf的漏报。如果从攻击特征描述,怎么保证这次的特征不被绕过。

    (1)waf漏报的发现思路

    • 对于漏报来说,一个是要靠完整的协议和边界测试,观察waf在各种HTTP请求的绕过,变形下是否能正常工作;
    • 另一个方法可以采用只检测不拦截模式上一些比较粗的规则,整理其中比较好的规则策略再上到拦截模式。

    (2)waf误报的发现思路:

    • 首先,进行人机识别,把人的请求和机器请求区分,机器的请求都不是误报;
    • 其次,其次对人的请求进行攻击指纹识别;
    • 最后,对剩下的拦截日志进行HMM模型(隐马尔可夫模型)分析。

    WAF规则+机器学习实践

    • HMM模型(隐马尔可夫模型)分析,用于误报分析和漏报分析。

    优秀的开源waf引擎

    在软waf方面,首推当然是modsecurity,其次是基于ngx_lua的lua-resty-waf、ngx_lua_waf,还有就是Naxsi、WAFNinja、raptor_waf,一般基于apache、nginx的waf模块其实都可以,两种都有优缺点,适合业务场景的才是最优秀的。

    大流量高并发场景下应该选择哪种waf方案

    根据我们自己的经验,基于nginx的waf模块是比较普遍且能够经得起考验的。最好能根据流量情况进行完整架构设计,才能以最小的试错成本达到最大的收益。

    上面开源的waf都不太适合高并发场景,它们和Web Server 耦合太严重。如下图所示,这样的方式比较适合,把WAF检测引擎和web server分开,这样Web server能力不受waf限制,waf也不受Web server限制。

    怎么测试waf的防御能力

    可根据请求方法、请求方式、请求大小、编码、边界等各种维度去测试,判断响应与所期望的结果是否相同。覆盖面、准确率、覆盖类型、性能、异常也都是很重要的测试点。

    我是这么做的,核心是第三点:

    • 搭建带有漏洞的站点;
    • 使用扫描器扫描,覆盖基本盘;
    • waf场景绕过技术的总结,变为标准测试,人工测试绕过。

    怎么从waf日志中分析出未知攻击威胁?

    waf日志里的通常都是已知的攻击威胁了,如果想要知道未知的攻击威胁,可能需要waf支持粗粒度的特征,然后进行关联分析聚合出还未拦截的攻击威胁。

    怎么从全量日志中分析出未知威胁( 0day 、APT等)来完善waf规则?

    以攻击特征为策略的waf,不可能做到发现未知攻击。
    这个需求不应该属于waf,不符合WAF的定位。根据这个需求,完全可以产生一个新的安全产品,威胁感知、态势感知。

    WAF是安全防御的一个环节,不能解决所有问题。做WAF产品,一定要弄清楚定位,发现未知攻击,0day不适合放在WAF上。

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    Panorama和Pivot的区别
    Windows phone 全景视图
    在usercontrol里实现导航
    (App.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
    Windows phone重写返回键
    Windows Phone 8弹窗
    Kotlin 区间的一些小注意
    Kotlin 区间和循环 Loop和Range
    Kotlin when 流程判断
    Kotlin 在kotlin内使用Java的一些注意(长篇)
  • 原文地址:https://www.cnblogs.com/devi1/p/13486370.html
Copyright © 2011-2022 走看看