Empire Hacking: 以太坊特别版 2
2019年1月18日 | Evan Sultanik
2018年12月12日,超过150名参与者参加了一场特别的半日Empire Hacking活动,学习智能合约安全中的陷阱以及如何避免它们。感谢所有到场的人员,感谢我们出色的演讲者,以及BuzzFeed在其办公室主办了这次聚会。
再次观看演讲
在互联网上很难找到如此丰富的关于保护以太坊的实用知识集合。对许多人来说,参加活动甚至更加困难。这就是我们发布这些录音的原因。希望您觉得它们有用。
剖析不安全的智能合约编程语言
我们的Evan Sultanik介绍了区块链和智能合约,随后剖析了Solidity:最流行的智能合约编程语言(幻灯片)。
要点
- Solidity包含许多不安全特性,即使经验丰富、能力强的程序员也容易因此犯错。
- Solidity变化迅速,这既是坏事也是好事。开发人员必须跟上新编译器版本的步伐,并注意合约可升级性的影响。
- 正在努力为编译器引入中间表示。早期迹象表明,它遭受了许多困扰Solidity的相同设计决策。
评估数字资产安全基础
Coinbase的Shamiq Islam讨论了数字资产及其生态系统安全中的问题。这些问题对像Coinbase这样的加密货币交易所构成了独特而有趣的挑战。
要点
- 供应链不可信。如何验证资产发行者的节点、智能合约或钱包代码是真实的?
- 安全通信渠道不成熟。如果您发现一个漏洞,如何知道在哪里报告?相反,如果发现漏洞,像Coinbase这样的交易所如何得知?为每个资产监控Telegram聊天无法扩展。
- [暂时使用我们的区块链安全联系人目录。]
- 如何知道智能合约所有者是恶意的?代码本身可能是安全的,但所有者的密钥是单点故障。如果被攻破,在大多数情况下可以任意修改资产的记账。
合约升级风险和建议
我们的Josselin Feist比较了几种不同的智能合约升级策略。本次演讲涵盖了您需要了解的一切,以决定如何以及是否在合约中实现可升级性(幻灯片)。
要点
- 可升级性对开发人员有用,因为它允许事后添加功能和修复错误。然而,它也增加了复杂性并提高了部署错误的可能性。
- 使用适合您需求的最简单升级系统。与数据分离相比,delegatecall代理模式非常脆弱,并增加了更多复杂性。
- 考虑合约迁移而不是这些可升级性模式。迁移更复杂,但它允许从更多场景中恢复。
如何构建企业级主网以太坊客户端
PegaSys的S. Matthew English强调了实现新以太坊客户端的考验和磨难。演讲中的许多见解同样适用于任何大型软件工程项目。
要点
- 构建以太坊客户端很难。协议本身文档不足,使用非标准计算机科学概念,并且在现有客户端演进的同时不断演变。
- 团队沟通、架构设计和渐进式进度验证是PegaSys成功开发的重要因素。
- Pantheon现在与以太坊主网同步,已经开源,并可供下载。
链上隐私的失败
康奈尔科技和Zcash基金会的Ian Miers概述了加密货币中的隐私问题。加密货币可能不像您想象的那么私密。
要点
- 加密货币的隐私从一开始就被误解。重要的是我们现在要弄清楚,以免为时已晚。
- 基于诱饵的方法在孤立情况下可能看起来成功,但它们所做的隐私声明在现实场景中会崩溃。
- 更强的方法已部署且高效,但它们仍然需要重要的工作来改善最终用户的可用性。
安全微支付协议
Livepeer的Yondon Fu强调了一些微支付方法特有的安全要求。他分享了Livepeer如何安全地扩展微支付。
要点
- 微支付对各种应用有用,特别是那些可能持续或交易量大的应用。然而,高部署和交易成本阻碍了广泛采用。
- 对大多数微支付方法共同的客户端安全考虑包括热签名密钥的安全性以及即使gas价格波动时额外必要交易的及时确认。
- 概率微支付的重要考虑包括安全随机数生成以及防止重放攻击和双花。
设计Gemini美元:受监管、可升级、透明的稳定币
Gemini Trust的Brandon Arvanaghi解释了受监管、可升级和透明的Gemini美元的设计决策,并与其他实现进行了比较和对比。
要点
- 智能合约中的可升级性提供了应对非法活动和漏洞的手段,但可能降低透明度并扩大攻击面。
- 合约模块化、所有权分配和“时间锁定”升级有助于缓解这些问题。
- 利用每一个机会提供多层次缓解措施。Gemini确保即使攻击者攻破了包含所有底层逻辑(Impl)的合约,其托管人/所有者合约也需要被攻破,因为它是确认打印代币的唯一实体。
使用Echidna和Manticore进行属性测试以保护智能合约
我们的JP Smith介绍了基于属性的测试概念及其在智能合约中的应用。这包括选择良好属性并彻底测试它们的策略(幻灯片)。
要点
- 单元测试并不总是足够:它一次测试一个单独案例,通常专注于已知案例和失败模式。属性测试旨在通过指定通用代码不变量来覆盖未知案例。
- Echidna是一个用于属性测试智能合约的工具,它非常快,可以发现违反代码属性的新交易序列。
- 在使用此类工具进行基于属性的测试时,您肯定会遇到一些用户在其单独单元测试中通常可能遗漏的条件。
简单很难:让您出色的安全工具可用
Clovyr的Patrick Nielsen和Amber Baldet回顾了信息安全史上那些没有完全流行起来的伟大想法,以帮助与会者思考如何让人们使用他们构建的东西(幻灯片)。
要点
- 一个伟大的想法或工具常常因其(缺乏)可用性而脱轨,削弱了其提供巨大现实世界价值的潜力。如果您希望您有价值的工作值得,就要在“无聊的东西”上下功夫。
- 大多数最终用户不会更改设置或寻找默认设置之外的任何东西,大多数开发人员不想弄乱复杂的配置。抓住每一个机会实践简单性,并在后台为两者做尽可能多的事情。
- 普通人关心简单性、稳定性和成本。高级用户关心实现细节。开发人员关心易用性、实用性和运维开销。企业关心技术风险和底线。设身处地为每个人着想;不要期望他们仅仅因为您做出了创新或纯粹的东西而改变优先级。
- 实践您所宣扬的;如果我们(在安全和“加密”社区中)使用根本上不安全或渴望数据的工具,我们如何期望其他人行为不同?
参加2月12日的下一次Empire Hacking。加入聚会进行RSVP。
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News