智能合约漏洞检测工具汇总

Posted by 何嘉浩 on November 30, 2018

You may find interesting:


2018.1.18区块链论文讨论班通知


Nothing at stake problem of PoS

智能合约漏洞检测工具汇总

  1. ContractFuzzer

    ContractFuzzer Overview

    • 模糊检测:生成尽可能多数据投入到程序的运行过程中,从中找出程序容易被攻击的位置
    • ContractFuzzer使用模糊检测的方式,随机生成足够多的测试数据,并且把智能合约部署至离线的EVM(完成了插桩监控)中,分析执行过程中收集到的数据,判断是否存在漏洞。
    • 可以检测GasLess Send、Exception Disorder、Reentrancy、Timestamp Dependency、Block Number Dependency、Dangerous DelegateCall、Freezing Ether
    • GitHub
  2. Oyente

    Oyente Overview

    • 符号执行:使用符号值代替真实值执行
    • Oyente使用符号执行的方式,建立控制流图,根据控制流图对智能合约进行静态分析
    • Oyente是在字节码的程度上分析智能合约是否存在漏洞的
    • 可以检测Transaction-Ordering Dependen、Timestamp Dependence、Exception Disorder、Reentrancy
    • 这个工具一直有专门的机构维护至今,一般相关的论文都会使用这个工具来进行比较。
    • Github
  3. Zeus

    • 这个工具使用模型检测的方式来检查智能合约是否存在漏洞。
    • Zeus包括一个可以把solidity工具转换成LLVM bitcode的转换工具,并且自动生成断言,在LLVM层次上使用seahron model checker进行漏洞检测
    • 这个工具可以检测出的漏洞比上面介绍的工具丰富很多,包括Reentrancy、Unchecked Send、Failed Send、Integer Overflow/Underflow、Block Number Dependency、Transaction order Dependency,甚至是合约内部的一些简单的逻辑漏洞都可以检测出来。
    • 这个工具是准确的,实验结果false positive为0,以及作者给出相应的理论证明
    • 缺点:
      • 并没有提供完全的solidity转换至LLVM bitcode的方法,因为throw、selfdestruct在LLVM bitcode是不存在的。
      • Zeus并没有处理虚函数
      • Zeus并不会处理汇编代码嵌入至solidity这种混合表示形式
  4. MAIAN

    • 使用符号分析的方式寻找智能合约的trace vulnerability
    • trace vulnerability主要是指某些合约被非法的用户进行操控并且执行合约的selfdestruct、suicide操作,使得合约里面的以太币并不能被取出来。
    • Github