以太坊安全工具套件全解析:从静态分析到符号执行

本文详细介绍Trail of Bits开发的以太坊安全工具套件,包括Slither静态分析器、Echidna模糊测试工具、Manticore符号执行引擎等,帮助开发者构建安全的智能合约并进行逆向工程分析。

使用我们的以太坊安全工具套件

两年前,当我们开始承接区块链安全项目时,市场上还没有专门为此设计的工具。没有针对以太坊的静态分析器、模糊测试工具或逆向工程工具。

因此,我们投入了大量时间和专业知识来创建所需工具,调整现有工具,并在数十次审计中不断完善。我们已经填补了创建安全区块链软件过程中的所有空白。

今天,我们很高兴分享这些工具的大部分,以帮助保护以太坊的基础。

将以下内容视为路线图。如果您是区块链安全的新手,只需从顶部开始。您拥有所需的一切。而且,如果您勤奋,就不必担心遭受攻击。

开发工具

要构建安全的以太坊代码库:熟悉已知错误以避免,对每个新代码提交运行静态分析,模糊测试新功能,并使用符号执行验证最终产品。

1. Not So Smart Contracts

此存储库包含常见以太坊智能合约漏洞的示例,包括真实代码。查看此列表以确保您熟悉可能的问题。

该存储库为每类漏洞包含一个子目录,例如整数溢出、重入和未受保护的函数。每个子目录包含其自述文件和易受攻击合约的真实示例。在适当的情况下,还提供了利用这些漏洞的合约。

我们将这些示例用作我们以太坊漏洞查找工具的测试用例,如下所列。此存储库中的问题可用于衡量您开发或使用的其他工具的有效性。如果您是智能合约开发人员,在编写自己的合约之前,请仔细检查此存储库中的易受攻击代码,以充分理解每个问题。

2. Slither

Slither 结合了一组 Solidity 静态分析,用于检测常见错误,如重入、构造函数、方法访问等中的错误。在开发过程中,对每个新代码提交运行 Slither。我们不断将审计中发现的新独特错误类型纳入其中。

运行 Slither 很简单:

1
$ slither.py contract.sol

Slither 将输出它在合约中发现的漏洞。

3. Echidna

Echidna 将下一代智能模糊测试应用于 EVM 字节码。在完成新功能后,为您的代码编写 Echidna 测试。它提供简单、高覆盖率的单元测试,以发现安全错误。在您的应用程序使用 Echidna 达到 80% 以上的覆盖率之前,不要认为它已完成。

使用 Echidna 很简单:

  • 将一些 Echidna 测试添加到您的现有代码中(如此示例),
  • 运行 ./echidna-test contract.sol,以及
  • 查看您的不变量是否成立。

如果您想编写更高级的分析(例如,抽象状态机测试),我们也支持。

4. Manticore

Manticore 使用符号执行来模拟针对 EVM 字节码的复杂多合约和多交易攻击。一旦您的应用程序功能正常,编写 Manticore 测试以发现它可以进入的隐藏、意外或危险状态。Manticore 枚举合约的执行状态并验证关键功能。

如果您的合约不需要初始化参数,那么您可以使用命令行轻松探索智能合约作为攻击者或合约所有者的所有可能执行:

1
manticore contract.sol --contract ContractName --txaccount [attacker|owner]

Manticore 将生成所有可达状态(包括断言失败和回滚)及其导致输入的列表。它还会自动标记某些类型的问题,如整数溢出和未初始化内存的使用。

使用 Manticore API 审查更高级的合约很简单:

  • 使用适当的值初始化您的合约
  • 定义符号交易以探索潜在状态
  • 审查结果交易列表以查找不良状态

逆向工具

一旦您开发了智能合约,或者您想查看其他人的代码,您将希望使用我们的逆向工具。将二进制合约加载到 Ethersplay 或 IDA-EVM 中。对于指令集参考,请使用我们的 EVM 操作码数据库。如果您想进行更复杂的分析,请使用 Rattle。

1. EVM 操作码数据库

无论您是在 Remix 调试器中单步执行代码,还是逆向工程二进制合约,您都可能希望查找 EVM 指令的详细信息。此参考包含 EVM 操作码及其实现细节的完整简明列表。我们认为,与滚动浏览黄皮书、阅读 Go/Rust 源代码或查看 StackOverflow 文章中的评论相比,这可以节省大量时间。

2. Ethersplay

Ethersplay 是一个图形化 EVM 反汇编器,能够进行方法恢复、动态跳转计算、源代码匹配和二进制差异比较。使用 Ethersplay 调查和调试已编译的合约或已部署到区块链的合约。

Ethersplay 以 ASCII 十六进制编码或原始二进制格式接收 EVM 字节码作为输入。例如分别是 test.evm 和 test.bytecode。在 Binary Ninja 中打开 test.evm 文件,它将自动分析它,识别函数,并生成控制流图。

Ethersplay 包括两个 Binary Ninja 插件来帮助。“EVM 源代码”将合约源代码与 EVM 字节码相关联。“EVM Manticore 高亮”将 Manticore 与 Ethersplay 集成,以图形方式高亮显示来自 Manticore 输出的代码覆盖信息。

3. IDA-EVM

IDA-EVM 是 IDA Pro 的图形化 EVM 反汇编器,能够进行函数恢复、动态跳转计算、应用库签名和使用 BinDiff 进行二进制差异比较。

IDA-EVM 允许您在没有源代码的情况下分析和逆向工程智能合约。要使用它,请按照自述文件中的安装说明,然后在 IDA 中打开 .evm 或 .bytecode 文件。

4. Rattle

Rattle 是一个 EVM 静态分析器,直接分析 EVM 字节码以查找漏洞。它通过反汇编和恢复 EVM 控制流图并将操作提升到称为 EVM::SSA 的单静态赋值(SSA)形式来实现这一点。EVM::SSA 优化了所有推送、弹出、复制和交换,通常将指令数减少 75%。Rattle 最终还将支持存储、内存和参数恢复,以及类似于 Slither 中实现的静态安全检查。

要使用 Rattle,请提供来自 solc 或直接从区块链提取的运行时字节码:

1
$ ./rattle -i path/to/input.evm

与我们合作!

请使用这些工具,在各自的存储库中提交问题,并参与它们的功能和错误赏金。在 Empire Hacking Slack 的 #ethereum 频道中告诉我们它们如何可以更好。

既然我们已经介绍了每个工具,我们计划撰写后续文章,深入探讨它们的细节。

编辑于 2018 年 8 月 10 日:自这篇博客文章撰写以来,我们已经发布了更多项目。以下是简短概述:

  • Awesome Ethereum Security – 精选的以太坊安全参考列表
  • Blockchain Security Contacts – 区块链项目安全联系人目录
  • PyEVMAsm – 具有 CLI 和 Python API 的 EVM 汇编器/反汇编器
  • Etheno – JSON RPC 多路复用器、分析工具包装器和测试集成工具。

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计