安全事件发生的最初阶段,是“黑客”促使我们思考安全漏洞的危害–往往考虑的是直接危害,同样我们最初的解决办法当然是“头痛医头脚痛医脚”。同时,许多人对于黑客的行为感到相当好奇,偷窥欲望油然而生,许多人钻研黑客技术往往就是因为好奇,现实当中有攻击能力往往成为衡量一个人技术水平的“不成文共识”。本人对这些现象不否认但不支持也不赞成,这种观念上的分歧的根源往往在于每个人站的角度不同使然。
如果你的职责是守护一个产品,确保它可以提供安全的服务给我们的客户,我需要思考什么?先看一下,你同意以下观点吗?
1. 你学着黑客一样在测试环境去攻击我的产品,发现问题立即封住,这是我的主要职责
2. 你监听用户行为,发现恶意行为,立即堵住,同时找到恶意用户的攻击点,找找问题,如果有问题,封住,这是我工作的重要组成部分
3. 你的老板可能会认为我发现的问题越多,说明技术越好越用功,对产品的安全性越有信心
4. 你担心当某一天,我再也无法发现产品的安全问题了,是不是我也就没事儿了,轮到我下岗了
如果你同意或基本同意以上观点,我觉得你所维护的产品发安全性相当危险,至少你没有足够的理由对你的产品的安全性足够的放心。
再看一下以下观点,你同意吗?
1. 你研究黑客行为,目的是掌握潜在的安全漏洞的存在形式,以检查本公司产品是否有类似问题
2. 你研究各种常见漏洞,目的是掌握漏洞的产生的根源,以便我系统的总结它的原因,系统化的统一在产品当中解决它
3. 你努力着试图把各种漏洞的产生的根本原因总结到一起,抽象出共性,以使其变为规范,在产品开发过程当中以便程序设计与实现人员只要遵守规范,便可避免诸多潜在安全问题的出现
4. 你研究渗透测试目的不是用测试来发现所有的安全问题,而是用来检查我以上三条是否需要完善
如果你同意或者基本同意以上观点,至少你所维护的产品的安全性是可控的,可度量的,内心是有底的,如果你敢大胆的说你的产品足够安全,那可性度是相当高的。
最后,用一个例子来表明为什么要淡化攻击过程实现:
如何发现XSS漏洞?我一句话就能说清楚:用一串带有Javascript敏感的字符串来篡改替换HTTP请求头当中的参数值,观察HTTP响应里是否被返回,如果返回是否被正确编码(叫转义也行)的过程。
如此说来,发现一个有XSS漏洞的API的XSS问题对于一个普通的软件测试人员也并非难事儿。一个简单的反射式XSS问题,可能5分钟就可以确定,但是,我要强调一下这个“但是”,这个XSS漏洞如何反变成可利用的可以实现攻击的漏洞,这个过程将可能是1小时也可能是一个月,还有可能是1-2年!
对于我,一个企业的产品安全维护者,解决这样的一个XSS问题可能也只需要5-10分钟,如果让我花1小时到2年时间来证明它的利用价值有多高,请问同行们,你觉得有意义吗?
有一个群体的人会回答:有意义! 他们往往是非产品安全维护人员,可能是黑客产业链中的人,也可能是强烈的黑客技术的好奇者……,如果不幸的有我们同行在里面,我会觉得很不是滋味,
我理想中的同行们应该是这样的:
我有能力成为黑客,但是我不会把时间浪费在“当黑客”这一行当上。