标签:漏洞分析 管理 基础上 编写 用例 效率 挖掘 符号 编码规范
2.1 程序静态分析概述
·定义:在不运行程序的前提下,仅通过分析或检查程序的语法、结构、过程、接口等对程序进行分析的过程。
·目的:检测软件中的缺陷。
2.1.1 代码评审
常见代码评审项目 | |
·所有的设计要求是否都实现? | ·每一项功能目的是否都有注释? |
·代码编制是否遵照编码规范? | ·是否按注释类型格式编写注释? |
·所有的代码是否风格保持一致? | ·代码注释量是否达到了规定值? |
·所有的注释是否清楚和正确? | ·所有变量的命名是否依照规则? |
·所有代码的异常处理是否都有注释? | ·循环嵌套是否优化到最少? |
·桌面检查:
·开发人员通过阅读程序、对照错误列表、推演测试数据等方式对代码进行缺陷检测的方法;
·缺点:效率低、随意性大;
·代码审查:
·若干开发人员和测试人员组成审查小组,通过阅读、讨论、评价和审议等,对程序进行静态分析;
·代码走查:
·由人扮演计算机角色,把数据代入程序并模拟代码的运行,观察程序是否正常运行的过程;
·提前准备测试用例。
2.1.2 结构分析
帮助测试人员理解软件的整体架构。
程 { 系统结构 { 文件调用关系图
序 { 数据结构 分析生成 { 模块控制流图
源——{ 数据接口 ——————》 ——{ 类间依赖关系图
代 { 内部控制逻辑 { 函数调用关系图
码 { ... { ...
2.2 程序流程分析
2.2.1 控制流分析
·目的:构造一个表达程序结构的控制流图;
·通过控制流分析,缺陷可以被有效地检测出来,从而保证程序可以正常运行,并降低管理资源的耗费。
2.2.2 数据流分析
·一种软件验证技术,用于分析变量在程序的定义、使用及传递情况,以检测变量定义/使用错误和异常错误;
·主要包括三类错误:
①变量被定义,但还未被使用;
②变量被使用,但还未被定义;
③变量在使用之前被定义多次。
·需要一个程序的控制流分析的 控制流图 和制流图中每条语句包含的 定义变量和使用变量 进行分析。
2.3 符号执行
·一种介于程序运行与程序正确性证明之间的方法。
·作用:
·检查程序执行结果是否符合预期;
·通过符号执行产生程序的执行路径,为进一步自动生成测试数据提供约束条件;
·根据符号执行过程中是否使用具体值,可将符号执行技术分为静态符号执行和动态符号执行。
2.3.1 静态符号分析
·定义:不执行程序的前提下,以符号值作为输入,并通过符号执行模拟代码运行的过程,最后确认哪些 输入变量 可以执行程序的给定 路径 ,到达目标结果语句;(白盒静态分析)
·通俗点说,就是如果把一个程序比作LOL英雄,英雄的最终属性值为程序的输出(包括攻击力、防御力、血槽、蓝槽),英雄的武器出装为程序的输入(出冰杖还是大剑)。那么符号执行的任务就是,给定了一个英雄的最终属性值,分析出该英雄可以通过哪些出装方式达到这种最终属性值效果。
·路径条件:一个建立在符号化输入的 布尔公式 ,是执行某条路径时输入必须满足的限制的 积累 ;
·在符号执行过程中的每个 分支点(像if语句)上,路径条件都会进行更新:
①如果路径条件变得不可满足,则对应的程序路径也是不可行的;
②如果路径条件是可满足的,则该路径条件的任何一个解决方案都是执行该条件的程序输入;
·不使用一般程序运行时使用的具体值作为输入;
·漏洞分析:将产生漏洞的条件设置为程序目标结果,理论上就很容易挖掘出漏洞的输入变量了。
2.3.2 动态符号分析
·定义:同时结合了 符号输入 和 具体输入 来对程序进行分析;
·做法:在符号输入的基础上,当遇到复杂路径或大规模路径时 使用具体输入值代替符号输入 ,以此来驱使符号执行继续向后开展,并可获得可求解的约束路径;
·在动态符号执行时,运行工具要跟踪记录符号状态以及当前路径的运行条件;
·在一条路径运行结束后,运行工具将路径中未覆盖分支的最后一个路径条件约束 取反 ,再将新的路径条件传递给约束求解器进行求解;
·如果约束求解器可以给出一个满足新路径条件的解,运行工具会运行该条路径并重复上述路径,直至所有路径被覆盖,或覆盖特定目标,或满足时间需求。
2.4 编程规范和规则
比赛的一些编程规范。
2.5 程序静态分析工具
介绍工具。
标签:漏洞分析 管理 基础上 编写 用例 效率 挖掘 符号 编码规范
原文地址:https://www.cnblogs.com/wasi-991017/p/11610208.html