以太坊安全工具套件大合集
两年前,在我们开始讨论区块链安全的时候,当时我们手头上几乎没有任何可以直接使用的工具。我们既没有静态分析工具和模糊测试工具,也没有任何针对以太坊的逆向分析工具,我们什么都没有。
因此,我们投入了大量的时间和精力并利用专业知识创造出了我们所需要的东西,而且我们还进行了无数次测试以完善我们的成果。今天,我们很高兴可以和大家分享这些工具,希望它们能够帮助提升以太坊的安全水平。
开发工具
为了构建安全的以太坊代码库,我们首先要熟悉一些常见的错误实践,并避免再犯这些错误。其次,我们还要对新添加的代码进行各种静态分析,对新添加的功能进行模糊测试,并通过符号执行来验证最终产品的有效性及安全性。
1. Not So Smart Contracts
这个名叫“NotSo Smart Contracts”的代码库中包含了很多常见的以太坊智能合约漏洞,其中包含了真实的代码。查看这个代码库之后,你将会了解并熟悉一些有可能会出现的安全问题。
这个代码库为每一种类型的漏洞都提供了一个子目录进行存储,例如整形溢出、可重入性(注:可重入与递归概念相似)以及 未保护的功能等等。每一个子目录中都包含了相关的readme文件以及真实场景下的合约漏洞样本,而且有些还提供了漏洞利用代码。
演示视频:https://asciinema.org/a/6W3GSHeisBrohMRqrhbjqg08v
我们可以利用这些样本和测试用例来测试我们所开发的以太坊漏洞挖掘工具,并评估工具的有效性。需要注意的是,大家一定要在充分了解漏洞细节之后再进行测试,否则可能会引起一些严重后果。
2. Slither
Slither包含了一整套针对Solidity(以太坊智能合约脚本语言)的专用静态分析工具,它可以用来检测可重用性、构造函数和方法访问等编码中的常见错误。Slither目前只提供给那些跟我们有合作的公司使用,但如果你感兴趣的话,你也可以通过API来监听或访问相关功能【传送门】。
演示视频:https://asciinema.org/a/Guu4k6vxgF9C17z3rwhbECCK0
Slither的运行非常简单:
$ slither.py contract.sol
运行之后,Slither将会把所有寻找到的漏洞信息输出给你。
3. Echidna
Echidna采用了下一代智能模糊测试技术来对EVM字节码进行检测。它提供了简单且覆盖率高(80%以上)的单元测试用例,你可以在完成了某项功能的开发之后,使用Echidna测试你的代码是否存在安全漏洞。
演示视频:https://asciinema.org/a/zfeDxWagBIadulMU5mlqYdBGF
Echidna的使用也非常简单:
(1) 向你的代码中添加Echidna测试用力(参考样例);
(2) 运行命令“./echidna-test contract.sol”;
(3) 查看输出信息;
如果你还想进行更高级的安全分析(比如说抽象状态机测试),Echidna同样可以做到。
4. Manticore
Manticore使用了符号执行来模拟针对EVM字节码的复杂的多合约以及多重交易攻击。当你的应用程序开发完成之后,你可以使用Manticore来检测你程序中的危险状态,Manticore可以枚举出合约的执行状态,并验证关键功能的安全性。
演示视频:https://asciinema.org/a/MCIMEImS8wIeHHvWfxiNKMc67
如果你的合约不需要初始化参数,那你就可以使用命令行工具来查看智能合约的所有执行路径了:
manticore contract.sol --contract ContractName --txaccount [attacker|owner]
Manticore还可以生成一份包含了所有可到达状态的列表,以及触发这些路径的输出参数。而且它还可以标记处安全问题的类型,比如说整形溢出或者未初始化内存等等。
你还可以使用Manticore API来检查更加高级的合约:
(1) 使用正确值初始化你的合约;
(2) 定义交易信息来查看潜在的状态;
(3) 检查输出列表以获取状态信息
逆向分析工具
智能合约开发完成之后,或者说你想分析其他人的代码,你可以使用逆向工具来实现。
1. EVM操作码数据库
当你在使用Remix调试器检查代码时,或者对合约二进制代码进行逆向分析时,你可能需要查看EVM指令的细节信息。这里提供了一份包含了完整EVM操作码的列表,以及相关的实现细节。我们觉得这样可以帮大家节省很多时间,感兴趣的朋友可以点击【这里】获取。
2. Ethersplay
Ethersplay是一款拥有图形界面的EVM反汇编工具,它可以进行方法恢复、动态跳转计算、源代码匹配和二进制代码比较等等。用户可以使用Ethersplay来分析和调试已编译合约或已部署在区块链中的合约。
Ethersplay的输入数据为EVM字节码(ASCII十六进制编码或原始二进制格式),这里需要选择相应的test.evm和test.bytecode测试用例。在Binary Ninja(Ethersplay插件)中打开test.evm文件之后,它会自动对文件进行分析,并识别代码中的函数,然后生成一份控制流程图。
3. IDA-EVM
IDA-EVM是一款针对IDA Pro的图形化EVM反汇编工具,可以进行函数恢复、动态跳转计算、代码签名和二进制代码比对等等。IDA-EVM允许我们在没有源代码的情况下对智能合约进行逆向工程分析。工具的使用也很简单,按照readme的安装步骤进行安装,然后在IDA中打开一份.evm或.bytecode文件即可。
4. Rattle
Rattle是一款EVM静态分析工具,它可以直接搜索EVM字节码中的安全漏洞。Rattle目前只提供给那些跟我们有合作的公司使用,但如果你感兴趣的话,你也可以通过API来监听或访问相关功能【传送门】。
演示视频:https://asciinema.org/a/py5RpGwdLqOZtsfMt864xO4ZT
后话
大家在使用过这些工具之后,可以到相应的代码库中提交问题或参与功能的更新。除此之外,大家也可以去Empire Hacking Slack的#ethereum专区进行讨论。
* 参考来源:trailofbits,FB小编Alpha_h4ck编译
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
评论