在线图片,重点见png。
软件开发安全
1、软件开发生命周期
SDLC
- 项目启动
- 明确需求,确定产品的基本安全目标
- 风险分析评估,评估威胁和脆弱性,估计不同安全对策的成本/收益比
- 风险管理
- 风险分析
- 功能设计分析和规划
- 安全需求
- 系统或应用程序的功能需求
- 标准和指导原则
- 出口限制
- 数据的敏感度级别
- 相关的安全策略
- 成本/收益分析结果
- 达到目标所需的保护级别
- 项目开发和需求管理团队对现行以及可能的未来功能需求进行复杂的分析以确保新系统满足终端用户要求
- 项目组员还会审查项目初始阶段输出的文档,并根据需求加以修正和更新。
- 相对较小的项目而言,以上过程往往包含在在项目初始阶段。
- 安全需求也应该对应形成
- 软件开发作为系统设计的一部分
- 一般在系统设计时 决定使用软件实施的功能。
- 而软件的验证必须要考虑所有为系统而设计的背景
- 考虑规格说明
- 软件和硬件的不同
- 软件是可以有分支的,软件基于不同的输入能执行不同的命令,所以软件是复杂的;
- 软件不是实体的也就不会磨损;
- 软件很容易和快速的改变;
- 软件的开发流程应充分计划、控制以及进行记录,用于检测和矫正由于软件变更所带来的非预期结果
- .软件组件没有像硬件一样经常进行标准化以及可替换的。
- component-based
- 硬件不同与软件
- 安全需求
- 系统详细设计
- 用于描述用户需求和系统内部行为的工具
- 包括系统与软件设计相关的所有活动。
- 设计系统架构,系统的输出和系统接口
- 建立数据输入,数据流和数据输出需求,以及一般基于公司的安全架构设计软件安全功能。
- 软件需求三个模型
- 信息模型
- 规定被处理信息的类型以及处理方式
- 如病毒特征、被修改的系统文件、关键文件的检验一级病毒活动
- 功能模型
- 应用程序需要执行的任务和功能
- 行为模型
- 说明应用程序在特定事务处理发生过程中和发生之后的状态
- 信息模型
- 设计
- 数据设计
- 抽取数据设计和信息模型数据,转换为数据结构
- 体系结构设计
- 定义了主要结构和应用程序组件之间的关系
- 过程设计
- 将结构化组件转换为描述性过程
- 数据设计
- 安全设计方法
- 威胁建模(STRIDE)
- 攻击面最小化分析
- 净化输入输出
- 需要考虑的问题
- 后续阶段的工作分解结构(WBS)
- 产品的细节和实现产品的环境
- 产品的模块化合重用问题
- 用于描述用户需求和系统内部行为的工具
- 软件开发和实施
- 主要工作
- 源代码已经生成、测试场景和测试用例也相应开发出来
- 开始实施单元和集成测试
- 程序和系统也开始文档化为了维护然后向验收性测试和产品转化
- 测试类型
- 单元测试
- 验证数据结构、逻辑和边界条件
- 集成测试
- 验证组件是否按照设计规范中协同工作
- 验收测试
- 确保代码满足客户的需求
- 回归测试
- 进行系统变更后会从新测试,以确保功能性、性能和保护级别
- 功能测试
- 性能测试
- 模糊测试(Fuzzing testing)
- 发送复杂/随机的数据给软件来引起软件的错误,主要用于识别缓存溢出、DOS、注入、验证错误以及其他可能导致软件死机、崩溃或发生各种错误。
- 脆弱性扫描(Vulnerability scanning)
- 通过自动化工具检查程序的主要错误,如强类型语言的错误、开发和配置错误、交易序列错误( transaction sequence faults )、映射出发条件( mapping trigger conditions. )等,通常在扫描完后需要手工进一步的调查。
- 人工测试
- 通过人员的经验和直觉来分析程序,通常使用计算机技术来判断,测试人员能定位设计错误,如逻辑错误。包括渗透测试。
- 动态分析(Dynamic analysis)
- 动态分析是及时的分析正在运行的程序, 一般是在静态分析之后,程序的基本问题都被解决完后执行。
- 单元测试
- 环境分离,职责分离
- 验证 (verification)
- 确保满足了产品规范
- 确认 (validation)
- 确保项目的主要目标得到满足
- 着重于如何使用和操作开发好的系统或应用程序
- 认证 (Certification)
- 对一个IT系统的技术和非技术安全特性以及其防护措施安全评价,衡量特定设计和实施满足一套规定的安全需求的程度,位认可过程提供支持。
- 确认对安全策略和标准的合规
- 鉴定或认可 (Accreditation)
- 权威机构正式声明,某个IT系统已经得到批准,能够运行于特定的安全模式,该安全模式采用了满足可接受风险等级的一套规定的安全措施
- 管理层对系统的获赠是认可
- 对风险的明确接受
- 迁移和修正
- 此阶段,系统从验收阶段转换到真实生产环境。
- 此阶段活动包括获取安全认可(security accreditation);
- 根据计划培训用户;
- 实施系统,包括含安装和数据转换;
- 如有必要,执行并行操作。
- 主要工作
- 运作/维护
- 正确配置安全环境
- 持续进行脆弱性测试,监控系统活动和审计事件
- 如果发生重大变更执行风险评估,并执行认证和鉴定过程
- 废弃
- 根据数据敏感程度,销毁数据。
- 销毁方法 (第二章域)
- 重写
- 消磁
- 物理破坏
- 事后回顾
- 经验教训总结
2、软件开发模型
瀑布模型(waterfall)
- 制定计划、需求分析、软件设计、程序编写、软件测试、运行维护
螺旋模型
- 软件开发模型实际上是一个包含了大量的软件开发模型的元模型
结构化编程开发
迭代开发
改进原型模型
- 抛弃型
- 改进型
探索模型
联合分析开发
快速应用开发
重用模型
净室
组件型开发
敏捷开发
- 敏捷宣言
- 个体和互动 高于 流程和工具 工作的软件 高于 详尽的文档 客户合作 高于 合同谈判 响应变化 高于 遵循计划
- 最大化未完成的工作量是必不可少的,围绕有动力的个人构建项目,并欢迎在整个开发过程中不断变化的需求。然而,敏捷并不认为清晰的文档是衡量进展的主要标准。相反,工作软件是衡量进度的主要标准。
- Scrum
- 极限编程XP
- Lean
- 个体和互动 高于 流程和工具 工作的软件 高于 详尽的文档 客户合作 高于 合同谈判 响应变化 高于 遵循计划
集成产品团队(IPT)
- Integrated Product and Process Development (IPPD)集成产品和流程开发
- 通过使用多科目团队同时集成所有必要获取活动来优化设计、制造和支持流程的管理技术
- IPPD从产品概念到生产,包括现场支持,促进满足成本和绩效目标
- IPPD的关键原则是集成产品团队(IPTs)的多学科协作模式
- IPT
- 来自所有各职能科目的代表与Team Leader 一起工作来构建成功和平衡的程序,识别并解决问题,妥善并及时的决策
- 小组成员不一定贡献100%的时间在项目上,一个成员可以在多个IPT团队。
- IPTs的目的是制定团队决策基于来自所有团队的实时输入(e.g.,项目管理、工程、制造、测试、逻辑、财务管理、采购和合同管理)也包括客户和供应商
- ITPs的团队成员由项目经理级组成,包括来自企业和系统/子系统承包商的成员
- 典型IPT处于项目集级,例如,可能由以下功能学科组成:设计工程学、制造、系统的工程,测试和评估,分包、质量保证、培训、财务、可靠性、维修性、保障性、采购、合同管理、供应商和客户。
- DevOps
- 概念
- 原则
- 对类似成产系统进行开发和测试
- 以可重复、可靠流程进行部署
- 监控和验证运营质量
- 扩大反馈回路
变更和配置管理
- 提出正式的变更控制
- 分析请求
- 记录变更请求
- 提交变更请求并批准
- 实施变更
- 先管理层报告结果
- 注意:重要的系统在变更后需要进行重新的认证和认可
能力成熟度模型集成CMMI
- 初始级
- 已管理级
- 已定义级
- 已管理级
- 优化级
能力成熟度模型CMM
- 初始级
- 可重复级
- 已定义级
- 已管理级
- 优化级
软件配置管理
- 识别
- 控制
- 状态记录
- 审计
3、编程语言与分布式计算
结构化程序设计
- 自顶向下的分析设计; 自底向上的逐步实施
- 面向用户的观点,严格区分工作阶段
- 缺点:开发周期长、开发过程繁琐和复杂 审计比较较困难,用户交流不直观
面向对象程序设计
- 采用类和对象两部分组成
- 类 (Class)
- 类(Class)定义了一件事物的抽象特点
- 类定义了事物的属性和它可以做到的(它的行为)
- 一个类的方法和属性被称为“成员”
- 对象 (Object)
- 对象(Object)是类的实例。
- 系统给对象分配内存空间,而不会给类分配内存空间; 类是抽象的,系统不可能给抽象的东西分配空间,对象是具体的
- 对象=属性+方法
- 属性:
- 描述了对象的结构和状态特征
- 方法:
- 对象能够执行的功能或过程
- 属性:
- 对象间通信的方法:消息传递
- 多态性 (polymorphism)
- 封装最简单的理解就是包装,指隐藏对象的属性和实现细节, 仅仅对外公开接口,即对象的内部状态对外界是透明的。
- 封装性 (Encapsulation)
- 意味着将对象信息隐藏
- 公有成员
- 私有成员
- 继承 (inheritance)
- 是一种由已存在的类创建一个或多个子类型的机制.
软件体系结构
- 数据结构
- 对数据元素之间逻辑关系的表示
- 标量
- 链表
- 层次树
- 聚合和耦合 (高内聚低耦合最佳)
- 内聚
- 反应某个模块能够执行多少种不同类型的任务
- 内聚越高,就越容易对其进行更新和修改,而不会影响到与其它交互的其他模块
- 耦合
- 一个模块执行任务时需要进行多少交互
- 低耦合更加容易重复使用,修改时也不会影响其他模块
- 内聚
分布式计算
- 通用对象请求代理体系结构(COMBA)
- 微软COM模型
- EJB
- API
- API是IoT(Internet of Things)的连接器,允许设备互相连接
- Representational State Transfer (REST) API
- REST安全专家使用建议
- REST API的三种安全路径
4、移动计算与Web安全和数据库管理与恶意软件
Web安全
- 信息收集(Information gathering)
- 管理界面(Administrative interfaces)
- 鉴别和访问控制(Authentication and access control)
- 输入验证(Input validation)
- 参数验证(Parameter validation)
- 会话管理(Session management)
数据库管理
- 数据库
- 以一定的格式组织并存储数据、记录文件,允许用户存取、管理和更新
- 焦点:数据采集、存储、恢复
- 最终用户数据(end-user data)
- 元数据(metadata)
- 本质:有关数据的数据
- 有关数据源定义,目标定义,转换规则等相关的关键数据。
- 数据库为什么有时不做范式化处理?
- 范式化——去冗余,提高完整性 去范式化——增加冗余,提高读取速度,但容易破坏完整性
- 范式化不需要额外的理由,去范式化需要有合理的理由。
- 数据库管理系统
- 管理和控制数据访问的程序集
- 用户和数据的中介
- 提供对数据的高级操作,包括创建和修改、访问控制等
- 最关注完整性,其次是可用性,最后是保密性
- 组件:
- 数据库
- 软件
- 硬件
- 用户
- 特点
- 数据一致性
- 操作必须遵守每个数据库的完整性策略,完成交易数据保持一致
- 数据共享
- 同一时刻可以有多个用户访问数据库,借助并发控制
- 数据恢复
- 若发生错误或系统崩溃,系统可以恢复。检查在崩溃时候正处理的交易或者回滚,或者向前已完成一次交易,维护数据的一致性
- 安全控制
- 提供各种安全控制,以限制用户访问
- 数据库语言
- 数据定义语言(DDL), 例如:CREATE、DROP、ALTER等语句。
- 数据操作语言(DML), 例如:SELECT(查询)、INSERT(插入)、 UPDATE(修改)、DELETE(删除)语句。
- 数据控制语言(DCL), 例如:GRANT、REVOKE等语句。
- 事务控制语句(TCL), 例如:COMMIT、ROLLBACK等语句。
- 数据完整性
- 语义完整性 (Semantic interrity)
- 保证结构化规则和语义规则得到遵守, 防止语义上不正确的数据进入数据库。 可以通过规则约束的规则来实现
- 引用完整性 (Referential interrity)
- 任何数据库记录都不能引用一个不存在的主键, 如果一个包含有主键的记录被删除了, 所有被引用的记录都必须删除掉。
- 实体完整性 (Entity interrity)
- 数据库由主键值唯一确定
- 语义完整性 (Semantic interrity)
- 确保有效途径或过程
- 压缩:研所数据并节省存储空间和I/O的能力
- 重组:回收不用的空间
- 重构:添加和改变记录、数据、访问控制、磁盘配置、处理方法的能力
- 数据一致性
- 数据库模型
- 关系数据库模型
- 表又叫关系 列叫字段或属性 行叫记录或元组
- 笛卡尔积的组合
- 基本组件:
- 数据定义语言(DDL)
- 定义数据库的架构(Structure)和数据架构(Schema)
- 结构:说明表的大小、键的位置、视图和数据元素关系
- 架构:描述数据库存储和操作的数据类型及其属性
- 定义数据库的机构、访问操作和完整性过程
- 数据操作语言(DML)
- 用户操作命令
- 数据控制语言(DCL)
- 创建用户访问和授权对象
- 查询语言(QL)
- 对数据库提出查询请求
- 报表生成器
- 用户定义方式的数据过程输出
- 数据定义语言(DDL)
- 数据字典:
- 是一种描述数据元素及其关系的中心库, 可存储数据用法、数据关系、数据来源和数据格式等关键信息
- 数据字典是一个控制数据库数据的集中管理部分, 描述了数据元素和数据库间的交叉引用
- 描述数据元素定义、模式对象和引用键的集合
- 模式对象包括表、视图、索引、过程、函数和触发器
- 数据管理软件读取数据字典,确定模是否存在,并检查特定 用户进程的访问权限,还定义了对每个用户的视图权限设置
- 需要增加新记录、表、视图或模式时,更新数据字典
- 主键和外键
- 主键是一条记录的唯一标示,并在关系数据库中编写索引
- 外键:如果一个表中的某个属性值与另一个表中的主键相匹配, 并且建立了某种关系,那么这个属性就视为外键
- 层次数据库模型
- 逻辑树结构,由在逻辑树结构中相关联的记录和字段组成
- 树形结构包含许多分支,每个分支又具有许多叶子或数据字段
- 通常用于一对多映射
- 访问需要明确路径,不适合经常更改,适合于经常性查询
- 示例:轻量级目录访问协议LDAP、注册表结构
- 网状数据库模型
- 用有向图表示实体类型及实体间联系。类似于网状的冗余结构,非严格树形结构
- 每个数据元素拥有多个父节点和自己录
- 与层次模型相比检索速度更快
- 面向对象数据库模型
- 将面向对象编程中的对象数据模型与DBMS结合在一起,可存储图像、语音、视频等数据。
- 面向对象的数据库使用类来定义其对象的属性和过程
- 对象-关系数据库模型
- 关系数据库模型
- 数据库编程接口
- 开放数据库互连,ODBC
- 对象连接和嵌入数据库,OLEDB
- ActiveX数据对象,ADO
- Java数据库互连,JDBC
- 数据库漏洞和威胁
- 完整性 (integrity)
- 回滚
- 终止当前事务,取消更改,恢复前一状态
- 提交
- 提交,终止当前事务,执行用户进行的修改,如果不能执行成功则回滚
- 保存点/检查点
- 如果检测到错误,用户可以返回相应的位置。
- 应对并发操作的威胁使用锁机制
- 回滚
- 聚合 (Aggregation)
- 一些信息片段分开时并不敏感,但放在一起就敏感。
- 解决方法
- 严格控制聚合函数的访问
- 禁止用户直接访问数据,可以通过视图方式
- 推理 (Inference)
- 聚合想要达到的结果
- 推理得不到显示可用的信息
- 解决方法:
- 访问控制
- 基于内容相关的访问控制
- 基于上下文相关的访问控制
- 单元抑制 (Cell suppression)
- 用于隐藏特定单元的技术
- 数据库分割 (database partition)
- 将数据库分成不同的部分
- 噪声和扰动 (noise and perturbation)
- 在数据库中插入伪造信息的技术
- 数据库视图
- 多实例
- 建立具有相同主键的多个元组和由安全级别定义的实例之间的关系
- 访问控制
- 死锁(DeadLocking)
- 其他威胁
- 子主题
- 完整性 (integrity)
- 数据库
- 联机事务处理,OLTP
- ACID原则
- 原子性(Atomicity)
- 要么所有修改都提交,要么数据库回滚
- 一致性(Consistency)
- 遵循数据库完整性,保证不同数据库中数据的一致性
- 持久性(Durability)
- 一旦提交无法进行回滚
- 隔离性(Isolation)
- 事物之间互不影响
- 原子性(Atomicity)
- 使用与操作人员、底层管理人员
- 适用于联机交易等
- ACID原则
- 联机分析处理,OLAP
- OLAP是数据仓库系统的主要应用
- 适用于决策人员和高级管理人员
- 数据仓库和数据挖掘
- 为了实现信息检索和数据分析,将多个数据库或数据源组合成一个大的数据库
-
- 数据挖掘
- 分类:根据共同的相似性对数据分组
- 可能性:标识数据之间的相互依赖关系,并将可能性应用与他们之间的关系
- 统计:标识数据元素之间的关系,并使用规则发现
- 数据挖掘
- 联机事务处理,OLTP
专家系统
- 基于规则的编程
- 规则基于if-then逻辑单元
- 组成
- 推理机
- 推理机提供用户界面、外部文件、计划和程序访问能力
- 知识库
- 知识库包含特定问题或者领域相关的数据
- 推理机
- 专家系统通常呗IDS用于自动审查安全日志
人工神经网络
- 基于人脑神经结构的电子模型
- 大脑以模式的形式存储信息
- ANN具有学习能力
- 当学习到某个事物并经常使用时,到信息存储单元的连接路径就会加强
- 直觉很难用电子电路或逻辑门复制
- 神经网络被设定位拥有决策和学习能力,通过大量的试探和错误决策过程改善其功能
- 模糊数学最有效的应用例子是故事预测、保险和金融风险评估。它们需要从金融专家那里得到大量的变量和决策信息
威胁
- 缓冲区溢出 (Buffer Overflow)
- 对策:输入验证
- 隐蔽通道 Convert Channel
- 计时(timing)
- 存储(storage)
- 内存重用/对象重用 (Memory reuse/Object reuse )
- 社会工程学
- 网络钓鱼
- Vishing
- 使用语音电话的钓鱼邮件
- 鱼叉式钓鱼
- 预先针对性的收集信息和研究,更容易上当
- 捕鲸
- 针对高级管理人员的鱼叉式攻击
- Vishing
- 肩窥
- 垃圾搜寻
- 网络钓鱼
- Trapdoor/Backdoor
- 欺骗攻击 (spoofing attack)
- web安全
- 故意破坏
- 用修改过的图片和标题替换核发图片和标题
- 认知及现实
- 金融欺诈
- 虚拟环境下的服务和交易的欺骗
- 特权访问
- 限制特权用户的访问
- 盗窃交易信息
- 盗窃知识产权
- 拒绝服务攻击
- 特定安全
- 信息收集
- 管理接口
- 身份验证与访问控制
- 配置管理
- 输入确认
- 缓解XSS\SQL注入
- 参数确认
- 会话管理
- 故意破坏
- 恶意代码
- java applet
- java语言由字节码构成,java虚拟机将其转换成机器能够识别的机器码。
- applet在沙箱
- Java是架构独立的, Java支持分布式应用, Java支持多线程, Java是面向对象编程语言。
- ActiveX控件
- 僵尸网络
- 僵尸程序是一种恶意软件,是一段潜伏的代码,也成僵尸
- 三类
- 基于IRC(因特网中继聊天)协议
- 基于HTTP协议
- 基于P2P结构
- 病毒
- 特点:繁殖和破坏,需要宿主
- 宏病毒
- 引导区病毒
- 可以删除引导区的数据或重新引导区
- 压缩病毒
- 自身附加在可执行程序上,并使用用户的权限进行压缩
- 隐蔽性病毒
- 隐藏他对文件盒引导记录所做的修改
- 变形病毒
- 制作变化的,但仍然可用的自身副本
- 通过噪声或伪造指令,变异引擎和随机数生成器来改变指令顺序,逃避检测
- 分体病毒
- 同时感染硬盘引导区和可执行文件
- 自乱病毒
- 通过打乱自身代码来逃避防病毒软件检测
- 脚本病毒
- 隧道病毒
- 将自己安装在防病毒程序下,杀毒软件检测病毒时,七拦截这个调用
- 蠕虫
- 可以不需要宿主进行自我复制
- 通过邮件、web站点下载等方式传播
- 逻辑炸弹
- 特定事件发生时,逻辑炸弹被执行
- 特洛伊木马
- 一种伪装成另外一个程序的程序
- rootkit
- java applet
- 防病毒软件
- 特征性检测法
- 启发式检测
- 可疑性计数器
- 有的防病毒软件可疑创建一个沙盒,动态分析可疑代码
- 分类:
- 审查一段代码有关的信息称为静态分析法
- 允许一部分代码在虚拟机中运行则称为动态分析法
- 审查一段代码有关的信息称为静态分析法
- 免疫程序
- 针对某种病毒,使其认为已被感染。
- 行为阻止器
- 防病毒程序
- 通过行政、物理和技术方法来防止病毒
- 垃圾邮件检测过滤
- 贝叶斯过滤
- 防止邮件欺骗
- 使用数字签名
- 拒绝服务攻击
- 特点
- 消耗受害者的网络带宽
- 消耗受害者的资源
- 分类
- smurf攻击
- 利用ICMP协议的缺陷
- fraggle攻击
- 利用UDP协议的缺陷
- smurf和farggle是两种利用协议缺陷和使用放大网络发动DoS的例子
- SYN洪泛攻击
- 利用TCP连接的三次握手
- 泪滴攻击
- 利用发送很小的分片包来利用这个设计缺陷
- 分布式拒绝服务攻击
- smurf攻击
- 特点
5、评估软件的安全性
认证和认可
- 作用
- 通过最佳实务管理、操作的和技术的安全控制措施的应用将信息安全能力植入到联邦信息系统中
- 通过不断强化监控流程维持信息系统的安全状态意识
- 提供高层领导推进决策的重要信息,包括关于组织运维风险的接受,以及资产、个人、其他组织或国家由信息系统使用和运维所引起的风险;
- RMF风险管理框架
- 通过强有力的连续监测流程的实施提升的近实时风险管理和持续的信息系统授权的概念;
- 鼓励使用自动化来给高层领导提供关于组织信息系统支持其核心使命和业务功能的必要信息并作出基于成本效益和风险的决策
- 将信息安全整合到企业架构和系统开发生命周期中
- 提供安全控制的选择、实施、评估和监控以及信息系统授权的侧重
- 通过风控部门将在信息系统级别的风险管理流程连接到组织级别的风险管理流程
- 建立部署在组织信息系统及其他系统所继承的(如公共控件)中的安全控制的责任和担当
变更的审计和日志
- 信息审计作用
- 审计程序辅助检测任何异常活动
- 审计级别和审计类型依赖于安装软件的审计要求以及系统处理或存储数据的敏感度
- 系统资源可用时应受到保护
- 日志审计的作用
- 建立基线的必要性
- 不同服务器和系统的绩效
- 应用的功能和运维问题
- 有效的入侵检测
- 取证分析
- 符合各种法律法规
- 信息的完整性
- 应用程序对比或协调所处理的与所期望处理的
- 对比总计
- 检查序列号
- 信息的准确度
- 检查输入的精确性: 应在适当的应用程序中集成数据验证和校验检查
- 字符检查(Character checks): 对比输入字符和期望字符类型,如数字或字母
- 范围检查(Range checks): 验证输入数据对比预订的上限和下限
- 关系检查(Relationship checks): 对比输入数据与主记录文件中的数据
- 合理性检查(Reasonableness checks): 对比输入数据与所期望的标准,其他形式的完整性检查
- 交易限制(Transaction limits): 检查输入数据对比制定交易中管理设置限制
风险分析和缓建
- 风险管理
- 风险管理是持续的过程,跨越整个项目的生命周期
- 风险管理流程包括风险的策划、识别、分析、监控和控制
- 风险的识别开始于项目启动之前,并且风险的数量随着项目不断成熟逐渐增多
- 风险记录过程包括风险缓解和持续性计划
- 风险降低步骤能够降低事件发生的可能性,风险缓减会产生费用,需要进行成本效益分析;
- 持续性计划或者在事件发生之时或之前采取的一系列活动,计划可以是在风险发生之前先发制人活动或者是在风险发生之后活动
- 风险分析和降低策略
- 集成到SDLC流程以及组织的变更管理流程中
- 使用标准化的风险评估方法以及将风险报给给利益相关者
- 追踪和管理在评估、变更管理和持续性监控所发现的弱点
- 纠正性行为-补丁管理
- 基础设置
- 研究
- MD5比较指纹和数字签名
- 文件完整性检查
- 评估和测试
- 测试环境中测试补丁
- 缓解(“回滚”)
- 部署(“首次展示”)
- 现在不太关键的系统上部署
- 确证、报告和日志记录
- 补丁更新日志,记录存档
- 测试和验证
- 实施风险控制措施需要进行测试
- 安全评估人员或其他独立实体验证和确认所需验证的漏洞
- 在大型组织
- 独立的验证和确认(independent verification and validation (IV&V))团队来决定安全问题和漏洞是否被解决
- 开发和系统所有者不能在没有独立实体同意的情况下授权宣告风险已被消减
- 代码签名(Code signing)
- 代码签名(Code signing)被用于保证代码的完整性的技术,确定谁开发那段代码,并确定开发者打算将这段代码用于何处
- 代码签名证书和数字证书帮助用户免于下载泄密文件或应用程序
- 当代码被签名可以确定代码的可靠度并检测带是否被开发展之外的人所修改
- 代码签名用于
- 确保代码片段不被修改
- 识别代码来源(开发着或签名者)
- 确定代码是否值得为特定目标的信任
- 代码签名包含三个部分
- 印章、数字证书和唯一标示符
- 代码签名不能做的事情
- 不能保证代码片段免于安全漏洞
- 不能保证在执行过程中APP不会装载不安全或更改的代码(如不可行的插件)
- 不是数字版权管理(DRM)或拷贝保护技术
- 实施风险控制措施需要进行测试
- 回归和接受测试
- 测试注意事项
- 迅速的测试Bug
- 观察修补的副作用
- 为每个Bug修补编写回归测试方案
- 如果两个或多个测试相似,确定哪个较为低效并舍弃
- 识别测试方案并持续的将其传递和归档
- 关注与功能问题而不是设计相关
- 确定数据的变更(无论大小)以及找到任何由此产生的破坏
- 追踪在程序内存上变更的影响
- 回归测试
- 最有效的方法是基于可以在新版本建立时每次都能运行的标准测试用例池所组成的测试库
- 建立测试库的难点在于确定包含什么样的测试用例
- 自动化测试和测试用例一样涉及到边界条件以及时机都属于测试库
- 为了自动化测试的有效性,作为复杂测试方法论的一部分,当集成足够的变量时是符合成本效益和效率
- 接受性测试
- 执行的正式测试来确定系统是否满足其接受标准以及使得客户能确定是否接受该系统
- 在敏捷开发中,可接受性测试/标准通常由业务客户所建立以及业务领域的语言所描述
- 测试注意事项
SwA(software assurance)的阶段
- 计划阶段
- 获取软件服务或产品所确定的需求,识别潜在替代软件的方法,识别替代的风险
- 开发需求被包含进工作说明书中
- 建立获取策略并包含识别与各种软件获取策略有关的风险
- 开发评价标准和评价计划
- 招标阶段
- 建立/发布具有工作说明、邀约人说明、条款和条件、资格预审以及认证的请求书或招标书(RFP),
- 评估供应商响应建议书或者招标文件(RFP)所提交的方案
- 完成合同协商包含条款和条件的变更
- 监督和接受阶段
- 这个阶段主要是监控供应商工作以及接受合同所约定的最终服务或产品交付
- 建立并同意合同工作日程
- 实施变更控制程序
- 评审和接受软件交付
- 后续(follow-on)阶段
- 维持(包含风险管理、保障用例管理以及变更管理)
- 处置和下线
- 在后续阶段,软件风险必须通过持续保证用例分析管理并且被调整以降低风险
安全专家必须确保在企业中具有详实记录的SWA策略以及流程
- 意外错误导致错误的运维
- 故意插入恶意代码
- 盗窃重要或敏感的信息
- 盗窃个人信息
- 变更产品,插入代理或破坏信息