如果没有一个理论性的指导,仅仅从局部看问题,那么企业或者政府部门的Web业务系统管理员对于如何防护一个web系统会有很多的疑惑。在业内最有权威性的Web安全组织就是OWASP,它提供的工具、文档和研究项目,以及2004年版和2007年版的TOP10安全威胁排名对于指导web安全有非常重要的影响,已经成为业内指导和修复Web安全的重要依据。
这里我们介绍OWASP最新推出的2010版TOP10,虽然是candidate版(正式版在撰写本文时还未发布,但与Candidate版差别很小——编者注),但是我们从这里惊喜的发现了它的重大改变,就是用风险管理来看待Web安全问题的根源以及管理。而这些改变与绿盟科技WAF防护Web攻击的理念和实现机制非常贴合。对于用户来说,首先需要一个正确的理论指导,第二,需要把这些理论可以落地操作,也就是运用一些技术和设备来防护。
TOP10安全威胁排名如下:
A1: Injection
A2: Cross Site Scripting (XSS)
A3: Broken Authentication and Session Management
A4: Insecure Direct Object References
A5: Cross Site Request Forgery (CSRF)
A6: Security Misconfiguration
A7: Failure to Restrict URL Access
A8: Unvalidated Redirects and Forwards
A9: Insecure Cryptographic Storage
A10: Insufficient Transport Layer Protection
不是以往的漏洞统计方式,而是应用了风险评估方法,通过计算得出的排名。风险计算这个概念不是OWASP组织自己发明的,它应用和参考其他成熟风险评估标准以及风险建模、风险各因素的赋值和计算、软件生命周期的标准和方法(包括NIST 800-30 Risk Management Guide for Information Technology Systems、AS/NZS 4360 Risk Management、Microsoft Web Application Security Frame Threat Risk Modeling等),同时漏洞数据也是来自国际各大安全组织(包括Aspect Security、MITRE–CVE、Softtek、White Hat–Statistics),OWASP把这些方法、概念和数据有机的融合在一起,它带给我们面对web安全新的启迪和思路。
那么风险计算如何操作呢,步骤如下:
Step 1: 识别风险
Step 2: 评估可能性因素
Step 3: 评估影响因素
Step 4: 计算并定义风险等级
Step 5: 制定修复方案
Step 6: 按照用户实际情况制作风险等级模型
关键点在于第二和第三步,得出这两项后用公式: Risk = Likelihood * Impact。进行计算后得出的结果就是该风险的综合值。为了方便大家查看,我根据计算方法把相关因素用鱼刺图表现,如下图:
对于不同风险因素的组合,OWASP称之为攻击路径。比如攻击一个网站,攻击者是不同的,有匿名用户或者是有权限的用户甚至系统管理员和开发者,所利用的漏洞如果不相同那么方法也不一定是一样的,最终破坏造成的技术影响性也不同,比如黑掉首页、删除数据、植入木马等,那么带来的商业影响也相应的不同,有金钱损失、声誉损失,而且这些损失的价值也不相同。所以不同的Web业务系统的风险值都不是相同的。
OWASP在编写TOP时参考了威胁建模和软件生命周期(SDLc),也就是说此文档会影响到一个软件(web application)从开发设计到运维的不同阶段,下图是绿盟科技根据理解编写的,用红色圆点表示风险的不同因素,它们分布在软件生命周期各个阶段,曲线表示每个阶段不同的风险值。
根据软件生命周期大致划分了4个阶段,设计开发、内部测试、上线和运维。设计开发阶段是评估和设计软件的关键,它指导软件用什么原则来开发,它的具体逻辑和数据流的功能划分,同时对于开发通常包括安全编程原则和功能自身的健壮性等,上线阶段是测试和试运行,可以通过代码审计、渗透测试,以及自动扫描来发现它的安全问题。第四个阶段是运维阶段,刚上线运维时风险点最高,此时需要根据实际情况来调整安全设备和应用程序,度过这段磨合期就是平稳运营阶段。但风险不会消失,会一直保持在一个相对平衡的水平线。
这个曲线不是绝对值,只是根据一般情况的相对值,也就是说前期的规划和开发阶段控制得越好,后期的风险就越小。
同时,我们可以看到生命周期的前期阶段风险控制得越好后面的阶段风险值也会相应减少。但不论前阶段如何控制,运维风险也是相对最高的。为什么呢?这是因为在开发阶段的风险因素比较少,而发布后增加了外部影响因素,比如金钱损失、声誉损失,还有互联网的匿名用户等。而我们知道OWASP的风险计算是先把可能性因素取平均值然后再把影响性也取平均值,然后两个值相乘,所以首先在运维阶段多了影响因素和攻击者,所以他的总体风险值增加了。
如果不理解,那我举个例子,比如一个小孩手里拿着一百元,是在家里安全还是在大街上安全呢?显然是在大街上更危险,那是因为增加了外部的不安全因素,虽然这些因素是未知的。然后再扩展一下例子,小孩在大街上拿一百元和成年人手里捧着10万元,谁更危险?显然是后者,这是因为自身的价值高了,损失更大,所以风险值最高。有些人会说不对吧,小孩和成年人面对的攻击者是不同的。是的,虽然攻击者不同,而且成年人自身可以抵御部分人的攻击,但是由于风险因素之一的数据损失的影响性增大了,即使两者相乘,还是成年人手捧10万风险更高。
然后,我们在看上图的风险曲线变化太大了,在实际的运维阶段中,如此的风险变化表示安全水平非常不稳定,比如在奥运、国庆60周年时为什么突发事件相对要多,这是因为它自身的安全控制如果和平时保持一致,但是外部因素增加了。那么从风险控制角度看,我们知道OWASP的风险理论包含了管理、技术手段等,技术手段又包括了比如:软件补丁、防火墙策略、数据加密、数据备份、安全配置等,除了这些之外,针对网站更有效的方式是采用合理的WAF设备,从而把隐藏自身的weakness(弱点),抵御外部攻击,达到降低风险的目的。
对于每一个风险的控制这里不一一举例,从下图的一个SQL注入示例中,我们来看其中的部分4项因素:
通过之前的鱼刺图我们知道这个发现难易度的风险值的评估依据是:几乎不可能为1分,困难为3分,容易为7分,有自动化工具为9分,其他几个因素也是一样的依据,如果利用难易度为容易(分值为5),技术影响力为高(分值为9),流行程度分值为6,那么它的总体风险值是很高的。
如何通过WAF来降低风险呢?扫描防护可以防范由扫描工具来探测网站漏洞的行为,另外有一些攻击者利用WebServer默认的错误信息或WebApplication脆弱机制暴露的信息来了解目标的weakness,他们会通过程序返回的不同信息来探测。绿盟科技WAF根据这两个技术的机制,设计了“信息安全防护”功能,可以把这个发现动作屏蔽掉,让攻击者不知道真实信息,从而降低了发现难易度的风险。利用难易度是在攻击过程中最重要的因素。防篡改是对攻击成功后,用这个机制来避免产生更严重的影响,如果攻击者删除了数据,可以用WAF来禁止这种行为发生,或及时恢复数据。流行程度是一个漏洞是否为大众所知或者只有极少部分人掌握的衡量标准,这是一个客观事实,用WAF来避免它显然不可能,但我们可以在事件发生之前主动来检查网站的weakness,从而在攻击来临之前就给予修复。
当然,还有其他机制,比如通过事前监控和事后日志分析来追溯攻击来源,分析攻击手法,这些就讲述了。总之,根据OWASP的计算公式,由于降低不同的风险因素,使它的计算因子的值变小了,所以整个风险值也降低了。
我们都应该对WAF降低风险的机制有所了解,那么单从降低利用难易度这项指标来看,各个厂家的实现原理是有所差异的,这个差异体现在同样一个固定的5分值,如何降低到2或者更低呢?这里不仅仅要考虑准确率还有性能,更重要的是不同的攻击手法会给防御带来巨大的挑战,比如SQL注入从难易角度看,如下:
有群注、普通注入和二次注入,所谓群注,简单讲就是攻击者是盲目的把攻击报文发给大量的网站,普通注入也包含了很多变形方式,比如把攻击字符串变异成不同类型或者转换编码来逃避基于特征的IDS类产品,二次攻击则是一种更像逻辑层面的攻击,它的攻击是发生在利用有权限用户来执行触发之前他注入的字符,从而引发的攻击行为。一个优秀的WAF是应该可以应付这些不同类型,不同难度的攻击行为的。
结束语:
在本文中,绿盟科技WAF通过OWASP的理论模型来说明自己的产品思路,其核心是有效降低Web系统风险,对于OWASP TOP10安全威胁,绿盟科技WAF能够提供有效防御。
【编辑推荐】