软件安全开发生命周期概述_第1页
软件安全开发生命周期概述_第2页
软件安全开发生命周期概述_第3页
软件安全开发生命周期概述_第4页
软件安全开发生命周期概述_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20101软件安全开发生命周期软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20102 软件安全开发生命周期(SDL) 基于WEB应用程序的SDL目录7Safe Company Overview

2、 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20103 简介 安全需求分析 安全设计 安全编程 安全测试 安全部署及安全响应 软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20104 简介 安全开发周期,即Security Development Lifecycle (SDL),是

3、微软提出的从安全角度指导软件开发过程的管理模式。SDL不是一个空想的理论模型。它是微软为了面对现实世界中安全挑战,在实践中的一步步发展起来的软件开发模式。 典型的软件开发流程中,如瀑布模型,中心围绕着产品功能,完全没有安全方面的考虑。这样的开发流程可以造就功能上相对完善的软件,但是无法满足在安全上的需要。由于软件开发过程中未进行任何有效的安全控制措施,导致软件开发后由于其固有的安全隐患所引起的安全事件频频发生,给黑客及恶意人员可趁之机,由此导致的经济损失不可估量。 软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 20

4、09Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20105 虽然目前企业和组织已经逐步意识到软件安全的重要性,但是他们把目光更多的聚焦到了软件开发后的漏洞扫描或渗透测试,尽管这个过程能够发现和解决大多数的安全隐患,但是后期的安全评估和安全整改,将带来更大的成本投入和人力投入;甚至由于开发人员的流动导致许多安全漏洞无法得到解决。据美国国家标准局(NIST)早年发表的一份调查报告估计,更好的安全控制措施将为后期安全整改的总体成本节省三分之一以上的费用,且有效规避70%以上由于软件安全隐患所引发的安全事件。 软件安全开发生命周期7Safe C

5、ompany Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20106软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20107 简介 安全需求分析 安全设计 安全编程 安全测试 安全部署及安全响应 软件安全开发生命周期7Safe Company Overview 20

6、09Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20108 安全需求分析设定安全目标 在需求分析阶段,加入以下的安全考虑 q产品提供的安全功能q产品如何安全的与用户(或其它软件模块)交互q特别的,安全方面的考虑对产品开发计划的影响q产品的风险评估和威胁模型(threat modeling)q产品的缺省功能配置软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Cours

7、e, 7Safe2010/11/10DBAppsecurtiy 20109 简介 安全需求分析 安全设计 安全编程 安全测试 安全部署及安全响应 软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201010 安全设计安全设计 在安全设计阶段,特别加入以下两方面的考虑 q减少攻击界面。例如,对一个网络软件的设计,它需要监听那些网络端口,是否可以减少监听端口的数目?那些用户可以与这些端口建立连接,是否要加强身份验

8、证?q深层防御。底层模块的设计中,假设上层模块有可能出现安全漏洞。对传递的数据考虑进一步校验软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201011 简介 安全需求分析 安全设计 安全编程 安全测试 安全部署及安全响应 软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe

9、2010/11/10DBAppsecurtiy 201012 安全安全编程编程 独立、完整且集中的输入验证独立、完整且集中的输入验证 创建并使用了独立的用户输入验证模块以完成对所有用户的输入校验,以此可带来: q统一的输入检测策略q统一的验证逻辑q统一的错误验证处理q降低升级和维护成本软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201013校验全部的程序输入校验全部的程序输入 保证所有变量在使用之前都经过

10、严格的校验,防止被污染的数据进入程序。校验全部的输入长度校验全部的输入长度 通过限制输入长度,可以有效的控制一些攻击使其不给系统带来过大的威胁:qSQL InjectqXSSqFile Includeq软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201014校验全部的输入类型校验全部的输入类型 不同的程序所接收到的参数类型应严格区分并校验,对于非法的类型应有相关异常进行处理以防止其进入程序。不使用任何方式

11、验证失败的数据不使用任何方式验证失败的数据 当程序对某个数据校验失败时(如:校验数据类型),相关的异常处理程序应抛弃该数据并中断操作,而不应对数据进行任何的修复尝试。对对HTTP所有内容进行校验所有内容进行校验 除需对传统的HTTP GET、POST等数据进行严格校验外,还应对HTTP内所有可能使用到的字段进行校验,防止字段中包含恶意字符而污染程序,如:qRefererqHostqCookieq软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11

12、/10DBAppsecurtiy 201015校验向用户输出的数据校验向用户输出的数据 当程序通过查询后台数据库或其他方式从后台获取数据后,在将数据输出给用户前应对该数据进行校验,校验其中是否包含有非法字符、可执行客户端脚本等恶意信息。使用安全的使用安全的SQL查询方式查询方式 在进行SQL查询时,必须使用安全的查询方式,如:Prepared Statement,以避免查询语句中由用户恶意插入SQL语句所带来的风险。禁止使用禁止使用JavaScript进行任何校验进行任何校验 由于JavaScript为客户端脚本,因此任何试图使用JavaScript对用户数据进行校验的行为都可能被用户构造的本

13、地脚本所绕过,因此,所有校验工作应由服务端程序完成而不是客户端。软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201016使用安全、统一的编码或转义方式使用安全、统一的编码或转义方式 创建并使用独立、统一的编码或转移方式,而且编码或转移中,至少应包含对以下类别数据的编码或转移:q可能造成SQL注入的数据,如:分号、单引号等q可能造成XSS的数据,如:script、javascript等设定有安全的权限边界设

14、定有安全的权限边界 所有的程序都应清楚的了解到自己能做什么,而在其所能做的范围之外,均属于其权限边界之外,应严格禁止对其权限之外的任何操作。校验被调用的后台命令校验被调用的后台命令 若程序需要调用后台可执行程序,则在调用时,应通过使用完整路径或对程序进行HASH校验等方式保证程序的调用正确。软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201017校验被调用的文本或配置文件校验被调用的文本或配置文件 若程序

15、需要调用后台文本或配置文件,则在调用前,应相对文件或配置文件的完整性和有效性进行检查,以确保读入的文本或配置文件是正确可用的。确保程序所记录的日志可控确保程序所记录的日志可控 若程序需要记录额外的操作日志等信息,应保证这些日志中的某些或全部内容不来自用户输入,否则用户可能通过外部恶意提交信息的方式填充日志。软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201018 简介 安全需求分析 安全设计 安全编程 安

16、全测试 安全部署及安全响应 软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201019 安全测试安全测试 安全测试是什么?在产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。 安全测试目标提升产品安全质量尽量在发布前兆到安全问题予以修补降低成本度量安全 当前安全测试方法有模式匹配方法,将程序看作字符串状态机模型,将程序看作状态机黑盒模型,将程序

17、看作黑盒子白盒模型,将程序看作路径的组合软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201020 安全测试安全测试 当前安全测试的问题 覆盖性 完备性 可度量性 当前安全测试困难 测试理论很难适用于安全领域 安全测试基础理论薄弱,当前测试方法缺少理论指导,也缺乏技术产品工具 测试 VS 安全测试 BUG VS 安全漏洞 (并非是BUG的一个子集) 信息泄露,WMF,LNK,SYN FLOOD漏洞是BUG吗

18、?软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201021 安全测试安全测试 假设条件 测试:导致问题的数据是用户不小心构成的(只考虑提供给用户的界面) 安全测试:导致问题的数据是攻击者处心积虑构成的(考虑所有攻击界面,包括可污染/渗透传递的界面) 思考域 测试:功能本身 安全测试:功能,系统机制,外部环境,应用与数据自身安全风险与安全属性 问题发现模式 测试:违反功能定义的输出 安全测试:违反权限,能力

19、与约束 黑盒:状态或行为异常 灰盒:未完备的约束检测 静态白盒:基于规范软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201022 安全测试安全测试 安全测试与渗透测试 出发点与目的 成本 测试对象 覆盖/完备/度量 解决方案 过程参与软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course

20、, 7Safe2010/11/10DBAppsecurtiy 201023软件安全开发生命周期安全自身要素 安全包括了三个层次安全功能(特性)安全策略(部署,配置,全局设计准则)安全实现安全测试是对以上几个层次的验证和度量外部防护系统是一种补充保护7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201024 安全测试安全测试 安全功能测试 是否足够 是否实现 实现正确性 安全策略测试 是否足够 是否实现 实现正确性 代码自身安全

21、 数据边界检测是否正确足够 体系设计是否正确足够 权限限制与检测是否正确足够 处理逻辑是否正确软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201025 安全测试安全测试 黑盒思路:基于功能与边界值 FUZZ 智能FUZZ 全局数据结构 白盒思路:基于路径 源码审计 二进制静态分析 二进制数据流动态追踪分析软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, I

22、nfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201026 简介 安全需求分析 安全设计 安全编程 安全测试 安全部署及安全响应 软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201027 安全部署及安全响应安全部署及安全响应 安全部署软件需提供相应的文档和工具,指导用户如何安全的使用。 安全响应当前任何一个软件开发模式

23、(包括SDL在内),都无法确保发布的软件没有安全漏洞。因此,需要事先制订对应的相应模式,包括:(内部或外部发现的)安全漏洞以何种途径汇报如何评估安全漏洞的严重级别开发安全补丁的流程测试安全补丁的流程发布安全补丁的流程如何在以后开发中避免类似的安全漏洞,等等软件安全开发生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201028 软件安全开发生命周期(SDL) 基于WEB应用程序的SDL目录7Safe Company Ov

24、erview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201029 概述概述 在公开提供的 SDL 文档中,找不到专门针对如何保护 Web 应用程序或在线服务的指南。诚然,大多数 SDL 非实现要求同样适用客户端/服务器和 Web 应用程序。就象威胁模型对 Web 窗体应用程序与 Windows 窗体应用程序同样重要。而对 SOAP 服务和对 Windows 服务执行最终安全审查也同样重要。但对于跨站点脚本 (XSS) 和 SQL 注入等与 Web 相关的漏洞会是怎

25、样的情况呢?如果 SDL 如此注重防御客户端/服务器应用程序的缓冲区溢出,它为什么会忽视针对在线服务发起的 XSS 攻击这一 Web 头号公敌的防御呢?下面以JAVA编程安全为例说明。基于WEB应用程序的SDL7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201030 简介 跨站脚本(XSS) 注入漏洞(Injection Flaws) 恶意文件执行 不安全的直接对象引用 跨站点请求伪造(CSRF) 信息泄露和错误处理不当 残

26、缺的认证和会话管理 不安全的加密储存 不安全的通信 限制URL访问失效JAVA安全编程OWASP TOP 10 AND ESAPI7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201031简介 OWASP TOP 10 OWASP(开放Web应用安全项目- Open Web Application Security Project)是一个开放社群、非营利性组织,目前全球有82个分会近万名会员,其主要目标是研议协助解决Web软体

27、安全之标准、工具与技术文件,长期 致力于协助政府或企业了解并改善网页应用程式与网页服务的安全性。 OWASP TOP 10是10个最关键的Web应用安全问题清单。 这份名单是每隔数年更新(最近2010年)。 名单上都是那些通常很简单的,危险的安全问题。 这里是一个以在OWASP十大项目的链接。/index.php/Category:OWASP_Top_Ten_Project7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/1

28、0DBAppsecurtiy 201032 ESAPI(Enterprise Security API) 其实简单一点来说,ESAPI就是为编写出更加安全的代码设计出来的一些API,方便使用者 调用,从而方便的编写安全的代码。它本身是开源的,同时提供JAVA版本和.NET版本。 代码下载地址:http:/ 下图显示了提供的API与OWASP列出的10个安全问题的涵盖关系: 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 2010

29、33What is an Enterprise Security API?The ESAPI Family Community Breakdown7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201034OWASPWhat is an Enterprise Security API?Addressing The OWASP Top TenOWASP Top TenOWASP ESAPIA1: InjectionA2: Cros

30、s Site Scripting (XSS)A3: Broken Authentication and Session ManagementA4: Insecure Direct Object ReferenceA5: Cross Site Request Forgery (CSRF)A6: Security MisconfigurationA7: Insecure Cryptographic StorageA8: Failure to Restrict URL AccessA9: Insufficient Transport Layer ProtectionA10: Unvalidated

31、Redirects and ForwardsEncoderEncoder, ValidatorAuthenticator, User, HTTPUtilitiesAccessReferenceMap, AccessControllerUser (CSRF Token)SecurityConfigurationEncryptorAccessControllerHTTPUtilitiesAccessController7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11

32、/10DBAppsecurtiy 201035OWASPWhat is an Enterprise Security API?OWASP ESAPI Project ScorecardAuthentication2.0Identity2.0Access Control2.01.4Input Validation2.0Output Escaping2.01.42.0Canonicalization2.01.42.0Encryption2.01.4Rand

33、om Numbers2.01.4Exception Handling2.0Logging2.01.41.4Intrusion Detection2.0Security Configuration2.01.41.4WAF2.02.02.07Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201036 下图显示结合ESAPI设计

34、你的程序7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201037 下图简单呈现ESAPI如何运作7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201038跨站脚本(XSS)定义 跨站脚本是最普遍的web应用安全漏洞。当应用程序在发送给浏览器的页面中包含用户提

35、供的数据,但没有经过适当验证或转译那些内容,这就导致跨站脚本漏洞。危害 攻击者能在受害者浏览器中执行脚本以劫持用户会话、迫害网站、插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器等等。种类 已知有三种著名跨站漏洞:1)存储式;2)反射式;3)基于DOM。 反射式跨站脚本通过测试或代码分析很容易找到。 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201039解决之道 验证输入 验证输入很简单 - 检查每个输入的有效性。 这

36、可能意味着很多东西,但在典型的和简单的情况下,这意味着检查输入类型和数据的长度。 例如,如果你是从一个文本框接受一个标准的邮政编码,你会知道,唯一有效的类型是一个数字(0-9),而长度应该是6,不能多也不能少。 并非所有 的案件都如此简单,但很多是相似的。 下图显示验证输入的架构。 这里的关键是,一切都进行验证,所有的输入,这并不来自于应用程序(包括用户输入,请求头,Cookie,数据库数据.)。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBApps

37、ecurtiy 2010407Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201041u 实例 getValidInput(java.lang.String context, java.lang.String input, java.lang.String type, int maxLength, boolean allowNull, ValidationErrorList errors) isValidInput(java.

38、lang.String context, java.lang.String input, java.lang.String type, int maxLength, boolean allowNull) String validatedFirstName = ESAPI.validator().getValidInput(FirstName, myForm.getFirstName(), FirstNameRegex, 255, false, errorList); boolean isValidFirstName = ESAPI.validator().isValidInput(FirstN

39、ame, myForm.getFirstName(), FirstNameRegex, 255, false); 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201042 编码输出 对验证输入的另一面就是编码输出。 编码输出,是用来确保字符 被视为数据,而不是作为HTML元字符被浏览器解析。 这些技术定义一些特殊的“转义”字符。 没有正确转义的数据它仍然会在浏览器中正确解析。 编码输出只是让浏览器知道数据是不是要被解析,达到

40、攻击无法实现的目的。 需要编码的部分: 1、HTML实体 2、HTML属性 3、Javascript 4、CSS 5、URL 下图像显示编码输出的架构。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 2010437Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20

41、1044u 实例1HTML实体编码/performing input validation String cleanComment = ESAPI.validator().getValidInput(comment, request.getParameter(comment), CommentRegex, 300, false, errorList); /check the errorList here . . /performing output encoding for the HTML context String safeOutput = ESAPI.encoder().encodeF

42、orHTML( cleanComment ); u 实例2URL编码/performing input validation String cleanUserName = ESAPI.validator().getValidInput(userName, request.getParameter(userName), userNameRegex, 50, false, errorList); /check the errorList here . . /performing output encoding for the url context String safeOutput = /adm

43、in/findUser.do?name= + ESAPI.encoder().encodeForURL(cleanUserName); 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201045注入漏洞(Injection Flaws)定义 简单来说,注入往往是应用程序缺少对输入进行安全性检查 所引起的,攻击者把一些包含指令的数据发送给解释器,解释器会把收到的数据转换成指令执行,注入漏洞十分普遍,通常能在SQL查询、LDAP查

44、询、Xpath查询、OS命令、程序参数等中出现。危害 注入能导致数据丢失或数据破坏、缺乏可审计性或是拒绝服务。注入漏洞有时甚至能导致完全接管主机。种类 SQL注入、XPATH注入、LDAP注入、OS命令注入等。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201046解决之道 SQL注入实例String sqlString = SELECT * FROM users WHERE fullname = + form.getFul

45、lName() + AND password = + form.getPassword() + ; 正常:username=tony,password=123456SELECT * FROM users WHERE username = tony AND password = 123456 攻击: username=tony,password= OR 1 = 1SELECT * FROM users WHERE username = tony AND password = OR 1 = 1 参数化查询预处理7Safe Company Overview 2009Dan Haagman, Info

46、Security 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201047 使用PreparedStatement()绑定变量 下面的代码示例使用一个PreparedStatement,Java的一个参数化查询的执行情况,执行相同的数据 库查询。 String custname = request.getParameter(customerName); / This should REALLY be validated too / perform input validation to detect attacks String

47、 query = SELECT account_balance FROM user_data WHERE user_name = ? ; PreparedStatement pstmt = connection.prepareStatement( query ); pstmt.setString( 1, custname); ResultSet results = pstmt.executeQuery( ); 使用存储过程7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe201

48、0/11/10DBAppsecurtiy 201048String custname = request.getParameter(customerName); / This should REALLY be validated try CallableStatement cs = connection.prepareCall(call sp_getAccountBalance(?); cs.setString(1, custname); ResultSet results = cs.executeQuery(); / result set handling catch (SQLExcepti

49、on se) / logging and error handling 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201049 使用ESAPI /ESAPI version of query Codec ORACLE_CODEC = new OracleCodec(); /were using oracle String query = SELECT name FROM users WHERE id = + ESAPI.e

50、ncoder().encodeForSQL( ORACLE_CODEC, validatedUserId) + AND date_created = + ESAPI.encoder().encodeForSQL( ORACLE_CODEC, validatedStartDate) +; myStmt = conn.createStatement(query); . /execute statement and get results7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Sa

51、fe2010/11/10DBAppsecurtiy 201050恶意文件执行定义 恶意文件执行是一种能够威胁任何网站形式的漏洞,只要攻击者在具有引入(include)功能程式的参数中修改参数内容,WEB服务器便会引入恶意程序内容从而受到恶意文件执行漏洞攻击。危害 攻击者可利用恶意文件执行漏洞进行攻击取得WEB服务器控制权,进行不法利益或获取经济利益。解决之道 实例1验证输入,使用ESAPI验证上传文件名7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBA

52、ppsecurtiy 201051 if (!ESAPI.validator().isValidFileName(upload, filename, allowedExtensions, false) throw new ValidationUploadException(Upload only simple filenames with the following extensions + allowedExtensions, Upload failed isValidFileName check); 实例2使用ESAPI检查上传文件大小 ServletFileUpload upload =

53、 new ServletFileUpload(factory); upload.setSizeMax(maxBytes); 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201052不安全的直接对象引用定义 所谓“不安全的对象直接引用”,即Insecure direct object references,意指一个已经授权的用户,通过更改 访问时的一个参数,从而访问到了原本其并没有得到授权的对象。Web应 用往往在生成Web页

54、面时会用它的真实名字,且并不会对所有的目标对象访问时来检查用户权限,所以这就造成了不安全的 对象直接引用的漏洞。 我们看如下的一个示例,也许这样就更容易理解什么是不安 全的对象直接引用。 攻击者发现他自己的参数是6065, 即?acct=6065;他可以直接更改参数为6066, 即?acct=6066;这样他就可以直接看到6066用 户的账户信息了。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 2010537Safe Comp

55、any Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201054危害 这种漏洞能损害参数所引用的所有数据。除非名字空间很稀疏,否则攻击者很容易访问该类型的所有数据。解决之道 案例1使用ESAPI的AccessReferenceMap实现使用非直接的对象引用 MyObject obj; / generate your object Collection coll; / holds objects for display in UI /create ESA

56、PI random access reference map AccessReferenceMap map = new RandomAccessReferenceMap(); /get indirect reference using direct reference as seed input String indirectReference = map.addDirectReference(obj.getId(); /set indirect reference for each object - requires your app object to have this method o

57、bj.setIndirectReference(indirectReference); /add object to display collection coll.add(obj); /store collection in request/session and forward to UI . 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201055 案例2 检查访问。 来自不受信源所使用的所有直接对象引用都必须包含访问

58、控制检测,这样才能确保用户对要求的对象有访问权限。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201056跨站点请求伪造(CSRF)定义 跨站请求伪造,也被称成为“one click attack” 或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户

59、的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防 范,所以被认为比XSS更具危险性。危害 攻击者能让受害用户修改可以修改的任何数据,或者是执行允许使用的任何功能 。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201057解决之道 第一步,新建CSRF令牌添加进用户每次登陆以及存储在http session里,这种令牌至少对每个用户会话来说应该是唯一的,或者是对每

60、个请求是唯一的。 /this code is in the DefaultUser implementation of ESAPI /* This users CSRF token. */ private String csrfToken = resetCSRFToken(); . public String resetCSRFToken() csrfToken = ESAPI.randomizer().getRandomString(8, DefaultEncoder.CHAR_ALPHANUMERICS); return csrfToken; 7Safe Company Overview 2009Dan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论