区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > 中币 > 正文

CRYPT:智能合约安全实践:功能实现千万条,权限安全第一条_CENX价格

作者:

时间:

引子:“庖人虽不治庖,尸、祝不越樽俎而代之矣。”--《庄子·逍遥游》古时候,有一位杰出的领袖名叫唐尧。他所治理的地区人们安居乐业,但是他听闻隐士许由十分有才干,便萌生了将领导权让给许由的想法。但是许由拒绝了,并说出了这样一段话“鹪鹩巢于深林,不过一枝。”至此,后人也用越俎代庖一词来表达越权的含义。

“越俎代庖”在智能合约的实现中存在着访问权限,如果权限设置不合理,很容易造成智能合约被攻击,严重的还会造成巨大的经济损失。成都链安-安全实验室对于智能合约安全有着丰富的经验和积累,但随着区块链技术越来越受重视,智能合约的数量也越来越多,随之而来的智能合约被攻击事件也越来越多,也让我们感受到了“让区块链更安全”的企业使命是多么的重要,但是一己之力难于对抗所有的威胁。接下来,我们将会把自己的安全经验积累通过与智能合约CTF靶场ethernaut相结合,通过技术连载的方式向广大智能合约开发者普及在开发过程中,如何实现更安全的代码。

Data Gumbo推出工业级智能合约市场GumboStore:3月7日消息,工业智能合约网络公司Data Gumbo宣布推出首个工业级智能合约市场GumboStore。GumboStore使企业能够轻松创建、部署、发布或授权直观的智能合约模板,以消除商业关系中的交易和信息摩擦。

据悉,访问GumboStore的用户需要订阅Data Gumbo的全球企业智能合约网络GumboNet ?。(Businesswire)[2022/3/7 13:42:59]

现在我们就来聊一聊ethernaut靶场的第一题Fallback,代码函数“越俎代庖”的事件。一、权限漏洞简介

越权漏洞是指在智能合约中,因函数可见性设置不合理或函数缺乏有效的验证导致本不能调用某一函数的用户通过直接或者绕过验证的方式成功调用该函数。该漏洞可被单独利用,也可能结合其他漏洞进行组合攻击,利用方式简单,漏洞影响视存在漏洞的函数而定,可能对合约造成毁灭性打击。二、Fallback“越俎代庖”

以太坊技术服务商 OpenZeppelin 发布 Optimism 智能合约审计报告:11月25日消息,以太坊技术服务商 OpenZeppelin 发布 Optimism 智能合约审计报告。从 2021 年 3 月 15 日开始,OpenZeppelin 在 7 周的时间里与 3 位审计师一起审计了 Optimism 的代码库,共发现 4 个严重和 4 个高度严重的问题,并提出修改建议以减少代码的攻击面和提高其整体质量,Optimism 团队已承认或修复所有严重问题,代码已迁移到新存储库。[2021/11/25 7:10:27]

漏洞原理详细分析2.1合约中的“俎”与“庖”如何理解合约中的“俎”与“庖”呢?先来看一段合约代码,如下图所示:

图1这一段合约代码出自ethernaut靶场的第一题Fallback。针对于靶场中的问题,解题思路是通过调用回调函数function()payablepublic来触发owner=msg.sender;,使得合约的所有者变成调用者。题目非常的简单,只要向此合约发起一笔交易,且满足require的条件就可触发fallback函数。正常情况下,在对一个合约调用中,如果没有其他函数与给定的函数标识符匹配,或者没有提供附加数据,那么fallback函数会被执行。一般是作为转入以太币的默认操作。所以智能合约开发时一般是不需要将owner=msg.sender写到fallback函数中的。如下图所示:

Cardano创始人:Cardano新功能应被称为“可编程验证器”而非“智能合约”:9月19日消息,Cardano创始人Charles Hoskinson最近在推特上表示,对于Cardano来说,“智能合约”这个词其实并不恰当,并建议社区将其新功能称为“可编程验证器”。Cardano开发者Matthias Benkort最先发现了语义上的错误。他声称由于其eUTXO交易模型,Cardano的可编程性与以太坊和Solana等竞争链截然不同。因此,智能合约不能实际部署在Cardano上:“与以太坊、Solana、Algorand等公链不同,Cardano上没有所谓的‘部署’智能合约(功能)。取而代之的是,验证器在使用前由哈希隐式引用,并在激活时公开。”(U.Today)[2021/9/19 23:37:05]

图2然而,在这里本不该被用户调用的owner=msg.sender被调用了,导致权限控制不当,产生了越权,“俎”与“庖”就这样发生了接下来的故事。2.2相关安全事件2.2.1Bancor合约事件2020年6月18日,Bancornetwork被爆出存在漏洞。漏洞产生的原因是合约中存在一个public的safeTransferFrom方法,使得攻击者可以直接调用此方法授权给Bancornetwork合约的代币转出到任意账户。其关于转账和授权的三个函数权限均为public,这使得任何用户都能对其进行调用。本次事件涉及资金50W余美元。详细代码如下图所示:

V神:以太坊EIP-2929提案或将打破部分已有智能合约:为了减小以太坊飙升的交易费,以太坊创始人Vitalik Buterin?于2日发布了以太坊改进提案EIP-2929,他建议将一些合约收费提高三倍,受影响的合约包括更新以太坊状态的合约,以及一些应用程序。但是这个重新定价的提议可能会打破一些已经在以太坊上运行的智能合约,批准这一提议也需要以太坊社区的一致同意,这一过程可能需要数周或数月的时间。(Coindesk)[2020/9/4]

图3权限为public的safeTransferFrom方法这个“奸臣”并没有得到Bancor合约“国王”的许可,直接夺走了“国家”的“财政大权”。幸而Bancornetwork团队和白帽首先发现了此问题,并对资金进行了转移。在后续也对该漏洞进行了修复,才得以避免损失。详细分析见而同样的事件也在另外一个合约中上演,接下来我们将介绍6月底的VETH合约漏洞事件。2.2.2VETH项目事件2020年6月30,VETH项目被爆出漏洞。本次事件中“越俎代庖”的主角则是合约中的changeExcluded函数的external修饰符。external修饰符使得任何人都可以调用changeExcluded函数来绕过transferFrom函数内部的授权转账额度检查,将合约的VETH代币盗走。此次事件,攻击者利用此漏洞盗走919299个VETH后大量抛售,导致VETH代币价值瞬间流失。详细见涉及到的合约代码如下图所示:

多伦多举办社区Ethereum开发会议 讨论Casper、智能合同、gas等主题:据Ethnews消息,为期3天的社区Ethereum开发会议今天上午在多伦多开幕。Ethereum的等离子体白皮书和比特币的闪电网络白皮书的合著者Joseph Poon称系统安全性和大规模出口的缓解对于编写EDCCs(也称为智能合同)的人来说越来越重要。Poon重点谈到在合同中增加时间作为变量,这会影响区块容量和gas限制。Vlad Zamfir也讨论了即将到来的Casper开发项目,并预示了在周五将会有关于Casper CBC(正确的建筑)的深入的技术讨论。Zamfir也讨论分布式系统,以及如何使用协商一致的协议保护它们,包括那些专门为Casper设计的协议,比如友好的Finality小工具。在有关可扩展性的讨论中,Zamfir表示几乎不相信区块链可以扩展;V神对分片交叉链接、随机信标、哈希洋葱、完全证明、数据可用性等表示担忧。[2018/5/4]

图4通过以上两个案例,相信大家已经意识到了合约中“越俎代庖”事件的严重影响,那么如何在合约代码编写的过程中有效的区分“俎”与“庖”呢?2.3“俎”、“庖”信息大揭秘针对越权事件,首先需要合约开发人员了解函数可见性。函数的可见性,一共有external、public、internal和private四种:-External外部函数作为合约接口的一部分,意味着我们可以从其他合约和交易中调用。一个外部函数f不能从内部调用。当收到大量数据的时候,外部函数有时候会更有效率,因为数据不会从calldata复制到内存.-Publicpublic函数是合约接口的一部分,可以在内部或通过消息调用。对于public状态变量,会自动生成一个getter函数。-Internal这些函数和状态变量只能是内部访问,不使用this调用。-Privateprivate函数和状态变量仅在当前定义它们的合约中使用,并且不能被派生合约使用。开发人员在构造一个函数时,应当遵循这些可见性进行开发,要明确哪些函数是可以由用户调用的“俎”,而哪些又是合约中不能任意替代的“庖”,以最小原则进行分配。比如一个函数safeTransfer在设计时是用于转账操作的,用户可以通过调用此函数,转账此合约发行的代币。我们使用public和external都可以满足需求,但就安全的角度,我们应当使用external,避免合约内对此函数进行调用,造成不可预期的风险。如存在有一个safeTransferFrom函数,用户可以通过授权给此合约其他代币,将其他代币转移到一个指定地址的,当_token等于合约本身时,就会以合约本身的身份调用sadeTransfer函数,即而将合约内的钱转到其他地址。

图5然而只是遵循函数可见性是远远不够的,函数的可见性,只是区分了合约内部、继承合约和外部这三个界限,远远不能满足我们的需求。想要达到较为完善的权限管理,我们应当引入“角色”的概念,如:管理员、普通用户、特权用户等。在合约中存储这些角色的地址,通过判断地址或标志变量来进行权限的控制。如下图所示:

图6通过修饰器对这些不同的“角色”进行管理,如使用onlyOwner修饰器,限制特定的地址才可调用此函数。对应“角色”的权限管理。使用修饰器的方式,可以更加清晰的判断出是否存在纰漏。三、安全总结

就链上现状来看,智能合约权限管理错误造成的漏洞比比皆是,其中不乏很多“著名项目”,而此类漏洞造成的损失也是巨大的。成都链安安全团队依据多年合约审计和链上分析安全经验给出以下几点建议:1、遵循权限最小化开发原则,在设计函数时应当就规划好可见性。2、建立角色机制,使用修饰器对各函数进行权限管理,避免纰漏。3、上线前一定找专业机构做好代码审计,正所谓“一人一个脑,做事没商讨;十人十个脑,办法一大套”。

标签:CRYCRYPTCRYPTOENXCryptosTribexCryptCrypto Against CancerCENX价格

中币热门资讯
Filecoin:解密:前抓plustoken后抓吉比特矿机,盐城为何严打“盘/币圈”?_OIN

盐城正令盘圈、币圈闻风丧胆。根据公开信息统计,盐城打击涉嫌虚拟货币总金额已经超过500亿。7月16日一封通知书在网络传播.

BTC:链上数据解析:1万美元阻力下的HBO,三大交易所的比特币分布对比_XCUR币

在刚刚过去的这半年里,币圈发生的很多事我都已经淡忘,但是3月12日那天,比特币价格如瀑布般飞流直下,我至今还记得。。

DEF:我们与Balancer、Synthetix等明星DeFi项目掌门人聊了聊流动性挖矿_CUR

编者按:本文来自链闻ChainNews,星球日报经授权发布。在过去的几个星期里,「yieldfarming」蹿红成为加密行业焦点,似乎突然间DeFi社区的每个人都变成了「热情的农民」,进入他们的.

CRYPTO:Wirecard丑闻引发币圈出入金渠道大震荡,加密借记卡版图新洗牌_CryptHub

编者按:本文来自链闻ChainNews,撰文:气昂昂,链闻编辑部其他同事亦对本文有所贡献,星球日报经授权发布。财务漏洞高达21亿美元的Wirecard毫无疑问是西方金融行业近期最大的丑闻.

ASS:俄罗斯正在调查英国一项涉嫌欺诈的Gram代币销售_LassoCoin

编者按:本文来自Cointelegraph中文,作者:HELENPARTZ,Odaily星球日报经授权转载.

ASS:稳定币聚合协议mStable能撼动Curve地位吗?简述其运行机制与代币经济_稳定币

编者按:本文来自蓝狐笔记,Odaily星球日报经授权转载。DeFi领域的创新几乎是无穷的,项目越来越多。蓝狐笔记最近一直在关注mStable.