- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高效的静态分析解析-符号执行跟缺陷模式
内 容 一、符号执行 1、符号执行简介 2、代表工具:PREfix 二、缺陷模式 1、缺陷模式简介 2、安全漏洞 J. C. King 于 1976 年提出Symbolic Execution 使用符号值,而不是实际数据,作为输入 将程序变量的值表示为符号表达式 程序计算的输出表达为输入符号值的函数 模型检验 优点 分析是路径敏感的 因为没有对路径、状态做近似,结果精确 适合做状态检查、时序检查 对并发类型的错误十分有效 缺点 对所有可能的状态进行穷举搜索,开销大 对系统的行为进行近似,可能导致这类结果不精确 对于数据密集的系统分析困难 在边界处对路径、时序属性近似困难,故复合困难 抽象解释 优点 由于对路径、状态进行抽象,扩展性好 可以对许多有价值的属性构造格 易于组合 提供了坚实的数学基础 缺点 适合的属性需要是简单的、“状态”“值”型的 对时序性质支持弱 属性格的定义不容易 有时近似过强 演绎方法(定理证明) 优点 支持灵活的属性 易于扩展 缺点 开发人员需要提供额外的信息 自动化程度不高 路径不敏感,对并发系统不适合 记录执行的状态,包括: 程序变量的符号值 路径条件(PC: Path Condition) 程序标记(后面执行什么) 路径条件非常重要 积累了路径的约束条件 符号执行树 刻画程序符号执行过程中的执行路径 最初,x 与 y 分别具有符号值X、 Y 在每个分支点,PC 根据输入的假定确定不同的值 如果PC不成立,该路径不可达 可以大大减少路径组合 符号执行可以被看作是路径敏感分析、演绎方法及抽象解释的组合 对路径条件进行近似使得抽象解释的属性区间值收缩,因此更加灵活 约束近似了许多状态,降低了分析量 经常被应用于测试输入的生成 传统上,符号执行对有限个整数变量进行符号化,后来扩展到了处理复杂的输入数据结构和并发 例如,扩展 JPF 工具以进行符号执行Java 程序 2、典型工具:PREfix 模拟执行单个的函数! 模拟过程顺序地跟踪不同的执行路径,模拟每个操作符的动作。在路径执行过程中,通过跟踪内存的状态,应用各种一致性规则,查找不一致性。 在对条件选择后,通过检查内存的当前状态,分析器可以限制可达的路径。由于对路径、值的跟踪都很仔细,可以获得精确的信息。 函数的行为被描述为:条件、一致性规则及表达式值的集合。行为的这种描述被称为函数的一个模型。在路径执行过程中,不论何时进入一个函数,该模型被使用,以决定应用哪个操作 在模拟过程中产生的信息足够自动地产生该函数的一个模型 为在整个程序中应用这些技术,分析起始于调用图的叶节点,自底向上地向根处理。随着函数被逐层模拟,缺陷被不断发现,函数模型被高层的后续模拟所使用 这种自底向上的方法使用一个函数的实现来产生函数的约束,供上层使用。这对于程序不完整时(程序还没有开发完,或者被分析的代码需要适合多个不同的程序)尤其有效 2)主要思路 3)主要步骤 路径 路径跟踪很容易发现一些问题 路径中包括“功能调用、语句、结果” 模拟执行是基于路径进行的 为定位缺陷提供依据 但不一定是唯一的路径 可能是多条路径累积的结果 内存(变量):值与断言 模拟过程中函数使用的内存需要尽可能准确地跟踪 每块内存都有值:3个基本状态 知道准确的值(常量) 有一个初始化的值,但不知道准确的值 未初始化的值 断言( predicate )也可能与值关联 断言可能是由 1 到 3 部分组成 单个:initialized 两个:x3 三个:a = b + c 内存操作:求值、测试与设置 设置(setting)将一个值赋给内存,改变了内存的状态 简单推理:( a3 b4 ) = a+b7 测试(testing)在一定的上下文中对表达式求值,得到一个布尔结果。需要进行测试的三种情形: 需要判定表达式,以得到一个布尔结果(例如:条件分支) 语言语义要求(例如:使用前必须初始化) 在模型中选择可能的输出(例子见后面关于“模型”的内容) 条件(condition)、假定(assumption)与选择点 条件可以比路径更清晰地描述缺陷 在路径模拟执行过程中,条件对应于假定 当变量出现在一个表达式中、且值不确定时,可以进行假定 例子中的 “size”: 输入参数,模拟是自底向上进行的 出现两个假定,分别模拟执行,并记忆当前假定 当作出一个假定时,相关内存的状态被更新 这个假定可能提高其它断言的准确性 对于 a=b+5, 当假定条件表达式 a==2 为真时,a 对应的内存状态更新为2, b 对应的内存状态可以更新为 -3。 此时,控制流没有由已知的值完全确定下来,被称为选择点 路径结尾分析 当一条路径中的所有语句被模拟执行后,可以进行一些附加分析 发现一些缺陷。例如:内存没有释放等等 模型 模
文档评论(0)