CISSP复习笔记-第10章 软件开发安全
10.4 软件开发生命周期
- 软件开发生命周期的几个阶段
- 项目启动
- 功能设计分析和规划
- 系统规范设计
- 软件开发
- 测试
- 安全/实现
- 操作/维护
- 处理
10.4.2 需求收集阶段
- 安全方面,这个阶段应该完成下列工作
- 安全需求
- 安全风险评估
- 隐私风险评估
- 风险级别验收
10.4.3 设计阶段
- 从安全角度讲,下列事项也应该在这个阶段完成
- 攻击面分析
- 威胁建模
10.4.5 测试/验证阶段
- 测试类型
- 单元测试:个体组件位于一个受控的环境中,编程人员在这里确证数据结构、逻辑和边界条件
- 集成测试:验证组件是否按设计规范中概述的那样协同工作
- 验收测试:确保代码满足客户的需求
- 回归测试:进行系统变更后重新测试,以确保功能性、性能和保护级别
10.4.6 发布/维护阶段
- 验证(verification):判断产品是否准确体现和满足了产品规范
- 确证(validation):判断产品是否为所针对的实际问题提供了必要的解决方案
10.6 软件开发模型
- 边做边改模型:预先没有真正的计划,一般是在软件发布后被动地处理缺陷,形式主要为打补丁和升级
- 瀑布模型:是一种顺序方法,它要求每个阶段完成后下一个阶段才可以开始,很难整合变更,也不灵活
- V模型:强调在各个阶段开展验证和确认,同时要求在项目全过程开展测试工作,而不能仅仅在项目结尾开展
- 原型模型:为了概念验证目的创建样品或代码模型
- 增量模型:可以在同一个软件的整个开发阶段并行多个开发周期,每个阶段都能提供一个可用的软件版本
- 螺旋模型:它使用了迭代方法,强调每次迭代都要进行风险分析,通过使用灵活的演化方法可允许客户反馈集成到开发中来
- 快速应用开发(Rapid Application Development,RAD):为了加速软件开发过程,进行整合原型和迭代开发过程
- 敏捷模型:它采用了迭代和增量开发过程来鼓励团队协作,用灵活性和适应性代替了严格的过程结构
10.7 能力成熟度模型
- 理论前提:软件产品的质量与软件开发和维护过程的执行质量直接相关
- 能力成熟度模型(Capability Maturity Model,CMM):描述了软件开发流程的基本规程、原则和实践
- 软件开发公司的产品开发过程由第三方公司认证
- 成熟度级别
- 初始(initial):开发过程很随意,甚至非常混乱
- 可重复(repeatable):正式的管理结构、变更控制和质量保证
- 定义(defined):有正式流程,其中描述和定义了在不同项目中的过程
- 管理(managed):公司有一个正式的过程,可以收集和分析定性数据
- 优化(optimizing):公司对持续改善过程有了预算和整体计划
10.9 编程语言和概念
- 机器语言(machine language):计算机和处理器可以理解的语言
- 汇编语言(assembly language):低级编程语言,机器级别指令的符号表示
- 高级语言(high-level language):使用抽象描述把多个汇编语言指令集归为一个高级语句
- 非常高级语言(very high-level language):同等功能代码量比第三代少10倍,允许在特定环境中直接编程
- 自然语言:人工智能
10.9.1 汇编程序、编译器和解释器
- 汇编程序(assembler):将汇编语言源代码翻译成机器代码
- 编译器(compiler):把高级语言语句转换成所需要的机器可以理解的形式,从而使得特定处理器能够理解
- 工具解释器(interpreter):把高级代码转换成机器代码
10.9.2 面向对象概念
- 内聚(cohesion):反映某个模块能够执行多少种不同类型任务的术语
- 耦合(coupling):表示一个模块完成其任务需要进行多少交互
10.10 分布式计算
10.10.1 分布式计算环境
- 分布式计算环境(Distributed Computing Environment,DCE)
- 开放软件基金会(Open Software Foundation,OSF)开发
- 使用通用唯一标识符(Universal Unique Identifier,UUID)
- 在网络层之上建立软件层,并为软件层上的应用程序提供服务
- 分布式组件对象模型(Distributed Component Object Model)
- 微软开发
- 使用全球唯一标识符(Globally Unique Identifier,GUID)
- 与DCE提供大量相同的特性
10.11 移动代码
- Java applet:编程人员已经找出方法编写能够访问用户硬盘和系统资源的applet代码,而这些资源本来应该受Java安全机制保护
10.13 数据库管理
10.13.2 数据库模型
- 数据库模型
- 关系数据库模型(relational database model):使用属性(attribute,列)和元组(tuple,行)来包含和组织信息;行数又称cardinality,列数又称degree
- 层次数据库模型(hierarchical database model):组合了在逻辑树结构中相关联的记录和字段,每个元素只有一个父节点,最常用的层次模型实现为LDAP
- 网络数据库模型(network database model):每个元素可以有多个父节点
- 面向对象数据库模型(object-oriented database):可以设计为管理多种不同类型的数据(如图像、语音、文档和视频)
- 面向对象的数据库管理系统(Object-oriented Database Management System,ODBMS):比关系数据库更具有动态性
- 对象-关系数据库管理系统(Object-Relational Database Management System,ORDBMS):具有以面向对象编程语言编写的软件前端的关系数据库,这种前端软件允许提出请求的应用程序和数据库中的数据使用业务逻辑过程
10.13.4 关系数据库组件
- 模式(schema):用由数据库管理系统支持的正式语言描述的数据库结构
- 数据字典:数据元素定义、模式对象、引用键的集中式集合,可以包含列的默认值、完整性信息、用户的姓名、用户的权限和角色以及审计信息
- 数据定义语言(Data Definition Language,DDL):定义模式
- 数据操作语言(Data Manipulation Language,DML):检查数据和定义如何操作数据库内数据
- 数据控制语言(Data Control Language,DCL):定义数据库内部组织
- 查询语言(Query Language,QL):定义用户能够访问数据库内数据的查询
- 主键(primary key):一条记录的唯一标识符
- 外键(foreign key):一个表中的某个属性值与另一个表中的主键相匹配,并且两者之间建立了某种关系
10.13.5 完整性
- 并发(concurrency):不同用户和/或不同应用程序同时访问
- 语义完整性(semantic integrity):保证机构化规则和语义规则得到遵守,例如数据类型、逻辑值、唯一性约束等
- 参考完整性(referential integrity):所有的外键都参考现有的主键
- 实体完整性(entity integrity):元组由主键值唯一确定
10.13.6 数据库安全问题
- 聚合(aggregation):用户不具有访问特定信息的许可或权限,但是却具有访问这些信息的组成部分的权限
- 推理(inference):通过聚合了解到的部分而演绎(deduce)全部信息
- 内容相关访问控制(content-dependent access control):基于数据的敏感度
- 上下文相关访问控制(context-dependent access control):软件根据请求的状态和顺序来“了解”应当允许哪些动作
- 推理攻击防范措施:
- 单元抑制(cell suppression):一种用于隐藏特定单元的技术
- 分割(partitioning):将数据库分成不同的部分,这可以使未授权用户很难访问到能够用于推理攻击的相关数据
- 噪声和扰动(noise and perturbation):在数据库中插入伪造信息,误导和迷惑攻击者
- 如果数据库在规划和开发过程中没有将安全集成进来,作为替代需要开发一个可信前端
1. 数据库视图
- 由join、project、select操作生成
- 数据库可以利用DAC和MAC显示不同视图
2. 多实例(polyinstantiation)
- 建立了具有相同的主键的多个元组和有安全级别定义的实例之间的关系
- 通过建立另一组数据迷惑低级别用户,而不是仅仅限制信息的访问
3. 联机事务处理(Online Transaction Processing,OLTP)
- 检测问题以及在问题发生时立即进行适当处理的机制,主要目标:确保事务处理正确发生或者不发生
- 进程停止运作:试图重启该进程
- 进程不能重新启动:对应的事务处理将会回滚
- 错误/无效的和成功的事务处理、事务处理前和处理后,都将写入日志
- 分布式数据库需要通过ACID测试
- 原子性(atomicity):将事务处理分成多个工作单元,并且确保所有修改都生效或者没有一个修改生效;要么所有修改都提交,要么数据库回滚
- 一致性(consistency):事务处理必须遵守为特定数据库制定的完整性策略,并且确保在不同数据库中的所有数据的一致性
- 隔离性(isolation):事务处理完全隔离执行直至完成,同时事务处理之间互不影响;在事务处理完成之前,修改的结果不会生效
- 持久性(durability) :一旦事务处理在所有的系统上都被验证为是正确的,它就会被提交,并且数据库无法回滚
10.13.7 数据仓库(data warehouse)与数据挖掘(data mining)
- 数据挖掘也称为数据库知识发现(Knowledge Discovery in Database,KDD),用于发现模式的3种方法:
- 分类:根据共同的相似性对数据分组
- 可能性:标识数据之间的相互依赖关系,并将可能性应用于他们的关系
- 统计:标识数据元素之间的关系,并使用规则发现
10.14 专家系统(expert system)和知识性系统(knowledge-based system)
- 基于规则的编程(rule-based programming)是开发专家系统的通用方法,规则基于if-then逻辑单元,专家系统寻找模式的方法称为模式匹配(pattern matching)
- 推理机(inference engine)可以自动匹配事实和模式,并决定哪一条规则可用
- 知识库包含于特定问题或者领域的相关数据
- 通常被用于IDS自动检查安全日志
10.16 恶意软件
10.16.1 病毒
- 可以感染应用程序的一个小程序或者一串代码
- 主要功能是复制,病毒不能进行自我复制,需要借助一个宿主应用程序
- 利用受害人地址簿自我发送的病毒:ILOVEYOU、Melissa、Naked Wife
- 宏病毒(macro virus):使用Word Basic、Visual Basic、VBScript编写的与平台无关的病毒,通常应用在Microsoft Office产品中
- 引导区病毒(boot sector virus):可以删除引导区内的数据或者以新的信息重写引导区
10.16.2 蠕虫
- 不需要宿主程序就进行自我复制,例如Stuxnet
10.16.3 rootkit
- 一组被放置在受感染系统中的工具,以备将来使用
10.16.6 逻辑炸弹(logic bomb)
- 当特定事件发生时,逻辑炸弹会执行某个程序或者一段代码,例如删除整个数据库或所有数字证据
10.16.7 特洛伊木马(Trojan horse)
- 伪装成另一个程序的程序,背后进行恶意活动,包括破坏用户文件、将用户密码或文件发送给攻击者、向其他计算机发起攻击