您好,欢迎访问三七文档
主讲内容软件安全的概念安全漏洞风险管理框架安全开发生命周期软件安全的七个接触点软件安全的概念第一部分软件安全的概念出现软件故障现象的原因是软件存在漏洞。“任何软件,不论它看起来是多么安全,其中都隐藏漏洞”。软件安全的目的是尽可能消除软件漏洞,确保软件在恶意攻击下仍然正常运行。的与安全相关的软件弱点软件安全问题加剧的三个趋势互联性多数计算机与Internet相连多数软件系统互联于Internet可扩展性通过接受更新或者扩展件使系统升级复杂性代码行数增加、网络式、分布式安全漏洞第二部分安全漏洞所有的软件都存在潜伏的漏洞安全必须经过长时间实际运行证明软件安全漏洞可分为两大类:设计漏洞实现漏洞设计漏洞示例MicrosoftBob是作为WindowsME和Windows98的辅助程序而设计的,其中包含一个设置系统密码的工具。当用户试着输了三次(不正确)密码时,Bob将弹出如下的信息:“我想你忘记了你的密码,请输入一个新的密码。”然后,就允许用户修改密码,即使不知道老密码。常见的安全设计问题密码技术使用的败笔创建自己的密码技术选用了不当的密码技术依赖隐蔽式安全编写到程序中的密钥错误的处理私密信息对用户及其许可权限进行跟踪会话管理薄弱或缺失身份鉴别薄弱或缺失授权薄弱或缺失常见的安全设计问题有缺陷的输入验证未在安全上下文环境中执行验证验证例程不集中不安全的组件边界薄弱的结构性安全大的攻击面在过高权限级别上运行进程没有纵深防御失效时处理不安全常见的安全设计问题其他代码和数据混在一起错将信任寄予外部环境不安全的默认值未作审计日志实现漏洞示例2001年的红色代码(CodeRed)蠕虫利用Microsoft的IISWeb服务器的软件缺陷。字符串变量是Unicode字符类型的(每个字符占用两个字节),在计算缓冲区的时候应该是偏移量为2,但IIS在计算缓冲区大小的时候却按照偏移量为1错误的计算缓冲区。导致在14个小时内,就有359000台机器感染了红色代码蠕虫。几个常见致命安全漏洞缓冲区溢出SQL注入跨站脚本缓冲区溢出当一个程序允许输入的数据大于已分配的缓冲区大小时,缓冲区溢出就会发生。有些语言具有直接访问应用程序内存的能力,如果未能处理好用户的数据就会造成缓冲区溢出。C和C++是受缓冲区溢出影响的两种最常见的编程语言。缓冲区溢出造成的后果小到系统崩溃,大到攻击者获取应用程序的完全控制权。1988年,第一个Internet蠕虫—Morris蠕虫就是对finger服务器攻击,造成缓冲区溢出,几乎导致Internet瘫痪。注入通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。任何可以与数据库交互的编程语言都可能出现SQL注入漏洞。SQL注入的最大的威胁是攻击者可以获得隐私的个人信息或者敏感数据;也可能导致服务器甚至网络的入侵。(StringId){……try{……Statementst=….;ResultSetrs=st.executeQuery(“SELECTconumFROMcustWHEREid=”+Id);while(rs.next()){…..}catch……}如果传递来的参数是“1or21--”,则执行SQL语句:SELECTconumFROMcustWHEREid=1or21--跨站脚本跨站脚本(XSS,Cross-siteScripting)漏洞是一类专门针对Web应用程序的漏洞,它会使得产生漏洞的Web服务器绑定的用户数据(通常保存在cookie中)被泄露给恶意的第三方。所谓“跨站”是指;当一个客户端访问了可正常提供服务但是有漏洞的Web服务器后,cookie从此客户端传递给了攻击者控制的站点。任何用于构建网站的编程语言或者技术都可能受到影响。跨站脚本%Stringeid=request.getParameter(eid);%...EmployeeID:%=eid%XSS测试语句之一:scriptalert(document.cookie)/script其他致命安全漏洞格式化字符串整数溢出命令注入未能处理错误信息未能保护好网络流量使用MagicUPL及隐藏表单字段未能正确使用SSL和TLS使用基于弱口令的系统未能安全的存储和保存数据信息泄露不恰当的文件访问清新网络域名解析竞争条件未认证的密钥交换密码学强度随机数不良可用性解决软件安全的方法GaryMcGraw博士应用风险管理软件安全的接触点(最优化方法)知识微软:可重复的流程工程师教育度量标准和可测量性风险管理框架“安全就是风险管理”。风险就是在项目过程中有可能发生的某些意外事情。例如:缺少对开发工具的培训。风险管理的关键:随着软件项目的展开,不断的确定和追踪风险。RMF的基本思想:随时间变化,对软件安全进行确定、评级、追踪和理解。的风险管理框架(RMF)测量和报告理解商业环境1确定商业和技术风险工件分析2综合考虑并对风险分析3实施修复并进行验证5定义降低风险的策略4立即与客户进行沟通制定沟通管理计划…………………………微软:可信赖计算安全开发生命周期SDLC微软安全培训启动安全并注册SWI安全设计最优方法安全体系结构和攻击面审核威胁建模使用安全开发工具和最优开发和测试方法为产品创建安全文档和工具预备安全反应计划安全推动渗透测试最终安全审核安全服务和反应执行需求设计实现验证发行支持和服务:软件安全接触点(最优化方法)需求和使用案例体系结构和设计测试计划代码测试和测试结果从应用领域的反馈滥用案例安全需求风险分析基于风险的安全测试代码审核(工具)风险分析渗透测试安全操作利用工具进行代码审核需求和使用案例体系结构和设计测试计划代码测试和测试结果从应用领域的反馈滥用案例安全需求风险分析基于风险的安全测试代码审核(工具)风险分析渗透测试安全操作①②②③④⑤⑥⑦代码审核所有的软件项目有一个共同的工件—源代码。大量的安全问题都是由可以在代码中发现的简单缺陷引起的,例如缓冲区溢出漏洞与SQL注入漏洞。代码审核就是为了查找和修复存在于源代码中的缺陷。代码审核可以手工审核或者使用静态分析工具进行审核。静态分析工具审核速度快,并不需要操作人员具有丰富的安全专业知识。个最危险的编程错误组件间不安全的交互:这些缺陷与数据在单独的组件、模块、程序、进程、线程或系统之间不安全发送和接受方法有关。CWE-20:不适当的输入验证;CWE-116:不正确的编码或输出转义;CWE-89:SQL查询结构保护失败(又名“SQL注入”);CWE-79:网页结构保护失败(又名“跨站脚本攻击”);CWE-78:操作系统命令结构保护失败;CWE-319:明文传输的敏感信息;CWE-352:伪造跨站请求(CSRF);CWE-362:竞争条件;CWE-209:错误消息的信息泄漏;个最危险的编程错误危险的资源管理:此类缺陷与软件没有妥善管理创造、使用、转让或取消重要的系统资源有关。CWE-119:对内存缓冲区边界操作限制失败;CWE-642:外部控制的临界状态数据;CWE-73:外部控制的文件名或路径;CWE-426:不可信的搜索路径;CWE-94:代码生成控制失败(又名“代码注入”);CWE-494:下载的代码未进行完整性检查;CWE-404:资源关闭或释放不正确;CWE-665:不正确的初始化;CWE-682:不正确的运算(如出现整数溢出等错误)。个最危险的编程错误可穿透的防范措施:这一类缺点与防御技术的经常误用、滥用,或彻底忽略有关。CWE-285:不正确的访问控制(授权);CWE-327:使用一个被攻破的或危险的加密算法;CWE-259:硬编码的密码;CWE-732:对关键资源的使用权限不安全的分配;CWE-330:使用不够有效的随机值;CWE-250:给予没有必要的权限;CWE-602:服务器端的安全由客户端实施。FortifySCA是发现软件安全漏洞隐患最全面和分析最完整的产品。它使用特有的成熟的五大软件安全分析引擎、最全面最广泛的软件安全代码规则集和fortify公司特有的X-TierDataflow™analysis技术去检测软件安全问题。Fortify专门的分析器数据流分析器语义分析器控制流分析器配置流分析器结构分析器有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。FindBugs是一个静态分析工具,它检查类或者JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题。FindBugs的缺陷清单及说明。Findbugseclipse插件使用指南其他源代码分析工具CoverityOunceLabsSecuresoftware体系结构风险分析需求和使用案例体系结构和设计测试计划代码测试和测试结果从应用领域的反馈滥用案例安全需求风险分析基于风险的安全测试代码审核(工具)风险分析渗透测试安全操作①②②③④⑤⑥⑦体系结构风险分析50%的软件安全问题是有设计瑕疵引起的。因此需要对设计和说明书进行审核分析。设计人员、架构人员和分析人员应该用文档清晰的记录各种前提假设,并确定可能的攻击。安全分析人员揭示体系结构瑕疵,对它们评级,并开始进行降低风险的活动。采用的体系结构风险分析的简单过程图文档攻击图攻击模式安全的设计文献进行攻击抵抗力分析进行不确定性分析进行底层框架弱点分析文档需求体系结构文档规则性需求/工业标准文档外部资源邮件清单产品文档攻击模式确定一般瑕疵非编译显示何处没有遵循方针映射可实施的攻击模式
本文标题:软件安全培训
链接地址:https://www.777doc.com/doc-6037356 .html