应用安全
模糊测试
别称: Fuzzing
定义
通过向程序输入大量畸形、随机或未预期的数据,自动发现崩溃、内存破坏与安全漏洞的测试技术。
模糊测试(fuzzing)会向目标(函数、解析器、协议或整个应用)发送大量经过变异或生成的输入,同时监控崩溃、挂起、断言失败或 sanitizer 报告。目的是找到违反安全属性的输入:越界访问、释放后使用、死循环、未处理异常或逻辑缺陷。AFL++、libFuzzer、Jazzer、Atheris 等现代 fuzzer 借助覆盖率反馈不断演化输入,以触达新代码路径,对解析器、解码器和加密代码尤其高效。如今,Google 的 OSS-Fuzz、Microsoft 的安全开发流程都将 fuzz 测试视为 SSDLC 的核心组件,挖掘出了大量高影响力的 CVE。
示例
- OSS-Fuzz 持续运行 libFuzzer 对 OpenSSL 解析器进行模糊测试,以发现内存破坏问题。
- 用 Jazzer 对 Java JSON 解析器进行模糊测试,通过深嵌套输入触发 DoS。
相关术语
变异模糊测试
通过对现有合法样本进行随机变异(翻转比特、插入字节、文件拼接等)来生成新测试输入的模糊测试策略。
覆盖率引导模糊测试
通过插桩目标程序、测量代码覆盖率,并演化能够触达新路径的输入,从而显著提升缺陷发现效率的模糊测试技术。
符号执行
一种程序分析技术,使用符号输入而非具体值执行代码,通过 SMT 求解器求解路径约束以发现缺陷。
DAST(动态应用安全测试)
对运行中的应用进行黑盒安全测试,通过网络发送请求并观察响应,以发现仅在运行时才暴露的注入、认证缺陷与配置问题。
缓冲区溢出
内存安全缺陷:程序写入数据超出已分配缓冲区末尾,破坏相邻内存,常被用于实现代码执行。
Secure Coding
Secure Coding — definition coming soon.