(十)Fuzzing 基础
发布网友
发布时间:2024-08-18 18:14
我来回答
共1个回答
热心网友
时间:2024-09-01 22:26
Fuzzing: 探索软件漏洞的测试艺术
Fuzzing是一种强大的测试技术,它通过提供“fuzz输入”来探索软件的边缘和潜在漏洞。它的核心在于超越预期的输入范围,对程序执行(PUT)进行采样。以下是关键概念的深入解析:
Fuzzing: 从输入空间采样PUT,挑战其边界和预期行为。
Fuzz Testing: 评估PUT行为的准确性,寻找潜在漏洞的测试策略。
Fuzzer: 执行fuzz测试的工具,执行策略导向的测试活动。
Fuzz Campaign: 设计明确策略的PUT测试过程,旨在发现和修复漏洞。
- Fuzzing配置的多样性取决于使用的算法,如随机数据流或动态配置,而种子则是生成测试用例的基础。
- 种子库由Fuzzers维护,随着时间推移,种子可能会进化以扩大覆盖范围。
- 算法示例:通过配置、超时输入,算法生成bug集合,每个迭代包含SCHEDULE、INPUTGEN、INPUTEVAL等关键步骤。
**Fuzzers的分类**:分为黑盒(仅观察输入输出)、灰盒(结合静态和动态分析)和白盒(深入程序内部执行分析),每种类型根据观察粒度和信息获取程度有所不同。
- 黑盒(仅IO驱动):如仅看输入与输出的响应。
- 灰盒(静态与动态结合):通过插桩收集执行反馈,如静态编译时或动态运行时插桩。
- 白盒(动态符号执行):执行深入分析,如Dowser的静态错误检测,通过符号值求解器生成测试用例。
输入生成是关键环节,包括生成型(基于模型)和变异型(如位翻转、算术变异),如PULSAR的网络协议建模。
操作策略:随机操作如删除、替换块,调整种子大小,甚至跨种子插入随机数据。
- 白盒fuzzing利用复杂分析,如Dowser进行深度静态检测。
- 动态符号执行则依赖于SMT求解器,成本较高,但能生成更为精确的输入。
指导性模糊测试结合程序分析(如TaintScope)和污点分析(如Angora),以增强漏洞定位。
输入评估:通过bug oracle检测问题,关注内存安全和类型兼容性。
安全防护措施:输入验证防止XSS和SQL注入,通过语义差异检测潜在错误。
测试用例管理:通过去重(如stack backtrace hashing等)优化测试效率。
RETracer通过逆向数据流分析,将崩溃分类并追踪错误值的分配路径。
优先级和威胁评估:漏洞严重性和独特性排序,衡量exploitability(可利用性)评估攻击可能性。
Triage:聚焦关键部分,简化异常用例,如最小化测试用例和确定关键模块。
配置更新:如EA算法通过节点或分支覆盖优化配置。
深入研究领域包括自适应函数优化,如AFL优化分支执行次数。
参考文献丰富多样,如Manès et al. (2019), Gascon et al. (2015), Haller et al. (2013), Wang et al. (2010), Chen and Chen (2018), Cui et al. (2016)揭示了这一领域的深度和广度。