CBK8软件开发安全
系统开发生命周期的各个阶段:
系统调查、可行性研究、系统分析、系统设计、系统实施、系统评价和维护。
1.构建良好的代码
- 控制输入/加密/逻辑处理/数字处理方法/进程间通信/访问/输出/以及与其他软件的接口
控制可能是预防性/探测性/纠正性的,表现形式可能是行政管理方法/物理方面的控制,更多的技术性的安全控制。 - 不同的环境需要不同的安全
环境与应用程序
功能与安全
实现和默认配置问题
2 软件开发生命周期
需求收集阶段:
- 安全需求:从机密性/完整性/可用性几个方面进行定义
- 安全风险评估:标识潜在风险和它们的相关后果
- 隐私风险评估:指明可访问数据或者将要处理的数据的敏感级别。
- 风险级别验收:根据所评估的威胁和脆弱性来估计不同安全对策的成本/收益率
设计阶段:
- 攻击面分析:识别和减少可以被不可信用户访问的代码和功能的数量。
- 威胁建模:了解不同威胁如何实现,破坏如何成功进行的系统方法。
开发阶段
- CASE计算机辅助软件工具
- 安全编码
- 静态分析:一种调试技术,在不执行程序的情况下检查代码,因此在程序被压缩之前进行。
- 代码审核:人工所做的检查
测试/验证阶段
- 单元测试:个体组件位于一个受控的环境中,编程人员在这里确认数据结构/逻辑和边界测试方法
- 集成测试:验证组件是否按设计规范中概述的那样协同工作
- 验收测试:确保代码满足客户的需求
- 回归测试:进行系统变更后重新测试,以确保功能性/性能和保护级别
- 安全测试:手动测试和自动化测试
- 动态分析:对程序进行实时评估
发布/维护阶段
- 最终安全审核
3 软件开发方法论
- 边做边改模型:问题出现后处理时的一般做法,无法正确评估过程、质量和风险。
- 瀑布模型:采用的是线性生命周期方法,所有需求都要在初始阶段收集。(简单小项目)
- V形模型:每个阶段进行验证和确认。
- 原型模型:快速原型的开发是为了快速理解建议性的解决方案,演化型是在实验室环境中创建和改进的,运行型是在生产环境中开发和改进的。原型法能节省大量的时间和成本。
- 增量模型:每个阶段都能提供一个可用的软件版本。
- 螺旋模型:迭代方法,每次迭代都要进行风险分析。包含了大量的软件开发模型的元模型。
- 敏捷模型
敏感宣言:
- 价值观:
- 个体和互动 高于流程和工具
- 工作的软件 高于详尽的文档
- 客户合作 高于合同谈判
- 响应变化 高于遵循计划
- 遵循原则:我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
- 三个角色:
- 产品负责人 Product Owner
- 敏捷教练 Scrum Master
- 技术团队 Team
- 联合分析开发(JAD):一个面向工作间的环境中采用工作组的方式开发应用程序。
- 快速应用开发(PAD):一种判断用户需求并快速开发系统以满足即时需要的方法。
- 重用模型(reuse model):通过使用日益增多的模型来进行软件开发。
- 净室(clean room):通过遵循结构化且规范的开发和测试方法来力图阻止错误和问题的解决途径。
- DevOps:一种将开发、IT、质量保证(QA)工作人员组成同一个软件开发项目团队的实践。
4 能力成熟度集成模型CMMI
CMMI(Capability Maturity Model Integration)分为五个等级,从低到高分别为:
初始级:在这一级,组织的软件过程是非结构化的,没有明确的规范和标准。项目的成功往往依赖于个别人员的经验和技能,而缺乏统一的方法和流程。这种情况下,组织的软件过程容易出现混乱和不可预测的问题,导致项目的延期和质量问题。
可重复级:在这一级,组织开始建立一些基本的软件流程和标准,并对这些流程和标准进行管理和监控。组织能够提供一定的项目管理和配置管理,但仍然存在一些不稳定性和不一致性。
定义级:在这一级,组织已经将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目都使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
管理级:在这一级,组织分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,能够在定量的范围内预测性能。
优化:在这一级,过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
5 变更管理
变更控制是控制变化的过程,发生在系统的生命周期过程中,并能记录必要的变更控制活动。
变更必须获得批准、记录和测试
软件配置管理(SCM):并行管理、版本控制和同步处理。 —-软件托管问题
代码库的安全性
6 开发环境安全性
- 开发平台IDE
- 代码库
- 软件配置管理
7 安全编码
- OWASP TOP 10
- SEI
- MITRE组织,常见的漏洞枚举(CWE)
- ISO/IEC27034
8 编程语言和概念
- 第一代机器语言:用二进制形式(1和0)来表示
- 第二代汇编语言:机器级别指令的符号表示
- 第三代高级语言
- 第四代非常高级语言:关注高度抽象算术,改进自然语言方法。
- 第五代自然语言
汇编语言:将汇编语言源代码翻译成机器代码。编译器:将高级语言语句转换成所需的机器可理解的形式(如exe/dll)可以独立运行。解释器,把高级代码转换成机器代码(需要安装解释器才能在本地运行)。
- 面向对象OOP:类和对象,对象是一个类的实例,比如家具和桌子。
- 数据隐藏由封装提供,保护外界不能访问对象的私有数据。
- 多态,高内聚和低耦合。
- 优点:模块化、延迟承诺(重新定义一个对象的内部组件)、可重用性(继承完善类)、自然性。
9 分布式计算
- 分布式计算环境 distributed computing Environment DCE 提供RPC服务,使用通用唯一标识符 UUID,UNIX系统工作
- CORBA与ORB,非微软的应用程序进行互操作和分布式计算。
- COM与DCOM,用全球唯一标识符GUID,由微软公司开发,windows系统工作。
- J2EE
- 面向服务的架构(SOA)
10. 移动代码
- Java applet:java为代码运行建立一个沙箱,限制代码访问用户计算机系统上的资源。
- ActiveX控件:依赖于数字签名和信任认证授权的身份验证码技术。
11 Web安全
- 管理接口:最安全的系统管理接口应该是一种带外接口。
- 身份验证与访问控制:多因子认证,TLS 通道加密传输口令
- 输入验证
- 参数确认
- 会话管理
12 数据库管理
DBMS数据库管理系统
数据库模型:
- 关系数据库模型:使用属性(列、字段)和元组(行、记录)来包含和组织信息,以表的形式表示信息。主键
- 层次数据库模型:组合逻辑树架构中相关联的记录和字段。通常用于映射一对多关系。最常用的是轻量级目录访问协议(LDAP)模型。
- 网络数据库模型:一种类似于网状网络拓扑的结构,比层次模型检索数据更快。使用记录和集合的结构。
- 面向对象的数据库模型:可设计为管理多种不同类型的数据(图形、语音、文档和视频),使用类来定义其对象的属性和过程。
- 对象-关系数据库(ORD):具有以面向对象编程语言编写的软件前端的关系数据库。 结构化查询语音(SQL):客户端和数据库交互一般使用SQL。
数据库编程接口:
- 开放数据库连接(ODBC):一个应用编程接口(API)
- 对象链接和嵌入数据库(OLE DB):作为中间件运行在客户端 或服务器上,将数据分为多个组成部分,提供底层接口。限于基于微软的客户端工具所使用。
- ActiveX数据对象(ADO):一个允许应用程序访问后端数据库系统的API,一组ODBC接口的集合。
- java数据库互连(JDBC):一个允许java应用程序与数据库通信的API。
关系型数据库组件:
- 数据定义语言(DDL):定义模式的数据定义语言,比如数据库描述被称为schema,采取DDL进行定义,如Create,Alter和Drop.在数据库中建立和修改表结构和其他对象的结构。
- 数据操作语言(DML):检查数据和定义如何操作数据库内数据的数据操作语言,包含使用户能查看、操作和使用数据库的所有命令(view、add、modify、sort和delete命令)。
- 定义数据库内部组织的数据控制语言(DCL),数据权限控制,由 GRANT 和 REVOKE 两个指令组成。
- 查询语言(QL):使用户可对数据库提出查询请求。 主键与外键:主键是一条记录的唯一标识符。包含的信息与另一个表的主键保存的信息相同,视为外键。
完整性:
- 语义完整性:保证结构化规则和语义规则
- 参考完整性:所有外键参考现有主键,确保没有外键引用不存在的情况
- 实体完整性:保证元组由主键值唯一确定。
- 回滚、提交
- 保存点:在系统出现故障时提供数据恢复的功能。
- 检查点:将内存中的数据保存到一个临时文件中,一旦运行过程出现问题,可尝试还原。
数据库安全:
- 数据库安全问题:聚合和推理,可通过实现内容相关和上下文相关访问控制来解决这个问题。
- 防止推理攻击的常见措施:单元抑制/数据库分隔/噪声与扰动
- 数据库视图
- 多实例,创建相同客体的多个版本,使低级别主体无法得知真实的信息,常用于防止推理攻击。
- 联机事务处理(OLTP):用于集群数据库以提供容错和高性能。
13 恶意软件(恶意代码)
- 病毒:借助宿主进行复制,具备自我复制的功能
- 蠕虫 :不需要宿主就进行自我复制,是一种独立的病毒程序。
- rookit
- 间谍软件和广告软件
- 僵尸网络
- 逻辑炸弹
- 特洛伊木马:一个看似合法的程序,但程序的背后却是用户看不到的恶意活动。
- 防病毒软件:特征型(指纹)检测、启发式检测、行为阻止
- 垃圾邮件检测:贝叶斯过滤
- 防恶意软件程序
14 评估外部获取软件的安全性
- 对供应商的评估,比如资质
- 代码审查/漏洞评估和渗透测试