使用我们的以太坊安全工具套件
两年前,当我们开始承接区块链安全业务时,市场上还没有专门为此设计的工具。没有针对以太坊的静态分析器、模糊测试工具或逆向工程工具。
因此,我们投入了大量时间和专业知识来创建所需工具,调整现有工具,并在数十次审计中不断完善工作。我们已经填补了创建安全区块链软件过程中的所有空白。
今天,我们很高兴分享这些工具中的大部分,以帮助保护以太坊的基础设施。
开发工具
要构建安全的以太坊代码库:熟悉已知错误以避免,对每个新提交的代码运行静态分析,模糊测试新功能,并使用符号执行验证最终产品。
1. Not So Smart Contracts
此存储库包含常见以太坊智能合约漏洞的示例,包括真实代码。查看此列表以确保您熟悉可能的问题。
该存储库为每类漏洞包含一个子目录,例如整数溢出、重入和未受保护的函数。每个子目录包含其自述文件和易受攻击合约的真实示例。在适当的情况下,还提供了利用这些漏洞的合约。
我们将这些示例用作我们以太坊漏洞查找工具的测试用例。此存储库中的问题可用于衡量您开发或使用的其他工具的有效性。如果您是智能合约开发人员,在编写自己的合约之前,请仔细检查此存储库中的易受攻击代码,以充分理解每个问题。
2. Slither
Slither结合了一组针对Solidity的静态分析,可检测常见错误,如重入、构造函数、方法访问等方面的错误。在开发过程中,对每个新提交的代码运行Slither。我们不断将审计中发现的新独特错误类型纳入其中。
运行Slither很简单:
|
|
Slither将输出它在合约中发现的漏洞。
3. Echidna
Echidna将下一代智能模糊测试应用于EVM字节码。在完成新功能后,为您的代码编写Echidna测试。它提供简单、高覆盖率的单元测试,以发现安全错误。在您的应用程序使用Echidna达到80%以上的覆盖率之前,不要认为它已完成。
使用Echidna很简单:
- 向现有代码添加一些Echidna测试(如此示例),
- 运行
./echidna-test contract.sol
,以及 - 查看您的不变量是否成立。
如果您想编写更高级的分析(例如,抽象状态机测试),我们也支持。
4. Manticore
Manticore使用符号执行来模拟针对EVM字节码的复杂多合约和多交易攻击。一旦您的应用程序功能正常,编写Manticore测试以发现它可以进入的隐藏、意外或危险状态。Manticore枚举合约的执行状态并验证关键功能。
如果您的合约不需要初始化参数,那么您可以使用命令行轻松探索智能合约作为攻击者或合约所有者的所有可能执行:
|
|
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 Highlight”将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或直接从区块链提取的运行时字节码:
|
|
与我们合作!
请使用这些工具,在各自的存储库中提交问题,并参与其功能和错误赏金。在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