应用安全
符号执行
别称: 符号分析, concolic 执行
定义
一种程序分析技术,使用符号输入而非具体值执行代码,通过 SMT 求解器求解路径约束以发现缺陷。
符号执行引擎将程序输入视为数学变量,并在每个条件分支处分裂路径进行探索。每条路径累积一组以一阶逻辑表达的约束,Z3 等 SMT 求解器据此判断约束是否可满足,如可满足,则产生一组能将程序导向该路径的具体输入。这使符号执行非常擅长证明缺陷条件(溢出、除零、污点到达汇点)的可达性,但容易遭遇路径爆炸与约束求解复杂度问题。KLEE、angr、Manticore 等工具常用于辅助 fuzzer、发现深层漏洞,以及验证二进制程序的安全属性。
示例
- 对 C 语言库使用 KLEE,生成覆盖每个分支并触发 assert 的输入。
- 将 angr 与 AFL++ 结合,解决单纯 fuzz 无法绕过的约束。
相关术语
模糊测试
通过向程序输入大量畸形、随机或未预期的数据,自动发现崩溃、内存破坏与安全漏洞的测试技术。
覆盖率引导模糊测试
通过插桩目标程序、测量代码覆盖率,并演化能够触达新路径的输入,从而显著提升缺陷发现效率的模糊测试技术。
变异模糊测试
通过对现有合法样本进行随机变异(翻转比特、插入字节、文件拼接等)来生成新测试输入的模糊测试策略。
SAST(静态应用安全测试)
在不执行代码的前提下,对源代码、字节码或二进制进行自动化分析,以发现注入、不安全 API 或弱加密等安全缺陷。
缓冲区溢出
内存安全缺陷:程序写入数据超出已分配缓冲区末尾,破坏相邻内存,常被用于实现代码执行。
Secure Coding
Secure Coding — definition coming soon.