时间:2023-06-24|浏览:191
程序分析是一类用于检测程序中安全漏洞的技术。它有两种主要形式:动态和静态。动态程序分析通过执行程序来检测问题,而静态程序分析则无需运行程序本身就可以对源代码进行分析。然而,只有静态分析能够确保程序中不存在漏洞。虽然动态分析可以证明问题的存在,但不能证明漏洞不存在。
静态分析听起来可能有些神秘,因为它违反了一个定理,该定理声称程序的每一个非平凡性质都是不可判定的。但静态分析的可行性在于,虽然没有一个算法能够准确回答是否存在安全漏洞,但可以设计一个算法,在程序有安全漏洞时总是会回答「是」,在程序没有安全漏洞时算法有时可能也会回答「是」。虽然会有一些误报,但我们可以绕过不可判定性来检测安全漏洞。
静态分析的基本原理是将程序的状态集合进行近似。程序状态可以视为从变量到值的映射。虽然没有一个算法能够明确给出确定的程序状态集合,但可以设计一个算法以系统性的方式近似这个集合。只要近似足够准确,我们可以证明程序没有漏洞。然而,如果近似不够准确,可能会导致误报,即虚假的错误报告。
静态分析的目标是构造一个过近似,即足够准确而不会产生太多的误报。虽然存在一种不可靠的静态分析,可能会漏掉真正的程序错误,但有可能设计可靠的静态分析器来确保整个类别中不存在漏洞。
总而言之,程序分析是一种有效的技术,可以捕获各种程序中的安全漏洞,包括区块链应用程序。静态分析的过近似程序行为能确保程序中不存在漏洞。