1、WEB开发安全与防御策略 By 陈于喆目录 1.核心防御机制 2.攻击验证机制 3.攻击会话管理 4.攻击访问控制 5.代码注入 6.利用路径遍历目录 7.跨站脚本 8.重定向攻击 9.json劫持 10.缓存区溢出和整数漏洞 11.攻击web服务器 12.查找源代码中的漏洞核心防御机制概述 SSL安全协议我们在一些站点有时候会看到“本站点使用SSL技术,您可以放心使用本站点,我们提供绝对的安全的数据保障”SSL可以为用户额web服务器传输的数据提供机密性与完整性的保护功能,防止信息泄露,但SSL并不能防御直接针对应用程序的服务器或客户组建的攻击 核心防御机制概述许多的攻击成功是对于漏洞的攻击
2、,据统计我们的应用程序主要存在漏洞被攻击的主要表现类别1.不完善的身份验证2.不完善的访问控制3.各种注入和路径遍历4.跨站脚本5.信息的泄露6WEB应用程序的几个核心防御机制 处理用户访问应用程序的数据和功能1.身份验证2.会话管理3.访问控制WEB应用程序的几个核心防御机制 处理用户对应用程序功能的输入1.拒绝已知的不良输入(也就是我们所说的黑名单,效率低,无法抵御未知的攻击)2.接受已知的正常输入 (白名单,最有效的方法,但无法满足各式各样输入的需求)3.净化数据(可能存在的恶意字符将其进行适当的编码或转义,只留下已知的安全字符)4.安全数据处理 (在程序进行数据处理时,采用相关的安全机
3、制,如如在处理数据库访问过程中使用参数化配置查询,就可以避免SQL注入的攻击)WEB应用程序的几个核心防御机制 边界确认边界确认是一种更有效的模型,此时服务器端应用程序的每一个单独的组件或功能单元将其输入当作潜在的恶意来源输入对待WEB应用程序的几个核心防御机制 多步确认和规范化 在确认的检查过程中,需要几个步骤处理用户提交的输入,如为了防御跨站脚本的攻击,应用程序过滤用户提交的数据中的 但攻击者可以通过script,由于过滤无使用递归运行,过滤的表达式周边的数据又合并在一起,重新建立起恶意的表达式。攻击验证机制 验证技术 1.基于HTML表单的验证(90%以上都采用这种机制)2.多元机制,如
4、组合型密码和物理令牌(多见于银行等)3.客户SSL证书或智能卡(成本高昂,用户不多的关键安全应用程序才会使用)4.使用NTLM整合Windows的验证验证机制设计的缺陷1.系统对密码保密性要求不强2.允许蛮力攻击登录3.详细的失败登录消息4.证书传输容易受到攻击(如果使用非加密的http链接传输证书,处于网络适当的位置的窃听者可以拦截到这些证书.窃听者可以处在,用户本地网络上,用户的it部门上,用户的ISP上,托管应用程序的ISP内等等)5.记住我的功能(过于简单的cookie执行,如rememberuser=chenyz,即使cookie中保存用于,重新识别用户的信息得到适当的保护(加密)以
5、防止用户进行判断和猜测,但攻击者通过跨站脚本之类的漏洞依然可以进行获得信息。)保障验证机制的安全1.使用可靠的证书2.安全处理证书(1)必须保证使用HTTPS加载表单(2)只能使用POST请求向服务器传输证书,不能将证书放在URL参数或cookie中,不能将证书返还给用户(3)保存证书,最常使用强大的散列函数,即使攻击者能够访问到应用程序数据库中的数据,他们也无法轻易的恢复证书(4)即使使用记住我的功能,在这情况下,客户不适宜保存明文证书,必须使用密钥加可逆的形式保存密码,且只有服务器知道密钥)(5)用户有责任定期修改密码保障验证机制的安全3.正确验证证书4.防止信息泄漏5.防止蛮力攻击6.防
6、止滥用密码修改功能7.日志,监控和通知问题 http/* 从本质上讲,HTTP协议没有状态。它基于一种简单的请求-响应模型,其中每对消息代表一个独立的事务。协议本身并无将某位用户提出的各种请求联系起来的机制,并将它们与Web服务器收到的所有其他请求区分开来,执行会话的最简单、也是最常见的方法就是向每名用户发布一个唯一的会话令牌或标识符。和验证机制一样,通常会话管理功能中也存在着大量缺陷,攻击者只需递增应用程序向他们发布的令牌值,就可以转换到另一名用户的账户。攻击会话管理会话管理机制中存在的漏洞主要分为两类:1.会话令牌生成过程中的薄弱环节;2.在整个生命周期过程中处理会话令牌的薄弱环节。会话令
7、牌生成过程中的薄弱环节 1.令牌有一定含义(一些会话令牌通过用户的用户名或电子邮件地址转换而来,或者使用与其相关的其他信息创建。这些信息可以某种方式进行编码或模糊处理,也可与其他数据结合在一起。)dXNlcm5hbWU6Y2hlbnl6O2FwcD1hZG1pbjtkYXRlOjIwMTAtMDEtMTI=进行Base64解码username:chenyz;app=admin;date:2010-01-12攻击者可以利用这个会话令牌的含义猜测其他应用程序用户的当前会话。使用一组枚举出的用户名或常见用户名,就能够迅速生成大量可能有效的令牌,并进行测试以确定它们是否有效。在生命周期过程中处理会话令
8、牌的薄弱环节 2.令牌在网络的泄漏一些应用程序在登录阶段选择使用HTTPS保护用户证书的安全,但在用户会话的其他阶段转而使用HTTP。许多Web邮件应用程序以这种方式运作。窃听者无法拦截用户的证书,但仍然可以截获会话令牌http:/ 3.会话的可预测性 4.会话终止易受攻击(1)尽可能缩短一个会话的寿命可降低攻击者截获、猜测或滥用有效会话令牌的可能性(1)如果用户不再需要现有会话,终止会话为用户提供一种使其失效的途径,例如服务器端发布一个set-cookie清空指令 5.宽泛的cookie范围(1)cookie域限制(2)cookie路径限制问题 登录应用程序后,服务器建立一下cookieSe
9、t-cookie:sessid=amltMjM6MTI0MToxMTk0OcwODYz;一个小时后再次登录得到以后cookie:Set-cookie:sessid=amltMjM6MTI0MToxMTk0ODc1MTMy;我们可以尝试得到什么推论注入解释型语言基于解释型语言的执行方法,产生了一系列的代码注入漏洞,任何实际用途的应用程序都会受到用户提交的数据helloworld.sh#!/bin/shecho$1输入执行./helloworld.sh hello worldhello world但在解释shell脚本环境支持使用反引号()插入另一条命令./helloworld.sh ls-laS
10、QL注入 SQL注入攻击的种类1.没有正确过滤转义字符SELECT*FROM users WHERE name=+userName+;SELECT*FROM users WHERE name=a OR t=t;2.错误的类型处理SELECT*FROM data WHERE id=+a_variable+;SELECT*FROM DATA WHERE id=1;DROP TABLE users;3.数据库服务器中的漏洞MYSQL服务器中mysql_real_escape_string()函数漏洞,允许一个攻击者根据错误的统一字符编码执行成功的SQL注入式攻击SQL注入攻击的种类 4.盲目SQL注
11、入式攻击Absinthe的工具就可以使这种攻击自动化 5.条件响应 6.条件性差错 7.时间延误防御和检查SQL注入的手段 1.使用参数化的过滤性语句 2.还要避免使用解释程序 3.防范SQL注入,还要避免出现一些详细的错误消息 4.使用专业的漏洞扫描工具 5.最后一点,企业要在Web应用程序开发过程的所有阶段实施代码的安全检查 渗透攻击测试步骤 1.如果原始值为2,我们使用(1+1)或(3-1),程序作出相同回应,表明易受攻击 2.如果单引号被过滤掉,我们可以用ASCII命令,使它返回字符的数字化代码,如51-ASCII(1)3.在URL编码中,&和=用于链接名称/值对,建立查询字符串应当分
12、别使用%26和%3d进行编码 4.如查询字符串不允许使用空格,使用+或%20编码 5.分号被用于分割cookie自读,使用%3d编码利用路径遍历 如果应用程序使用用户可控制的数据,以危险的方式访问位于应用服务器或其它后端文件系统的文件或目录,就会出现路径遍历String rurl=request.getParameter(“rurl”);BufferedWriter utput2=new BufferedWriter(new FileWriter(new File(“/home/chenyz/”+rurl);攻击者可以将路径遍历序列放入文件名内,向上回溯,从而访问服务器上的任何文件,路径遍历序
13、列叫“点-点-斜线”(.)http:/*/go.action?file=.etcpasswd 避开过滤第一种是过滤文件名参数中是否存在任何路径遍历序列(.)如果程序尝试删除(.)来净化用户输入,可以用./././.进行URL编码点-%2e 反斜杠-%2f 正斜杠-%5c进行16为Unicode编码点-%u002e 反斜杠-%u2215 正斜杠-%u2216进行双倍URL编码点-%252e 反斜杠-%u252f 正斜杠-%u255c进行超长UTF-8 Unicode编码点-%c0%2e%e0$40%ae%c0ae 反斜杠-%c0af%e0%80af%c0%af 正斜杠-%c0%5c%c0%80%5c 预防路径遍历 1.对用户提交的文件名进行相关解码与规范化 2.程序使用一个硬编码,被允许访问的文件类型列表 3.使用getCanonicalPath方法检查访问的文件是否位于应用程序指定的起始位置The end Good bye