购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 WAF概述

WAF(Web Application Firewall,Web应用防火墙)是通过执行一系列针对HTTP/HTTPS的安全策略为Web应用提供保护的一种产品。作为绝大多数互联网公司Web防御体系最重要的一环,承担了抵御常见的SQL注入、XSS、远程命令执行、目录遍历等攻击的作用,就像大厦的保安一样默默工作,是守护业务安全的第一道防线。

1. 传统WAF的不足

WAF在不少安全公司都是重要产品线,究其原因我认为有三个:

·绝大多数互联网公司没有足够的专职安全人员负责安全,解决安全问题是第一要务,WAF作为入门级产品帮助企业抵御了常见的攻击行为,需求量大。

·产品成熟,市场教育成本低,有不少酷炫的新产品需要开发布会才能让同行知道产品有什么特点,通过PPT才能让用户知道产品到底是什么。

·研发WAF的起点不高,最草根的做法基于常见的Nginx+Lua架构就可以入手。也正是由于这三方面原因,市场上WAF种类繁多但同质化严重,缺乏创新。

个人总结传统WAF在安全方面存在以下几个问题。

1)防护能力不足以应对黑产。

传统WAF主要依赖规则,一方面是吃一堑长一智,针对已知攻击形式有一定防御,针对未知攻击无防护能力,另外一方面,即使是已知攻击行为,由于正则表达式固有的局限性以及shell、PHP等语言的灵活多变的语法,因此理论上是可以绕过的,事实上也是可以绕过的,主流安全咨询媒体都有几篇讲如何绕过WAF的文章。我就列举一个例子:

http://www.douwaf.com/rce.php?cmd=pwd

假设cmd参数存在命令执行漏洞,输入参数pwd时,会执行shell命令,由于shell命令的灵活性,当参数为pwd p'w'd p""'w""'d""p'w'd""都是可以执行的,针对ls、ifconfig等也是一样,如果谁能写出个规则防止这个URL的命令执行漏洞的利用,可以告诉我。所以对怀有经济利益驱动的黑产或有足够赖心的白帽子,绕过WAF只是时间问题。

此外,多数WAF处于性能的考虑,检测策略主要是基于请求或者应答内容,缺乏上下文以及请求应答关联分析的能力,势必看问题就很片面和局限,大家可以在有输入框的地方输入alert(/1/),看看有多少WAF会拦截。

2)缺乏有效的基础业务安全防护能力。

WAF是否需要承担业务安全或者说业务风控的职责,其实厂商和用户一直没有达成一致,多数厂商认为这不是WAF的职责,撞库、刷短信接口、薅羊毛等,确实是专业风控产品的职责;从用户角度讲,以前被人撞库、刷短信接口、薅羊毛等,分析日志加Nginx封IP能解决一部分问题,结果上WAF却搞不定了,还非要忽悠我买昂贵的风控。我认为WAF还是要有基础的业务安全防护能力,无论是自动还是由用户配置。

3)审计能力不足。

闲时看PV,出事能取证,出现安全事件时可以很方便地查询原始流量,这个对于应急响应的同学很重要。令人遗憾的是,多数WAF即使可以保存访问日志,但也只能保存请求头、基础的URL,对于攻击定位至关重要的post body,应答内容记录的却很少,当然我们也能理解,这是由于存储空间问题、性能问题造成的。不少厂商也认为这个应该是Nginx本身、siem或者流量审计类设备的功能,我认为WAF应该做这个的原因如下:

·WAF记录黑客很难删除,Nginx上的记录很容易被删除,还没见过有自我修养的黑客不删除日志的行为;

·HTTPS普及后,流量审计想记录也记录不了了,对此表示遗憾。

2. 理想中的WAF

首先声明,我理想中的WAF部分功能有的厂商在研发中,完全实现还没有,如果有某个WAF产品经理说他们实现了WAF的所有功能,我还是直接认怂算了。

理想中的WAF功能有如下几个。

1)上下文理解能力。

这个不是功能,而是处理能力,传统WAF对于HTTP协议的理解主要是单向处理请求或者应答,缺乏对HTTP整个session行为的分析,缺乏结合上下文综合理解请求应答内容的能力,这好比盲人摸象,对于问题分析很片面。比如盲注这类没有明显回显特征的,仅依赖请求包特征,不去分析整个session多个应答包的时间特征就很难准确发现。

2)语义分析能力。

语义分析,部分厂商称之为沙箱,本质上是WAF具备语义识别常见的SQL、PHP、shell语言的能力,传统WAF的规则多是基于正则,说白了就是从文本的角度去理解HTTP协议,按简单的正则匹配,好比用鸟的大脑去尝试理解人类的语言,结果肯定是误报率和漏报率无法平衡。有了语义理解能力以后,就可以从HTTP载荷中提取的疑似可执行代码段,用语义去理解是否可以执行。还是以刚才的案例来说明。

http://www.douwaf.com/rce.php?cmd=pwd

对于参数cmd的内容,如果用shell的语法去理解,pwd p'w'd p""'w""'d""p'w'd""都是一回事,都是pwd。从原理上说,对于语法公开的语言都可以实现语义分析。

语义理解,理论上可以解决基于正则的规则的漏报和误报的问题,不过也不是万能的,比如HTTP协议中究竟哪部分是疑似可执行的代码段,这是个不好解决的问题。另外HTTP协议中,对于SQL注入攻击存在的都是代码段,或者说是SQL片段,如何拼接以保证正常解析也是麻烦事,市面上已经出现了一些基于语义的WAF,究竟这些问题解决到什么程度还有待于实战考验。

3)机器学习能力。

可以参考我的另外一本书《Web安全之机器学习入门》。

4)审计取证能力。

能够以HTTP会话作为存储单位,保存至少一个月的存储日志,完整记录请求应答内容,至少包括请求和应答的前4兆内容,支持基于常见HTTP字段的正则查询,支持ELK那种基础的聚合、TOP、大于、小于等操作。比较理想情况是类似去年RSA会议上提到的基于流量的时光机器,可以按照一定条件回放整个访问过程。最新的网络安全法要求保存至少半年的日志,这对于WAF来说也是个机会,可以把审计取证,日志离线备份作为一个卖点。

5)情报能力。

威胁情报这两年一直比较火,也逐渐从概念层面过渡到实战,从IP地址库、HTTP代理库、VPN库进步到真正是肉鸡库等,这一进步也给WAF带来了新的武器,对于大面积机器攻击行为,比如CC/DDoS肉鸡等可以做到直接封禁。

6)业务安全防护能力。

业务安全的防护范围非常广,我认为至少包括以下三个方面:

·网站内容防护——反恶意抓取、垃圾信息注入、黄赌毒信息注入、主页篡改(这个对党政军用户至关重要)等;

·高级业务逻辑CC攻击——对API接口的海量调用,包括短信接口、验证码接口、登录接口、数据查询接口等,撞库也可以算作此类;

·轻量级防薅羊毛–暴力注册、刷红包、刷代金券等。

市场上也出现了号称保证业务安全的WAF,这是一大进步,我见过几款产品,本质上提供能够根据用户自定义的URI、参数名、源IP/目的IP、目的URL等条件,拦截超出正常频率的机器访问行为的能力,在一定程度上解决了不少业务安全的问题。我一直有个观点,黑产、羊毛党(按照法律貌似不算违法,暂且叫灰产吧)也是讲究攻击成本的,只要攻击你的成本高于其他P2P、电商等网站,他们多会转向攻击成本低的,人家也是讲究性价比的,能够提供基础业务防护能力就是进步。

7)协同能力。

这个能力我认为很重要,因为WAF不是万金油,也不可能包打天下,再强大也可能被绕过,但是WAF的卡位很好,位于网路边界,特别适合做隔离操作,比如hids发现WebShell,协同WAF阻断访问,数据库审计发现拖库或者敏感操作协同WAF阻断(这个还依赖WAF和数据库联动分析,将HTTP会话和SQL操作关联)等。 1Z1z87K8yroXiRHbShXS9m8JdfdWRTTF/NOKxIa41sj/xunbCiOzCvLoYk3BfP16

点击中间区域
呼出菜单
上一章
目录
下一章
×