月亮链 月亮链
Ctrl+D收藏月亮链
首页 > DYDX > 正文

ERN:智能合约安全千万条 访问权限设置第一条_UNI

作者:

时间:1900/1/1 0:00:00

引子: “庖人虽不治庖,尸、祝不越樽俎而代之矣。”  -- 《庄子·逍遥游》

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

“越俎代庖”

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

Coinbase主管:chatGPT-4已能实时检查以太坊链上智能合约漏洞:3月15日消息,Coinbase主管Conor Grogan在社交媒体发文称,他已在chatGPT-4中插入了一个实时以太坊智能合约,结果AI瞬间就找到了安全漏洞,甚至还展示了如何利用这些漏洞进行攻击。Conor Grogan表示,该合约的确在2018年被黑客利用漏洞攻击,此外他还透露也尝试了Euler的智能合约,但由于合约过长而无法被chatGPT-4处理,Conor Grogan坦言AI最终将是智能合约更安全、更容易构建。[2023/3/15 13:05:28]

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

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

2.1 合约中的“俎”与“庖”

DFINITY ICP将与比特币网络集成,为比特币网络提供智能合约支持:9月18日消息,DFINITY 关于“ICP 与比特币网络集成”的提案于9月17日以96.55%的高赞成票率得以通过,ICP 将通过应用 Chainkey 加密技术直接整合比特币网络,为比特币网络提供智能合约支持(该智能合约支持原生持有、发送和接受比特币,无需桥接和跨链),以使得比特币交易有更快的最终性和更低的成本。该提案的实施预计还需要数月的时间,团队将定期向社区汇报项目进展。[2021/9/18 23:35:01]

如何理解合约中的“俎”与“庖”呢?先来看一段合约代码,如下图所示:

这一段合约代码出自ethernaut靶场的第一题Fallback。针对于靶场中的问题,解题思路是通过调用回调函数function() payable public来触发owner = msg.sender;,使得合约的所有者变成调用者。题目非常的简单,只要向此合约发起一笔交易,且满足require的条件就可触发fallback函数。

智能合约平台Fantom启动Uniswap克隆版fUNI.Uniswap:基于DAG的智能合约平台Fantom宣布启动fUNI.Uniswap,fUNI是部署在Fantom上的Uniswap克隆项目,目前已发布应用版和钱包集成版。公告称,在Fantom上启动Uniswap将拥有较低的费用和更快速的交易:费用低于一美分,确认交易的速度在2秒内。Uniswap的所有其他特征保持不变。用户可在fUNI上交易fUSD和wFTM,开发人员可以像在以太坊上一样部署代币。[2020/10/16]

正常情况下,在对一个合约调用中,如果没有其他函数与给定的函数标识符匹配,或者没有提供附加数据,那么fallback 函数会被执行。一般是作为转入以太币的默认操作。所以智能合约开发时一般是不需要将owner = msg.sender写到fallback函数中的。如下图所示:

然而,在这里本不该被用户调用的owner=msg.sender被调用了,导致权限控制不当,产生了越权,“俎”与“庖”就这样发生了接下来的故事。

动态 | Data Gumbo与Cobbs Allen合作保护区块链智能合约数据安全:据Businesswire消息,美国区块链创业公司Data Gumbo宣布与Cobbs Allen合作。据悉,Cobbs Allen是一家专注于小众实践集团风险管理的国家独立机构。Cobbs Allen将代表Data Gumbo参与保险市场,为基于区块链的智能合约的数据,或操作中出现的错误和遗漏提供保护。[2019/12/17]

2.2 相关安全事件

2.2.1 Bancor合约事件

2020年6月18日,Bancor network(0x5f58058c0ec971492166763c8c22632b583f667f)被爆出存在漏洞。漏洞产生的原因是合约中存在一个public的safeTransferFrom方法,使得攻击者可以直接调用此方法授权给Bancor network合约的代币转出到任意账户。

其关于转账和授权的三个函数权限均为public,这使得任何用户都能对其进行调用。本次事件涉及资金50W余美元。详细代码如下图所示:

声音 | 智能合约先驱尼克·萨博:比特币可在核战级的灾难中幸存:智能合约先驱尼克·萨博(Nick Szabo)发推称,可追溯至创世区块的完整比特币交易历史存在于存在于90多个国家的9000多份拷贝中,这足以保证比特币在核战级的灾难中幸存。[2019/11/24]

权限为public的safeTransferFrom方法这个“奸臣”并没有得到Bancor合约“国王”的许可,直接夺走了“国家”的“财政大权”。幸而Bancor network团队和白帽首先发现了此问题,并对资金进行了转移。在后续也对该漏洞进行了修复,才得以避免损失。详细分析见(https://mp.weixin.qq.com/s/vN1bNLqdvr8JEqq9QI0X1Q)

而同样的事件也在另外一个合约中上演,接下来我们将介绍6月底的VETH合约漏洞事件。

2.2.2 VETH项目事件

2020年6月30,VETH项目被爆出漏洞。本次事件中“越俎代庖”的主角则是合约中的changeExcluded函数的external修饰符。

external修饰符使得任何人都可以调用changeExcluded函数来绕过transferFrom函数内部的授权转账额度检查,将合约的VETH代币盗走。

此次事件,攻击者利用此漏洞盗走919299个VETH后大量抛售,导致VETH代币价值瞬间流失。详细见(https://mp.weixin.qq.com/s/plbSmpMfvIk_A457GoUaQA)涉及到的合约代码如下图所示:

通过以上两个案例,相信大家已经意识到了合约中“越俎代庖”事件的严重影响,那么如何在合约代码编写的过程中有效的区分“俎”与“庖”呢?

2.3“俎”、“庖”信息大揭秘

针对越权事件,首先需要合约开发人员了解函数可见性。

函数的可见性,一共有external、public、internal和private四种:

External

外部函数作为合约接口的一部分,意味着我们可以从其他合约和交易中调用。 一个外部函数 f 不能从内部调用(即 f 不起作用,但 this.f() 可以)。 当收到大量数据的时候,外部函数有时候会更有效率,因为数据不会从calldata复制到内存.

Public

public 函数是合约接口的一部分,可以在内部或通过消息调用。对于 public 状态变量, 会自动生成一个 getter 函数(见下面)。

Internal

这些函数和状态变量只能是内部访问(即从当前合约内部或从它派生的合约访问),不使用 this 调用。

Private

private 函数和状态变量仅在当前定义它们的合约中使用,并且不能被派生合约使用。

开发人员在构造一个函数时,应当遵循这些可见性进行开发,要明确哪些函数是可以由用户调用的“俎”,而哪些又是合约中不能任意替代的“庖”,以最小原则进行分配。

比如一个函数safeTransfer在设计时是用于转账操作的,用户可以通过调用此函数,转账此合约发行的代币。我们使用public和external都可以满足需求,但就安全的角度,我们应当使用external,避免合约内对此函数进行调用,造成不可预期的风险。如存在有一个safeTransferFrom函数,用户可以通过授权给此合约其他代币,将其他代币转移到一个指定地址的,当_token等于合约本身时,就会以合约本身的身份调用sadeTransfer函数,即而将合约内的钱转到其他地址。

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

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

就链上现状来看,智能合约权限管理错误造成的漏洞比比皆是,其中不乏很多“著名项目”,而此类漏洞造成的损失也是巨大的。成都链安安全团队依据多年合约审计和链上分析安全经验给出以下几点建议:

1、 遵循权限最小化开发原则,在设计函数时应当就规划好可见性。

2、 建立角色机制,使用修饰器对各函数进行权限管理,避免纰漏。

3、 上线前一定找专业机构做好代码审计,正所谓“一人一个脑,做事没商讨;十人十个脑,办法一大套”。

标签:ERNUNI比特币ALLUnreal Governance TokenGameUnits比特币行情软件文华parallelworld

DYDX热门资讯
AXO:金色前哨丨Paxos推出加密经纪服务 英国数字银行Revolut成首位客户_区块链

金色财经 区块链7月16日讯   受监管的数字资产及移动资产交易金融服务机构Paxos宣布正式推出加密经纪服务Paxos Crypto Brokerage Service.

1900/1/1 0:00:00
BTF:孙宇晨专访丨做生态的领跑者 BTFS主网领先Filecoin震撼上线_FREN

随着移动互联网的普及,当前全球人口近一半都已成为互联网用户。伴随人口向互联网的迁移,连带相应的设备、产业、关系也在向互联网迁移,这一切的发生意味着海量的数据产生,大数据的发展迎来爆发式的增长.

1900/1/1 0:00:00
数字货币:没有网也能用 央行数字货币离线支付实现逻辑_比特币最新走势图

中国人民银行发行的法定数字货币,是现金货币的数字化,需要能够进行离线支付。但对于一个数字系统来说,离线支付是一个不小的难题。央行所设计的DCEP,可以巧妙地通过利用密码学技术解决离线支付问题.

1900/1/1 0:00:00
DEF:首发 | 火币观察:DeFi 增长爆发的分水岭—Compound 的出现_COS

 据 DeFiPulse 数据显示,当前 DeFi 行业抵押总资产约为22.9亿美元.

1900/1/1 0:00:00
BTC:金色观察|2020年二季度DeFi发生的三件大事_DEF

近日,以太坊开发公司ConsenSys旗下的Codefi发布了《2020年第二季度DeFi报告》,对2020年第二季度DeFi生态系统进行了全面总结和分析.

1900/1/1 0:00:00
RAT:金晚8点丨亿邦刚上市就将开交易所 利好比特币?_比特币实时行情最新价格走势图

首档行情直播栏目金晚8点热点资讯、现货合约,一对一实时解答随时随地掌握后市行情,把握币市掘金机会2020/06/28丨今日主题:《亿邦刚上市就将开交易所.

1900/1/1 0:00:00