Empire Hacking: 以太坊特别版第二场 - Trail of Bits博客
2019年1月18日 | 作者:Evan Sultanik
区块链, empire-hacking, 活动
12月12日,超过150名参与者参加了为期半天的Empire Hacking特别会议,学习智能合约安全中的陷阱及规避方法。感谢所有到场人员、优秀演讲者以及BuzzFeed为其办公室提供场地。
重温演讲内容
互联网上很难找到如此丰富的以太坊安全实践知识集合。对许多人而言,亲临现场更是难上加难。因此我们发布这些录制内容,希望对你有所帮助。
解剖不安全的智能合约编程语言
我们的Evan Sultanik首先介绍了区块链和智能合约,随后剖析了最流行的智能合约编程语言Solidity(幻灯片)。
核心要点:
- Solidity包含许多不安全特性,即使经验丰富的程序员也容易出错
- Solidity更新迅速,这既是优点也是缺点。开发者必须跟上新编译器版本,并注意合约可升级性的影响
- 编译器正在引入中间表示层,但早期迹象表明其存在与Solidity相同的设计决策问题
评估数字资产安全基础
Coinbase的Shamiq Islam讨论了数字资产及其生态系统的安全问题,这些对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确保即使攻击者 compromise 包含所有底层逻辑的合约(Impl),其托管/所有者合约也需被 compromise,因为它是确认铸造代币的唯一实体
使用Echidna和Manticore进行属性测试以确保智能合约安全
我们的JP Smith介绍了基于属性的测试概念及其在智能合约中的应用,包括选择良好属性和全面测试的策略(幻灯片)。
核心要点:
- 单元测试不足:一次测试一个案例,通常关注已知案例和失败模式。属性测试通过指定通用代码不变量覆盖未知案例
- Echidna是智能合约属性测试工具,速度极快,能发现违反代码属性的新交易序列
- 使用此类工具进行属性测试时,必定会发现用户通常在单元测试中遗漏的条件
简单即困难:让你出色的安全工具变得可用
Clovyr的Patrick Nielsen和Amber Baldet回顾了信息安全史上未能普及的优秀创意,帮助参与者思考如何让人们使用他们构建的产品(幻灯片)。
核心要点:
- 优秀创意或工具常因(缺乏)可用性而受阻,削弱其交付巨大现实价值的潜力。如果你希望有价值的工作真正有价值,就要重视"枯燥的东西"
- 大多数终端用户不更改设置或寻找默认值之外的内容,大多数开发者不想处理复杂配置。抓住每个机会实践简洁性,并为两者在后台做尽可能多的工作
- 普通人关心简单性、稳定性和成本。高级用户关心实现细节。开发者关心易用性、实用性和运维开销。企业关心技术风险和底线。设身处地为每个人着想;不要期望他们因为你的创新或纯粹而改变优先级
- 以身作则:如果我们(安全和"加密"社区)使用根本不安全或贪婪数据的工具,如何期望他人行为不同?
参加2月12日的下一场Empire Hacking。加入meetup进行RSVP。
如果你喜欢这篇文章,请分享: Twitter | LinkedIn | GitHub | Mastodon | Hacker News