1、 前前 沿沿 知知 识识 讲讲 座座软软 件件 安安 全全董玉坤董玉坤软件工程系软件工程系 软软 件件 安安 全全2主讲内容主讲内容l 软件安全概念软件安全概念l 软件漏洞软件漏洞l 风险管理框架风险管理框架l 安全开发生命周期安全开发生命周期l 软件安全的七个接触点软件安全的七个接触点 软软 件件 安安 全全3许多关键基础设施取决于计算机安全许多关键基础设施取决于计算机安全 软软 件件 安安 全全4关于软件安全的相关报道关于软件安全的相关报道 软软 件件 安安 全全5软件安全概念软件安全概念l出现软件故障现象的原因是软件存在漏洞。l“任何软件,不论它看起来是多么安全,其中都隐任何软件,不论它
2、看起来是多么安全,其中都隐藏漏洞藏漏洞”。l软件安全的目的是尽可能消除软件漏洞,确保软件尽可能消除软件漏洞,确保软件在恶意攻击下仍然正常运行在恶意攻击下仍然正常运行。 软软 件件 安安 全全6报告给报告给CERT/CC的与安全相关的软件弱点的与安全相关的软件弱点 软软 件件 安安 全全7软件安全问题加剧的三个趋势软件安全问题加剧的三个趋势l互联性互联性多数计算机与Internet相连多数软件系统互联于Internetl可扩展性可扩展性通过接受更新或者扩展件使系统升级l复杂性复杂性代码行数增加、网络式、分布式 软软 件件 安安 全全8Windows操作系统复杂性操作系统复杂性 软软 件件 安安
3、全全9J2EE的的N层架构举例层架构举例 软软 件件 安安 全全10漏洞漏洞 软软 件件 安安 全全11漏洞漏洞 软软 件件 安安 全全12漏洞漏洞l所有的软件都存在潜伏的漏洞l安全必须经过证明l软件安全漏洞可分为两大类:设计漏洞设计漏洞实现漏洞实现漏洞 软软 件件 安安 全全13设计漏洞示例设计漏洞示例lMicrosoft Bob是作为Windows ME和Windows 98的辅助程序而设计的,其中包含一个设置系统密码的工具。l当用户试着输了三次(不正确)密码时,Bob将弹出如下的信息:“我想你忘记了你的密码,请输入我想你忘记了你的密码,请输入一个新的密码。一个新的密码。”然后,就允许用户
4、修改密码,即使不知道老密码。 软软 件件 安安 全全14常见的安全设计问题常见的安全设计问题l密码技术使用的败笔密码技术使用的败笔创建自己的密码技术选用了不当的密码技术依赖隐蔽式安全编写到程序中的密钥错误的处理私密信息l对用户及其许可权限进行跟踪对用户及其许可权限进行跟踪会话管理薄弱或缺失身份鉴别薄弱或缺失授权薄弱或缺失 软软 件件 安安 全全15常见的安全设计问题常见的安全设计问题l有缺陷的输入验证有缺陷的输入验证未在安全上下文环境中执行验证验证例程不集中不安全的组件边界l薄弱的结构性安全薄弱的结构性安全大的攻击面在过高权限级别上运行进程没有纵深防御失效时处理不安全 软软 件件 安安 全全1
5、6常见的安全设计问题常见的安全设计问题l其他其他代码和数据混在一起错将信任寄予外部环境不安全的默认值未作审计日志 软软 件件 安安 全全17实现漏洞示例实现漏洞示例l2001年的红色代码红色代码(Code Red)蠕虫利用Microsoft的IIS Web服务器的软件缺陷。l字符串变量是Unicode字符类型的(每个字符占用两个字节),在计算缓冲区的时候应该是偏移量为偏移量为2,但IIS在计算缓冲区大小的时候却按照偏移量为偏移量为1错错误误的计算缓冲区。l导致在14个小时内,就有359000台机器感染了红色代码蠕虫。 软软 件件 安安 全全18几个常见致命安全漏洞几个常见致命安全漏洞l缓冲区溢
6、出缓冲区溢出lSQL注入注入l跨站脚本跨站脚本 软软 件件 安安 全全19缓冲区溢出缓冲区溢出l当一个程序允许输入的数据大于已分配的缓冲区大小时,缓冲区溢出就会发生。l有些语言具有直接访问应用程序内存的能力,如果未能处理好用户的数据就会造成缓冲区溢出。C和C+是受缓冲区溢出影响的两种最常见的编程语言。l缓冲区溢出造成的后果小到系统崩溃,达到攻击者获取应用程序的完全控制权。l1988年,第一个Internet蠕虫Morris蠕虫就是对finger服务器攻击,造成缓冲区溢出,几乎导致Internet瘫痪。 软软 件件 安安 全全20缓冲区溢出缓冲区溢出lMorris finger蠕虫的成因:蠕虫的
7、成因: char buf20; gets(buf);l另一个缓冲区溢出例子:另一个缓冲区溢出例子: char buf15; char prefix=“http:/”; char path=“”; strcpy(buf,prefix); strcat(buf,path,sizeof(path); 软软 件件 安安 全全21SQL注入注入l通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。l任何可以与数据库交互的编程语言都可能出现SQL注入漏洞。lSQL注入的最大的威胁是攻击者可以获得隐私的个人信息或者敏感数据;也可能导致服务器甚至网络的
8、入侵。 软软 件件 安安 全全22SQL注入注入public static boolean doQuery(String Id) try Statement st=.; ResultSet rs=st.executeQuery(“SELECT conum FROM cust WHERE id=”+Id); while(rs.next() . catch 如果传递来的参数是如果传递来的参数是“1 or 21 -”,则执行,则执行SQL语句:语句: SELECT conum FROM cust WHERE id=1 or 21 - 软软 件件 安安 全全23跨站脚本跨站脚本l跨站脚本跨站脚本(XS
9、S,Cross-site Scripting)漏洞是一类专门针对Web应用程序的漏洞,它会使得产生漏洞的Web服务器绑定的用户数据(通常保存在cookie中)被泄露给恶意的第三方。l所谓“跨站跨站”是指;当一个客户端访问了可正常提供服务但是有漏洞的Web服务器后,cookie从此客户端传递给了攻击者控制的站点。l任何用于构建网站的编程语言或者技术都可能受到影响。 软软 件件 安安 全全24跨站脚本跨站脚本 软软 件件 安安 全全25跨站脚本跨站脚本l . Employee ID: lXSS测试语句之一:测试语句之一: alert(document.cookie) 软软 件件 安安 全全26其他
10、致命安全漏洞其他致命安全漏洞l格式化字符串l整数溢出l命令注入l未能处理错误信息l未能保护好网络流量l使用Magic UPL及隐藏表单字段l未能正确使用SSL和TLSl使用基于弱口令的系统l未能安全的存储和保存数据l信息泄露l不恰当的文件访问l清新网络域名解析l竞争条件l未认证的密钥交换l密码学强度随机数l不良可用性 软软 件件 安安 全全27解决软件安全的方法解决软件安全的方法lGary McGraw博士博士应用风险管理软件安全的接触点(最优化方法)知识l微软:微软:可重复的流程工程师教育度量标准和可测量性 软软 件件 安安 全全28风险管理框架风险管理框架l“安全就是风险管理”。l风险风险
11、就是在项目过程中有可能发生的某些意外事情。例如:缺少对开发工具的培训。l风险管理的关键风险管理的关键:随着软件项目的展开,不断的确定和追踪风险。lRMFRMF的基本思想的基本思想:随时间变化,对软件安全进行确定、评级、追踪和理解。 软软 件件 安安 全全29Cigital的风险管理框架(的风险管理框架(RMF) 测量和报告测量和报告理解理解商业环境商业环境1 确定商业确定商业和技术风险和技术风险工件分析工件分析2综合考虑并综合考虑并对风险分析对风险分析3实施修复并实施修复并进行验证进行验证5定义降低定义降低风险的策略风险的策略4 软软 件件 安安 全全30某软件项目的风险管理计划某软件项目的风
12、险管理计划项目风险管理计划项目风险管理计划风险识别风险识别风险评估风险评估风险应对措施风险应对措施潜在风险潜在风险后果后果可能可能性性严重严重性性应急措施应急措施预防措施预防措施客户的需求不明确客户不接受产品或拒绝付款59按照客户的要求修改事先进行需求评审项目范围定义不清楚项目没完没了89按照客户要求变更事先定义清楚并由客户确认项目目标不明确项目进度拖延或成本超支68修改项目目标实现明确项目目标与客户沟通不够软件不能满足客户需求59立即与客户进行沟通制定沟通管理计划 软软 件件 安安 全全31微软:可信赖计算安全开发生命周期微软:可信赖计算安全开发生命周期SDLC l微软微软安全培训安全培训启
13、动安全启动安全并注册并注册SWI安全设安全设计最优计最优方法方法安全体系结构安全体系结构和攻击面和攻击面审核审核 威胁威胁 建模建模使用安全使用安全开发工具开发工具和最优开和最优开发和测试发和测试方法方法为产品为产品创建安创建安全文档全文档和工具和工具预备预备安全安全反应反应计划计划安全安全推动推动渗透渗透测试测试最终最终安全安全审核审核安全安全服务服务和和反应反应执行执行需求需求设计设计实现实现验证验证发行发行 支持支持和和服务服务 软软 件件 安安 全全32Gary McGraw:软件安全接触点(最优化方法):软件安全接触点(最优化方法) 需求和需求和使用案例使用案例体系结构体系结构和设计
14、和设计测试计划测试计划代码代码测试和测试和测试结果测试结果从应用领从应用领域的反馈域的反馈滥用案例滥用案例安全需求安全需求风险分析风险分析基于风险的基于风险的安全测试安全测试代码审核代码审核(工具)(工具)风险分析风险分析渗透测试渗透测试安全操作安全操作 软软 件件 安安 全全33利用工具进行代码审核利用工具进行代码审核 需求和需求和使用案例使用案例体系结构体系结构和设计和设计测试计划测试计划代码代码测试和测试和测试结果测试结果从应用领从应用领域的反馈域的反馈滥用案例滥用案例安全需求安全需求风险分析风险分析基于风险的基于风险的安全测试安全测试代码审核代码审核(工具)(工具)风险分析风险分析渗透
15、测试渗透测试安全操作安全操作 软软 件件 安安 全全34代码审核代码审核l所有的软件项目有一个共同的工件源代码源代码。l大量的安全问题都是由可以在代码中发现的简单缺陷引起的,例如缓冲区溢出漏洞与SQL注入漏洞。l代码审核就是为了查找和修复存在于源代码中的缺陷。l代码审核可以手工审核手工审核或者使用静态分析工具静态分析工具进行审核。l静态分析工具审核速度快,并不需要操作人员具有丰富的安全专业知识。 软软 件件 安安 全全3525个最危险的编程错误个最危险的编程错误 1.组件间不安全的交互组件间不安全的交互:这些缺陷与数据在单独的组件、模块、程序、进程、线程或系统之间不安全发送和接受方法有关。CW
16、E-20:不适当的输入验证 ;CWE-116:不正确的编码或输出转义; CWE-89:SQL查询结构保护失败(又名“ SQL注入”) ;CWE-79:网页结构保护失败(又名“跨站脚本攻击”) ;CWE-78:操作系统命令结构保护失败;CWE-319:明文传输的敏感信息; CWE-352:伪造跨站请求(CSRF); CWE-362:竞争条件 ;CWE-209:错误消息的信息泄漏; 软软 件件 安安 全全3625个最危险的编程错误个最危险的编程错误2.危险的资源管理危险的资源管理:此类缺陷与软件没有妥善管理创造、使用、转让或取消重要的系统资源有关。CWE-119:对内存缓冲区边界操作限制失败 ;C
17、WE-642:外部控制的临界状态数据;CWE-73:外部控制的文件名或路径 ;CWE-426:不可信的搜索路径; CWE-94:代码生成控制失败(又名“代码注入” ) ;CWE-494:下载的代码未进行完整性检查 ;CWE-404:资源关闭或释放不正确; CWE-665:不正确的初始化; CWE-682:不正确的运算(如出现整数溢出等错误)。 软软 件件 安安 全全3725个最危险的编程错误个最危险的编程错误3.可穿透的防范措施可穿透的防范措施:这一类缺点与防御技术的经常误用、滥用,或彻底忽略有关。CWE-285:不正确的访问控制(授权) ;CWE-327:使用一个被攻破的或危险的加密算法 ;
18、CWE-259:硬编码的密码 ;CWE-732:对关键资源的使用权限不安全的分配 ;CWE-330:使用不够有效的随机值 ;CWE-250:给予没有必要的权限;CWE-602:服务器端的安全由客户端实施。 软软 件件 安安 全全38FortifylFortify SCA是发现软件安全漏洞隐患最全面和分析最完整的产品。l它使用特有的成熟的五大软件安全分析引擎、最全面最广泛的软件安全代码规则集和fortify公司特有的X-Tier Dataflow analysis技术去检测软件安全问题。lFortify专门的分析器 数据流分析器语义分析器控制流分析器配置流分析器结构分析器 软软 件件 安安 全全
19、39静态分析工具静态分析工具FindBugs l有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。lFindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。lFindBugs 的 缺陷清单及说明。lFindbugs eclipse插件使用指南 软软 件件 安安 全全40其他源代码分析工具其他源代码分析工具lCoveritylOunce LabslSecure software 软软 件件 安安 全全41体系结构风险分析体系结构风险分析 需求和需求和使用案例使用案例体系结构体系结构和设计和设计测试计划测试计划代码代码测试和测试
20、和测试结果测试结果从应用领从应用领域的反馈域的反馈滥用案例滥用案例安全需求安全需求风险分析风险分析基于风险的基于风险的安全测试安全测试代码审核代码审核(工具)(工具)风险分析风险分析渗透测试渗透测试安全操作安全操作 软软 件件 安安 全全42体系结构风险分析体系结构风险分析l50%的软件安全问题是有设计瑕疵引起的。l因此需要对设计和说明书进行审核分析。l设计人员、架构人员和分析人员应该用文档清晰的记录各种前提假设,并确定可能的攻击。l安全分析人员揭示体系结构瑕疵,对它们评级,并开始进行降低风险的活动。文档文档攻击攻击图图攻击攻击模式模式安全的安全的设计文献设计文献进行攻击进行攻击抵抗力分析抵抗
21、力分析进行不确进行不确定性分析定性分析进行底层框进行底层框架弱点分析架弱点分析文档文档需求需求体系结体系结构文档构文档规则性需求规则性需求/ 工业标准工业标准文档文档外部资源外部资源l邮件清单邮件清单l产品文档产品文档攻击模式攻击模式确定一般瑕疵确定一般瑕疵l非编译非编译l显示何处没显示何处没 有遵循方针有遵循方针映射映射可实施的可实施的攻击模式攻击模式显示体系结显示体系结构中的风险构中的风险和驱动程序和驱动程序显示对类似显示对类似技术的已知技术的已知攻击的生存攻击的生存能力能力考虑设计考虑设计含义含义产生单独产生单独的体系结的体系结构图文档构图文档统一的理解统一的理解l揭示不确定性揭示不确定
22、性l确定下游的确定下游的 困难度困难度l解开缠绕解开缠绕l揭示糟糕的揭示糟糕的 可追逐性可追逐性在下列位置在下列位置查找和分析查找和分析瑕疵瑕疵lCOTSl框架框架l网络拓扑网络拓扑l平台平台确定应用确定应用程序使用程序使用的服务的服务将弱点映将弱点映射到应用射到应用程序所做程序所做的假设上的假设上文档文档软件软件瑕疵瑕疵体系结体系结构风险构风险评估评估报告报告编写长度为一页的编写长度为一页的体系结构概述体系结构概述Cigital采用的体系结构风险分析的简单过程图采用的体系结构风险分析的简单过程图 输入输入 活动活动 输出输出 软软 件件 安安 全全44微软:微软:STRIDE攻击模型攻击模型
23、lSpoofing identity(欺骗欺骗) lTampering with data (篡改篡改)lRepudiation (抵赖抵赖)lInformation disclosure (信息泄露信息泄露)lDenial of service (拒绝服务拒绝服务)lElevation of privilege (特权提升特权提升) 软软 件件 安安 全全4549种攻击模式种攻击模式1.使客户端不可见使客户端不可见2.把写入专用把写入专用OS资源的程序作为目标资源的程序作为目标3.利用用户提供的配置文件运行提高权限的命令利用用户提供的配置文件运行提高权限的命令4.利用配置文件的搜索路径利用配
24、置文件的搜索路径5.直接访问可执行文件直接访问可执行文件6.在脚本内嵌入脚本在脚本内嵌入脚本7.充分利用不可执行文件中的可执行代码充分利用不可执行文件中的可执行代码8.参数注入参数注入9.命令分隔符命令分隔符10. 多个解析器和双重换码多个解析器和双重换码11. 把用户提供的变量传递给文件系统调用把用户提供的变量传递给文件系统调用12. 后缀后缀NULL终止符终止符 软软 件件 安安 全全4649种攻击模式种攻击模式13. 后缀、后缀、NULL终止符和反斜线终止符和反斜线14. 在相对路径间来回移动在相对路径间来回移动15. 客户端控制的环境变量客户端控制的环境变量16. 用户提供的全局变量用
25、户提供的全局变量17. 会话会话ID、资源、资源ID和保密委托和保密委托18. 模拟波段内的切换信号模拟波段内的切换信号19. 攻击模式片段:操作终端设备攻击模式片段:操作终端设备20. 简单的脚本注入简单的脚本注入21. 在非脚本元素种嵌入脚本在非脚本元素种嵌入脚本22. HTTP头中的头中的XSS23. HTTP查询字符串查询字符串24. 用户控制的文件名用户控制的文件名 软软 件件 安安 全全4749种攻击模式种攻击模式25. 将本地文件名传入到参数为将本地文件名传入到参数为URL的函数中的函数中26. 电子邮件头中的元字符电子邮件头中的元字符27. 文件系统函数注入,基于内容文件系统函
26、数注入,基于内容28. 客户端注入,缓冲区溢出客户端注入,缓冲区溢出29. 导致导致Web服务器错误分类服务器错误分类30. 前导幽灵字符的交替编码前导幽灵字符的交替编码31. 在交替编码中使用斜线在交替编码中使用斜线32. 在交替编码种使用转义斜线在交替编码种使用转义斜线33. Unicode编码编码34. UTF-8编码编码35. URL编码编码36. 可替换的可替换的IP地址地址 软软 件件 安安 全全4849种攻击模式种攻击模式37. 斜线和斜线和URL编码组合在一起编码组合在一起38. Web日志记录日志记录39. 使二进制资源文件溢出使二进制资源文件溢出40. 使变量和标记溢出使变
27、量和标记溢出41. 使符号连接溢出使符号连接溢出42. MIME转换转换43. HTTP Cookie44. 通过缓冲区溢出来过滤错误通过缓冲区溢出来过滤错误45. 用环境变量来使缓冲区溢出用环境变量来使缓冲区溢出46. 在在API调用中的缓冲区溢出调用中的缓冲区溢出47. 本地命令行工具中的缓冲区溢出本地命令行工具中的缓冲区溢出48. 参数扩展参数扩展49. Syslog()中的字符串格式溢出中的字符串格式溢出 软软 件件 安安 全全49Microsoft的威胁建模的威胁建模l软件安全最大的原因就在于软件使用输入软件安全最大的原因就在于软件使用输入l外部数据流外部数据流网络I/O远程过程调用
28、(RFC)外部系统查询文件I/O注册表命名管道,互斥、共享内存,每一个操作系统对象Windows消息其他的操作系统调用 软软 件件 安安 全全50Microsoft的威胁建模的威胁建模l威胁建模威胁建模 识别威胁路径 识别威胁 识别漏洞 将漏洞分级/排定优先级 软软 件件 安安 全全51Microsoft的威胁建模的威胁建模1.识别威胁路径识别威胁路径识别最高风险领域,并确定相应的保护措施确定用户访问类别基于数据流图进行威胁分析构造威胁路径表风险风险访问类别访问类别非常高匿名的远程用户高经身份鉴别的远程用户,且具有文件操纵能力中经身份鉴别的远程用户低本地用户,且具有执行权限非常低本地管理用户用
29、用户户访访问问分分类类示示例例 软软 件件 安安 全全52即时消息(即时消息(IM)程序服务器数据流图)程序服务器数据流图IM用户用户1IM用户用户2验证验证身份信息身份信息/ 身份身份鉴别鉴别帐号管理帐号管理IM聊天聊天引擎引擎身份证明信息身份证明信息身份证明信息身份证明信息确认确认确认确认注册注册注册注册客户帐号信息客户帐号信息客户帐号信息客户帐号信息启动信任信息启动信任信息聊天请求聊天请求用户信息用户信息聊天日志聊天日志 软软 件件 安安 全全53具有信任边界的具有信任边界的IM数据流图数据流图IM用户用户1IM用户用户2验证验证身份信息身份信息/ 身份身份鉴别鉴别帐号管理帐号管理IM聊
30、天聊天引擎引擎身份证明信息身份证明信息身份证明信息身份证明信息确认确认确认确认注册注册注册注册客户帐号信息客户帐号信息客户帐号信息客户帐号信息启动信任信息启动信任信息聊天请求聊天请求用户信息用户信息聊天日志聊天日志1432 软软 件件 安安 全全54Microsoft的威胁建模的威胁建模2. 识别威胁识别威胁对于每一条威胁路径,需要逐一理清与处理相对于每一条威胁路径,需要逐一理清与处理相关的每一种威胁。关的每一种威胁。高风险活动高风险活动 数据解析、文件访问、数据库访问 生成子进程、身份鉴别、授权 同步或会话管理、处理私密数据 网络访问 软软 件件 安安 全全55Microsoft的威胁建模的
31、威胁建模2. 识别威胁识别威胁例如:IM用户注册数据可能是畸形的,这会引起“账号管理”进程发生处理错误。该错误可能导致: 损坏用户信息 远程执行代码 注册进程拒绝服务 接受来自匿名用户的数据并将其传递给SQL数据库 软软 件件 安安 全全56Microsoft的威胁建模的威胁建模3. 识别漏洞识别漏洞清楚了高风险组件所面临的威胁之后,下一步就是找出可能存在于这些组件中的实际漏洞。如果设计人员未能构建一些安全特性来缓解威胁,威胁就会变成一种漏洞。漏洞搜寻:详细的安全设计审查、安全代码审查、安全测试 软软 件件 安安 全全57Microsoft的威胁建模的威胁建模4. 将漏洞分级将漏洞分级/排定优
32、先级排定优先级使用DREAD模型适用于分出威胁的严重程度级别的一种有效技术。DREAD代表: 潜在的破坏(Damage potential) 再现性(Reproducibility) 可利用性(Exploitability) 受影响的用户(Affected users) 可发现性(Discoverability) 软软 件件 安安 全全58软件渗透测试软件渗透测试 需求和需求和使用案例使用案例体系结构体系结构和设计和设计测试计划测试计划代码代码测试和测试和测试结果测试结果从应用领从应用领域的反馈域的反馈滥用案例滥用案例安全需求安全需求风险分析风险分析基于风险的基于风险的安全测试安全测试代码审核
33、代码审核(工具)(工具)风险分析风险分析渗透测试渗透测试安全操作安全操作 软软 件件 安安 全全59渗透测试渗透测试(Penetration Testing)l为保证软件应用程序实现其商业功能需求,通常在软件生命周期运行一系列的动态功能测。l传统的测试着重强调特性和功能着重强调特性和功能,但安全并不是一种或一组特性,所以动态功能测试不适合直接用于安全测试。l安全测试的核心就是使用白帽和黑帽的概念和方法:保证软件的安全特性像宣传的那样有效,并且保证保证软件的安全特性像宣传的那样有效,并且保证有意的攻击也不能轻易的危及系统的安全有意的攻击也不能轻易的危及系统的安全。 软软 件件 安安 全全60渗透
34、测试渗透测试(Penetration Testing)l渗透测试是一种“反向测试反向测试”,即安全测试人员直接和深入的探测安全风险以确定系统在遭受攻击时的表现。 l渗透测试需要以攻击者的角度以攻击者的角度来思考问题,属于典型的黑盒测试。l渗透测试就是利用所有的手段进行测试,发现和挖掘系统中存在的漏洞,然后撰写渗透测试报告,将其提供给客户;客户根据渗透人员提供的渗透测试报 告对系统存在漏洞和问题的地方进行修复和修补。l渗透测试最适合于发掘配置问题和其他对软件安全影响较大的环境因素。 软软 件件 安安 全全61渗透测试工具渗透测试工具l基于网站的渗透基于网站的渗透功能:网站漏洞扫描、cookie注
35、入等工具:IBM Rational AppScan、Php Bug Scanner l基于系统的渗透基于系统的渗透功能:系统端口或漏洞扫描等工具:nmap、X-Scan、溯雪 l基于数据库的渗透基于数据库的渗透功能:SQL注入、数据库弱口令扫描工具:DSQLTools 、mysqlweak l缓冲区溢出漏洞利用工具缓冲区溢出漏洞利用工具 功能:导致系统缓冲区溢出工具:sql2 、aspcode 软软 件件 安安 全全62基于风险的安全测试基于风险的安全测试 需求和需求和使用案例使用案例体系结构体系结构和设计和设计测试计划测试计划代码代码测试和测试和测试结果测试结果从应用领从应用领域的反馈域的反
36、馈滥用案例滥用案例安全需求安全需求风险分析风险分析基于风险的基于风险的安全测试安全测试代码审核代码审核(工具)(工具)风险分析风险分析渗透测试渗透测试安全操作安全操作 软软 件件 安安 全全63基于风险的安全测试基于风险的安全测试l风险分析,特别是在设计级中,可以帮助我们确定潜在的设计级安全问题和它们的影响。l一旦风险被确定并进行了评级,就有助于指导软件安全测试。 软软 件件 安安 全全64滥用案例滥用案例 需求和需求和使用案例使用案例体系结构体系结构和设计和设计测试计划测试计划代码代码测试和测试和测试结果测试结果从应用领从应用领域的反馈域的反馈滥用案例滥用案例安全需求安全需求风险分析风险分析
37、基于风险的基于风险的安全测试安全测试代码审核代码审核(工具)(工具)风险分析风险分析渗透测试渗透测试安全操作安全操作 软软 件件 安安 全全65滥用案例滥用案例l软件开发人员倾向于根据系统在一切条件满足的情况下的表现来描述软件需求,这将导致以正确的使用为前提而描述系统的规范行为。l如果系统会被有意滥用,为了开发出安全、可靠的软件,就必须设法预测异常行为。 软软 件件 安安 全全66滥用案例滥用案例l例如:对于一个工资支付系统,可能有这样的用例“系统允许系统允许HR管理部门的用户查看和修改所有员管理部门的用户查看和修改所有员工的工资工的工资”、“系统只允许基本用户查看自己的工系统只允许基本用户查
38、看自己的工资资”。l但是对于潜在攻击者,可能会试图获取工资支付系统中的特别权限,以删除所有欺诈交易的证据;或者攻击者设法将工资支付推迟几天以挪用由推迟产生的利息。l因此,为开发安全的软件,需要像坏攻击者一样思考问题。 软软 件件 安安 全全67滥用案例滥用案例 如何创建如何创建l提出一些假设,说明可能出现的问题。l仔细考虑负面和意外的事件。l向攻击者一样地考虑问题。l攻击者:企图使软件以某种不可预料的方式运行,以从中获益。l攻击时经常探测的地方:边界条件、边缘、系统之间的通信,以及系统前提假设。l聪明的攻击者经常设法破坏建造系统的前提假设。l滥用案例的目标之一:软件应该如何对非法使用做出反应。
39、文档文档需求需求使用使用案例案例攻击攻击模式模式可交付可交付文档文档攻击模型攻击模型l 威胁威胁l 攻击模式攻击模式已评级已评级的误用和的误用和滥用案例滥用案例建造滥用案例的简单过程图建造滥用案例的简单过程图 输入输入 活动活动 输出输出安全分析人员安全分析人员需求分析人员需求分析人员确定威胁确定威胁文档威胁文档威胁审核威胁审核威胁创建反需求创建反需求创建攻击模型创建攻击模型审核反需求审核反需求审核攻击模型审核攻击模型创建误用案例创建误用案例分析和评级误用分析和评级误用和滥用案例和滥用案例审核已评级的误审核已评级的误用和滥用案例用和滥用案例 软软 件件 安安 全全69安全需求安全需求 需求和需
40、求和使用案例使用案例体系结构体系结构和设计和设计测试计划测试计划代码代码测试和测试和测试结果测试结果从应用领从应用领域的反馈域的反馈滥用案例滥用案例安全需求安全需求风险分析风险分析基于风险的基于风险的安全测试安全测试代码审核代码审核(工具)(工具)风险分析风险分析渗透测试渗透测试安全操作安全操作 软软 件件 安安 全全70软件安全与安全操作相结合软件安全与安全操作相结合 需求和需求和使用案例使用案例体系结构体系结构和设计和设计测试计划测试计划代码代码测试和测试和测试结果测试结果从应用领从应用领域的反馈域的反馈滥用案例滥用案例安全需求安全需求风险分析风险分析基于风险的基于风险的安全测试安全测试代
41、码审核代码审核(工具)(工具)风险分析风险分析渗透测试渗透测试安全操作安全操作 软软 件件 安安 全全71软件安全与安全操作相结合软件安全与安全操作相结合l需求:需求:滥用案例l设计:设计:商业风险分析l设计:设计:体系结构风险分析l测试计划:测试计划:安全测试l实现:实现:代码审核l系统测试:系统测试:渗透测试l实际部署系统:实际部署系统:配置和操作 软软 件件 安安 全全72可信赖计算安全开发生命周期可信赖计算安全开发生命周期 l微软微软安全培训安全培训启动安全启动安全并注册并注册SWI安全设安全设计最优计最优方法方法安全体系结构安全体系结构和攻击面和攻击面审核审核 威胁威胁 建模建模使用
42、安全使用安全开发工具开发工具和最优开和最优开发和测试发和测试方法方法为产品为产品创建安创建安全文档全文档和工具和工具预备预备安全安全反应反应计划计划安全安全推动推动渗透渗透测试测试最终最终安全安全审核审核安全安全服务服务和和反应反应执行执行需求需求设计设计实现实现验证验证发行发行支持支持和和服务服务 软软 件件 安安 全全73Microsoft 的的SD3+C原则原则lSecure by Design, Secure by Default, Secure in Deployment and Communication l设计安全设计安全:在架构、设计和实现软件时,应使它在运行时能保护自身及其处
43、理的信息,并能抵御攻击。 l默认安全默认安全:在现实世界中,软件达不到绝对安全,所以设计者应假定其存在安全缺陷。 l部署安全部署安全:软件应该随附工具和指导以帮助最终用户和/或管理员安全地使用它。 l通信通信:软件开发者应为产品漏洞的发现做好准备并坦诚负责地与最终用户和/或管理员进行通信,以帮助他们采取保护措施。 软软 件件 安安 全全74Windows 实施实施 SDL 之前和之后的严重和重要之前和之后的严重和重要安全公告数安全公告数 软软 件件 安安 全全75SQL Server 2000 实施实施 SDL 之前和之后的之前和之后的安全公告数安全公告数 软软 件件 安安 全全76Excha
44、nge Server 2000 实施实施 SDL 之之前和之后的安全公告数前和之后的安全公告数 软软 件件 安安 全全77谁来实施安全?谁来实施安全?lMicrosoft是假定公司或软件开发组织中存在一个中央安全小组,该小组致力于推动最佳安全做法的制订与改进和流程优化,为整个组织提供专家意见,并在软件发布前对其进行审核(最终安全审核或 FSR)。 lMicrosoft 的经验是在软件设计和开发过程中必须经常与安全小组进行互动,并必须与其共享敏感的技术和商业信息。 软软 件件 安安 全全78软件安全人人有责软件安全人人有责l开发人员开发人员必须实施安全工程,保证建造的系统是可防御的而非布满漏洞。l软件操作人员软件操作人员必须继续架构合理的网络,保护它们并维持它们的运行。l管理员管理员必须理解现代系统的分布式本质,并开始实施最低特权原则。l用户用户必须认识到软件是可以安全的,所以可以与软件供应商合作,共享软件的价值。还必须认识到,在任何设计中用户都是最后的防御阵地。l软件经理主管人员软件经理主管人员必须认识到,在安全设计和安全分析上尽早投资会有助于提高用户对他们的产品的信任程度。