| 首页 > 新闻公告 > 公告详情
如果所有的输入都是有害的,那我们该如何防御?
2016-12-14

前段时间,有白帽子反馈:“哎,元气客服少女姐姐,为啥我提交的漏洞在评级的时候降级了呢?”经查,该白帽子提交的是一个360小说的反射型XSS漏洞,自评级是“中”,我们的“鉴别员”给了“低”。凭着之前从同事日常沟通那里偷听来的经验,目前白帽子提交的XSS漏洞的多为危害较低,中危的相对都较少,结合着提交的描述来看,判定低危是合适的,所以就跟白帽子做了详尽的沟通,这事儿到这儿也就结束了。


但就是好奇心作祟,或者是闲的“淡腾”,我用XSS作为关键词在360SRC后台进行查询,发现在全年的数据库中,XSS的占比绝对能排进前10名。


怎么这么多?得,聊去吧,去白帽子那儿找答案。


他们跟我说,XSS漏洞的本质就是所有的输入都是有害的,不管是肉眼能看到的输入,还是肉眼看不见的的输入都可能成为XSS漏洞的一个点切入进去。由于XSS漏洞瞬息万变,切入点多,可变性强,容易成为白帽子在各大SRC平台刷分的来源。以360SRC为例,一个反射型XSS低危漏洞,会获得5-15积分(1积分相当于人民币5元)不等,中危或存储型XSS的积分会更高一些,而刷XSS相对初级白帽子来说门槛较低,容易刷分或者是积累财富:)


360SRC一直在追求极致的安全,即使危害再小,我们也认为这是有意义的。细节决定成败,当细节做到极致时,产品安全,企业安全才能达到新的高度。


接下来,向大家推荐一款自家原创的防御前端脚本攻击的工具,它不仅适用于网站站长、Web开发者,对普通的网民用户也是适用。配置简单,易上手,效果明显。

护心镜官方地址:https://0kee.360.cn/hxj/#/ 


如果你还是一个script-kid,下面的内容建议你看完噢,会有收获的。


0x01 XSS是什么?


XSS是黑客通过前端网页向受害者浏览的网页中注入js脚本,从而实现攻击目的。与其它web漏洞不同,XSS并非直接攻击服务器,而是攻击的受害者的浏览器。其在网络中存在的数量,远远大于SQL注入等传统高危漏洞。


XSS在执行方式上可分为反射形XSS和存储形XSS,反射形XSS是指把要执行的js-payload放在URL的参数中,需要攻击者把超链接发送给受害者,诱骗受害者点击才能达到目的,而且现在大部分浏览器内置安全机制(XSS-Filter)都可以有效防御反射形XSS,由此可见反射形XSS利用难度较大,不但需要用户的交互,还要设法绕过浏览器的防御机制。


而存储型XSS就不同了,存储型XSS是指攻击者在某个漏洞页面提交XSS代码,提交的代码一般会存储在服务器中,在另外一个页面进行输出。例如网站中的留言功能,论坛中的评论-审核功能,都是出现存储型XSS的高危地带。这种XSS,很少需要用户刻意交互,往往不知不觉中就会执行,而且会无视浏览器的安全防御机制,直接达到攻击目的。


0x02 XSS的利用和危害


早年间要想成功利用XSS还是有一定门槛的,至少要求攻击者熟练使用js和html构造攻击代码。但是前几年流行的XSS平台大大降低了这种门槛,就好像当年阿D、明小子降低了SQL注入的门槛一样,让任何一个初学的script-kid都可以拿着现成的代码到处攻击。


这是一个XSS平台,里面包含了大部分XSS的攻击方式。一般说,最常见的是偷取cookie,这也是主流的XSS攻击方式。其次还有伪造登陆页面进行钓鱼,诱骗用户输入账户和密码从而获得密码明文的攻击方式。此外,还可偷取用户当前页面的源代码或者后台网页的内容(例如可遍历邮件的内容),还可以结合后台的CSRF漏洞对后台内容进行篡改,例如自动审核某个文章、提升某个普通用户为管理员组的权限,修改网站配置信息等等,甚至可以结合后台的上传漏洞、备份漏洞等直接对服务器进行攻击,获得webshell权限。这类XSS攻击大部分都是攻击网站管理员的,只为获得后台权限甚至是服务器权限。


国内外诸多开源CMS都曾经爆出过威胁管理员后台的存储型XSS漏洞。例如worldpress、Drupal、Discuz!、DeDe、PHPCMS,每一次漏洞的爆出都是一场XSS的狂欢,每次狂欢过后都伴随着大量管理员后台权限的沦陷。以为使用非开源的cms就安全了吗,XSS盲打就是针对未知CMS的一种XSS攻击方式,即在任何可以提交表单的地方提交XSS代码,来攻击任何一个可能出现XSS问题的地方,这种方式成本低廉,即便是没有成功也不会增加攻击者的成本,而一旦成功,往往是渗透过程中的一个里程碑式事件。


其实上述危害都还好,危害最严重的,波及范围最广,而且最难清除的莫过于XSS蠕虫。当然XSS蠕虫属于“富贵病”,并不是每一个网站都具备XSS蠕虫生存的土壤,小网站想得也得不上这种病。一般来说,web2.0网站中,用户间交互越多的,越容易成为XSS滋生的土壤,例如微博,SNS社交网站等等。XSS蠕虫以普通用户为攻击目标,当一个用户被XSS袭击后,通过CSRF可能会修改自身的备注信息、个人资料,或者发帖发私信,里面夹杂着XSS代码,当其他用户浏览到该用户的发表的带有XSS代码的内容时,也会受到相同的XSS的袭击,这样感染用户的数量呈指数增长,当厂商发现的时候,很可能已经大面积爆发了,历史上,人人网、新浪微博、百度贴吧等社交平台都受过XSS蠕虫的袭击。09年校内网蠕虫感染用户达到500万,11年新浪微博蠕虫1个小时内感染用户就达到了3万,可见危害之大范围之广。


0x03 传统XSS防御手段


如何根治XSS呢,这里可以负责任的告诉你,没有一种防御方法是通用万能的。XSS攻击方式根据漏洞出现位置、浏览器环境、业务环境、攻击目的、WebServer类型的不同而变化(所以XSSer们往往称自己为猥琐流)。它不像其他web漏洞:上传、SQL注入、文件包涵,仅仅需要在服务器上做下过滤(甚至是安装一个统一过滤脚本或者WAF)就可以成功防御的,所以根据实际情况,针对XSS防御措施也是不同的,大体来说,有以下几点:


1.服务器端过滤

服务器端转义输入的左右尖括号,对HTML标签进行编码,这是主流的防御XSS的方法,可有效防御一般的XSS攻击。

缺点:无法防御部分DomXSS攻击,以及Flash XSS攻击。


2.前端过滤

对innerHTML的内容进行检查,对eval中用户输入的参数进行检查,对于使用的js库(例如jquery)以及Flash进行检查,以免使用了存在XSS漏洞的js库和swf文件。

缺点:只是针对DomXSS有效


3.HttpOnly

在服务器端做配置,在响应头里对cookie中的session进行httponly标记,被标记的session无法被js读出,因此可以有效防御针对偷取cookie的XSS攻击。

缺点:只能防御针对cookie的XSS攻击。


4.Content Security Policy (CSP)

CSP策略规范了网页中某个标签所能加载的第三方域,从协议层把一些存在安全隐患的用法默认给干掉,把同源同域更发挥到了极致,结合禁止内联脚本的机制,可以有效防御大部分XSS攻击。

缺点:需要在服务器端进行配置,而且一旦配置不当,正常业务也会受到影响。配置不严格又会导致绕过。对于大型的、复杂的网站业务,维护成本较高。


5.XSS防火墙技术

这种技术目前正处于概念阶段,并没有大范围投入使用,其思路是用js代码来对当前网页进行防护,防止发生XSS行为。而且设计理念也是各有不同。


0x04 前端的主动防御


对于大部分的互联网企业而言,目前都还停留在扫描一起,发现一起,发现一起,修复一起的后知后觉中,那么如何能针对前端攻击做出主动防御,实现快速响应呢?


360 0kee Team设计的“护心镜“,通过Hook XSS的常用函数,并监控DOM元素的创建,从而对整个页面的js行为进行监控。当发现页面中存在XSS攻击行为时,可根据预置的选项,进行放行,提醒用户选择,阻拦三种处理方式,同时预警中心会收到一次事件的告警,安全人员可根据告警进行应急响应处理。


“护心镜”分为网民版和开发者版,两个版本的的配置都不复杂,开发者版只需要在页面引入如下代码即可:

var hxj_config = {

    project_key: "*****(平台分配)",

    domain_white: ["0kee.360.cn"],

    enable_plugin:{***(启用的插件列表)}

};



护心镜的代码大概分为两部分,第一部分是配置,可手工修改(详细配置说明见下面)或者由护心镜在线系统生成。第二个script标签加载的是护心镜的核心代码。需要注意的是配置代码一定要在核心代码的前面,并且最好要紧挨着。 

将以上代码放到html页面的head或body中(推荐head,尽量前置),网页就会受到保护了。


建议:为了让网站中的每个页面都受到保护,我们建议将护心镜加载到静态模版里,或者与jquery等开源库合并在一起。


护心镜配置说明

只需要填写你的网站所正常引用的第三方资源的域名即可,这些资源类型包括:image、css、js、flash、vedio、iframe引用的资源等,“护心镜”会将这些域名添加到信任白名单中,如果没有引用则留空。为了方便广大站长收集自己网站上使用的第三方资源,0kee Team特意开发了一款Chrome扩展Res_Discover:https://chrome.google.com/webstore/detail/resdiscover/fobmnepngipfbmfmoocoikchdilekepc?utm_source=chrome-ntp-icon


然后选择使用的插件,每一种插件对应一种XSS攻击,例如盗取cookie、偷取表单、上传webshell、钓鱼等等。最后选择事件的处理方式:放行、提醒、阻断。


以QQ邮箱为例,模拟加载“护心镜”后,执行偷取cookie的XSS代码会是如下的效果:


护心镜拦截到攻击请求时会提示用户选择处理方式,内容包含黑客接收cookie所用的域名,同时可以在护心镜的告警中心找到这条告警。


其中“调用栈”是页面中发生过的事件列表,“告警源”是发生XSS的页面url地址。


这样有了护心镜,不但可以将降低XSS漏洞的危害、提高XSS利用的门槛,更有利于我们去发现未知的XSS漏洞,以便及时地去做应急响应。


护心镜官方地址:https://0kee.360.cn/hxj/#/  欢迎大家试用交流。