深入探索以太坊智能合约安全与开发实践

本文详细记录了Empire Hacking以太坊特别会议的内容,涵盖Solidity语言的安全隐患、数字资产安全挑战、合约升级策略、企业级以太坊客户端开发、链上隐私问题、微支付协议安全以及智能合约属性测试等关键技术话题。

Empire Hacking:以太坊特别版 2 - The 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这样的加密货币交易所提出了独特而有趣的挑战。

要点

  • 供应链不可信。如何验证资产发行者的节点、智能合约或钱包代码是真实的?
  • 安全通信渠道不成熟。如果您发现一个错误,如何知道在哪里报告?反之,像Coinbase这样的交易所如何知道是否发现了错误?为每个资产监控Telegram聊天无法扩展。
  • [暂时使用我们的区块链安全联系人目录。]
  • 我们如何知道智能合约所有者是恶意的?代码本身可能是安全的,但所有者的密钥是单点故障。如果被泄露,在大多数情况下,它可以任意修改资产的账户。

合约升级风险和建议

我们自己的Josselin Feist比较了几种不同的智能合约升级策略。本次演讲涵盖了您需要知道的一切,以决定如何以及是否在合约中实现可升级性(幻灯片)。

要点

  • 可升级性对开发者有用,因为它允许事后添加功能和修复错误。然而,它也增加了复杂性,并增加了部署错误的可能性。
  • 使用适合您需求的最简单的升级系统。与数据分离相比,delegatecall代理模式非常脆弱,并增加了更多复杂性。
  • 考虑合约迁移,而不是这些可升级性模式。迁移更复杂,但它允许从更多场景中恢复。

如何构建企业级主网以太坊客户端

PegaSys的S. Matthew English强调了实现新以太坊客户端的考验和磨难。演讲中的许多见解同样适用于任何大型软件工程项目。

要点

  • 构建以太坊客户端很难。协议本身文档不足,使用非标准的计算机科学概念,并且在现有客户端演进的同时不断演变。
  • 团队沟通、架构设计和增量进度验证是PegaSys成功开发的重要因素。
  • Pantheon现在正在与以太坊主网同步,已经开源,并可供下载。

链上隐私的失败

Cornell Tech和Zcash基金会的Ian Miers概述了加密货币中的隐私问题。加密货币可能不像您想象的那么私密。

要点

  • 加密货币的隐私从一开始就被误解了。重要的是我们现在要弄清楚,以免为时已晚。
  • 基于诱饵的方法在孤立情况下可能看起来成功,但它们在现实场景中的隐私声明会崩溃。
  • 更强的方法已经部署并且高效,但它们仍然需要重要的工作来改善最终用户的可用性。

安全微支付协议

Livepeer的Yondon Fu强调了一些微支付方法独有的安全要求。他分享了Livepeer如何安全地扩展微支付。

要点

  • 微支付对各种应用有用,特别是那些可能持续或大量交易的应用。然而,高部署和交易成本阻碍了广泛采用。
  • 大多数微支付方法共有的客户端安全考虑包括热签名密钥的安全性以及即使燃气价格波动时额外必要交易的及时交易确认。
  • 概率微支付的重要考虑包括安全随机数生成以及防止重放攻击和双花。

设计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

页面内容
再次观看演示
剖析不安全的智能合约编程语言
评估数字资产安全基础
合约升级风险和建议
如何构建企业级主网以太坊客户端
链上隐私的失败
安全微支付协议
设计Gemini美元:受监管、可升级、透明的稳定币
使用Echidna和Manticore进行属性测试以保护智能合约
简单很难:让您的出色安全工具可用

近期文章
我们构建了MCP一直需要的安全层
利用废弃硬件中的零日漏洞
Inside EthCC[8]:成为智能合约审计员
使用Vendetect大规模检测代码复制
构建安全消息传递很难:对Bitchat安全辩论的细致看法

© 2025 Trail of Bits。
使用Hugo和Mainroad主题生成。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计