【问题标题】:What are the gaps between symbolic execution and taint analysis?符号执行和污点分析之间的差距是什么?
【发布时间】:2015-03-02 14:06:00
【问题描述】:

我最近阅读了Dr. EJ Schwartz 的一篇题为"All You Ever Wanted to Know about Dynamic Taint Analysis and Forward Symbolic Execution (but Might Have Been Afraid to Ask)" 的论文。在论文中,他主要讨论了它们在二进制级别安全上下文中的应用。

我很好奇动态污点分析正向符号执行之间的确切区别。

据我所知,只要存储在 x 中的信息传输到对象,污点分析就会跟踪从对象 x(source) 到对象 y(sink) 的信息流是的。所以主要关心的是什么对象可以被源传递地影响。而符号执行将一些输入视为符号值并尝试用符号值来表达其他变量;因此它回答在什么条件下符号输入会影响后续程序。

我可以看到,在二进制层面,污点分析经常被提到return address overwritten引起的漏洞;而符号执行可以处理更多类型的易受攻击的问题,例如整数溢出运行时断言错误资源泄漏(例如,内存泄漏、文件打开/关闭),缓冲区溢出

然而现代的污点分析似乎不仅仅涉及数据流分析,大​​部分都会跟踪控制流条件;在几个漏洞检测场景中,受污染的输入也表示为符号值,并像符号执行一样传播。另一方面,由于底层约束求解器和执行/解释运行时的限制,符号执行引擎不能完全使用由不同路径条件分隔的符号值;因此他们无法达到预期的高 branchpath 覆盖率。

那么在一般情况下,我们是否可以说污点分析一种粗略的符号执行,或者说符号执行 一种精确的污点分析?

【问题讨论】:

  • 在 StackExchange 计算机科学或 StackExchange 逆向工程上发布这个问题可能值得一试。

标签: security runtime static-analysis dynamic-analysis symbolic-execution


【解决方案1】:

有趣的问题!这是我的 2 美分:符号执行使用一种污点分析来构造路径约束。符号执行还使用 SMT/SAT 求解器为变量和/或输入生成具体值,从而满足特定的路径约束。

由于污点分析不使用 SMT/SAT 求解器,我会说它不是一种符号执行。 也许有人可以说污点分析是符号执行的一部分

这只是一个意见。请随时挑战它。

【讨论】:

    【解决方案2】:

    我同意@Benny,这是一个非常有趣的问题。通过提出这类问题,您可能会学到很多东西,当您尝试回答这些问题时,您可能会学到更多。

    我想补充 Benny 的回答:

    为了实现污点跟踪和符号执行,必须定义语言的语义(例如二进制文件中的 x86 汇编)。例如,必须描述什么

    add eax, ebx
    

    '手段',即对国家的行为。污点跟踪语义的定义可以看作是符号执行语义的一种子集。污点跟踪语义被编码在符号执行语义中。共同的部分是

    • 如果 ebx 被污染,则 eax 被污染。
    • 如果ebx 是符号(i.o.w. 包含一个包含一个或多个符号变量的 SMT 公式),则 eax 是符号

    然而,符号执行的语义必须包含更多信息(例如,精确的算术运算): - eax 是“之前在 eax 中的内容”+“之前在 ebx 中的内容”

    请评论或纠正我!

    【讨论】:

      【解决方案3】:

      在我看来,要回答您的问题,我们必须回答以下问题:i) 符号执行是否有可能找到污点分析可以找到的所有执行路径,等等; ii) 污点分析是否有可能找到符号执行可以找到的所有执行路径,等等; iii) 它们是否具有相同的寻找相同执行路径的潜力? iv) 他们是否都可以计算对方无法计算的执行路径。

      在我看来,iv) 是正确的,这意味着一个不是子集。但是,我确实同意确实存在很大的重叠。

      我们可以消除选项 i) 和 iii),因为符号执行只找到可行的执行路径,而污点分析可能会发现不可行的执行路径,它不求助于约束求解。

      为了消除选项 ii),我认为(如果我错了,请纠正我)存在符号执行可以公开而污点分析不能公开的执行路径。例如:

      for(int i=0;i<3;i++) {
         if(someString.charAt(i)=='4')
             //do something
         else
             //do something else
      }
      

      在这种情况下,符号执行会公开所有八种可能的执行路径,而污点分析(如果我没记错的话)不会。

      【讨论】:

      • 如果我们将执行路径限制为仅可行的路径,污点找到的路径总是符号执行找到的路径的子集,对吧?
      【解决方案4】:

      我认为关键的区别在于执行是具体的还是象征性的---您是否对 上的污染传播(用于检查信息泄漏或控制流劫持)感兴趣单个具体执行,或者如果您想通过利用求解器的力量探索这种传播的其他可能性动态污点分析的优点在于其开销低,因此适合运行时监控。另一方面,(纯/动态)符号执行能够探索具体路径以外的路径,因此适合对您感兴趣的安全属性进行离线分析。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-24
        • 2014-04-01
        • 1970-01-01
        • 2014-05-24
        • 2018-09-16
        相关资源
        最近更新 更多