24
程程程程程程 WEB 程程程程 点点 @ 点点 - 点点点 2010-08- 30

程序员常见的Web安全漏洞

  • Upload
    dai-jun

  • View
    3.397

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 程序员常见的Web安全漏洞

程序员常见的 WEB 安全漏洞点苍 @ 淘宝 - 新业

务2010-08-30

Page 2: 程序员常见的Web安全漏洞

0. 大纲

Page 3: 程序员常见的Web安全漏洞

1. 引子不安全的淘宝,一直被紧盯,经常被攻击

• 影响力 – 宕机、篡改页面• 交易 – 盗取银行账号、钓鱼攻击• 用户 – 登录密码以及 cookie/refer/ip 隐私

Page 4: 程序员常见的Web安全漏洞

2.SQL 注入 – 简介

SQL 注入攻击也俗称黑客的填空游戏

• 定义:攻击者提交恶意 SQL 并得到执行• 本质:由于输入检验不充分,导致非法数据被当

做 SQL 来执行• 特点:

– 很常见,使用数据库的应用多如牛毛– 多见于小 PHP 站,采用字符串拼 SQL 的应用– 直接攻击服务器

Page 5: 程序员常见的Web安全漏洞

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>’)

Page 6: 程序员常见的Web安全漏洞

2.SQL 注入 – 防范• 避免字符串拼 SQL ,完全使用参数化查询• 将单引号字符取代为连续 2 个单引号字符• 利用框架的防 SQL 注入功能

Page 7: 程序员常见的Web安全漏洞

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#

• 尽量使用 # ,避免使用 $

Page 8: 程序员常见的Web安全漏洞

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$

Page 9: 程序员常见的Web安全漏洞

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>   

Page 10: 程序员常见的Web安全漏洞

3.XSS – 简介• Cross-Site Scripting ,跨站脚本攻击• 定义:攻击者在页面里插入恶意脚本,当用户浏览该页时,

嵌入其中的恶意代码被执行,从而达到攻击者的特殊目的• 实质:用户提交的 HTML 代码未经过滤和转义直接回显• 特点:

– 攻击授信和未授信用户,不直接攻击服务器– 很常见,例如贴图、 AJAX 回调、富文本(如评论留

言)– 恶意脚本可能位于跨站服务器,但必须用户浏览器执

行,最暴力的防范就是禁用 JS 脚本

Page 12: 程序员常见的Web安全漏洞

3.XSS – 危害• 挂蠕虫、木马、病毒• 盗取用户的 cookie/referer/ip 等信息• 制作钓鱼网站• 用户被提交恶意数据、被执行恶意操作• 帮助 CSRF ,绕过 CSRF 的 token 验证

Page 13: 程序员常见的Web安全漏洞

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>

Page 14: 程序员常见的Web安全漏洞

3.XSS – 防范• 输入过滤, RichTextXssFilter.filter(input)• 输出转义, HTML ESCAPE

Page 15: 程序员常见的Web安全漏洞

4.CSRF – 简介• Cross Site Request Forgery ,即跨站请求伪造,有时也缩写为 XSRF

• 定义: 在恶意站点上,促使用户请求有 CSRF 漏洞的应用的 URL 或欺骗性的表单,从而修改用户数据

• 实质:利用 session 机制,盗用授信用户对应用做一些恶意的 GET/POST 提交

• 特点:– 不同于 XSS ,恶意脚本一定位于跨站服务器– 攻击授信用户,不直接攻击服务器– 近年增多,授信用户的贴图、表单提交、页面交互、 AJAX 调用都可能导致该漏洞

Page 16: 程序员常见的Web安全漏洞

4.CSRF – 实例1. 黑客在服务器端编写恶意脚本,并构造授信操作的

URL ,例如评论2. 恶意用户回复帖子时候贴图,图片地址指向黑客事先编写的恶意脚本

3. 当用户浏览这些帖子时,就会请求该图片,不知觉访问了恶意脚本

4. 恶意脚本利用 302重定向,根据帖子不同跳转到对应的评论 URL

5. 用户在不知情情况下发表了评论,帮恶意用户顶贴6. 所以,论坛一般会让用户在评论时输入验证码,来防止类似攻击

Page 17: 程序员常见的Web安全漏洞

4.CSRF – 危害• 获得管理员权限• 盗取用户银行卡、信用卡信息• 授信用户被提交恶意数据、被执行恶意操作

Page 18: 程序员常见的Web安全漏洞

4.CSRF – 防范• 服务器区分 GET/POST ,增加攻击难度• REFERER校验,补充手段• 改长授信为短授信

– 时间戳– 关键流程使用验证码– Token 验证

• 严防 XSS ,否则短授信可能被伪造

Page 19: 程序员常见的Web安全漏洞

5. 其它漏洞• 命令行注入• 文件上传漏洞• 缓冲区溢出• DDoS• 访问控制漏洞• Logic Flaw ,逻辑漏洞• 无限制 URL跳转漏洞• 表单重复提交• Struts/Webwork远程命令执行漏洞

Page 20: 程序员常见的Web安全漏洞

6. 安全开发流程• 提高安全开发意识• 遵守安全编码规范• 引入 WEB 安全测试• 逆向思维,从黑客角度发现潜在的漏洞

网络安全 ≠ WEB 安全 ≠ XSS ≠ alert

Page 21: 程序员常见的Web安全漏洞

7.黑客攻击思路• 找漏洞

– 分析产品或开源代码– 浏览器、操作系统的 0day 漏洞

• 编写恶意脚本• 蛊惑用户访问恶意链接,执行恶意脚本完成攻击

– 得到用户隐私–拿管理员权限– 钓鱼网站– 挂木马

Page 22: 程序员常见的Web安全漏洞

9. 安全开发 Checklist安全分类 项目 自检 必选

SQL 注入 iBatis 中使用的 $ 变量是否都有元数据标识 *

XSS webx 里是否配置了 vm模板的自动 XSS 输出转义 *

vm模板以外的回显内容是否有显式的输入过滤输出转义 *

贴图功能是否有防 XSS考虑 *

再次确认没有遗漏的搜索框、评论、 AJAX 回调等 XSS高发区CSRF 关键业务是否有验证码校验

授信操作是否都有 token校验 *

贴图功能是否有防 CSRF考虑 *

其它 所用的数据库、操作系统账户是否有过高的权限 *

所用的 struts2 是否修复了远程命令执行漏洞 *

上传文件功能是否考虑了安全防范 *

向导类操作是否都有对前一步骤结果的校验 *

考虑并解决了表单重复提交漏洞 *

与第三方合作的接口是否考虑了安全防范 *

URL跳转是否有白名单限制 *

Page 23: 程序员常见的Web安全漏洞

10. 参考文献• SQL INJECTION SQL注入• iBATIS使用$和#的一些理解• XSS Wikipedia• 不能忽视的XSS漏洞• CSRF Wikipedia• Google GMail E-mail Hijack Technique• Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补• Struts2和Webwork远程命令执行漏洞分析

Page 24: 程序员常见的Web安全漏洞