CISP/10_第十章 软件安全开发/10.4 软件安全测试.md
2024-10-05 12:22:56 +08:00

174 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 软件安全测试
> **一、软件测试**<br>
> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">了解</span>软件测试的基本概念;<br>
> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">了解</span>常见的软件测试方法及不同测试方法之间的区别和优缺点。
>
> **二、软件安全测试**<br>
> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">了解</span>软件安全测试的基本概念;<br>
> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">理解</span>模糊测试、渗透测试等软件安全测试方法的原理、相互的区别以及各自的优势;<br>
> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color:red;">掌握</span>安全测试的思路和方法。
### 一、软件测试
#### 1、基本概念
1. **什么是软件测试**
- 使用人工和自动化的手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的<span style="color:red;">需求</span>或是弄清预期结果与实际结果之间的<span style="color:red;">差异</span>
2. **基本概念**
- 测试用例
- 测试用例是为某个特殊目的而编制的一组测试输人、执行条件以及预期结果。
- 测试覆盖率度量指标
- 测试覆盖率度量指标是测试完整性的一个手段,是测试有效性的一个度量。
3. **测试的信条**
- 预期测试的测试结果是预先确定的;
- <span style="color:red;">好的测试用例</span>发现错误的概率高;
- <span style="color:red;">成功的测试</span>就是发现了错误的测试;
- 测试独立于编码;
- 需要具备<span style="color:red;">应用</span>(用户)及<span style="color:red;">软件</span>(编程)两方面的专业知识;
- 测试人员使用不同于开发人员的工具;
- 只检查常见的测试用例是不够的;
- 测试文档要能够再利用。
#### 2、软件测试方法
> 根据软件测试工作的测试策略一般将软件测试过程分为单元测试、集成测试、系统测试和验收测试4个大阶段<br>
> 根据对软件内部工作过程了解的程度又分为黑盒测试、白盒测试和灰盒测试;<br>
> 从测试过程中是否执行软件又可以将软件测试方法分为静态测试和动态测试。
- **单元测试、集成测试、系统测试**
- 单元测试是对软件中的基组成单位进行的测试;
- 集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位时间之间的接口是否正确;
- 系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求。
- **黑盒测试、白盒测试、灰盒测试**
- 黑盒测试意味着测试要在软件的接口处进行,因此黑盒测试又称功能性测试或数据驱动测试;
- 白盒测试也称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试,是对软件的过程细节做细致的检查。确定实际状态是否与预期的状态一致;
- 灰盒测试是一种介于白盒测试和黑盒测试之间的一种测试方法。灰盒测试关注输出对于输人的正确性,同时也关注内部表现。
- **静态测试、动态测试**
- 静态方法是指不运行被测程序本身,静态测试又可分为代码走查、代码审查、代码评审;
- 动态方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等。
- **回归测试**
- 回归测试是指在发生修改之后重新测试先前的测试以保证修改的正确性。
- **验收测试**
- 验收测试旨在向购买者展示该软件系统满足其用户的需求;
- 这是软件在投入使用之前的最后测试。
### 二、软件安全测试
#### 1、什么是软件安全测试
- 确定软件的安全特性实现是否与预期设计一致的过程
- 有关验证软件安全等级和识别潜在安全缺陷的过程
- 查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力
#### 2、为什么需要软件安全测试
- 传统测试仅考虑软件出错时的处理,<span style="color:red;">没有考虑对软件的故意攻击</span>
#### 3、软件安全测试方法
- 在应用投产前,应由<span style="color:red;">独立的安全团队</span>对应用的安全性进行综合评估
- <span style="color:red;">功能性</span>安全测试
- <span style="color:red;">对抗性</span>安全测试
- 安全测试方法
- 模糊测试
- 渗透测试
- 静态源代码审核
#### 4、模糊测试Fuzzing
1. **什么是模糊测试**
- 也称<span style="color:red;">Fuzzing</span>测试,一种通过提供<span style="color:red;">非预期</span>的输入并监视异常结果来发现软件故障的方法。
- <span style="color:red;">黑盒测试</span>,不关心被测试目标的内部实现,而是利用构造畸形的输入数据引发被测试目标产生异常,从而发现相应的安全漏洞。
> <span style="background-color:lightgreen;">非常有效的漏洞挖掘技术,已知漏洞大部分都是通过这种技术发现的</span>。
2. **强制软件程序使用<span style="color:red;">恶意/破坏性</span>的数据并进行观察结果的一种测试方法**
- 不够强壮的程序会崩溃
- 编码良好的程序正常运行
3. **<span style="color:red;">特性</span>**
- 方法学
- 随机值
- 大量测试用例
- 查找漏洞或可靠性错误
4. **模糊测试过程**
1. 生成大量的畸形数据作为测试用例;
2. 将这些测试用例作为输入应用于被测对象;
3. 监测和记录由输入导致的任何崩溃或异常现象;
4. 查看测试日志,深入分析产生崩溃或异常的原因。
![image-20241005113409358](https://picgo-noriu.oss-cn-beijing.aliyuncs.com/Images/image-20241005113409358.png)
5. **影响模糊测试效果的关键因素**
1. 测试点
- 数据通道入口、可信边界点
2. 样本选择
- 选择覆盖面广、便于测试的多个样本
3. 数据关联性
- 智能模糊测试
4. 自动化框架
5. 异常监控与异常恢复
6. 分析评估
#### 5、渗透测试
1. **渗透测试**
- 通过<span style="color:red;">模拟恶意攻击者进行攻击</span>,来评估系统安全的一种评估方法;
-<span style="color:red;">攻击的角度</span>测试软件系统是否安全;
- 使用自动化工具或者人工的方法模拟攻击者的输入找出<span style="color:red;">运行时刻</span>目标系统所存在的安全漏洞。
2. **优点**
- 找出来的问题都是真实的,七也是较为严重的。
3. **缺点**
- 只能到达有限的测试点,覆盖率较低。
4. **渗透测试流程**
![image-20241005120622162](https://picgo-noriu.oss-cn-beijing.aliyuncs.com/Images/image-20241005120622162.png)
5. **渗透测试要点**
1. 授权
2. 测试目的
- 安全性的评估,不是摧毁或破坏
3. 测试人员
- 技术、知识和经验很重要
- 像“坏人”一样思考问题
4. 安全问题
- 系统备份和恢复措施
- 风险规避
- 渗透测试不要在业务的高峰期进行
6. **灵活安排自己的“组合”**
- 代码审核 + 体系结构风险评估
- 基于风险的安全测试 + 渗透测试
- 安全需求分析 + 滥用案例开发
- 代码审核 + 渗透测试
- 体系结构风险分析 + 基于风险的测试
#### 6、软件安全测试思路
- 充分了解软件安全漏洞
- 评估软件安全风险
- 拥有高效的软件安全测试技术和工具
- 包括IMPACT、CANVAS和Metasploit
- Metasploit为开放源代码。