软件开发安全
10.1 软件的重要性
10.2 何处需要安全
软件控制方式:
- 操作系统控制:如在ARP中插入伪造的数据
- 应用程序和数据库管理控制
- 以上两种方式结合:这是常用的方式
10.3 系统开发生命周期
system development life cycle,SDLC
SDLC的阶段:启动,购买/开发,安装,操作/维护,处理
认证:对系统进行的技术测试
认可:管理层允许系统在特定环境中运行的正式授权
10.4 软件开发生命周期
software development life cycle,SDLC
需求收集、设计、开发、测试/验证、发布/维护
如果软件是为特定客户开发的,往往就需要一个工作声明(Statement of Work,SOW),描述产品和客户的要求。
工作分解结构(work breakdown structure,WBS)是一个项目管理工具,定义和分组项目的各工作单元。
测试/验证阶段:单元测试、集成测试、验收测试、回归测试
10.5 安全软件开发最佳实践
Web应用安全联盟WASC:将安全集成到软件开发过程中
开放式Web应用程序安全项目OWASP:将安全集成到软件开发过程中
美国美土安全部DHS/构建安全Build Security In,BSI:重点是保护关键基础设施
ISO/IEC27034:通用性做法
10.6 软件开发模型
10.6.1 边做边改模型
不是一个正式的系统开发生命周期模型
10.6.2 瀑布模型
线性生命周期模型,每一个阶段都依赖上一个阶段的结果,不适合复杂的项目,因为项目中通常存在很多变量
10.6.3 V模型
类似瀑布模型,但在项目的每个阶段都进行测试,所以成功率更高。但不允许平行处理事件,变更成本也高。适合前期可以理解所有需求且变更范围很小的场合。
10.6.4 原型模型
快速原型:也称抛弃型,团队快速开发出原型以判断是否可行或是需要开发另一种解决方案,快速原型在完成服务目的后是被丢弃的
液化原型:原型会被持续改进直到最后的产品阶段,在实验室环境中创建和改进
运行原型:类似液化原型,但是在生产环境中开发和改进的
10.6.5 增量模型
多个瀑布模型,每一个瀑布都交付一个可运行的产品
适合涉及风险、程度复杂性、资金和功能需求问题,且需要在产品开发周期早起阶段考虑的项目
10.6.6 螺旋模型
使用迭代方法将重点放在风险分析上,适合有动态需求的复杂项目
10.6.7 快速应用开发PAD
原型+迭代的方式,允许用户在开发阶段参与其中,以保证最终的结果能满足需求
10.6.8 敏捷模型
采用迭代和增量开发的方式,更灵活
除此以外,还有探索型模型、复用模型、净室模型、联合分析开发
10.7 能力成熟度模型CMM
Capability Maturity Model
CMM模型描述了软件开发流程的基本规程、原则和实践,是个过程改进模型。
10.8 变更控制
当一个软件在开发生命周期内发生变更,就需要软件配置管理SCM工具使变更控制过程实现自动化管理。
软件配置管理系统提供并行管理、版本控制和同步处理。
软件托管:将软件源代码存储在一个第三方托管机构
10.9 编程语言和概念
第一代:机器语言
第二代:汇编语言
第三代:高级语言
第四代:非常高级的语音
第五代:自然语言
10.9.1 汇编程序、编译器和解释器
编译器compilers把高级语言转换成机器可以理解的形式,如计算机上的可执行文件通过编译器运行在指定类型的处理器上。
解释器interpreter则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快。
垃圾收集garbage connector:执行软件管理任务的一种自动化方式,识别曾经被占用但现在不再被使用的内存块,回收并标记为空闲。可以避免DDOS攻击。Java自动执行垃圾收集工作,而C语言