使用我们的以太坊安全工具套件
两年前,当我们开始承接区块链安全项目时,还没有专门为此设计的工具。没有针对以太坊的静态分析器、模糊测试工具或逆向工程工具。
因此,我们投入了大量时间和专业知识来创建所需工具,调整现有工具,并在数十次审计中不断完善工作。我们已经填补了创建安全区块链软件过程中的所有空白。
今天,我们很高兴分享这些工具的大部分,以帮助保护以太坊的基础设施。
将以下内容视为路线图。如果您是区块链安全的新手,只需从顶部开始。您拥有所需的一切。而且,如果您勤奋,就不必担心遭受攻击。
开发工具
要构建安全的以太坊代码库:熟悉已知错误以避免,对每个新代码提交运行静态分析,模糊测试新功能,并使用符号执行验证最终产品。
1. Not So Smart Contracts
此存储库包含常见以太坊智能合约漏洞的示例,包括真实代码。查看此列表以确保您熟悉可能的问题。
我们将这些示例用作我们以太坊漏洞查找工具的测试用例,如下所列。此存储库中的问题可用于衡量您开发或使用的其他工具的有效性。如果您是智能合约开发者,在编写自己的合约之前,请仔细检查此存储库中的易受攻击代码,以充分理解每个问题。
2. Slither
Slither结合了一组Solidity静态分析,检测常见错误,如重入、构造函数、方法访问等错误。在开发过程中,对每个新代码提交运行Slither。我们不断将审计中发现的新独特错误类型纳入其中。
运行Slither很简单:
|
|
Slither将输出它在合约中发现的漏洞。
3. Echidna
Echidna将下一代智能模糊测试应用于EVM字节码。在完成新功能后,为您的代码编写Echidna测试。它提供简单、高覆盖率的单元测试,以发现安全错误。在您的应用程序达到80%以上的Echidna覆盖率之前,不要认为它已完成。
使用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进行二进制差异比较。
4. Rattle
Rattle是一个EVM静态分析器,直接分析EVM字节码以查找漏洞。它通过反汇编和恢复EVM控制流图,并将操作提升到称为EVM::SSA的单静态分配(SSA)形式来实现这一点。EVM::SSA优化了所有push、pop、dup和swap操作,通常将指令数减少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