我最近讀了一篇題爲"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