Upload
dai-jun
View
3.397
Download
0
Tags:
Embed Size (px)
Citation preview
程序员常见的 WEB 安全漏洞点苍 @ 淘宝 - 新业
务2010-08-30
0. 大纲
1. 引子不安全的淘宝,一直被紧盯,经常被攻击
• 影响力 – 宕机、篡改页面• 交易 – 盗取银行账号、钓鱼攻击• 用户 – 登录密码以及 cookie/refer/ip 隐私
2.SQL 注入 – 简介
SQL 注入攻击也俗称黑客的填空游戏
• 定义:攻击者提交恶意 SQL 并得到执行• 本质:由于输入检验不充分,导致非法数据被当
做 SQL 来执行• 特点:
– 很常见,使用数据库的应用多如牛毛– 多见于小 PHP 站,采用字符串拼 SQL 的应用– 直接攻击服务器
2.SQL 注入 – 危害• 字符串填空
– 绕过登录鉴权 select * from user where name=‘’ or ‘1’=‘1’ and pw=‘’ or ‘1’=‘1’
• 执行任意 SQL ,利用注释, select * from item whre item=‘’;your sql--’
或整型字段, select * from item where item_id=0;your
sql;
– 篡改系统账号 alter login sa with password=‘123456’
– 用户隐私外泄 select * from user
– 系统细节外泄 select * from sys.tables
– 控制操作系统 xp_cmdshell “net stop iisadmin”
– 损害硬盘宕机 xp_cmdshell “FORMAT C:”
– 埋入 XSS 漏洞 insert into comment(cnt) values(‘<script>…</script>’)
2.SQL 注入 – 防范• 避免字符串拼 SQL ,完全使用参数化查询• 将单引号字符取代为连续 2 个单引号字符• 利用框架的防 SQL 注入功能
2.SQL 注入 – iBatis 1
根据彩种 ID 和彩期名得到一个彩期, int type=123; String title=“123” 。
结果:select * from item where type=123 and title=‘123’
$ 不过滤直接文本替换:select * from item where type=$type$ and title=‘$title$’
# 根据变量类型来替换:select * from item where type=#type# and title=#title#
• 尽量使用 # ,避免使用 $
2.SQL 注入 – iBatis 2
• 尽量使用 # ,避免使用 $• 若不能避免 $ ,则带上元数据标识
SQL 中需要用户提交的 ASC 、 DESC 等 SQL 关键字select * from user order by gmt_create $ordertype:SQLKEYWORD$
SQL 中需要用户提交的字段名、表名等元数据select * from user order by $orderByColumn:METADATA$
2.SQL 注入 – iBatis 3
• 尽量使用 # ,避免使用 $• 若不能避免 $ ,则带上元数据标识• 用迭代替换 IN 关键字中的 $
int orderStatus = {0,1,2,3} List orders = sqlMap.queryForList(“OrderDAO.findLlOrder", orderStatus );
<select id=“findOrder” parameterClass=“java.lang.Array” resultClass=“java.lang.Object”> select * from order where order_status in <iterate open=“(“ close=“)” conjunction=“,”> #orderStatus[]# </iterate> </select>
3.XSS – 简介• Cross-Site Scripting ,跨站脚本攻击• 定义:攻击者在页面里插入恶意脚本,当用户浏览该页时,
嵌入其中的恶意代码被执行,从而达到攻击者的特殊目的• 实质:用户提交的 HTML 代码未经过滤和转义直接回显• 特点:
– 攻击授信和未授信用户,不直接攻击服务器– 很常见,例如贴图、 AJAX 回调、富文本(如评论留
言)– 恶意脚本可能位于跨站服务器,但必须用户浏览器执
行,最暴力的防范就是禁用 JS 脚本
3.XSS – 实例• 彩票业务 AJAX 回调导致的 XSS 漏洞
http://caipiao.taobao.com/lottery/order/getDcSpInfoAjax.htm?callback=%3Cscript%3Ealert%28%27xss%27%29%3C/script%3E
3.XSS – 危害• 挂蠕虫、木马、病毒• 盗取用户的 cookie/referer/ip 等信息• 制作钓鱼网站• 用户被提交恶意数据、被执行恶意操作• 帮助 CSRF ,绕过 CSRF 的 token 验证
3.XSS – 代码分析• <span>$!productName</span>• <input type="hidden" Name="OrinSearchText" value="$!searchBarView.LastKeyword"
id="OrinSearchText_rfs" $disabledFlag />• <script>var fromgcn = '$!rundata.Parameters.getString('fromgcn')';</script>
• <span><iframe src=http://hacker.com></iframe></span>• <input type="hidden" Name="OrinSearchText" value="" ><iframe
src=http://hacker.com></iframe>< "" id="OrinSearchText_rfs" $disabledFlag />• <script>var fromgcn = '';hackerFunction(document.cookie);''; </script>
3.XSS – 防范• 输入过滤, RichTextXssFilter.filter(input)• 输出转义, HTML ESCAPE
4.CSRF – 简介• Cross Site Request Forgery ,即跨站请求伪造,有时也缩写为 XSRF
• 定义: 在恶意站点上,促使用户请求有 CSRF 漏洞的应用的 URL 或欺骗性的表单,从而修改用户数据
• 实质:利用 session 机制,盗用授信用户对应用做一些恶意的 GET/POST 提交
• 特点:– 不同于 XSS ,恶意脚本一定位于跨站服务器– 攻击授信用户,不直接攻击服务器– 近年增多,授信用户的贴图、表单提交、页面交互、 AJAX 调用都可能导致该漏洞
4.CSRF – 实例1. 黑客在服务器端编写恶意脚本,并构造授信操作的
URL ,例如评论2. 恶意用户回复帖子时候贴图,图片地址指向黑客事先编写的恶意脚本
3. 当用户浏览这些帖子时,就会请求该图片,不知觉访问了恶意脚本
4. 恶意脚本利用 302重定向,根据帖子不同跳转到对应的评论 URL
5. 用户在不知情情况下发表了评论,帮恶意用户顶贴6. 所以,论坛一般会让用户在评论时输入验证码,来防止类似攻击
4.CSRF – 危害• 获得管理员权限• 盗取用户银行卡、信用卡信息• 授信用户被提交恶意数据、被执行恶意操作
4.CSRF – 防范• 服务器区分 GET/POST ,增加攻击难度• REFERER校验,补充手段• 改长授信为短授信
– 时间戳– 关键流程使用验证码– Token 验证
• 严防 XSS ,否则短授信可能被伪造
5. 其它漏洞• 命令行注入• 文件上传漏洞• 缓冲区溢出• DDoS• 访问控制漏洞• Logic Flaw ,逻辑漏洞• 无限制 URL跳转漏洞• 表单重复提交• Struts/Webwork远程命令执行漏洞
6. 安全开发流程• 提高安全开发意识• 遵守安全编码规范• 引入 WEB 安全测试• 逆向思维,从黑客角度发现潜在的漏洞
网络安全 ≠ WEB 安全 ≠ XSS ≠ alert
7.黑客攻击思路• 找漏洞
– 分析产品或开源代码– 浏览器、操作系统的 0day 漏洞
• 编写恶意脚本• 蛊惑用户访问恶意链接,执行恶意脚本完成攻击
– 得到用户隐私–拿管理员权限– 钓鱼网站– 挂木马
9. 安全开发 Checklist安全分类 项目 自检 必选
SQL 注入 iBatis 中使用的 $ 变量是否都有元数据标识 *
XSS webx 里是否配置了 vm模板的自动 XSS 输出转义 *
vm模板以外的回显内容是否有显式的输入过滤输出转义 *
贴图功能是否有防 XSS考虑 *
再次确认没有遗漏的搜索框、评论、 AJAX 回调等 XSS高发区CSRF 关键业务是否有验证码校验
授信操作是否都有 token校验 *
贴图功能是否有防 CSRF考虑 *
其它 所用的数据库、操作系统账户是否有过高的权限 *
所用的 struts2 是否修复了远程命令执行漏洞 *
上传文件功能是否考虑了安全防范 *
向导类操作是否都有对前一步骤结果的校验 *
考虑并解决了表单重复提交漏洞 *
与第三方合作的接口是否考虑了安全防范 *
URL跳转是否有白名单限制 *
10. 参考文献• SQL INJECTION SQL注入• iBATIS使用$和#的一些理解• XSS Wikipedia• 不能忽视的XSS漏洞• CSRF Wikipedia• Google GMail E-mail Hijack Technique• Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补• Struts2和Webwork远程命令执行漏洞分析