现在的审计方法有人工的攻防审计以及自动化的审计。在海量的智能合约中,当然是要降低人工审计的部分,并增加更多的部分通过自动化审计来进行。
当前主流的自动化审计有三大类:
- 特征代码匹配。
- 基于形式化验证。
- 基于符号执行和符号抽象。
特征代码匹配
大家从名字上来看应该就能猜到,其实它就是对恶意代码进行一些提取抽象,正如像我们之前对常规软件系统做的代码静态检测。我们会将恶意代码抽样成一种语义匹配,然后再去寻找与它匹配的静态源代码。这里所讲的静态,正是因为代码并不需要被运行。
这种审计的方法的优点是显而易见的,比如说速度很快,因为它就是对原码进行一个字符串的匹配。第二是它能够迅速的响应新的漏洞,因为这种审计方法大部分是以插件形式开发,比如出现了一个新的漏洞,我们就可以快速提交一些新的匹配模式。
它的缺点就是需要代码开源。听起来似乎与智能合约很吻合,因为区块链是推荐开源的。但事实上,有人做过统计,目前智能合约的代码的开源率仅仅只占48.62%,其余的只是暴露它的一个OPCODE。如果让安全人员去分析这些OPCODE,去逆向OPCODE,将是巨大的挑战,这肯定将会花了大力气,所能cover的范围也极为有限。
它的另一个缺点是漏报率高。因为智能合约的静态审计和传统的静态代码并不完全一致:传统的静态审计方法,比如说APP检测,会调用成熟库里面的,确定稳定的一些函数,进而对它进行审计;但智能合约里面它的一些函数、它一些特征等等,相较传统的代码库存在更大的变化性,所以说相较传统的代码,采取此方法的漏报率还会更高。