AURORA Statistical Crash Analysis for Automated Ro 7955ae459d994a5cb4eaf910294dae13

AURORA: Statistical Crash Analysis for Automated Root Cause Explanation

Summary

  • 针对一个crash的原因分析,本文提出了利用行为差异的方法寻找最可能造成此类bug的原因。
  • 首先利用AFL的crash explore生成足够的crash input和non-crash input,分为两个input set。
  • 将两个input set进行输入,监控每个输入的程序行为。通过两组输入之间的差异可以预测程序是否有crash。为了形式化这些差异,本文合成了声明是否触发了错误的断言。断言的结果表示是否产生crash。这里的断言就是一些布尔表达式,比如针对指令1,断言为rax ≥ 0xff。
  • 最后预测正确最多的断言就是要找的结果,当然结果可能不准确,但是也会大大减少人工分析的工作量。

Method

Input Diversification

  • crash exploration mode
    • 需要为单个crash seed创建一组不同但相似的输入,作为输入。一方面,输入应该是多样的;另一方面,输入应该是有相似结构,这样才更有可能引起相同的crash。

Monitoring Input Behavior

  • 将获取的两类input进行输入,然后对执行行为进行观察。
  • 对于执行的每条指令,我们记录所有修改寄存器(包括通用寄存器和标志寄存器)的最小值和最大值。类似地,本文记录每个内存写访问存储的最大值和最小值。因为这样减少运行的负载,而且通常都是最大值或者最小值会引起这些crash。
  • 这里不跟踪主程序以外的代码运行情况。

Explanation Synthesis

  • 生成断言的目标:与崩溃和非崩溃运行之间的差异相关的断言的形式区分行为,任何指向指令的此类断言都表明该特定指令与错误有关
  • 断言由三部分组成:语义描述组成(例如,布尔表达式),评估指令的地址,以及指示区分崩溃和非崩溃的能力的分数(表示断言判断为crash的概率)
  • 高分的断言识别根本原因和崩溃位置之间路径上的代码位置。最后一步,我们首先按分数对这些断言进行排序,然后是它们执行的顺序。给定这个排序的断言列表,然后用户可以手动分析错误。节省一些时间,可以直接到比较接近RC的位置进行分析。

断言详细介绍

  • 读取通过跟踪输入行为获得的结果。给定这些跟踪,收集在崩溃和非崩溃输入中观察到的所有控制流转换,并构建一个连接的控制流图,该图稍后用于合成控制流断言。因为我们要的是crash和non-crash之间的差异,所以我们只考虑至少一个crash和non-crash访问的地址,有的地址只有crash或者non-crash访问,这里没有二者差距,就不看了。基于跟踪信息,我们为每个地址(即每个指令)生成许多断言。然后,我们测试所有生成的断言,只存储得分最高的断言。应该是对于一条指令,最后只存储分数最高的一条断言,再和其他指令相比。

  • 类型

    • 控制流断言:
      • 基于重构的控制流图,我们合成了边缘断言,用于评估崩溃和非崩溃在执行流中是否不同。
    • 寄存器和内存断言
      • 比如,,令r =max(rax) ,引入断言 r < c。
      • 两个固定的断言,判断是否是有效的堆指针或者栈指针。is_heap_ptr® and is_stack_ptr®.
    • Flag 断言
      • 标志寄存器跟踪二进制比较的求值方式以及是否发生溢出,每个断言检查一个标志位,包括进位、零和溢出标志。
  • 断言求值

    • 因为很难找到完美的断言分开每一个crash和non-crash,所以这里只能对断言进行评估,打分,来选择预测能力优秀的断言。

    • 当一个crash set中的input可能会引起多种crash的时候,断言结果可能比较复杂,或者出现其他问题,为了应对这个问题,本文将程序行为建模为给定预测的噪声评估。这个模型中最终的输出是这次属于断言的预测与R(伯努利分布的噪声)的异或。O(input) = p(input) ⊕ R。下图中的θ表示错误预测的概率。下标表示错误预测,下标t表示正确预测。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1eRZrihf-1678602790829)(AURORA%20Statistical%20Crash%20Analysis%20for%20Automated%20Ro%207955ae459d994a5cb4eaf910294dae13/Untitled.png)]

      • 规范化。当θ趋向于0.5的 时候,预测越接近是蒙的,因为对错都是0.5. 所以最后断言的分数用2 ∗ abs(ˆθ − 0.5),表示。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Co57bFcs-1678602790829)(AURORA%20Statistical%20Crash%20Analysis%20for%20Automated%20Ro%207955ae459d994a5cb4eaf910294dae13/Untitled%201.png)]

    预测不准确性参数标准化

    • 常量值C的生成
    • 之前解释断言的时候,对断言的定义是r < c,而这个C是固定的常量,这里介绍一下对C的求解。
      • 预处理阶段:收集给定指令处表达式r的所有值,并对它们进行排序。
        • 然后将观察到的r的每个值作为c的候选值进行测试。
        • 比如第一个C,然后求解断言的分数,如果是接近0的话就是不太好的C。
        • 这里为了节省时间,可以第一次循环就求出每个断言处寄存器的值,以后的只需要比较C与保存的值来计算断言分数。
  • 排序

    • 丢掉分数少于0.9的断言,这个阈值是根据经验得出的,然后根据分数排序。

Implementation

  • Input Diversification
    • AFL的crash exploration
  • Monitoring INput Behavior
    • pintools ,Intel PIN
  • Explanation Systhesis
    • 先输入两个集合,然后重建连接的控制流图,然后合成和评估所有断言。
    • 最后使用binutils的addr2line[36]来推断每个断言的源文件、函数名和行

实验

Bug

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LteKs3Zb-1678602790830)(AURORA%20Statistical%20Crash%20Analysis%20for%20Automated%20Ro%207955ae459d994a5cb4eaf910294dae13/Untitled%202.png)]

详细请看论文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值