频道栏目
首页 > 资讯 > 系统安全 > 正文

安全幻想曲2008

10-08-06        来源:[db:作者]  
收藏   我要投稿

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

    举一个简单的例子来说,眼下最流行的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%的安全,有漏洞的地方太多了。
经常有魔法师用木桶原理来阐述安全问题,但其实很多时候,连木板在哪里,到底那块木板才
是短板,都没有一个很清晰的认识,因为很多时候根本无法量化,所以狂战士的工作经常陷入
误区。板子太多了,系统、网络、用户、应用、数据、桌面......

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

    前面说的WAF就是一种比较功利的做法,虽然厂商经常会蹦出来说这玩意是需要有专人
维护的,也是一个持续的过程。但实际上很多购买WAF的用户都没有好好的去做这个过程。
其实WAF、IPS最大的软肋不是在没人跟进上,而是在于其是串联的网络上的,特别是开了虚
拟补丁的阻断模式的时候。这对于高可用性的应用来说,绝对是无法忍受的。没人敢背这个
误杀的黑锅。要是因此导致了PV下降,可能老板就要喊到办公室去喝茶了。不过WAF也不是
完全没用,如果能够用好的话,对于网站还是还是很有帮助的,至少在monitor和攻击流量分
析上起着积极的意义。不过前提是用好。

    刚才说了安全是一个过程(Process),其实有人跟进这个过程还不够,下面还要重点说说
深度防御的思想。经常看到YY小说的作者在写到黑客攻防的时候,说到XXX在xx分钟内就突
破了N道防火墙,N大于100;变形金刚里也这么有这种场景。其实这纯粹是扯淡,没事整那么
多防火墙做什么,无端影响了可用性。不过YY作者深度防御的理念还是正确的,只是他不知
道那玩意不应该单纯叫防火墙,要想表达这个思想,可以整个专业名词,比如:多层防御体系。
这样装B就可以装的比较像样了。举例来说,可以在应用层校验用户输入数据,DB层面检查每
条sql,操作系统上细分权限,服务最少化,网络上防御arp spoof,加密传输通道,做好ACL…类
似措施还有很多,防御的方案交叉层叠起来,就能起来一个比较好的保护效果。

    不过偏偏还有不识趣的,比如前面的很多程序员都会说,我都已经做了filter input,还
要escape output做啥。狂战士一般听到后会有想要狂化的冲动。按耐住狂化,告诉程序员,
说filter input可能会做不干净,会被bypass,毕竟如果遇到一个手执绝世0day(bypass
filter)的9级刺客,什么牛B的防御魔法都挡不住,所以能escape output的地方,最好escape
掉,这样最干净。可是即便是这样做好了,还是有些会有很难处理和发现的地方,比如在DOM
里的XSS,比如在JS里面一些写的很BT的地方,等。这些只能靠肉眼去看了。PK还得进行下去。

    但是程序员还是不能很好的理解,他们跑出来说:我这里做了完善的access control,只
有管理员才看的到,这里就算有注射有跨站就随他去了,不需要修复。想偷这种懒的人其实
不在少数。这种想法违背了深度防御的思想。先姑且不论如果管理员密码泄露,或者管理员
是个内鬼的情况。如果刺客通过注射拿到了管理员密码,或者是直接通过XSS和CSRF来对后
台进行注射,那么前面的access control就完全没作用了。

    在一定程度上,是可以容忍风险的存在的,但是从长期来看,这种做法是非常不可取的。
比如有的管理员会说防火墙只允许80端口,那么RPC漏洞或开其他端口的应用漏洞是否就可
以不补了。也许一时来说是没什么问题,但是如果放置不管将导致没有人来维护漏洞,也许
哪天的防火墙策略变更,或者来自内部系统的威胁,都有可能导致当时看起来无害的漏洞被
利用。而这种做法的一个后果往往是难以检查原因,就是说咋死的都不知道。所以这又回到
了开始的话题:安全是一个持续的过程。

    在灌输完深度防御的思想给程序员以后,狂战士又被另外一种程序员打击到崩溃了。面
对满目都是红色的扫描报告,他们说:我这个xxx ftp没漏洞,除非狂战士可以证明黑客能搞
进来拿到shell。一般狂战士听到这种要求,狂化的概率在80%以上。首先,不是只有能拿到
shell的才叫漏洞。一个dos可能

相关TAG标签
上一篇:PHP新手上路(九)
下一篇:PHP新手上路(八)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站