软件安全火龙果
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RMF的基本思想:随时间变化,对软件安全进行确定、 评级、追踪和理解。
28
软件安全
Cigital的风险管理框架(RMF)
测量和报告 1 2 确定商业 和技术风险 工件分析 3 综合考虑并 对风险分析 4 定义降低 风险的策略
理解 商业环境
5 实施修复并 进行验证
29
软件安全
某软件项目的风险管理计划
34
软件安全
25个最危险的编程错误
1. 组件间不安全的交互:这些缺陷与数据在单独的组 件、模块、程序、进程、线程或系统之间不安全发 送和接受方法有关。
CWE-20:不适当的输入验证 ; CWE-116:不正确的编码或输出转义; CWE-89:SQL查询结构保护失败(又名“ SQL注入”) ; CWE-79:网页结构保护失败(又名“跨站脚本攻击”) ; CWE-78:操作系统命令结构保护失败; CWE-319:明文传输的敏感信息; CWE-352:伪造跨站请求(CSRF); CWE-362:竞争条件 ; CWE-209:错误消息的信息泄漏;
未在安全上下文环境中执行验证 验证例程不集中 不安全的组件边界 大的攻击面 在过高权限级别上运行进程 没有纵深防御 失效时处理不安全
薄弱的结构性安全
15
软件安全
常见的安全设计问题
其他
代码和数据混在一起 错将信任寄予外部环境 不安全的默认值 未作审计日志
16
37
软件安全
Fortify
Fortify SCA是发现软件安全漏洞隐患最全面和分析最 完整的产品。 它使用特有的成熟的五大软件安全分析引擎、最全面最 广泛的软件安全代码规则集和fortify公司特有的XTier Dataflow™ analysis技术去检测软件安全问题。 Fortify专门的分析器
36
软件安全
25个最危险的编程错误
3. 可穿透的防范措施:这一类缺点与防御技术的经 常误用、滥用,或彻底忽略有关。
CWE-285:不正确的访问控制(授权) ; CWE-327:使用一个被攻破的或危险的加密算法 ; CWE-259:硬编码的密码 ; CWE-732:对关键资源的使用权限不安全的分配 ; CWE-330:使用不够有效的随机值 ; CWE-250:给予没有必要的权限; CWE-602:服务器端的安全由客户端实施。
17
软件安全
几个常见致命安全漏洞
缓冲区溢出 SQL注入 跨站脚本
18
软件安全
缓冲区溢出
当一个程序允许输入的数据大于已分配的缓冲区大 小时,缓冲区溢出就会发生。 有些语言具有直接访问应用程序内存的能力,如果 未能处理好用户的数据就会造成缓冲区溢出。C和 C++是受缓冲区溢出影响的两种最常见的编程语言。 缓冲区溢出造成的后果小到系统崩溃,达到攻击者 获取应用程序的完全控制权。 1988年,第一个Internet蠕虫—Morris蠕虫就是对 finger服务器攻击,造成缓冲区溢出,几乎导致 Internet瘫痪。
软件安全
实现漏洞示例
2001年的红色代码(Code Red)蠕虫利用Microsoft 的IIS Web服务器的软件缺陷。
字符串变量是Unicode字符类型的(每个字符占用两 个字节),在计算缓冲区的时候应该是偏移量为2, 但IIS在计算缓冲区大小的时候却按照偏移量为1错 误的计算缓冲区。
导致在14个小时内,就有359000台机器感染了红色 代码蠕虫。
39
软件安全
其他源代码分析工具
Coverity Ounce Labs Secure software
40
软件安全
体系结构风险分析
⑥
安全需求
① ②
风险分析
⑤
滥用案例
④
基于风险的 安全测试
代码审核 (工具)
③
②
风险分析
渗透测试
⑦
安全操作
需求和 使用案例
体系结构 和设计
测试计划
代码
测试和 测试结果
如果传递来的参数是“1 or 2>1 --”,则执行SQL语句: SELECT conum FROM cust WHERE id=1 or 2>1 -22
软件安全
跨站脚本
跨站脚本(XSS,Cross-site Scripting)漏洞是一类 专门针对Web应用程序的漏洞,它会使得产生漏洞 的Web服务器绑定的用户数据(通常保存在cookie中) 被泄露给恶意的第三方。 所谓“跨站”是指;当一个客户端访问了可正常提 供服务但是有漏洞的Web服务器后,cookie从此客户 端传递给了攻击者控制的站点。 任何用于构建网站的编程语言或者技术都可能受到 影响。
5
软件安全
报告给CERT/CC的与安全相关的软件弱点
6
软件安全
软件安全问题加剧的三个趋势
互联性
多数计算机与Internet相连 多数软件系统互联于Internet
可扩展性
通过接受更新或者扩展件使系统升级
代码行数增加、网络式、分布式
复杂性
7
软件安全
Windows操作系统复杂性
8
35
软件安全
25个最危险的编程错误
2. 危险的资源管理:此类缺陷与软件没有妥善管理 创造、使用、转让或取消重要的系统资源有关。
CWE-119:对内存缓冲区边界操作限制失败 ; CWE-642:外部控制的临界状态数据; CWE-73:外部控制的文件名或路径 ; CWE-426:不可信的搜索路径; CWE-94:代码生成控制失败(又名“代码注入” ) ; CWE-494:下载的代码未进行完整性检查 ; CWE-404:资源关闭或释放不正确; CWE-665:不正确的初始化; CWE-682:不正确的运算(如出现整数溢出等错误)。
安全需求 滥用案例
渗透测试 安全操作
需求和 使用案例
体系结构 和设计
测试计划
代码
测试和 测试结果
从应用领 域的反馈
Fra Baidu bibliotek
32
软件安全
利用工具进行代码审核
⑥
安全需求
① ②
风险分析
⑤
滥用案例
④
基于风险的 安全测试
代码审核 (工具)
③
②
风险分析
渗透测试
⑦
安全操作
需求和 使用案例
体系结构 和设计
测试计划
代码
测试和 测试结果
从应用领 域的反馈
33
软件安全
代码审核
所有的软件项目有一个共同的工件—源代码。 大量的安全问题都是由可以在代码中发现的简单缺 陷引起的,例如缓冲区溢出漏洞与SQL注入漏洞。 代码审核就是为了查找和修复存在于源代码中的缺 陷。 代码审核可以手工审核或者使用静态分析工具进行 审核。 静态分析工具审核速度快,并不需要操作人员具有 丰富的安全专业知识。
按照客户的要求 事先进行需求评 修改 审
按照客户要求变 事先定义清楚并 更 由客户确认 修改项目目标 实现明确项目目 标
立即与客户进行 制定沟通管理计 沟通 划 …… ……
软件安全
微软:可信赖计算安全开发生命周期SDLC
微软
安全培训 为产品 创建安 全文档 和工具 预备 安全 反应 计划 安全 推动 最终 安全 审核 安全 服务 和 反应 执行
13
软件安全
常见的安全设计问题
密码技术使用的败笔
创建自己的密码技术 选用了不当的密码技术 依赖隐蔽式安全 编写到程序中的密钥 错误的处理私密信息 会话管理薄弱或缺失 身份鉴别薄弱或缺失 授权薄弱或缺失
14
对用户及其许可权限进行跟踪
软件安全
常见的安全设计问题
有缺陷的输入验证
19
软件安全
缓冲区溢出
Morris finger蠕虫的成因: char buf[20]; gets(buf); 另一个缓冲区溢出例子: char buf[15]; char prefix[]=“http://”; char path[]=“upc.edu.cn”; strcpy(buf,prefix); strcat(buf,path,sizeof(path));
软件安全
主讲内容
软件安全概念
软件漏洞
风险管理框架
安全开发生命周期
软件安全的七个接触点
2
软件安全
许多关键基础设施取决于计算机安全
3
软件安全
关于软件安全的相关报道
4
软件安全
软件安全概念
出现软件故障现象的原因是软件存在漏洞。 “任何软件,不论它看起来是多么安全,其中都隐 藏漏洞”。 软件安全的目的是尽可能消除软件漏洞,确保软件 在恶意攻击下仍然正常运行。
26
软件安全
解决软件安全的方法
Gary McGraw博士
应用风险管理 软件安全的接触点(最优化方法) 知识
微软:
可重复的流程 工程师教育 度量标准和可测量性
27
软件安全
风险管理框架
“安全就是风险管理”。 风险就是在项目过程中有可能发生的某些意外事情。 例如:缺少对开发工具的培训。 风险管理的关键:随着软件项目的展开,不断的确 定和追踪风险。
从应用领 域的反馈
41
软件安全
体系结构风险分析
50%的软件安全问题是有设计瑕疵引起的。 因此需要对设计和说明书进行审核分析。 设计人员、架构人员和分析人员应该用文档清晰的 记录各种前提假设,并确定可能的攻击。
23
软件安全
跨站脚本
24
软件安全
跨站脚本
<% String eid = request.getParameter("eid"); %> ... Employee ID: <%= eid %> XSS测试语句之一: ><script>alert(document.cookie)</script>
项目风险管理计划
风险识别
潜在风险 后果
风险评估
可能 严重 性 性 5 8 6 5 …
30
风险应对措施
应急措施 预防措施
客户的需求不明 客户不接受产品 确 或拒绝付款
项目范围定义不 清楚 项目目标不明确 与客户沟通不够 …… 项目没完没了 项目进度拖延或 成本超支 软件不能满足客 户需求 ……
9 9 8 9 …
21
软件安全
SQL注入
public static boolean doQuery(String Id){ …… try { …… Statement st=….; ResultSet rs=st.executeQuery(“SELECT conum FROM cust WHERE id=”+Id); while(rs.next()){ ….. } catch…… }
数据流分析器 语义分析器 控制流分析器 配臵流分析器 结构分析器
38
软件安全
静态分析工具FindBugs
有了静态分析工具,就可以在不实际运行程序的情 况对软件进行分析。 FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可 能的问题。 FindBugs 的 缺陷清单及说明。 Findbugs eclipse插件使用指南
25
软件安全
其他致命安全漏洞
格式化字符串 整数溢出 命令注入 未能处理错误信息 未能保护好网络流量 使用Magic UPL及隐藏表单字段 未能正确使用SSL和TLS 使用基于弱口令的系统 未能安全的存储和保存数据 信息泄露 不恰当的文件访问 清新网络域名解析 竞争条件 未认证的密钥交换 密码学强度随机数 不良可用性
使用安全 开发工具 安全体系结构 启动安全 安全设 和最优开 和攻击面 并注册 计最优 发和测试 审核 威胁 SWI 方法 方法 建模
渗透 测试
需求
设计
实现
验证
发行 支持 和 服务
31
软件安全
Gary McGraw:软件安全接触点(最优化方法)
代码审核 (工具) 风险分析 基于风险的 安全测试 风险分析
软件安全
20
SQL注入
通过把SQL命令插入到Web表单递交或输入域名或 页面请求的查询字符串,最终达到欺骗服务器执行 恶意的SQL命令。 任何可以与数据库交互的编程语言都可能出现SQL 注入漏洞。 SQL注入的最大的威胁是攻击者可以获得隐私的个 人信息或者敏感数据;也可能导致服务器甚至网络 的入侵。
软件安全
J2EE的N层架构举例
9
软件安全
漏洞
10
软件安全
漏洞
11
软件安全
漏洞
所有的软件都存在潜伏的漏洞 安全必须经过证明 软件安全漏洞可分为两大类: 设计漏洞 实现漏洞
12
软件安全
设计漏洞示例
Microsoft Bob是作为Windows ME和Windows 98的辅 助程序而设计的,其中包含一个设置系统密码的工 具。 当用户试着输了三次(不正确)密码时,Bob将弹 出如下的信息:“我想你忘记了你的密码,请输入 一个新的密码。”然后,就允许用户修改密码,即 使不知道老密码。