软件安全设计讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一部分
软件概念
1.与一系统(尤指计算机系统)有关的程序、步骤和有关文件编制的完整集合。特指特定类型计算机所使用的程序的总称,连同与计算机或程序有关的资料,例如手册、图表和操作指令。
2.根据冯•诺依曼提出的“存储程序控制思想”,人们要控制计算机完成一定的工作,就要事先编写好一系列的控制命令,一步一步告诉计算机该如何做,然后将这一系列控制命令输入到计算机的存储器中保存,再让计算机按照一定的顺序逐一执行,从而完成我们所要求的工作。
3.由人根据一定的需要事先编写的一系列控制计算机工作的命令,就称为计算机程序。
安全概念
信息定义
所谓信息,就是客观世界中各种事物的变化和特征的最新反映,是客观事物之间联系的表征,也是客观事物状态经过传递后的再现。
信息安全
信息安全”没有公认和统一的定义,国内外的论述大致可分为两大类:
1.一类是指具体的信息技术系统的安全。
2.而另一类则是指某一特定信息体系的安全。
但是有人认为这两种定义失之于过窄,而应定义为:一个国家的社会信息化状态不受外来的威胁与侵害,一个国家的信息技术体系不受外来的威胁与侵害。
信息安全的五个基本属性
安全性
可用性
保密性
可控性
可靠性
软件安全概念
软件安全性是指软件不被恶意使用或者攻击进而造成用户信息资产损失的属性。
软件安全:软件在恶意攻击下能够正确地完成其功能。
软件安全的三个属性
保护敏感信息不被未授权用户访问–软件的可信性,confidentiality
保护数据不被更改或破坏–软件的完整性integrity
确保资源被授权用户的使用-软件的可用性,availability
如何得到安全的软件
构建安全的软件是一个过程,这个过程包括:
教育
设计,接口选择和规格定义
软件的实现和编
验证、测试和评估
软件提交和安全地执行
软件的维护、BUG修复和调整
漏洞及脆弱性
安全漏洞(Security Hole):计算机系统具有的某种可能被入侵者恶意利用的属性。
有时安全漏洞也称为脆弱性(Vulnerability)。
漏洞的本质:漏洞是系统的一组特性,恶意的主体(攻击者或者攻击程序)能够利用这组特性,通过已授权的手段和方式获取对资源的未经授权访问,或者对系统造成损害。
当系统的某个漏洞被入侵者渗透(exploit)而造成泄密时,其结果就称为一次安全事件(Security Incident)。
1996年Matt Bishop和Dave Bailey,“计算机脆弱性(Computer Vulnerability)”:
“计算机系统由一系列描述构成计算机系统的实体的当前配置状态(state) 组成,系统通过应用状态变换(State Transition,状态转换)(即改变系统状态) 实现计算。使用一组状态变换,从给定的初始状态可以到达的所有状态最终分为由安全策略定义的两类状态:已授权的(authorized,经授权的) 和未经授权的(unauthorized ,未被授权的,未经认可的)。
漏洞是软件的属性。
质量特性
功能性
可靠性
易用性
效率
维护性
可移植性
关于软件安全的基本概念及认识
安全的代码(secure code):能够抵抗恶意攻击的代码;安全的代码同时也是健壮的代码(robust code)
安全性代码(security code):实现安全功能的代码。
程序是“安全的”:
安全隐含某种程度的信任(trust),程序实现了期望的机密性、完整性、可用性及其功能。
第二部分
安全问题来源
1、漏洞
漏洞是软件的属性
2、攻击者
3、软件存在的攻击路径-攻击面问题
意外行为及缺陷
意外行为(Unexpected Behavior):也称程序安全缺陷,是由于程序脆弱性引起的不适当的程序行为。
缺陷(Flaw):缺陷可以是故障(Fault),或者失效(Failure)
程序安全缺陷可能来源于任何种类的软件错误:
无意或疏忽的
故意或有意的
缺陷类型
Landwehr et al. 提出了程序缺陷分类方法(taxonomy)
有意的缺陷(Intentional,故意的)
恶意的(Malicious)
非恶意的(Nonmalicious)
无意中的缺陷(Inadvertent,不注意的;疏忽的)
•确认错误(Validation(验证;合法性,有效)error)(incomplete /
inconsistent)
•域的错误(Domain error)
•顺序化和混淆现象(Serialization and aliasing)
•不完全的身份识别和认证(Inadequate identification and
authentication)
•边界条件违反(Boundary condition violation)
•其它可利用的逻辑错误(Other exploitable logic errors)
漏洞类型
软件漏洞包括设计漏洞和实现漏洞。漏洞是软件安全威胁的根源.
设计漏洞:
设计错误,往往发现于软件的安全功能特性中。
实现漏洞:
来源于软件实际编码中的安全缺陷。
软件安全缺陷及其来源(以上)
常见软件安全设计问题
常见的安全设计问题1: 密码技术使用的败笔
创建自己的密码技术
选用了不当的密码技术
依赖隐蔽式安全
编写到程序中的密钥
错误地处理私密信息
常见的安全设计问题2: 对用户及其许可权限进行跟踪的薄弱或缺失
会话管理薄弱或者缺失
身份鉴别薄弱或缺失
授权薄弱或缺失
常见的安全设计问题3: 有缺陷的输入验证
没有在安全的上下文环境中执行验证,如在服务器验证而在客户端没有验证
验证例程不集中,验证应尽可能靠近用户输入,并应集中以便于核实
不安全的组件边界
常见的安全设计问题4:薄弱的结构性安全
过大的攻击面
在过高权限级别上运行进程
没有纵深防御
失效时的处理不安全
常见的安全设计问题5:其他设计缺陷