软件安全-02-典型软件安全问题与威胁分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件安全-UESTC-INTEL IA JOINT LAB
无意中的缺陷( Inadvertent,不注意的;疏忽的) 确认错误(Validation(验证;合法性,有效)error) (incomplete / inconsistent) 域的错误(Domain error) 顺序化和混淆现象(Serialization and aliasing) 不完全的身份识别和认证(Inadequate identification and authentication) 边界条件违反(Boundary condition violation) 其它可利用的逻辑错误(Other exploitable logic errors)
软件安全-UESTC-INTEL IA JOINT LAB
意外行为和缺陷
意外行为(Unexpected Behavior):也称程序安全缺陷
,是由于程序脆弱性引起的不适当的程序行为。 缺陷(Flaw):缺陷可以是故障(Fault),或者失效(
Failure)
程序安全缺陷可能来源于任何种类的软件错误:
软件安全技术
示范性软件学院软件技术系 郭建东
软件安全-UESTC-INTEL IA JOINT LAB
第2部分 典型软件安全问题
2.1 安全问题的来源 2.2 常见的设计问题 2.3 语言问题 2.4 平台问题 2.5 OWASP
软件安全-UESTC-INTEL IA JOINT LAB
– 无意或疏忽的 – 故意或有意的
软件安全-UESTC-INTEL IA JOINT LAB
缺陷的类型(Types of Flaws) :
Landwehr et al. 提出了程序缺陷分类方法( taxonomy)
有意的缺陷( Intentional,故意的) 恶意的(Malicious) 非恶意的(Nonmalicious)
常见的安全设计问题5:其他设计缺陷
✓ 代码和数据混在一起 ✓ 错将信任寄予外部系统 ✓ 不安全的默认值 ✓ 未做审计日志
软件安全-UESTC-INTEL IA JOINT LAB
2.3 编程语言的问题
软件安全-UESTC-INTEL IA JOINT LAB
2.3.1 C/C++的问题
问题1:没有安全的本地字符串类型, 也没有安全而易用的字符串处理函数。
2.1 安全问题的来源
软件安全-UESTC-INTEL IA JOINT LAB
安全问题的根本来源:
漏洞
漏洞是软件的属性
攻击者 软件存在的攻击路径-攻击面问题
软件安全-UESTC-INTEL IA JOINT LAB
产生漏洞的原因
(1) 软件或协议设计时的瑕疵 协议定义了网络上计算机会话和通信的规则,如果在 协议设计时存在瑕疵,那么无论实现该协议的方法多 么完美,它都存在漏洞。
软件安全-UESTC-INTEL IA JOINT LAB
缓冲区溢出(Buffer Overflow) ——一个最典型的例子:
例:
char sample[10]; for (i=0; i<10; i++) sample[i] = 'A'; sample[10] ='B'; //
软件安全-UESTC-INTEL IA JOINT LAB
2.2 常见的安全设计问题
软件安全-UESTC-INTEL IA JOINT LAB
常见的安全设计问题1: 密码技术使用的败笔 ✓ 创建自己的密码技术 ✓ 选用了不当的密码技术 ✓ 依赖隐蔽式安全 ✓ 编写到程序中的密钥 ✓ 错误地处理私密信息
验证例程不集中,验证应尽可能靠近用户 输入,并应集中以便于核实
不安全的组件边界
软件安全-UESTC-INTEL IA JOINT LAB
常见的安全设计问题4:薄弱的结构性安全
✓ 过大的攻击面 ✓ 在过高权限级别上运行进程 ✓ 没有纵深防御 ✓ 失效时的处理不安全
软件安全-UESTC-INTEL IA JOINT LAB
buffer overflows 缓冲区溢出 unvalidated input 未校验输入 race conditions 资源竞争 access-control problems 访问控制问题 weaknesses in authentication, authorization,
or cryptographic practices 认证、授权、加密 缺陷
软件来自百度文库全-UESTC-INTEL IA JOINT LAB
漏洞的两种类型:
软件漏洞包括设计漏洞和实现漏洞。漏洞是 软件安全威胁的根源.
设计漏洞:
设计错误,往往发现于软件的安全功能特性中。
实现漏洞:
来源于软件实际编码中的安全缺陷。
软件安全-UESTC-INTEL IA JOINT LAB
APPLE DEVELOPER常见软件缺陷
(2) 软件或协议实现中的弱点 即使协议设计得很完美,实现协议的方式仍然可能引 入漏洞。
软件安全-UESTC-INTEL IA JOINT LAB
(3) 软件本身的瑕疵 良好的、编写安全程序的的编程习惯。
(4) 系统和网络的错误配置 这一类的漏洞并不是由协议或软件本身的问题造 成的,而是由服务和软件的不正确部署和配置造 成的。
软件安全-UESTC-INTEL IA JOINT LAB
C/C++问题1:
C中以NULL终止符表示一个字符串的末尾。
如:Char buffer[]=“small string”
sma l l
s t r i n gΦ
没有确切地存储字符串的长度,该字符串的长度要 程序员管理。 当程序员处理这个长度犯错时,就会导致超过缓冲 区结尾部分的内存被覆盖。
软件安全-UESTC-INTEL IA JOINT LAB
常见的安全设计问题2: 对用户及其许可权限进行跟踪的薄弱或缺失
✓ 会话管理薄弱或者缺失 ✓ 身份鉴别薄弱或缺失 ✓ 授权薄弱或缺失
软件安全-UESTC-INTEL IA JOINT LAB
常见的安全设计问题3: 有缺陷的输入验证
没有在安全的上下文环境中执行验证,如 在服务器验证而在客户端没有验证
无意中的缺陷( Inadvertent,不注意的;疏忽的) 确认错误(Validation(验证;合法性,有效)error) (incomplete / inconsistent) 域的错误(Domain error) 顺序化和混淆现象(Serialization and aliasing) 不完全的身份识别和认证(Inadequate identification and authentication) 边界条件违反(Boundary condition violation) 其它可利用的逻辑错误(Other exploitable logic errors)
软件安全-UESTC-INTEL IA JOINT LAB
意外行为和缺陷
意外行为(Unexpected Behavior):也称程序安全缺陷
,是由于程序脆弱性引起的不适当的程序行为。 缺陷(Flaw):缺陷可以是故障(Fault),或者失效(
Failure)
程序安全缺陷可能来源于任何种类的软件错误:
软件安全技术
示范性软件学院软件技术系 郭建东
软件安全-UESTC-INTEL IA JOINT LAB
第2部分 典型软件安全问题
2.1 安全问题的来源 2.2 常见的设计问题 2.3 语言问题 2.4 平台问题 2.5 OWASP
软件安全-UESTC-INTEL IA JOINT LAB
– 无意或疏忽的 – 故意或有意的
软件安全-UESTC-INTEL IA JOINT LAB
缺陷的类型(Types of Flaws) :
Landwehr et al. 提出了程序缺陷分类方法( taxonomy)
有意的缺陷( Intentional,故意的) 恶意的(Malicious) 非恶意的(Nonmalicious)
常见的安全设计问题5:其他设计缺陷
✓ 代码和数据混在一起 ✓ 错将信任寄予外部系统 ✓ 不安全的默认值 ✓ 未做审计日志
软件安全-UESTC-INTEL IA JOINT LAB
2.3 编程语言的问题
软件安全-UESTC-INTEL IA JOINT LAB
2.3.1 C/C++的问题
问题1:没有安全的本地字符串类型, 也没有安全而易用的字符串处理函数。
2.1 安全问题的来源
软件安全-UESTC-INTEL IA JOINT LAB
安全问题的根本来源:
漏洞
漏洞是软件的属性
攻击者 软件存在的攻击路径-攻击面问题
软件安全-UESTC-INTEL IA JOINT LAB
产生漏洞的原因
(1) 软件或协议设计时的瑕疵 协议定义了网络上计算机会话和通信的规则,如果在 协议设计时存在瑕疵,那么无论实现该协议的方法多 么完美,它都存在漏洞。
软件安全-UESTC-INTEL IA JOINT LAB
缓冲区溢出(Buffer Overflow) ——一个最典型的例子:
例:
char sample[10]; for (i=0; i<10; i++) sample[i] = 'A'; sample[10] ='B'; //
软件安全-UESTC-INTEL IA JOINT LAB
2.2 常见的安全设计问题
软件安全-UESTC-INTEL IA JOINT LAB
常见的安全设计问题1: 密码技术使用的败笔 ✓ 创建自己的密码技术 ✓ 选用了不当的密码技术 ✓ 依赖隐蔽式安全 ✓ 编写到程序中的密钥 ✓ 错误地处理私密信息
验证例程不集中,验证应尽可能靠近用户 输入,并应集中以便于核实
不安全的组件边界
软件安全-UESTC-INTEL IA JOINT LAB
常见的安全设计问题4:薄弱的结构性安全
✓ 过大的攻击面 ✓ 在过高权限级别上运行进程 ✓ 没有纵深防御 ✓ 失效时的处理不安全
软件安全-UESTC-INTEL IA JOINT LAB
buffer overflows 缓冲区溢出 unvalidated input 未校验输入 race conditions 资源竞争 access-control problems 访问控制问题 weaknesses in authentication, authorization,
or cryptographic practices 认证、授权、加密 缺陷
软件来自百度文库全-UESTC-INTEL IA JOINT LAB
漏洞的两种类型:
软件漏洞包括设计漏洞和实现漏洞。漏洞是 软件安全威胁的根源.
设计漏洞:
设计错误,往往发现于软件的安全功能特性中。
实现漏洞:
来源于软件实际编码中的安全缺陷。
软件安全-UESTC-INTEL IA JOINT LAB
APPLE DEVELOPER常见软件缺陷
(2) 软件或协议实现中的弱点 即使协议设计得很完美,实现协议的方式仍然可能引 入漏洞。
软件安全-UESTC-INTEL IA JOINT LAB
(3) 软件本身的瑕疵 良好的、编写安全程序的的编程习惯。
(4) 系统和网络的错误配置 这一类的漏洞并不是由协议或软件本身的问题造 成的,而是由服务和软件的不正确部署和配置造 成的。
软件安全-UESTC-INTEL IA JOINT LAB
C/C++问题1:
C中以NULL终止符表示一个字符串的末尾。
如:Char buffer[]=“small string”
sma l l
s t r i n gΦ
没有确切地存储字符串的长度,该字符串的长度要 程序员管理。 当程序员处理这个长度犯错时,就会导致超过缓冲 区结尾部分的内存被覆盖。
软件安全-UESTC-INTEL IA JOINT LAB
常见的安全设计问题2: 对用户及其许可权限进行跟踪的薄弱或缺失
✓ 会话管理薄弱或者缺失 ✓ 身份鉴别薄弱或缺失 ✓ 授权薄弱或缺失
软件安全-UESTC-INTEL IA JOINT LAB
常见的安全设计问题3: 有缺陷的输入验证
没有在安全的上下文环境中执行验证,如 在服务器验证而在客户端没有验证