admin管理员组文章数量:1574493
Typora要搭图床才能很方便地移植图片,考虑到这次总结的内容比较繁杂,那么这次软件安全的整理就直接在博客上写。
整理得很费心😥三天码了三万多字,也画出了复习重点,如果多少有一些帮助的话,请关注一下博主噢~
文章目录
- ※CH01 软件与软件安全
- 1.1 计算环境与软件
- 1.1.1 计算环境
- 1.1.2 二进制
- 1.1.3 指令与指令集
- 1.1.4 软件的形式和概念(理解)
- 1.1.4.1 软件概念
- 1.1.4.2 软件主要内容
- 1.1.4.3 软件的形式
- 1.2 信息安全与软件安全
- 1.2.1 信息与信息安全
- 1.2.2 软件安全概念(掌握)
- 1.3 软件安全的几个重要概念(掌握)
- 1.3.1 漏洞和脆弱性
- 1.3.2 软件质量与安全性
- ※CH02 典型软件安全问题
- 2.1 安全问题来源
- 2.2 常见的设计问题
- 2.3 语言问题
- 2.3.1 C/C++问题
- 2.4 平台问题
- 2.5 OWASP TOP 10
- 2.6 CWE TOP 25
- 2.7 开发过程问题
- ※CH03 安全软件工程
- 3.1 SSE-CMM(掌握)
- 3.1.1 SSE-CMM背景和发展
- 3.1.2 SSE-CMM主要内容
- 3.1.3 关于安全软件工程与评估-基于SSE-CMM的实施
- 3.1.4 关于SSAM - SSE-CMM评定方法
- 3.2 SDL-安全开发生命周期模型(掌握)
- 3.2.1 关于SDL
- 3.2.2 SDL概览
- 3.2.3 SDL各个阶段特征
- 2.3.4 SDL简化实施及优化模型
- ※CH04 软件安全测试-安全测试的内容及方法
- 4.1 软件安全测试
- 4.2 软件安全测试方法
- 4.3 安全测试的实施方法
- 4.3.1 基于风险的安全测试
- 4.3.2 白盒、黑盒、灰盒测试
- 4.4 安全漏洞分级
- 4.5 典型安全测试工具 *
- ※CH05 编写安全的代码
- 5.1 SD3
- 5.1.1 Secure by Design 安全设计
- 5.1.2 Secure by Default 缺省安全
- 5.1.3 Secure in Deployment 安全提交
- 5.2 安全规则(理解)
- ※CH06 一个信息系统的安全模型分析
- 6.1 信息系统及其特征(理解)
- 6.2 信息系统的安全问题分析(理解)
- 6.3 信息系统的安全模型
- 6.3.1 用户界面逻辑
- 6.3.2 业务逻辑
- 6.3.3 异常检测机
- 6.4 信息系统的异常行为探测
- 6.4.1 异常行为
- 6.4.2 日志分析
- 6.4.3 网络异常探测机
- 6.4.3.1 数据流量异常
- 6.4.3.2 服务器连接异常
- 6.4.3.3 文件访问异常
- 6.4.3.4 日志文件保护
- ※CH07 Web应用安全
- 7.1 Web应用的概念
- 7.2 Web应用安全建模框架
- 7.2.1 Web应用威胁建模(微软)
- 7.3 Web应用安全模型
- 7.3.1 方法概述
- 7.3.2 一个安全模型
- ※CH08 一个安全过程模型与工程模板
- 8.1 核心工作
- 8.2 过程模型
- 8.3 过程实施要点
- ※CH09 隐私保护问题
- 9.1 GDPR
- 9.2 中国隐私权法律规定
- 9.2.1 在我国隐私权的法律规定
- 9.2.2 侵犯隐私权的范畴
- 9.3 GB/T35273-2017-个人信息安全规范
- ※CH10 对威胁的认识-微软MSDN-威胁与对策(补充材料)
- 10.1 对攻击的剖析
- 10.2 网络威胁和对策
- 10.3 主机威胁和对策
- 10.4 应用程序威胁和对策
- 10.4.1 输入验证
- 10.4.2 身份验证
- 10.4.3 授权
- 10.4.4 配置管理
- 10.4.5 敏感数据
- 10.4.6 会话管理
- 10.4.7 加密
- 10.4.8 参数操纵
- 10.4.9 异常管理
- 10.4.10 审核和记录
- ※ 考前背几个典型问答
※CH01 软件与软件安全
1.1 计算环境与软件
1.1.1 计算环境
- 计算机
- 网络
- 互联网
- 通信终端
- 通信网络
1.1.2 二进制
- 计算机处理符号:0 1,由0 1构成二进制数,二进制数构成机器语言
- 位运算符:与& 或| 取反~ 复合赋值&= <<= 不同长度则右对齐
- 位运算:二进制位的运算,C语言提供位运算功能很方便
1.1.3 指令与指令集
- 指令系统:计算机的指令系统就是指该计算机能够执行的全部指令的集合
- 指令集:指令系统也称为指令集
- 指令格式:
↑ 这个不说多了,是计组中汇编的基础,这篇总结要谈的是软件安全相关 - 寻址方式:取操作数地址的方式
1.1.4 软件的形式和概念(理解)
1.1.4.1 软件概念
- 与一个系统(尤指计算机系统)有关的程序、步骤和有关文件编制的完整集合。特指特定类型计算机所使用的程序的总称,连同与计算机或程序有关的资料,例如手册、图表和操作指令。
- 冯诺依曼提出“存储程序控制思想”:事先编写好一些了控制命令,告诉计算机怎么做,然后将控制命令输入计算机存储器保存,再让计算机按照一定顺序注意执行。
- 计算机程序:根据一定的需要事先编写的一系列控制计算机工作的命令。
- 计算机系统的组成
(涉及计组,不细说)总的来说就是软硬结合
1.1.4.2 软件主要内容
- 程序、步骤及数据、信息手册等相关资料
- 功能:针对一个系统(计算机),合理组织工作
- 两个层次:
- 直接与硬件相关
- 合理组织工作,完成特定任务
1.1.4.3 软件的形式
- 系统软件
- 应用软件:以系统软件为基础
1.2 信息安全与软件安全
1.2.1 信息与信息安全
- 信息的定义:客观世界中各种事物的变化和特征的最新反映,是客观事物之间联系的表征,也是客观事物状态经过传递后的再现(考察点)
- 软件安全定义:
- 国家宏观的角度:一个国家的社会信息化状态不受外来的威胁与侵害,一个国家的信息技术体系不受外来的威胁与侵害。
- 特定信息体系或技术:信息或系统不受外来的威胁与侵害。
- 信息安全属性
- 安全性
- 可用性
- 保密性
- 可控性
- 可靠性(?)
- 恰当的信息安全定义:信息具有保密性、完整性、可用性。
1.2.2 软件安全概念(掌握)
- 软件安全性:软件不被恶意使用或者攻击进而造成用户信息资产损失的属性。
- 软件安全:软件在恶意攻击下能够正确地完成其功能。
- 软件安全属性
- 软件的可信性 confidentiality:保护敏感信息不被未授权用户访问
- 软件的完整性 integrity:保护数据不被更改或破坏
- 软件的可用性 availability:确保资源被授权用户的使用
- 软件安全保护什么?
- 软件自身安全
- 软件存储安全
- 软件通信安全
- 软件使用安全
- 软件安全研究范畴
- 如何涉及、构造、验证、维护软件以保证其安全
- 包括:改进和实现软件安全的架构或结构;改进和实现软件安全的工具;改进或实现软件安全的方法。
- 参考:ISO7498-2(老师提及的重点)
信息处理系统. 开放系统互连. 基本参考模型.
第二部分:安全体系结构
在ISO7498-2中描述开放系统互连安全的体系架构,提出设计安全的信息系统的基础架构应该包含的:5种安全服务,对5种安全服务提供支持的8类安全机制,需要进行的5种OSI安全管理方式。- 5种安全服务:
- 鉴别服务
- 访问控制
- 数据完整性
- 数据保密性
- 抗抵赖
- 8种安全机制:
- 加密
- 数字签名
- 访问控制
- 数据完整性
- 数据交换
- 业务流填充
- 路由控制
- 公证
- 5中普遍性安全管理机制:
- 可信功能度
- 安全标记
- 事件检测
- 安全审计跟踪
- 安全恢复
- 5种安全服务:
- 如何得到安全的软件?有如下步骤,软件安全的研究包括如下所有内容:
- 教育
- 设计、接口选择、规格定义
- 软件的实现和编码
- 验证、测试、评估
- 软件提交和安全地执行
- 软件的维护、BUG修复和调整
1.3 软件安全的几个重要概念(掌握)
1.3.1 漏洞和脆弱性
- 安全漏洞(Security Hole):计算机系统具有的某种可能被入侵者恶意利用的属性
- 有时安全漏洞也称为脆弱性(Vulnerability)
- 漏洞是软件的属性
- 脆弱性:从已授权状态变换到未授权状态
- 攻击:是以授权状态或脆弱状态开始,以受损状态为目标的状态变换
- 漏洞的本质:漏洞是系统的一组特性,恶意的主体(攻击者或者攻击程序)能够利用这组特性,通过已授权的手段和方式获取对资源的未经授权访问,或者对系统造成损害。
- 安全事件:当系统的某个漏洞被入侵者渗透(exploit)而造成泄密时,其结果就称为一次安全事件(Security Incident)。
1.3.2 软件质量与安全性
- ISO9126标准:软件产品评价——质量特性及其使用指南
- 六个质量特性
- 功能性
- 准确性
- 互操作性
- 保密安全性 ←在ISO9126中,安全性属于功能性(典型忽视安全)
- 功能性的依从性
- 可靠性
- 成熟型
- 容错性
- 易恢复性
- 可靠性的依从性
- 易用性
- 易理解性
- 易学性
- 易操作性
- 易用性的依从性
- 效率
- 时间特性
- 资源利用性
- 效率依从性
- 维护性
- 易分析性
- 易改变性
- 稳定性
- 易测试性
- 维护性的依从性
- 可移植性
- 适应性
- 易安装性
- 共存性
- 易替换性
- 可移植性的依从性
- 功能性
- ISO9126质量模型的缺陷
- 安全性是软件功能性的子属性
- 充分体现了对安全的忽视
- 安全的代码(secure code):能够抵抗恶意攻击的代码;安全的代码同时也是健壮的代码(robust code)
- 安全性代码(security code):实现安全功能的代码
- 程序是“安全的”:安全隐含了某种程度的信任trust,程序实现了期望的机密性、完整性、可用性及其功能
- Safety:强调一个系统、组织或个人按照自己的机制正常运转的稳定状态
- Security:强调免受来自外部或内部“蓄意或恶意”的伤害,采取必要措施防止这样的伤害发生,以确保国家、组织或个人正常运转
※CH02 典型软件安全问题
2.1 安全问题来源
- 安全问题的根本来源
- 漏洞:漏洞是软件的属性
- 攻击者
- 软件存在的攻击路径——攻击面问题
- 产生漏洞的原因
- 软件或协议设计时的瑕疵
- 软件或协议实现中的弱点
- 软件本身的瑕疵
- 系统和网络的错误配置
- 意外行为和缺陷
- 意外行为:程序安全缺陷,是由于程序脆弱性引起的不适当的程序行为
- 缺陷(flaw):缺陷可以是故障(fault),也可以是失效(failure)
- 程序安全缺陷可能来源于任何种类的软件错误——疏忽或故意
- 缺陷的类型
- 有意的缺陷:恶意的、非恶意的
- 无意的缺陷:确认错误、域的错误、顺序化和混淆现象、不完全的身份识别和认证边界条件违反其他可利用的逻辑错误
- 漏洞的两种类型 漏洞是软件安全威胁的根源!
- 设计漏洞
- 实现漏洞
- 常见的软件缺陷
- 缓冲区溢出(需要深刻理解的缺陷)
- 未校验输入
- 资源竞争
- 访问控制问题
- 认证 授权 加密缺陷
2.2 常见的设计问题
-
问题1:密码技术使用的败笔
-
问题2: 对用户及其许可权限进行跟踪的薄弱或缺失
-
问题3:有缺陷的输入验证
-
问题4:薄弱的结构性安全
-
问题5:其他设计缺陷
2.3 语言问题
2.3.1 C/C++问题
一定要对缓冲区溢出问题有深刻的理解
-
问题1:没有安全的本地字符串类型, 也没有安全而易用的字符串处理函数,最典型的是缓冲区溢出
C中字符串以NULL终止符作为结尾 ,没有确切存储字符串的长度,字符串长度由程序员管理;程序员管理出错时,会导致超过缓冲区结尾部分的内存被覆盖掉!
下面这个例子就是缓冲区溢出问题,超出部分进入其他内存区域:
-
问题2:缓冲区超限覆盖栈中的函数返回地址,最典型的是栈溢出
栈中存储了函数返回地址和传递给该函数的变量,如果某个变量产生缓冲区溢出,则覆盖栈中的返回地址! -
问题3:printf类型的格式化函数-格式化字符串攻击
-
问题4:整数溢出
2.4 平台问题
- 平台的定义:程序在其中所运行的环境,包括操作系统以及与之交互的组件
- 威胁来源
- 软件与用户的交互
- 软件与网络的交互
- 软件与文件系统的交互
- 软件依赖OS产生新的子进程
- 软件与其他进程通信
- 平台问题
- 平台问题1:符号链接
- 平台问题2:目录遍历
- 平台问题3:字符转换
- 常见的应用程序安全问题:引起原因是应用程序的某个组件的恶意数据引起,这些恶意数据在其另 一个组件中被当作了合法代码;对涉密信息的不当处理。
- 应用安全问题
- 问题1:SQL注入
- 攻击者通过操纵程序的某种输入,在连接到SQL数据库的应用程序上执行自己所构造的查询
- 预防SQL注入:过滤所有输入,确保输入字段只包含所需要的字符;尽量避免使用动态生成的SQL
- 问题2:跨站点执行脚本XSS
- 问题1:SQL注入
2.5 OWASP TOP 10
先按照资料来整理,但是最新版应该有所不同
- A1 注入
- A2 失效的身份验证
- A3 跨站脚本
- A4 不安全的直接对象引用
- A5 安全配置错误
- A6 敏感信息泄露
- A7 功能级访问控制缺失
- A8 跨站请求伪造CSRF
- A9 使用含有已知漏洞的组件
- A10 未验证的重定向和转发
2.6 CWE TOP 25
先按照资料来整理,但是最新版应该有所不同
2.7 开发过程问题
- 安全需求和前提条件的文档记录缺乏
- 交流和文档匮乏
- 缺少安全过程
部署上的薄弱性:
- 部署的执行者一般不属于开发团队
- 软件错误地设置文件或注册表的键值,使系统上的其他用户可以进行更改
- 使软件安装时具有不必要的权限
- 示例:Apache启动时以root运行,随后降低权限,最终以低权限的用户运行,典型UNIX用户是nobody;早期IIS(4.0 5.0)要求以Local System身份运行
※CH03 安全软件工程
3.1 SSE-CMM(掌握)
3.1.1 SSE-CMM背景和发展
- 开发SSE-CMM的目的
- 降低开发和维护系统的花费
- 提高工程进度和预算的一致性
- 选择合适的承包者
- 发起者
- 国防部
- 国家安全局
- SSE-CMM发展
3.1.2 SSE-CMM主要内容
- 能力方面
- 域方面
3.1.3 关于安全软件工程与评估-基于SSE-CMM的实施
- 风险:风险过程是要确定产品或者系统的危险性,并对这些危险性进行优先级排序
- 工程:工程过程是针对面临的危险性,安全工程过程与相关工程过程一起来确定并实施解决方案
- 保证:保证过程是建立起对解决方案的信任,并把这种信任传达给顾客
3.1.4 关于SSAM - SSE-CMM评定方法
- SSAM为了进行评定,收集数据广泛、严格, 每个数据有充分的证据。此方法在评定过中最大程度地发挥了SSE-CMM模型的功效
- 此方法:决定实施安全工程过程的能力;为了评定定义了安全工程环境;在评定时巧妙地使用了SSE-CMM体系结构中的两个方面
3.2 SDL-安全开发生命周期模型(掌握)
3.2.1 关于SDL
- 基于并行理念的标准软件开发过程
- 基于威胁建模和测试
3.2.2 SDL概览
- 设计安全
- 为了保护软件自身以及软件处理的信息,并抵御攻击,软件应该从架构, 设计和实现上进行考虑
- 缺省安全
- 设计者应该假定安全缺陷将会出现
- 为了当攻击者对软件存在的缺陷进行攻击时使损害降到最小, 软件的缺省状态应该保证安全
- 最小特权原则
- 提交安全
- 工具和指南应该随着软件提供以帮助最终用户或管理员安全使用
- 关于软件的更新应该容易提交
3.2.3 SDL各个阶段特征
- 第0阶段: 教育和意识
- 可信计算概述
- SDL简介
- 安全设计基础
- 受攻击面分析
- 深度防御
- 最小特权
- 安全默认配置
- 威胁建模
- 设计威胁建模
- 编码威胁建模
- 测试威胁建模
- 安全编码实践
- 缓冲区溢出
- 整型数值问题
- 跨站脚本攻击
- SQL注入攻击
- 弱加密机制
- 微软.NET规范问题
- JAVA规范问题
- 持续教育内容
- 第1阶段: 项目启动
- 判断SDL是否覆盖应用
- 任命安全顾问
- 组建安全领导团队
- 确保在BUG追踪管理过程中包含安全、隐私类BUG
- 建立BUG标准
- 第2阶段:定义并遵从设计最佳实践
-
常见安全设计原则
- 经济机制:代码尽可能简单、紧凑。软件愈复杂,出现安全BUG的可能性愈高
- 默认失效保护:任何请求缺省应加以拒绝
- 安全中介:每个访问受保护对象的行为应当被检查
- 公开设计:与“不公开即安全”的原则相对应。设计自身不应具有神秘感
- 权限分离:切勿允许基于单一条件的操作过程
- 最小特权:只授予执行操作所必须的最小特权
- 最少公共机制:使公共资源尽可能少
- 心理可接受程度:安全产品与技术是否容易使用?用户能否接受?与UI的密切配合
-
受攻击面分析与降低
枚举所有接口、协议以及可执行代码的过程- 代码
- 接口
- 服务
- 协议
受攻击面降低:在所有代码中存在至少一个或多个漏洞的可能性一定不为零,一部分严重漏洞会导致用户不得不接受妥协。唯一解决上述问题的方法是将代码的利用率降至为零。
受攻击面降低的方法:尽可能减少未经信任的用户可能接触到的代码比例。- 降低默认执行的代码量
- 限制可访问到的代码的人员范围
- 限定可访问到的代码的人员身份
- 降低代码所需权限
-
- 第3阶段:产品风险评估
- 安全风险评估
- 安装问题
- 受攻击问题
- 移动代码问题
- 安全特性相关问题
- 常规问题
- 隐私影响分级
- 隐私分级1:满足以下任何一项,具有最高隐私分级
- 该软件储存PII或传输PII
- 该软件目标是针对儿童或对儿童产生吸引力, 或包含任何可以了解年龄的用户体验(按美国 法案要求,收集PII需要成人权限,必须保护13 岁以下儿童)
- 该软件不间断监控用户行为
- 该软件安装新的软件或改变用户文件类型的关联(如改变JPEG解码程序)
- 隐私分级2:该软件传输匿名数据给开发人员或第三方
- 隐私分级3:如果软件不包含隐私分级1和2中的任意一种行为,则被划分为隐私分级3
- 隐私分级1:满足以下任何一项,具有最高隐私分级
- 统一各种因素
一旦确定应用程序的安全与隐私风险, 即必须在日程表中排出响应时间,以确保应用必要的技能以减少客户所面对的全面风险
- 安全风险评估
- 第4阶段:风险分析
- 风险分析和威胁建模优点
- 有助于整个风险管理过程
- 在系统进入编码阶段前发现系统威胁
- 开发团队通过威胁建模可以重新验证其架构与设计
- 有助于进一步明确针对应用以及环境采取相应的解决对策
- 有助于指导整个代码审核过程
- 指导整个渗透测试过程
- 威胁建模过程
- 定义应用场景
- 收集外部依赖列表
- 定义安全假设
- 创建外部安全备注
- 绘制待建模应用的一个或多个数据流图
- 确定威胁类型
- 识别系统威胁
- 判断风险
- 规划消减措施
- 风险分析和威胁建模优点
- 第5阶段:创建安全文档、工具以及客户 最佳实践
- SDL设计安全的文档
- 安装文档
- 主线产品使用文档
- 帮助文档
- 开发人员文档
- 安全工具
- 检查系统/软件安全状况
- 阻止安全漏洞
- 禁止不必要的服务
- 禁止端口
- 定义必要的安全策略
- SDL设计安全的文档
- 第6阶段:安全编码策略(最佳实践如下)
- 使用最新版本编译器与支持工具
- 使用编译器内置防御特性
- 使用源代码分析工具
- 切勿使用违禁函数
- 减少潜在可被利用的编码结构或设计
- 使用安全编码检查清单
- 第7阶段:安全测试策略
- 模糊测试
- 渗透测试
- 运行时测试
- 重审威胁模型
- 重估受攻击模型
- 第8阶段:安全推进活动
- 培训
- 代码评审
- 威胁模型更新
- 安全测试
- 文档
- 第9阶段:最终安全评审
- 产品团队协调
- 威胁模型评审
- 未修复安全BUG评审
- 工具使用有效性验证
- 第10阶段:安全响应规划
第10阶段的任务就是:建立安全的响应过程!- 对SDL的认识
- 使用SDL不能保证生产的绝对安全的软件:开发团队一定会出错;新漏洞一定会变化;规则一定会变化
- 安全响应过程模型
- 对SDL的认识
- 第11阶段:产品发布
- 软件签字通过,用户验收
- 必须认可 以下事实:SDL过程被正确无误执行!
- 第12阶段:安全响应执行
- 遵从计划
- 尽可能补救
- 理解取舍之道
2.3.4 SDL简化实施及优化模型
※CH04 软件安全测试-安全测试的内容及方法
4.1 软件安全测试
- 概念:安全性测试是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程
- 应用程序级安全测试的主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力
- 安全指标不同测试策略也不同
4.2 软件安全测试方法
- 软件测试主要方法
- 静态测试
- 静态测试是指不运行被测程序,通过分析或检查源程序的语法、结构、 过程、接口等来检查程序的正确性
- 动态测试
- 动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能
- 可分为白盒 黑盒 灰盒测试 (主要考察白盒和黑盒测试)
- 可分为单元测试 集成测试 确认测试 系统测试 验收测试 回归测试
- 可分为人工测试 自动化测试
- 可分为开发方测试 用户测试(beta测试) 第三方测试
- 渗透测试
- 渗透测试是常用的安全测试方法。是使用自动化工具或者人工的方法模拟黑客的输入,对应用系统进行攻击性测试,从中找出运行时刻所存在的安全漏洞
- 缺点是模拟的测试数据只能到达有限的测试点,覆盖率很低
- 对DoS威胁测试效率高!
- 模糊测试
- 模糊测试(Fuzz Test),为了触发新的或不可预见的代码执行路径或bug而在程序中插入异常的、非预期的、甚至是随机的输入
- 程序数据扫描
- 数据扫描的手段通常是进行内存测试,内存测试可以发现许多诸如缓冲区溢出之类的漏洞,而这类漏洞使用除此之外的测试手段都难以发现
- 静态测试
- 安全测试点
- 程序安全性测试
- 数据安全性测试
- 程序安全测试典型问题
- 网络安全测试典型问题
- 数据安全测试典型问题
4.3 安全测试的实施方法
掌握:安全的常规测试方法
4.3.1 基于风险的安全测试
- 目标:在给定的时间和资源不变的情况下,尽可能多地找出最为严重的安全缺陷
- 威胁建模 = 风险建模
- 基于风险的测试是软件测试的常规方法
- 三个步骤
- step1 信息搜集
- step2 威胁(风险)建模
- 识别威胁路径
- 识别威胁
- 威胁路径上9个高风险活动
- 数据解析
- 文件访问
- 数据库访问
- 生成子进程
- 身份鉴别
- 授权
- 同步或会话管理
- 处理私密数据
- 网络访问
- 威胁路径上9个高风险活动
- 识别漏洞
- 将漏洞分级/排定优先级
- DREAD模型
- step3 可用性分析
- 目的:判断漏洞是否可被攻击者利用
- 基本原则:在开发中直接修补一个可能会被利用的问题比花时间判定其是否会被利用容易
4.3.2 白盒、黑盒、灰盒测试
- 白盒测试:看作内部的攻击;测试人员可以访问源代码和设计文档,可以进行威胁建模或逐行的代码检查;找出漏洞最为有效的方法!
- 黑盒测试:以局外人的身份对系统进行攻击,使用工具检查系统的攻击面,并探查系统的内部信息;黑盒测试是白盒测试的补充;方向工程团队利用黑盒测试验证隐蔽式安全方法的强度。
- 灰盒测试:组合使用白盒测和黑盒测试;程序开发中的调试运行是典型的灰盒测试方法。
4.4 安全漏洞分级
- DREAD模型:进行威胁程度级别分析的有效技术。
- Damage potential 潜在的破坏
- Reproducibility 再现性
- Exploitability 可利用性
- Affected users 受影响的用户
- Discoverabiliby 可发现性
- TRAP模型
- 时间(Time):某些漏洞可能需要长时间的探测并利用。 如加密漏洞需要数千年的时间计算才能利用,表示该漏洞的风险非常低。
- 可靠性(Reliability)/再现性(Reproducibility):漏洞的严重程度依赖于该漏洞可被攻击者利用的可靠性或再现性。通常高级别漏洞的可靠性和可再现性高。
- 访问(Access):利用漏洞通常可以为攻击者提供更高的访问权。
- 定位(Positioning):利用一个漏洞,攻击者必须能够与存在该漏洞的应用程序交互,并能访问到含有该漏洞的代码
4.5 典型安全测试工具 *
- Java代码安全分析工具
- IBM AppScan Source Edition
- Fotify Static Code Analyzer
- Findbugs
- C++代码安全分析工具
- C++Test
- IBM AppScan Source Edition
- Fotify Static Code Analyzer
- Visual Studio(27.78%)
- JavaScript代码安全工具
- Google’s Closure Compiler
- JSHint
- Python代码安全工具
- Pychecker
- PyCharm
- Pylint
- PySEC,开源
- WEB应用安全测试工具
- IBM AppScan
- SoapUI
- HP的WebInspect
- WEB应用的开源工具:Firebug OWASP ZAP
- Android App安全测试工具
- Android Tamer
- AndroBugs
- Mobisec
- SQL注入测试工具:SQLInjetor SQL Power Injector OWASP SQLiX
- 网络状态监控与分析工具
- Wireshark
※CH05 编写安全的代码
5.1 SD3
- 设计安全
- 缺省安全
- 提交安全
这三个要素是SD3,同样也是SDL模型的三点概述!
5.1.1 Secure by Design 安全设计
- 安排具体的安全设计的人员
- 进行安全教育
- 确保威胁分析已经完成
- 符合安全设计和编码的指导原则
- 尽可能修补任何安全编程指南上的BUG
- 确保安全指南是逐步改进的
- 针对已经修复的缺陷开发回归测试
- 简化代码和安全模型
- 在打包以前完成穿透测试
5.1.2 Secure by Default 缺省安全
- 缺省状态下,不要设置所有的特点和功能
- 允许最小权限 最小权限原则
- 恰当的资源保护
5.1.3 Secure in Deployment 安全提交
- 确认程序给管理员提供了安全功能
- 尽可能提供高质量的补丁
- 提供足够的信息以使用户安全的使用软件
5.2 安全规则(理解)
- 学习错误
在微软,学习错误的过程从填写一个文档开始:产品名称;产品版本;联系人;BUG数据库编号;脆弱性描述… - 最小化攻击面
- 使用深度防御
- 使用最小权限
- 应用缺省安全
- 记住兼容性的倒退是痛苦的
Remember that backwawrd compatibility will always give you grief. - 假定外部系统是不安全的
- 基于错误计划
- 切记安全的特性不等于安全特征
- 公开设计
Never depend on security through obscurity alone. - 不要混合编码和数据
- 正确修复安全问题
※CH06 一个信息系统的安全模型分析
6.1 信息系统及其特征(理解)
- 按照ISO的定义,MIS是借助于自动化数据处理手段进行管理的系统,由计算机硬件、软件(包括:系统软件、应用软件和管理学软件包)、数据库各种规程和人共同组成
- 信息系统主要特征包括以下内容:
- 一定依赖于计算机
- 涉及计算机软件和硬件
- 实现数据的采集、传递、加工、处理功能
- 系统的主要特性概括如下:
- 整体性:系统的各个部分一定以整体目标为目标, 追求全局最优
- 目的性:一个系统一定是具有明确目标的,并完成一定的功能
- 层次性:一个系统可以分为若干层次和子系统
- 边界性:每一个系统都能够明显地区别于其他系统,系统之间有明确的界限
- 关联性:系统包括若干元素,元素之间存在一定的关联性
- 环境性:系统处于一定的环境之中并受环境影响
- 信息系统类型
- 宏观的国家经济信息系统
- 面向基层的企事业管理信息系统
- 事务型管理信息系统
- 办公型管理信息系统
- 专业型管理信息系统等
- 既有典型的MRP,ERP,SCM等通用的信息系统,也有针对特定业务的系统
- 许许多多以计算机为核心的,实现数据的采集、存储、操作的系统都属于信息系统的范畴
- 系统运行环境要素
- 物理世界
- 管理者实体
- 使用者
- 提供者
- 基础组织
- 入侵者
6.2 信息系统的安全问题分析(理解)
ISO7498-2标准中定义5种安全服务类型:
- 身份鉴别(Authentication)
- 访问控制(Access Control)
- 数据保密(Data Confidentiality)
- 数据完整性( Data integrity)
- 抗抵赖(Non-reputation)
6.3 信息系统的安全模型
- 系统使用者被划分为:用户、系统管理员、信息主管(企业主管)
- 整个系统被划分为三个部分:用户界面逻辑、业务逻辑、异常检测机
- 系统安全要实现的主要功能
- 访问控制
- 抗抵赖
- 数据保密
- 身份鉴别
- 授权机制
- 日志审计
- 系统异常探测
6.3.1 用户界面逻辑
- 用户界面逻辑 = 数据访问 + 登录控制
- 登录控制界面主要功能
- 口令验证
- 口令修改
- 口令数据的加密
- 登录时间的记录
- 登录控制设计考虑因素
- 用户ID
- 用户修改口令,而不是系统管理员
- 初始口令的安全性
- 口令安全
- 用户封锁:出现用户多次登录失败的情况,系统锁定用户操作并提示,解锁必须由系统管理员完成。如果其他人冒充用户进行攻击,锁定后合法用户会发现。
6.3.2 业务逻辑
- 数据服务:是完成特定数据的 加密、解密,日志数据的存储,权限及用户信息的存储
- 权限管理:完成用户的授权,包括两个部分:系统管理员和信息主管。信息主管负责系统启动和初始授权,系统管理员负责日常权限管理、日志审计、系统状态监控、异常监测、用户锁定处理
- 日志审计:对用户的操作行为进行跟踪,提供根据时间、用户、系统的检索手段。日志信息不能人工清除,避免系统管理员在后台对数据进行操作,然后清除信息。每隔一定周期(该周期由系统配置设定),日志信息自动清除超过该时间的信息,保留最新信息。对信息系统而言,合理并具有一定强度的日志设计,是保证安全,提高安全可信性的重要手段
6.3.3 异常检测机
- 主要功能
- 日志分析
- 网络状态安全监测
- 提供一定的日志文件保护机制
- 异常检测独立于业务逻辑的目的
- 独立程序,便于扩展发展
- 位于业务和用户进程之外,能实施监控
- 不对信息系统运行发生干扰
- 使该探测器成为系统的可选件
6.4 信息系统的异常行为探测
IDS与异常探测机的区别
6.4.1 异常行为
- 用户身份的攻击:非法用户针对用户ID进行攻击,试图猜测用户身份
- 口令攻击:在已知用户身份的情况下,猜测口令,进行口令攻击
- 服务器的异常访问:这里是指服务器计算机和WEB SERVER等专用服务程序。类似DOS攻击的方式在局域网内也是有可能发生的
- 数据库异常连接
- 数据库文件变动异常
- 系统管理员攻击:目前是特指以管理员身份对系统中用户身份的滥用,包括管理员冒用用户身份访问数据,私自增加用户并消除日志痕迹等
- 日志文件攻击
6.4.2 日志分析
- 日志数据格式——进行系统审计需要的一些关键信息
- 用户名
- 用户标志ID
- 用户登录时间
- 用户退出时间
- 访问的功能(操作模块)
- 用户锁定信息(非法用户冒用身份)
- 口令变动时间
- 用户授权时间
- 授权功能
- 授权人
- 日志数据Table
- 针对日志文件自身的攻击主要有两类
- 日志数据的删除
- 日志数据的修改
- 日志数据审计和异常模式
- 手动审计
- 自动审计和报警
6.4.3 网络异常探测机
- 功能:主要功能是针对来自网络的信息进行分析,提供对信息系统的保护报警
- 探测器并不是通用的系统异常探测器
- 主要功能
- 数据流量检测
- 服务端口连接数量检测
- 文件访问限制
- 日志文件保护
6.4.3.1 数据流量异常
设流量统计时间:
δ
t
=
t
1
−
t
2
\delta t = t_1 -t_2
δt=t1−t2
在
δ
t
\delta t
δt内的流量统计平均值为
P
P
P,进行流量异常报警的条件是当前流量
P
C
P_C
PC与
P
P
P的差值大于给定范围
ϵ
\epsilon
ϵ
δ
P
=
P
c
−
P
\delta P = P_c - P
δP=Pc−P
δ
P
≥
ϵ
\delta P \ge \epsilon
δP≥ϵ
6.4.3.2 服务器连接异常
-
连接数量异常
-
连接主机异常
-
连接端口异常
6.4.3.3 文件访问异常
6.4.3.4 日志文件保护
- 设定受保护的日志文件,通过系统的守护进程,进行监视。该保护可对特定程序集合开放
※CH07 Web应用安全
7.1 Web应用的概念
- 定义:WEB应用可以理解为利用HTTP与用户或者其他系统实现交互的C/S程序。而用户所使用的CLIENT一般是类似于IE等的浏览器或者是专门开发的HTTP代理
- WEB SERVICE是一个打包在一起的功能集合,作为一个实体,发布至网络被其他程序所使用
- WEB APPLICATION
- 采用HTTP协议完成通信的应用程序
- 与后台WEB Server实现交互的程序
- 与互联网(Internet)服务器,包括Web Server,database server进行交互的程序
- 位于中间层,进行数据交互或者其他服务程序
- Web应用特征
- 远程客户端程序:专用客户端;Browser
- 通过Internet进行数据通信
- 后端系统包括WEB Server,OS,以及数据库
- 可能包括中间层(中间件):中间层应用实现客户端数据处理或者其他服务;中间层应用请求服务数据
- Web应用安全现状
- 实现WEB应用安全非常困难
- WEB应用环境包括多个系统
- WEB应用大部分运行于INTERNET,具有更广的攻击面
- 在WEB应用的运行中,具有更多的临时决策,以支持系统的运行,系统状态具有更多的可变性
- 许多支持系统没有得到恰当的保护
- 实现WEB应用安全非常困难
7.2 Web应用安全建模框架
7.2.1 Web应用威胁建模(微软)
- 活动:Web应用程序的威胁建模
- 目的:确定方案中的相关威胁与漏洞,以后见应用程序的安全设计
- 输入:
- 主要用例和使用方案
- 数据流图
- 数据架构
- 部署关系图
- 输出:
- 威胁列表
- 漏洞列表
7.3 Web应用安全模型
威胁建模:一种用于理解和消除系统安全威胁的形式化的方法
7.3.1 方法概述
- 信息收集
- 定位文档
- 访问相关人员
- 探查系统
- 分析
- 用户
- 构件 资产 动机
- 入口
- 弱点和威胁
- 威胁消除
- 建立预算
- 排序处理
- 确立怎对威胁的工作
策略
7.3.2 一个安全模型
(这部分有24页,感觉结构略混乱)
- 电子商务
- Web site (CMS-powered)
- 在线商店
- 两个服务器
- Application server
- Database server
系统用户
- 客户public
- 商店管理职员
- 市场部
- 开发者
- 系统管理员
入口点
- 在网络层,每个服务代表了一个入口点
- 利用防火墙,进行绝对必须的访问
- 外部防火墙(hosting company).
- 主机防火墙(iptables on Linux).
- 限制所有端口访问, only let port 3306 through.
攻击面降低
其余资产
修复文件系统访问权限
- 禁止读
- 禁止写
- 不要有二进制程序或者编译器在附近
隐藏系统边界
最后的消除活动
- 知道何时被威胁
- 活动监测
- 完整性验证
- 入侵监测
- 包括离线备份和灾难恢复程序
※CH08 一个安全过程模型与工程模板
8.1 核心工作
-
主要内容
- 安全目标定义
- 敏感数据分析
- 威胁分析
- 安全设计
- 受攻击面分析
- 安全实现
-
软件目标
- 软件功能性
- 可用性
- 效率
- 上市时间
- 简单性
-
软件安全目标 7498-2
- 预防
- 跟踪与审计
- 监控
- 隐私与保密
- 多级安全
- 匿名
- 认证和完整性
-
软件风险管理
- 软件的安全性
- 可靠性
- 稳定性
8.2 过程模型
8.3 过程实施要点
(下面几点尚未展开描述)
- 安全实施能力培养
- 安全目标定义
- 资源及敏感数据分析
- 威胁分析
- 安全设计
- 受攻击面分析
- 安全实现
- 安全测试
- 安全维护与响应
※CH09 隐私保护问题
9.1 GDPR
一些要点写在这里:
- 一般数据保护条例(General Data Protection Regulation)
- 该规定扩大了公司必须考虑到的个人数据范围,并要求他们密切跟踪他们存储的欧盟居民的数据
- 如果欧盟的某个人想要一个公司删除他或她的数据,发送数据副本,或者更正数据中的错误,该公司必须遵守
- 该规定适用于广泛的个人数据,包括一个人的姓名和身份证号码
- 它还能保护一个人在网上和现实世界中所做活动的信息数据。这包括位置信息,以及IP地址、cookies和其他数据,这些数据可以让公司在用户浏览互联网时追踪他们
- GDPR定义的个人数据
-
个人数据是GDPR的核心概念
-
根据GDPR第4条,个人数据是与已识别或可识别的自然人(即数据主体)相关的任何信息。因此,个人数据包括四个要件:“任何信息”、“相关性”、“已识别或可识别”、“自然人”
-
所谓“任何信息”,包括客观或主观的信息,不管信息是否真实。
-
信息并不限于私人生活或家庭信息,也可以是个人参与的专业活动或公共活动的信息,比如个人的办公电话就和家庭电话一样属于个人信息
-
所谓“相关性”,信息可能直接指向某个人,也可能指向某物品、过程或事件,进而与个人发生关联。比如,通过车辆的价格信息可以判断车辆所有人是否需要纳税。在判断相关性时,需要考虑信息的内容、目的或结果等因素
-
所谓“已识别或可识别”,是指通过姓名、身份证件号码、IP地址等信息确定到某个人,也可能是综合各种信息确定到某个人
-
所谓“自然人”,是指所有人,不限于欧盟成员国的公民,不考虑个人的居民身份和国籍等
-
GDPR适用于任何收集、处理、管理或存储欧洲公民数据的组织,包括大多数主要的在线服务和收集、处理、管理或存储数据的企业。GDPR本质上是为数据保护设置了一个新的全球标准
-
GDPR如何影响黑客攻击入侵?
-
GDPR对未成年人是否有特殊保护?
GDPR要求企业和组织获得父母的同意,才能处理 16岁以下儿童的个人数据 -
个人数据是GDPR的重点规制对象,其原则规定位于首要位置,6大原则:
- 合法公平透明
- 目的限制
- 数据最小化
- 准确性
- 存储限额
- 完整性和机密性
-
9.2 中国隐私权法律规定
9.2.1 在我国隐私权的法律规定
- 《宪法》
- 《刑法》
- 《民法典》
- 《未成年人保护法》
9.2.2 侵犯隐私权的范畴
9.3 GB/T35273-2017-个人信息安全规范
-
GB/T35273-2017《信息安全技术个人信息安全规范》
-
个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息,如姓名、出生日期、身份证件号码、个人生物识别信息、住址、通信通讯联系方式、通信记录和内容、账号密码、财产信息、征信信息、行踪轨迹、住宿信息、健康生理信息、交易信息等
-
判定信息是否属于个人信息
- 识别:从信息到个人
- 关联:从个人到信息
-
个人敏感信息:个人敏感信息是指一旦泄露、非法提供或滥用可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇等的个人信息。通常情况下,14岁以下(含)儿童的个人信息和自然人的隐私信息属于个人敏感信息
-
泄露
-
滥用
-
个人信息处理活动中个人信息控制者应当遵循的基本原则和安全要求
- 权责一致原则:对其个人信息处理活动对个人信息主体合法权益造成的损害承担责任
- 目的明确原则:具有合法、正当、必要、明确的个人信息处理目的
- 选择同意原则:向个人信息主体明示个人信息处理目的、方式、范围、规则等,征求其授权同意
- 最少够用原则:除与个人信息主体另有约定外,只处理满足个人信息主体授权同意的目的所需的最少个人信息 类型和数量。目的达成后,应及时根据约定删除个人信息
- 公开透明原则——以明确、易懂和合理的方式公开处理个人信息的范围、目的、规则等,并接受外部监督
- 确保安全原则——具备与所面临的安全风险相匹配的安全能力,并采取足够的管理措施和技术手段,保护个人信息的保密性、完整性、可用性
- 主体参与原则——向个人信息主体提供能够访问、更正、删除其个人信息,以及撤回同意、注销账户等方法
-
个人信息的匿名化处理
- 通过对个人信息的技术处理,使得个人信息主体无法被识别,且处理后的信息不能被复原的过程
- 个人信息经匿名化处理后所得的信息不属于个人信息
※CH10 对威胁的认识-微软MSDN-威胁与对策(补充材料)
本节任务:
- 开始从攻击者的角度考虑问题
- 了解在威胁范畴广泛使用的STRIDE方法
- 识别并应对在网络、主机和应用程序级别存在的威胁
- 开始威胁建模过程之前,理解以下基本术语是至关重要的:
- 资产。具有价值的资源,如数据库中或文件系统上的数据,或者是系统资源
- 威胁。可能危害资产的潜在发生(恶意或非恶意)
- 漏洞。使威胁成为可能的弱点
- 攻击(或利用)。所执行的危害资产的操作
- 对策。用以解除威胁并减轻危险的安全措施
10.1 对攻击的剖析
- 通过了解攻击者攻击应用程序所采用的基本方法,可以确定面对的对象,从而采取更有效的防御措施
- 攻击者方法的基本步骤总结如下:
- 调查和评估
- 利用和渗透
- 利用和渗透
- 保留访问权
- 拒绝服务
STRIDE(期末考察了很多!但是可惜我没着重看,只能写一点关键词)
应用程序所面临的威胁可根据攻击的目标和目的进行分类
- 哄骗Spoofing:哄骗是指尝试使用假身份获取系统的访问权。可以使用偷取的用户凭证或假的IP 地址来实现。攻击者作为合法用户或主机成功获取访问权后,则可以开始特权提升或滥用授权
- 篡改Tampering:篡改是指未经授权修改数据,例如当数据通过网络在两台计算机之间传递时
- 抵赖Repudiation:抵赖是指用户(合法或非合法)否认他们已执行了特定操作或事务的能力。没有足够的审核,抵赖攻击很难证明
- 信息泄漏Information Disclosure:信息泄漏是指保密数据的不期望的泄漏
- 拒绝服务Denial of Service:拒绝服务是使系统或应用程序不可用的过程。例如,拒绝服务攻击可能通过以下途径实现,使用请求轰击服务器以耗费所有可用的系统资源,或者向其传输可使应用程序进程崩溃的破坏性的输入数据
- 特权提升Elevation of Privilege:当具有有限特权的用户冒充具有高级特权的用户来获得应用程序的特权访问权时,会发生特权提升
10.2 网络威胁和对策
- 最危险的网络级别威胁
- 信息搜集:配置路由器以限制攻击者对于跟踪足迹请求的响应;配置网络软件如防火墙所驻留的操作系统,通过禁用不使用的协议和不需要的端口来防止跟踪足迹
- 侦听:使用增强的物理安全和合适的网络分段。这是防止从本地收集通信的第一步;将通讯完全加密,包括身份验证凭证。这样即可防止攻击者使用侦听的数据包。SSL 和 IPSec(Internet 协议安全)是加密解决方案的示例
- 哄骗:筛选从外围的内部 IP 地址进入的数据包;筛选从无效的本地 IP 地址传出的数据包
- 会话劫持:使用加密的会话协商;使用加密的通讯通道;让自己能够得到平台修补程序通知,以消除 TCP/IP 漏洞,如可预测的数据包序列
- 拒绝服务:应用最新的服务数据包;通过应用合适的注册表设置来强化 TCP/IP 堆栈,以增加 TCP 连接队列的大小,减少 连接建立时间,并采用动态储备机制来确保连接队列不耗竭;使用网络入侵检测系统 (IDS),因为它能自动检测并响应 SYN 攻击
10.3 主机威胁和对策
- 最危险的主机威胁
- 病毒 特洛伊木马 蠕虫病毒
- 跟踪足迹
- 概要分析
- 密码破解
- 拒绝服务
- 任意代码执行
- 未授权访问
10.4 应用程序威胁和对策
类别 | 威胁 |
---|---|
输入验证 | 缓冲区溢出;跨站点脚本;SQL 注入;标准化 |
身份验证 | 网络偷听;强力攻击;字典攻击;Cookie 重播;凭证偷窃 |
授权 | 特权提升;机密数据泄漏;数据篡改;诱惑攻击 |
配置管理 | 未授权访问管理界面;未授权访问配置存储区;检索明文配置数据;缺少各自的可说 明性;越权进程和服务帐户 |
敏感数据 | 访问存储区中的敏感数据;网络偷听;数据篡改 |
会话管理 | 会话劫持;会话重播;man in the middle 攻击 |
加密 | 不完善的密钥生成或密钥管理;弱加密或自定义加密 |
参数操纵 | 查询字符串操纵:表格字段操纵;Cookie 操纵;HTTP 头操纵 |
异常管理 | 信息泄漏;拒绝服务 |
审核和记录 | 用户拒绝执行操作;攻击者利用应用程序而不留踪迹;攻击者掩盖其踪迹 |
10.4.1 输入验证
- 缓冲区溢出
- 缓冲区溢出漏洞会导致拒绝服务攻击或代码插入。拒绝服务攻击会引起进程崩溃;代码插入则会更改程序执行地址以运行攻击者插入的代码
- 对策
- 执行彻底的输入验证
- 在可能的情况下,限制应用程序对非托管代码的使用,并彻底检查非托管的 API,以确保输入已经过正确的验证
- 检查调用非托管的 API 的托管代码,以确保仅将合适值作为参数传递给非托管的API
- 跨站点脚本
- 当浏览器连接到受信任的网站时,XSS 攻击会导致任意代码在用户浏览器中运行。此攻击以应用程序的用户而不是应用程序本身为目标,但它使用应用程序作为攻击工具
- 因为脚本代码是从受信任站点上通过浏览器下载的,所以浏览器无法知道此代码是非法的
- 为启动攻击,攻击者必须使用户单击一个精心设计的超链接,例如,通过在发送给用户的电子邮件中嵌入链接或向新闻组公告中添加恶意链接。链接指向应用程序中易受攻击的页面,该页面以HTML 输出流形式将未经验证的输入发送回浏览器
- 如果 Web 应用程序提取了查询字符串,无法对其进行正确验证并使其返回浏览器,则脚本代码 在浏览器中执行
- 对策
- 执行彻底的输入验证
- 使用 HTMLEncode 和 URLEncode 函数来对任何包含用户输入的输出进行编码。这会将可执行脚本转换为无害的 HTML
- SQL注入
- 当数据库查询中包括未经验证的用户输入时,应用程序可能很容易受到 SQL 注入攻击。特别容易受到影响的是用未筛选的用户输入构造动态 SQL 语句的代码
- 记一个典型的SQL注入例子
SELECT * FROM Users WHERE UserName=‘ZWX’ OR 1=1-; - 对策
- 执行彻底的输入验证
- 将参数化的存储过程用于数据库访问,以确保不会将输入字符串误认为可执行语句。如果不能使用存储过程,那么在建立 SQL 命令时请使用 SQL 参数
- 使用最低特权的帐户来连接数据库
- 标准化
- 将不同形式的输入解析为相同的标准名称(标准的名称),称为标准化
- 对策
- 尽可能避免输入文件名,而使用最终用户无法更改的绝对文件路径
- 如果必须将文件名接受为输入,应确保文件名形式正确,并在应用程序的上下文中对其进行验证。例如,检查它们是否在应用程序的目录层次结构中
- 确保字符编码设置正确,以限制表示输入的方法
10.4.2 身份验证
- 网络偷听
- 如果从客户端向服务器以纯文本形式传递身份验证凭证,在同一网络的主机上具有初级的网络监测软件的攻击者就可以捕捉通信并获得用户名和密码
- 对策
- 使用不通过网络传输密码的身份验证机制,如 Kerberos 协议或 Windows 身份验证
- 如果必须通过网络传输密码,则需确保密码已加密,或使用已加密的通讯通道,如 SSL
- 强力攻击
- 强力攻击依赖计算能力来解开哈希密码或其他使用了哈希和加密的机密。
- 对策:为减少这种危险,请使用强密码。
- 字典攻击
- 此攻击用于获取密码
- 多数用户存储实现具有密码哈希(或摘要)
- 在字典攻击中,攻击者使用程序来重述字典中的所有词(或采用多种语言的多个字典)并计算每个词的哈希。生成的哈希与数据存储区中的值进行比较。可以快速破解弱密码
- 注意
- 一旦攻击者获得了密码哈希列表,则可以脱机执行字典攻击,而且并不要求与应用程序交互
- 对策
- 使用强密码
- 在用户存储区中存储不可还原的密码哈希。还要在密码哈希中包含一个Salt 值(一个加密性强的随机数字)
- Cookie重播攻击
- 攻击者可以使用监测软件捕捉用户的身份验证 Cookie 并将其重播给应用程序,以便使用虚假身份获取访问权
- 对策
- 无论何时传输身份验证 Cookie 时,请使用提供的 SSL 加密通讯通道
- 将 Cookie 超时设置为一个值,以在经过相对短的时间间隔后强制进行身份验证
- 凭证偷窃
- 如果登录用户以外的人访问了终端,而且点击了相同的页面,则保存的登录将可用
- 对策
- 使用并强制强密码
- 以添加了 Salt 的单向哈希的方式存储密码验证符
- 在重试一定次数后,对最终用户帐户强制帐户锁定
- 为了应对浏览器缓存允许登录访问的可能性,创建允许用户选择不保存凭证的功能,或强制此功能作为默认策略
10.4.3 授权
- 特权提升
- 保密数据的泄露
- 数据篡改
- 诱惑攻击
10.4.4 配置管理
- 对界面的未授权访问
- 对配置存储区的未授权访问
- 检索纯文本配置机密
- 缺少各自的可说明性
- 越权进程和服务账户
10.4.5 敏感数据
- 访问存储中的敏感数据
- 网络偷听
- 数据篡改
10.4.6 会话管理
- 会话劫持
- 绘画重播
- 中间人攻击
10.4.7 加密
- 不完善的密钥生成和密钥管理
- 弱加密或自定义加密
- 校验和的哄骗
10.4.8 参数操纵
- 查询字符串操纵
- 表格字段操纵
- Cookie操纵
- HTTP头操纵
10.4.9 异常管理
- 攻击者揭示了实现详细信息
- 拒绝服务
10.4.10 审核和记录
- 用户否认执行了某操作
- 攻击者利用应用程序,而不留任何踪迹
- 攻击者掩盖了其踪迹
※ 考前背几个典型问答
- 软件安全的概念:软件在恶意攻击下,能够正确完成其功能的属性。
- 软件安全三大属性:可信性;完整性;可用性
- 软件质量六大属性:功能性;易用性;可靠性;效率;维护性;可移植性
- 安全漏洞:计算机系统具有的某种可能被入侵者恶意利用的属性,有时称脆弱性。漏洞是软件的属性,也是导致安全威胁的根本原因。漏洞的本质是一组特性,攻击者利用这些特性,通过已授权的手段对资源的未经授权访问,从而造成对系统的损害。
- 软件安全设计原则:经济机制;默认失效保护;安全中介;公开设计;权限分离;最小权限;最少公共机制;心理可接受程度
- 软件安全测试基本方法:主要分为静态测试、动态测试(黑盒、白盒、灰盒)、渗透测试、模糊测试、程序数据扫描等测试方法,在实施方法上主要有分为基于风险的测试和动态测试中的黑盒、白盒、灰盒测试。
- 安全软件工程:SSE-CMM实施:风险、工程、保证 SDL设计安全、缺省安全、提交安全
- SSE-CMM有哪5个能力级别?1:非正式执行 2:计划与跟踪 3:充分定义 4:定量控制 5:连续改进
- 安全编码原则:使用最新的编译器和工具;使用编译器内置的防御工具;忌用违禁的函数和方法;使用源代码分析工具;减少可被利用的编码结构;使用安全编码检查清单
- 威胁建模的理解:一种用于理解和消除威胁系统安全威胁的形式化方法。
- 威胁建模的步骤:定义应用场景;收集外部依赖列表;定义安全假设;绘制数据流图;确定威胁类型;识别系统威胁;判断风险;规划消减措施
- 基于风险的测试步骤:信息搜集;威胁(风险)建模;可用性分析。
其中,威胁建模中识别威胁路径->识别威胁->识别漏洞->漏洞分级。 - Web安全步骤:确定安全目标;创建应用程序概述;分解应用程序;确定威胁;确定漏洞。
- 考试,最终考察了很多STRIDE模型,可惜我没有好好背这部分(′⌒`)
知识点实在是太繁杂,最后用几句应该牢记于心的话收个尾:
所有的输入都是威胁,所有的输入都应该被验证!
ISO7498-2标准是个重点!
牢记最小权限原则!
最后的最后,希望软件安全期末考试顺顺利利┗|`O′|┛
版权声明:本文标题:【软件工程】软件安全技术 全章节 两万字总结! 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727773243a1128812.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论