我最近读了一篇题为"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(源)信息流到对象Y(水槽),每当存放在X的信息传送到对象收率所以主要关心的是什么对象可以被传染性影响。虽然符号执行将一些输入视为符号值,并且尝试以用符号值表示其他变量;从而它回答什么条件符号输入会影响后续的程序。
我可以看到,在二进制级别,秽语分析经常被提到带有的返回地址覆盖的;而符号执行能够处理多种类型的脆弱的问题,如整数溢出,运行时断言错误,资源泄漏(例如,内存泄漏,文件打开/关闭),缓冲区溢出。
但是似乎现代污点分析并不仅仅涉及数据流分析,大多会跟踪控制流条件;并且在多个漏洞检测场景中,受污染的输入也被表示为符号值,并按照符号执行的方式进行传播。另一方面,由于底层约束求解器和运行时的执行/解释的限制,符号执行引擎不能完全使用由不同路径条件分隔的符号值;从而无法实现预期的覆盖率高的分支或路径覆盖。
所以在一般情况下,我们可以说是污点分析是一种粗糙的符号执行,或象征性的执行是一种精确的污点分析的?
在StackExchange Computer Science或StackExchange逆向工程中发布此问题值得一试。 – stackoverflowwww 2016-02-26 18:00:20