应用安全
变异模糊测试
别称: 突变式模糊测试, 基于样本的模糊测试
定义
通过对现有合法样本进行随机变异(翻转比特、插入字节、文件拼接等)来生成新测试输入的模糊测试策略。
变异模糊测试以一组合法输入(图像、网络包、文档)作为种子语料,通过比特翻转、字节替换、块删除、拼接等小幅随机修改生成新的候选输入。与基于生成的 fuzzer 不同,它无需输入格式的语法定义,因此可以快速应用到任意解析器或协议上。配合覆盖率反馈,AFL++、libFuzzer 等可以快速演化出能够深入代码路径并触发内存安全缺陷的输入。它广泛用于加固编解码器、文件解析器、内核驱动和加密库,是 SSDLC 中常见的实践。
示例
- AFL++ 对合法 PNG 文件进行变异,以发现 libpng 中的堆溢出缺陷。
- libFuzzer 对合法 HTTP 请求进行变异,使自研 HTTP 解析器崩溃。
相关术语
模糊测试
通过向程序输入大量畸形、随机或未预期的数据,自动发现崩溃、内存破坏与安全漏洞的测试技术。
覆盖率引导模糊测试
通过插桩目标程序、测量代码覆盖率,并演化能够触达新路径的输入,从而显著提升缺陷发现效率的模糊测试技术。
符号执行
一种程序分析技术,使用符号输入而非具体值执行代码,通过 SMT 求解器求解路径约束以发现缺陷。
缓冲区溢出
内存安全缺陷:程序写入数据超出已分配缓冲区末尾,破坏相邻内存,常被用于实现代码执行。
释放后使用
程序在内存被释放之后仍继续使用该内存的安全缺陷,通常使攻击者得以控制对象状态并劫持执行。
Secure Coding
Secure Coding — definition coming soon.