软件安全开发生命周期
软件生命周期模型
瀑布模型
迭代模型
增量模型
快速原型模型
螺旋模型
净室模型
各软件过程模型的特点
软件危机与安全问题
软件危机
- 第一次软件危机
- 第二次软件危机
- 第三次软件危机
软件安全问题
软件安全保障
软件安全开发生命周期模型
SDL(安全开发生命周期)
- 培训
- 需求
- 设计
- 实现
- 验证
- 发布
- 响应
CLASP(综合的轻量级应用安全过程)
CMMI (软件能力成熟度集成模型)
- CMMI Level 1,初始级
- CMMI Level 2,可管理级
- CMMI Level 3,已定义级
- CMMI Level 4,量化管理级
- CMMI Level 5,优化管理级
CMMI 为企业带来的价值:
- 能保证软件开发的质量与进度
- 有利于控制成本
- 有助于提高软件开发者的职业素养
- 能够解决人员流动所带来的问题
- 有利于提升公司和员工绩效管理水平
SAMM(软件保证成熟度模型)
4 个软件开发过程中的核心业务功能
- 治理
- 构造
- 验证
- 部署
BSIMM(BSI 成熟度模型)
各软件安全开发模型的特点
- SDL
- CLASP
- CMMI
- SAMM
- BSI 系列
软件安全需求及设计
威胁建模
威胁建模作用
威胁建模流程
- 确定建模对象
- 识别威胁
- 评估威胁
- 消减威胁
STRIDE 模型
- Spoofing 假冒
- Tampering 篡改
- Repudiation 否认
- Information Disclosure 信息泄露
- Denail of Service 拒绝服务
- Elevation of Privilege 提升权限
软件安全需求分析
系统调查
定性分析系统的脆弱点和可能遭受的安全威胁
脆弱点和安全威胁的定量分析
需求的确定
软件安全设计
工作内容与活动
- 详细风险评估
- 控制措施选择
- 安全技术实现
- 设计审查
安全设计原则
- 最小特权原则
- 权限分离原则
- 最少共享机制原则
- 完全中立原则
- 心里可接受度原则
- 默认故障处理保护原则
- 经济机制原则
- 不信任原则
- 纵深防御原则
- 保障最弱环节原则
- 公开设计原则
- 隐私保护原则
- 攻击面最小化原则
软件安全实现
安全编码原则
验证输入
常见输入源:
- 命令行参数
- 环境变量
- 文件及文件名
- 网络数据
- 其他来源
避免缓存溢出
避免缓冲区溢出可使用的安全防御措施:
- 精心编程
- 使用替代的安全函数或函数库
- 基于探测方法防御
- 非执行的堆栈防御
程序内部安全
- 程序内部接口安全
- 异常安全处理
- 最小化反馈
- 避免竞争条件
- 安全使用临时文件
安全调用组件
- 组件安全
- 返回值安全
- 传递数据安全
禁止使用不安全函数
软件安全编译
代码安全审核
源代码审核的概念和原理
源代码审核工具
- 安全性
- 多平台性
- 可扩展性
- 知识性
- 集成性
软件安全测试
软件测试
软件测试基本概念
- 测试用例
- 测试覆盖率度量指标
- 测试的信条
软件测试方法
- 单元测试、集成测试、系统测试
- 黑盒测试、白盒测试、灰何测试
- 静态测试、动态测试
- 回归测试
- 验收测试
软件安全测试
软件安全测试基本概念
软件安全测试方法
- 模糊测试
- 渗透测试
- 静态代码安全测试
安全测试思路
- 充分了解软件安全漏洞
- 评估软件安全风险
- 采用安全测试技术和工具
软件安全交付
软件供应链安全
软件供应链安全的概念
- 代码编写
- 代码编译
- 软件分发及更新
软件供应链安全应对措施
- 代码编写安全
- 代码编译安全
- 软件发布更新安全