1 / 25

客户端消灭XSS攻击

客户端消灭XSS攻击. 王智勇. XSS 攻击可以用来做什么?. 突破浏览器的域限制. 360, 傲游等浏览器的命令执行. Xss 蠕虫攻击. 用户信息. XSS. 私密信息:日志,相片,邮件. 管理信息. DDoS 攻击. 后台地址,管理员帐号信息 甚至直接通过 Ajax 上传 Shell. 客户端信息. 针对浏览器缺陷实施攻击. 传统的服务端xss防御. 常见XSS利用方法 1. </script> 或者</style>de等标签闭合当前脚本,然后输入自定义内容。 2.根据 JS 或css上下文,构造正确的闭合。. 3.利用浏览器解析bug.

slone
Download Presentation

客户端消灭XSS攻击

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 客户端消灭XSS攻击 王智勇

  2. XSS攻击可以用来做什么? 突破浏览器的域限制 360, 傲游等浏览器的命令执行 Xss蠕虫攻击 用户信息 XSS 私密信息:日志,相片,邮件 管理信息 DDoS攻击 后台地址,管理员帐号信息 甚至直接通过Ajax上传Shell 客户端信息 针对浏览器缺陷实施攻击

  3. 传统的服务端xss防御 • 常见XSS利用方法 • 1.</script>或者</style>de等标签闭合当前脚本,然后输入自定义内容。 • 2.根据JS或css上下文,构造正确的闭合。 3.利用浏览器解析bug

  4. 传统的服务端xss防御 • 输入过滤: • 过滤关键字script,alert,document.cookie • 过滤特殊字符/\'"<>\u%0a等 • 长度限制,内容限制 • 净化输出: • 对输出内容做html编码等

  5. 传统的服务端xss防御 • 缺陷: • 1.易被绕过: • 新的与废弃标签(html5) • 多种编码(unescape,base64,url,html实体编码) • 提交位置不同(url,post(两种),refer,ua) • 浏览器缺陷(差异性与解析bug) • 2.对基于dom的xss攻击无能为力

  6. 基于客户端的xss防御 • 思考: • xss(csrf)的原理: • 攻击客户端,在客户端执行恶意脚本 • 防御方法: • 在恶意脚本执行前,执行基于防御的脚本,来阻止恶意脚本执行。

  7. 基于客户端的xss防御 • 思路: • Preventing XSS with Data Binding by Stefano Di Paola 2006 (数据绑定) • ACS By Eduardo Vela 2009(动态内容签名,沙箱) • Locking the Throne Room 2011 (利用ECMAScript5来锁定对特殊内容或对象的访问权限) • JSReg (Javascript解析) • JSLR 2012(为标签与属性添加随机Token)

  8. 基于客户端的xss防御 • 思想: • 使浏览器了解哪些内容是正常的,来自于应用程序生成 • 哪些内容是有害的,在生成新的页面前消除,并阻止恶意脚本访问某些敏感对象。 • 关键技术点: • <plaintext>标签:使html渲染无效化 • onload或DOMContentLoaded:在dom加载事件发生后执行基于防护的脚本 • 解析DOM • 对DOM元素进行过滤和重组,净化恶意脚本内容

  9. 基于客户端的xss防御 • 参数绑定: • 在<plaintext>标签下保存所提交的参数名值对 • 在DOM加载完成后立即调用该事件处理器,将危险标签元素与文本元素内容送到指定文件进行解析处理,最后将净化后的内容返回给浏览器。

  10. 基于客户端的xss防御

  11. 基于客户端的xss防御

  12. 基于客户端的xss防御 • ACS(Active Content Signatures) • 三类沙箱 • JSReg • HTMLParser • CSSParser

  13. 基于客户端的xss防御 • 优势: • 易于部署,不需要客户端安装额外插件等 • 以下为在mod_security中添加针对ACS的支持 • SecContentInjection On • SecRule RESPONSE_CONTENT_TYPE "^text/html" "phase:4,t:none,nolog,prepend:'<html><head><script type=\"text/javascript\" src=\"/acs.js\"></script><script type=\"text/javascript\" src=\"/xss.js\"></script>'" • 功能强大: • ACS2.0添加了白名单,强制加密等功能

  14. 基于客户端的xss防御

  15. 基于客户端的xss防御 • Locking_the_throneroom • 利用DOM,通过重载javascript的函数来阻止访问危险对象 • __defineGetter__() • <script> • document.__defineGetter__('cookie',function(){ • alert('no cookie access'); • return false; • }) </scirpt> ... <script>alert(document.cookie)</script>

  16. 基于客户端的xss防御 • 问题: • IE不支持 • 可以简单bypass(delete操作符,同样被重载等) • Bypass: • <script> • delete document.cookie; • alert(docment.cookie); </scirpt>

  17. 基于客户端的xss防御 • 利用ECMA Script5 • 对象扩展: • Object.freeze()//使得所有属性变成只读,同时防止新添属性或删除属性 • Object.seal() //对象现在有seal()方法(防止添加新的属性和删除既有属性) • Object.defineProperty()/Object.defineProperties() • Object.preventExtensions()//组织向对象添加新的原型属性 • <script> • Object.defineProperty(document,'cookie',{ • get:function(){return false} • set:function(){return false} • configurable:false}) </scirpt>

  18. 基于客户端的xss防御 • 优势: • 阻止cookie或其他对象调用 • 阻止方法调用 • 比delete优先级更高 • 重定义不起作用 • Components.lookupMethod()不起作用 • 可以添加get,set访问日志 • 应用于存在的HTML元素 • 没有误报

  19. 基于客户端的xss防御 • 缺陷: • 影响已存在的javascript程序 • 影响第三方应用 • 不能智能匹配

  20. 基于客户端的xss防御 • JSLR • 通过随机化标签与属性节点来阻止黑客注入恶意代码。 • 原理: • 向JSLR脚本传入三个随机token,分别为标签id,单引号id和双引号id。 • 如果标签或属性中不存在随机token,则忽略。 • 移除属性中所有单引号和双引号,只有两个单引号或双引号id之间的内容才会被执行

  21. 基于客户端的xss防御

  22. 基于客户端的xss防御 • 模板代码: • <iframe <?php echo $JSLR->id?>_src="http://www.microsoft.com/"></iframe> • 实际生成代码: • <iframe c886c4256f0cd99c99bb4256dc85c53257d2_src="http://www.microsoft.com/"></iframe> • JSLR会查找所有的标签和属性,如果黑客注入如下代码:<iframe src=javascript:alert(1)></iframe>,JSLR会忽略标签内的内容,新的DOM元素变成<iframe></iframe>

  23. 基于客户端的xss防御 • 防御DOM XSS • 防御代码: • <script <?php echo $JSLR->id?>_=1>x='<?php echo $JSLR->singleQuote?><?php echo $_GET['dom']?><?php echo $JSLR->singleQuote?>';</script> • 生成代码: • <script>x=’randomtoken ATTACKER CONTROLLED VALUE randomtoken’</script> • JSLR首先移除属性中所有引号,之后执行随机token内的代码

  24. 基于客户端的xss防御 • 限制: • 需要浏览器支持DOMContentLoaded事件。 • 在JSLR脚本运行之前的注入代码可能执行 • 某些DOM XSS攻击例如location.hash, location.search结合document.write/innerHTML可能bypass • 改进:加入针对()的随机token,这样可以防止inline脚本直接调用类似document.write,getAttribute()等函数

  25. 基于客户端的xss防御 综述: 1.服务端的防护策略是基础 2.ACS可以与WAF类产品配合使用,但是由于源码是不变的,所以扫描器仍然会大量报警 3.JSLR添加新的token,需要模板支持,易于实现 4.利用ECMA Script5来提高安全性

More Related