security - 符号执行和污点分析之间有什么差距?

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

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

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

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

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

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

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

最佳答案

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

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

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

关于security - 符号执行和污点分析之间有什么差距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28811770/

相关文章:

java - 确定 Java 泛型的运行时类型

c - 跟踪未初始化的静态变量

configuration-files - Cppcheck GUI : Excluding a file or folder from checking

java - 如何识别返回的对象是否是在方法执行期间创建的 - Java

php - 从手机到网站的客户端/服务器安全

ruby-on-rails - Rails 应用程序被利用,如何找到哪个利用?

asp.net - Win7 上的 ASP.Net 中的 EventLog 权限失败

java - 运行时抛出异常和编译时抛出异常的区别

security - 在 OAuth(1.0a 和 2.0)和 Http Basic Auth

JavaCC:我希望从动态生成的 jj 文件生成 java 类并在运行时编译它们