第 10 章 知识域:软件开发安全
CISP 考试教材《第 1 章 知识域:信息安全保障》知识整理
CISP 考试教材《第 2 章 知识域:网络安全监管》知识整理
CISP 考试教材《第 3 章 知识域:信息安全管理》知识整理
CISP 考试教材《第 4 章 知识域:业务连续性》知识整理
CISP 考试教材《第 5 章 知识域:安全工程与运营》知识整理
CISP 考试教材《第 6 章 知识域:信息安全评估》知识整理
CISP 考试教材《第 7 章 知识域:信息安全支撑技术》知识整理
CISP 考试教材《第 8 章 知识域:物理与网络通信安全》知识整理
CISP 考试教材《第 9 章 知识域:计算环境安全》知识整理
CISP 考试教材《第 10 章 知识域:软件开发安全》知识整理
目录
10.1 知识子域:软件安全开发生命周期
10.1.1 软件生命周期模型
软件开发生命周期(Software Development Life Cycle,SDLC)又称为软件生存周期或软件生命周期
每个阶段都要有定义、工作、审查,并形成过程文档,按部就班、逐步推进,以提高软件的质量
按照软件生命周期思想,软件开发不再单单强调“编码”,而是概括了软件开发的全过程
生命周期模型(Life Cycle Model)
1.瀑布模型
瀑布模型(Waterfall Model)
核心思想是按工序将问题简化,将功能的实现与设计分开,便于分工协作,即采用结构化的分析和设计方法将逻辑实现与物理实现分开
2.迭代模型
迭代模型是统一软件开发过程(Rational Unified Process,RUP)推荐的周期模型
迭代模型可以理解为多个小型的瀑布模型的组合,所有的阶段都可以细分为迭代,每一次迭代都会产生一个可以发布的产品,这个产生是始终产品的一个子集
3.增量模型
增量模型融合了瀑布模型和迭代模型的特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”
4.快速原型模型
快速原型模型又称为原型模型,它是增量模型的另一种形式;它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作
快速原型是利用原型辅助软件开发的一种思想
5.螺旋模型
螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代以及瀑布模型的系统化与严格监控的特征
螺旋模型更适合大型的、昂贵的系统级软件应用
6.净室模型
净室是一种应用数学与统计学理论以经济的方式生产高质量软件的工程技术
净室技术“防患于未然”的主导思想
7.各软件过程模型的特点
10.1.2 软件危机与安全问题
1.软件危机
(1)第一次软件危机
这个时代的程序一个典型的特征就是依赖特定的机器,程序员必须根据所使用的计算机的硬件特征编写特定的程序
迫切需要改变软件的生产方式,提高软件的生产效率,第一次软件危机开始爆发
-
软件开发费用和进度失控
-
软件的可靠性差
-
生产出来的软件难以维护
(2)第二次软件危机
当软件规模不断扩大到需要大量的开发人员共同协作时,第二次软件危机就诞生了
-
软件成本在总成本中所占的比例不断升高
-
软件开发生产率提高的速度远跟不上硬件的发展速度,使得人类不能充分利用现代计算机硬件所能提供的巨大潜力
为了解决这次危机,面向对象的编程语言诞生了
更好的软件工程方法诞生了,而程序员也越来越不知道硬件时怎么工作的了
(3)第三次软件危机
代码行越多,缺陷也就越多
软件存在漏洞和缺陷不可避免,这使得应用系统面临极大的安全风险,从而导致了第三次软件危机
-
由于软件安全问题导致的损失越来越多,软件安全性已经成为不得不认真考虑的问题
-
软件开发需求中被加入安全相关的需求,安全性测试成为软件验收的依据之一
为了更好地应对第三次软件危机,在软件开发的生命周期中开始引入安全相关工作,软件安全开发生命周期诞生了
2.软件安全问题
软件安全(即设计、构造和测试安全的软件的方法)
软件安全问题不仅仅是编码问题,数据显示,有超过 50% 的问题实际上属于软件设计方面的问题
软件安全问题的根本原因在于两个方面:一是内因,软件本身存在安全漏洞;二是外因,软件应用存在外部威胁
软件的缺陷的增长速度趋向于与代码行数的平方而变化
软件安全问题产生根源的外因是在目前的软件开发管理中,更多地重视软件功能而不关注对安全风险的管理
3.软件安全保障
软件安全保障是对“软件可以规避安全漏洞而按照预期的方式执行其功能”的信息
软件安全保障是指确保软件能够按照开发者预期、正常地执行任务,提供与威胁相适应的安全能力,从而避免存在可以被利用的安全漏洞,并且能从被入侵和失败的状态中恢复
软件安全保障的目的是在软件开发生命周期中提升软件的安全性,主要目的如下
(1)可信赖性
(2)可预见性
(3)遵循性
10.1.3 软件安全开发生命周期模型
软件安全开发涵盖软件的整个生命周期
安全软件开发生命周期(Secure Software Development Lifecycle,SSDL)是一种强调具有安全设计和安全措施的软件生命周期,即通过软件开发的各个步骤来确保软件的安全性,其目标是最大限度地确保软件的安全
据数据表明,在软件发布后对安全漏洞的修复所需的成本至少是在软件设计和编码阶段就进行修复的 30 倍
1.SDL(安全开发生命周期)
SDL 基于 3 个核心概念:教育、持续过程改进和责任
SDL 将软件开发生命周期划分为 7 个阶段,并提出了 17 项重要的安全活动
弃用不安全的函数,属于实现(实施)阶段
(1)培训
(2)需求
(3)设计
(4)实现
(5)验证
(6)发布
(7)响应
2.CLASP(综合的轻量级应用安全过程)
由安全软件公司(Secure Software,Inc)提出,后来由开放 Web 应用安全项目(The Open Web Application Security Project,OWASP)完善、维护并推广
3.CMMI(软件能力成熟度集成模型)
CMMI 的 5 个级别