推荐:安全幻想曲2008

[ 来源:http://www.91now.com/down/ | 作者: | 时间:2008-4-10 | 浏览: 人次 ]

                           ==Ph4nt0m Security Team==

                       Issue 0x01, Phile #0x04 of 0x06


|=---------------------------------------------------------------------------=|
|=----------------------=[       安全幻想曲2008       ]=---------------------=|
|=---------------------------------------------------------------------------=|
|=---------------------------------------------------------------------------=|
|=--------------------=[           By axis             ]=--------------------=|
|=--------------------=[   <axis_at_ph4nt0m_dot_org>   ]=--------------------=|
|=---------------------------------------------------------------------------=|

 

我见过的大多数安全人员,都对技术有着一种狂热,甚至是一种偏执。这种情绪在做安全研究员的时候是非常有好处的,因为作为研究员,可能要偏执考虑到一些极端的情况。这种钻研精神,是光靠勤奋所无法达到的。但是在甲方做安全的话,可能更多时候需要的就不是狂热,而是掌握平衡的艺术。在商业利益与安全性发生冲突时,如何处理好这个平衡,是一个关键。

   举一个简单的例子来说,眼下最流行的XSS攻击,其修补方案从总体上来说,大致可以分为escape output和filter input两种。对于狂热的安全人员来说,当然是恨不得把网站全部弄成静态的,输出都采用escape output,全部输出纯文本,就天下太平了。然而现实与理想总是有差别的,首道难关就是网站肯定会有些富文本的需求。

    当安全和需求相抵触时,一定是安全给商业需求让路。这里要避免一个误区,就是安全应该是为需求而服务的,而不是成为需求的障碍。其实这个观点大多数人都心知肚明,但是在实际操作起来的时候往往会事与愿违。

    再回到富文本上来,当需求决定需要有富文本输出的时候,狂热的安全人员(下称为狂战士吧)就只好退而求其次,要求对富文本做filter input,对其他没有富文本的地方做escape output。接下来问题来了,对于程序员来说,富文本往往采用了一些第三方的,或者是基于第三方的富文本编辑器,还有的是自己实现了一个。而这些富文本 编辑器,往往在考虑xss defense的时候有所欠缺。这时候采用什么样的策略来做filter input,就成为了新的问题。

    第一个难关就是程序员会拉上商业,一起来和狂战士PK,说filter input很容易误杀客户的正常操作,还会影响到性能。当然这小小的难关还难不倒狂战士。狂战士往往会轻蔑的一笑,然后把风险推到商业上,说出了问题让他 背黑锅之类。这种狠话一放出来,商业往往就会退缩了,毕竟狂战士这么个狠角色是摆在那里的。所以最后会决定让程序员去整filter。

    于是程序员简单写了个基于正则的blacklist,并且禁用了部分标签,比如script。狂战士这时候又蹦了出来,对程序员指手画脚,要求禁用 style,因为这玩意太难控制了,黑客有几百种利用style的方式;狂战士还说,基于正则的匹配这个魔法等级太低了,要换个高级魔法,比如个语法分析 器,类似html purify这种,还要有log analysis和realtime monitor功能。

    一般到了这个时候,程序员对狂战士的忍耐已经差不多到极限了,因为甲方网站很少以安全为主要考核因素,没人会认为一个视频网站或者是交友网站的安全需要做 的比FBI更好,因为没那么大的成本投入。于是程序员说要释放这么个高级魔法需要一个团的程序员配合,还需要召唤很长时间才能放出来,所以狂战士的这个非 常牛B的魔法无法完成。而一般在这个时候,程序员往往会用啥性能和稳定性之类的因素来忽悠狂战士,说这种魔法一般有一定概率会反噬,没整好就把自己整残 了。

    狂战士无奈之下,只好同意程序员实现一部分的魔法,filter部分过滤完整有效就行了。做好这个之后,狂战士还让程序员去对没有富文本需求的地方使用 escape output。程序员这时候对狂战士已经忍无可忍了,因为由于以前从来没有注意过xss这方面的问题,所以需要escape的地方是以“千”或者是“万” 为单位的,多如牛毛。于是程序员开始消极怠工,并且开始诉苦。这条路走不通了,狂战士只好开始寻求更好的方案。

    后来狂战士回家睡了一觉,在梦中有仙人传授武艺,于是马上想到了新的办法。第一招是filter output,不过这个扯淡的方法根本属于yy,因为对服务器压力太大。第二招是使用WAF,就是web application firewall,开个虚拟补丁,这样程序员不补也能搞定web漏洞。不过这样就依赖于WAF的规则了,而且治标不治本。看来昨晚那个仙人估计是灶君一类 低级的小神,尽出馊点子。看来狂战士还得继续和程序员PK下去了。

    可以见到,那些牛圈里的狂战士常认为是“奇技淫巧”的XSS问题里,有这么多头疼的问题。简单的问题变得越来越复杂。

    安全是一个持续的过程(process)。既然是过程,就会有第一步、第二步 ... 第N步,有一个持续的概念在里面,不能今天整了,明天就不管了。今天的安全并不代表明天的安全,新的技术和应用在不断发展,就会不断带来新的问题。经常看 到一个升级反而把漏洞升级出来的例子。所以安全是一个持续的对抗过程,hacking与anti-hacking的过程,广义来说,更是一个弱化风险的过 程。

    很多BOSS往往都会这么问狂战士:我上了这个720安全卫士是不是桌面安全就不用管了?我上了这个卖红茶IPS是不是就能挡住所有刺客入侵了? 狂战士这时候很无奈的说:不行,还是有很多trojan和rootkit可以bypass主动防御,很多shellcode和0day可以anti IPS。 于是BOSS很生气的说: 那我花这么多钱买这个做啥? 狂战士一般会忽悠他说:上了这个可以解决90%的攻击。 于是BOSS会很不满意,让狂战士出技术分析报告,一定要有充分的理由才行,狂战士往往要面对这种烦恼。

    其实BOSS的这种观点是一种急功近利的想法,没有认识到安全是一个过程,并且是一个持续改进的过程。不是买个box就能解决问题的。没有100%的安 全,有漏洞的地方太多了。经常有魔法师用木桶原理来阐述安全问题,但其实很多时候,连木板在哪里,到底那块木板才是短板,都没有一个很清晰的认识,因为很 多时候根本无法量化,所以狂战士的工作经常陷入误区。板子太多了,系统、网络、用户、应用、数据、桌面......

    放眼看去,全是短板,每块板子都能让刺客或盗贼轻松的进来,偷走核心数据或者弄摊网站然后扬长而去。或者各种短板互相组合,让问题变得更加扑朔迷离。

广告位