首页 > 安全小课堂第121期URL注入攻击 > 安全小课堂第121期URL注入攻击,TRON 智能合约安全小课堂 | 第二期:关于波场智能合约 fallback 函数的特性

安全小课堂第121期URL注入攻击,TRON 智能合约安全小课堂 | 第二期:关于波场智能合约 fallback 函数的特性

互联网 2021-09-24 07:07:06 Tags:安全小课堂第121期URL注入攻击

信息安全技术文章汇总 | 20181207 · Victor网易云课堂 悄悄变强大TRON 智能合约安全小课堂 | 第二期:关于波场智能合约 fallback 17173网络游戏门户站百度一下,你就知道CSRF攻击的原理及防范科普91Ri.org网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全 安全卫士360社区

波场 TRON| 智能合约安全小课堂

随着波场 DApp 生态的不断发展,为了提高智能合约的防攻击能力,波场面向社区,征集 DApp 的开源代码,结合其合约源码,以实战的方式,讲解波场智能合约开发时,需要注意的一些安全细节。

欢迎来到

TRON 智能合约安全小课堂

波场面向社区

征集 DApp 的开源代码

结合其合约源码,以实战的方式

讲解波场智能合约开发时,需要注意的一些安全细节

(本期特别鸣谢 TRON-Rich 团队)

本期小课堂结合 TRON-Rich 团队的 RichBank 合约,谈一谈波场智能合约 fallback 函数的特性以及如何有效避免重入攻击。同时,欢迎大家关注 TRON 官方 twitter,踊跃投稿合约代码。

老规矩,开讲之前,先通过 https://troneye.com (以下简称 TRON-Eye)验证合约源码的真实性。

TRON-Eye 是来自社区的波场合约验证平台,上一期小课堂对 TRON-Eye 验证平台进行了详细的介绍。下图所示的即为 TRON-Rich 团队的

TEoSMNi7WvVHXe2NxxDw2AeLhiwLJXxQYL RichBank 合约的源码。

图 1 TRON-Eye 上的 RichBank 合约

RichBank 合约是个资金盘合约,大部分逻辑和上一期介绍的 UsdtBank 类似。这里着重关注的有 2 个细节。

Fallback 函数

图 2 RichBank 的 fallback 函数

图 2 所示即为 RichBank 的 fallback 函数,在 fallback 函数中它记录了来自某个地址的这笔转账,或者完成该地址的取款请求。当通过 grpc 接口 调用合约一个不存在的函数;或在 solidity 中直接调用不存在的函数时,亦或直接在 Solidity 中给该地址 transfer() 或者 send() TRX 时,都会执行目标合约的 fallback 函数。这种特性被很多开发者用来记录用户转账。

但是,这种方式有两个需要关注的地方。

第一个,fallback 函数的 energy 问题。由于 transfer 和 send 函数,只能附带 2300 的 Energy,而对一个 32 byte 数据的读取(SSLOAD 指令)、修改(SSTORE 指令)和创建(SSTORE 指令)分别用到了 400,5000 和 20000 Energy。所以,2300 的 Energy 不足以创建和修改数据。也就是说,如果一个能量消耗超过 2300 的 fallback 函数,会导致在 solidity 中对该地址调用 transfer 和 send 必然失败。

第二个,波场相对以太坊,还提供了“免费转账”的普通转账交易,GRPC 中的 transfercontract 类型的交易。该交易只消耗带宽,不消耗 Energy。由于该交易不消耗 Energy,所以不会触发合约的 fallback 函数。(也就是说,直接通过 tronscan 对该合约地址的普通 trx 转账,并不会触发 fallback 函数。)

上述是所有依赖 fallback 函数记录用户所有转账的合约,必须知晓的 2 个问题。他们决定了,所有需要记录的转账交易,都必须采用 triggersmartcontract 方式调用合约来给合约发送 trx。其中第 1 个是 Solidity 解决重入攻击的基础,在可见的将来,都不会改变;第 2 个是波场“免费转账”特性,我们也正在 TIP37 (链接:https://github.com/tronprotocol/TIPs/issues/37)讨论是否要停止支持对合约地址进行 transfercontract 类型的交易,欢迎踊跃参与讨论。

如何有效避免重入攻击

在 Solidity 中,调用其他地址的函数或者给合约地址转账,都会把自己的地址作为被调合约的 msg.sender 传递过去。此时,如果传递的 energy 足够的话,就可能会被对方就行重入攻击。

防止重入攻击,最简单粗暴的方式就是,在 solidity 中禁止对合约地址进行操作。这个可以通过上一期讲到的 require(msg.sender == tx.origin) 和 extcodesize() > 0,来基本上实现。RichBank 采用了 msg.sender == tx.origin ,但是在两个位置,留下了空隙。

分别如下:

function grant(address addr, uint256_planId) public whenNotPaused isHuman payable {

uint256 grantorUid = address2UID[msg.sender];bool isAutoAddReferrer = true;uint256 referrerCode = 0;if (grantorUid != 0 && isAutoAddReferrer) {referrerCode = grantorUid;}if (_invest(addr,_planId,referrerCode,msg.value)) {emit onGrant(msg.sender, addr, msg.value);}

}

这段代码,值判断了调用者是否为合约,并没有判断传入的 addr 参数是否为合约。同时,对于 fallback 函数,这个问题更加严重,它甚至没有判断调用者是否为合约。这两处都是该合约后续可以完善的地方。

function() external payable {

if (msg.value == 0) {withdraw();} else {invest(0, 0); //default to buy plan 0, no referrer}

}

但是,允许其他合约参与投注,并不一定会构成重入攻击。前面说过,在 Solidity 中对合约地址调用 transfer/sender,只会传递 2300 的 Energy,这不足以发起一次重入攻击。所以要一定避免通过 callvalue 的方式,调用未知的合约地址。因为 callvalue 可以传入远大于 2300 的 Energy。

本次小课堂先到这里

感谢 TRON-Eye 提供合约验证工具

感谢 TRONRich 团队提供的 RichBank 合约

通过我们的检视

TRON-Rich 团队的 RichBank 合约没有发现明显安全问题

另外

TRON 智能合约安全小课堂将持续征集后续课堂的范例源码

请大家关注 TRON 的官方 twitter 并踊跃投稿

Tips:有关更多信息可直接访问 TRONRich 的官网

https://tronrich.me 以及 TRON-Eye 的官网

https://troneye.com

- END-

** **

波场 TRON 创始人及团队介绍

(向上滑动查看内容)

由马云湖畔大学首期学员孙宇晨建立的波场 TRON 以推动互联网去中心化为己任,致力于为去中心化互联网搭建基础设施。旗下的 TRON 协议是全球最大的基于区块链的去中心化应用操作系统协议之一,为协议上的去中心化应用运行提供高吞吐,高扩展,高可靠性的底层公链支持。波场 TRON 还通过创新的可插拔智能合约平台为以太坊智能合约提供更好的兼容性。

自 2018 年 7 月 24 日起,TRON 收购了位于旧金山的互联网技术公司 BitTorrent Inc.。BitTorrent Inc. 设计的分布式技术能够有效扩展,保持智能化,并使创作者和消费者能够控制其内容和数据。每个月有超过 1.7 亿人使用 BitTorrent Inc. 开发的产品。BitTorrent Inc. 的协议每天可以传输全球 40%的互联网流量。

孙宇晨,1990 年生,美国常青藤盟校宾夕法尼亚大学硕士,北京大学学士。 前 Ripple 大中华区首席代表,波场 TRON 创始人,BitTorrent CEO,移动社交应用陪我 APP 创始人兼 CEO。 2011 年亚洲周刊封面人物,2014 年达沃斯论坛全球杰出青年,2015 年福布斯中国 30 位 30 岁以下创业者。 2015 CNTV 中国互联网年度新锐人物,2015 年成为湖畔大学首批学员中唯一 90 后学员 。 2018 年 7 月 24 日起,TRON 收购了位于旧金山的互联网技术公司 BitTorrent Inc. 成为 BitTorrent Inc. CEO。

波场 TRON 创始人孙宇晨(Justin Sun)与波场 TRON 北京办公室平均年龄 26 岁的 108 位同事合照展示。目前波场 TRON 经过近一年的发展,已经快速成为全球增长最为强劲,扩张最为迅速的区块链团队之一,波场 TRON 团队目前仍然保持着每天发出一个新 Offer 的节奏,预计 2019 年年底将突破一千人!

了解 波场 TRON 最新官方动态

(向上滑动查看内容)

官网:https://tron.network

您可关注微博:波场 TRON 官博

https://weibo.com/u/6344553397

Facebook 用户可直接访问:

https://www.facebook.com/TronFoundation-144555002795817/

Telegram 进行互动可搜索:

中文 https://t.me/tronnetworkCN03 英文 https://t.me/tronnetworkEN03

您可以前往 Github 了解更多:

https://github.com/tronprotocol

在 Twitter 上关注 @tronfoundation,跟踪最新动态

https://www.reddit.com/r/Tronix/

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻 ChainNews 立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

波场波场波场波场波场 TRON 以推动互联网去中心化为己任,致力于为去中心化互联网搭建基础设施。 旗下的 TRON 协议是全球最大的基于区块链的去中心化应用操作系统协 议之一,为协议上的去中心化应用运行提供高吞吐、高扩展、高可靠性的底层公链支持。波场 TRON 还通过创新的可插拔智能合约平台为以太坊智能合约提供更好的兼容性。 自 2018 年 7月 24 日起,TRON 收购了位于旧金山的 BitTorrent,其设计的分布式技术能够有效扩展,保持智能化,并使创作者和消费者能够控制其内容和数据。每个月有超过 1.7 亿人使用 BitTorrent 开发的产品。BitTorrent 协议每天可以传输全球 40% 的互联网流量。波场TRON查看更多分享到新浪微博微信分享扫码分享分享到 Facebook分享到 Twitter推荐专题「数字黄金」比特币为何无法在暴跌危机中幸免?2021年5月19日·文章 20 篇读懂下一代互联网基础设施「分布式存储」2021年5月25日·文章 15 篇读懂 Loot:炙手可热的 NFT 新物种2021年9月7日·文章 10 篇平行链大考将至,Kusama 准备好了吗?2021年5月27日·文章 14 篇
免责声明:非注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给网站管理员发送电子邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),网站管理员将在收到邮件24小时内删除。