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行为。而且设计理念也是各有不同。
像百度FEX设计的这款,模拟了CSP策略实现了对XSS的防御。
http://fex.baidu.com/blog/2014/06/xss-frontend-firewall-4/
0x04 前端的主动防御
对于大部分的互联网厂商而言,目前都还停留在扫描一起发现一起,发现一起修复一起的后知后觉中,那么如何能针对前端攻击做主动防御,实现快速响应呢?360WEB攻防团队0kee Team设计的“护心镜“,通过Hook XSS的常用函数,并监控DOM元素的创建,从而对整个页面的js行为进行监控。当发现页面中存在XSS攻击行为时,可根据预置的选项,进行放行,提醒用户选择,阻拦三种处理方式,同时预警中心会收到一次事件的告警,安全人员可根据告警进行应急响应处理。
“护心镜”的配置也不复杂,只需要填写你的网站所正常引用的第三方资源的域名即可,这些资源类型包括: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地址。
护心镜官方地址:http://0kee.360.cn/hxj/,目前邀请试用中。
福利:邀请码
23c66f36e35645a3bd35
9dd245a58d7b21dc243f
5f88068ae2ba94d4adb7
d3c8b8dc1ae609ebc4e5
9818d4f56c84ddb727dd
9e30b0c4f354f41d8f67
e4d017a50a1d3eb38122
ce83fe1a638cb96ed701
89c81c4a1f349bab5496
df2fb51eebd8c190500c
d92cda77b8ae90a4d7cb
1d4837a708a61f52c593
d1fc22072cf71a794f15
3dabb9fea8cb33837c8b
79ac0b29e6a9c05abc2b
a9db2cd90f86d3358f69
f39281e3b51e8e760161
0dc2a910b8ee287937f2
f8e890cbd519eeeacd7b
a3cd01992bf2eb5e0549
本文由 360安全播报 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/2265.html
!评论内容需包含中文