针对区块链安全问题,成都链安科技团队每一周都将出智能合约安全漏洞解析连载,希望能帮助程序员写出更加安全牢固的合约,防患于未然。
引子:出尘花品爱池荷,零落秋风可奈何——《病中咏秋荷》清·蔡桓
本期话题
逻辑判断失误事与愿违,功能实现不周弄巧成拙
智能合约作为区块链技术革命的核心,乘着以太坊兴起的潮流,发展至今已经两年有余。智能合约的理念最早可以追溯到1995年,几乎与互联网同时出现。广受赞誉的密码学家尼克萨博最早提出了这个术语,他也是为比特币打下基础的学者之一。随着比特币的出现和应用,让智能合约的理念有了实现的机会。
从原理上来说,智能合约的执行依靠的是条件的触发,也就是类似于程序中的if-then语句。也就是说,智能合约对于其中合同条款的执行取决于预先编译好的逻辑判断,进而与真实世界的资产进行交互。本期,我们归纳总结了一些在从设计到实现的过程中出现安全漏洞。
Gate.io已上线SKL/USDT永续合约实盘交易(USDT结算):据官方公告,Gate.io已上线SKL/USDT永续合约实盘交易(USDT结算),支持1-20倍做多和做空操作,杠杆率可以在下单时自行选择。Gate.io永续合约是全球最活跃的区块链资产合约市场之一,日交易量高达8亿美金,结算类型分为“BTC结算永续合约”和“USDT结算永续合约”两种。Gate.io提示:请用户务必在完全了解风险并能承担风险的情况下参与,Gate.io平台不对投资行为承担担保、赔偿等责任。[2020/12/8 14:34:17]
智能合约愈发复杂
我们都知道,一个智能合约包含两部分:代码逻辑和数据。
相比于比特币的脚本语言,智能合约发展的一个终极目标就是“图灵完备”,简单来说,就是无论怎样复杂的交易逻辑或功能都可以实现。
Gate.io已上线CFX/USDT永续合约实盘交易(USDT结算):据官方公告,Gate.io已上线CFX/USDT永续合约实盘交易(USDT结算),支持1-20倍做多和做空操作,杠杆率可以在下单时自行选择。Gate.io永续合约是全球最活跃的区块链资产合约市场之一,日交易量高达8亿美金,结算类型分为“BTC结算永续合约”和“USDT结算永续合约”两种。Gate.io提示:请用户务必在完全了解风险并能承担风险的情况下参与,Gate.io平台不对投资行为承担担保、赔偿等责任。[2020/11/18 21:14:08]
智能合约的开发经过一段时间的沉淀,已经由最初简单的转账、付款等功能需求,向越来越多的交易功能和逻辑进化,比如冻结、暂停、中止、授权。根据复杂性理论,越复杂的系统越容易有出错的可能。因此,越是功能强大的智能合约,其逻辑就越是复杂,也越容易出现逻辑上的漏洞。
火币合约已上线LTC永续合约实时结算功能:据火币合约官网公告,火币合约已于新加坡时间2020年7月23日11:00上线LTC永续合约实时结算功能。用户的LTC永续合约仓位平仓后,已实现盈利部分(扣除掉浮动亏损和占用保证金等)支持随时提取,无需等至每日4:00、12:00、20:00(GMT+8)结算后,从而有效提升资金使用效率。该功能暂定试行至2020年12月31日。
目前,火币合约实时结算功能已覆盖BTC、ETH、LTC三大币种的交割合约和永续合约。相比其他平台交割合约的周结算和永续合约的日结算或每日三结,火币合约采取实时结算,等于火币合约平台自行承担了“分摊”风险,最大限度的让利于平台用户,是全球合约结算机制的重大创新,同时也显示出火币合约强大的风控实力。
据悉,近日火币上线了NEO、XTZ、ATOM、IOTA、ONT、XLM和XMR的永续合约,七大币种同时上线,在合约业界尚属首例。目前从各个盘面的情况来看,整体运行良好,体现出火币合约在系统、风控和运营方面的强大水准。[2020/7/23]
开发合约也会言多必失?
火币推出永续合约实时结算功能 盈利部分可随时提取:据火币官网公告,火币合约已于新加坡时间4月29日14时正式上线BTC、ETH永续合约实时结算功能,支持用户在平仓后随时提取已实现盈利(扣除掉浮动亏损和占用保证金等),无需等至每日4:00、12:00、20:00(GMT+8)结算。该功能暂定试行至新加坡时间2020年6月30日。此前,火币合约已上线了BTC、ETH和LTC交割。合约的实时结算功能,此次新推出的实时结算功能已覆盖了交割合约和永续合约。
据悉,目前市场上永续合约的结算机制大多为日结算或每日三结,而实时结算功能需要强大的风控实力支持。详情请查看火币合约官网公告。[2020/4/29]
打个比方来说,逻辑更加复杂的代码相当于更庞大的城池,在容纳更多人口的同时,需要防守的地方也更多。有些精心设计而又容易忽视防范的地方,比如错综复杂的下水道系统,正是容易让整个城池沦陷的重大隐患。
火币合约将上线BTC和ETH永续合约实时结算功能:据官网公告,火币合约将于2020年4月29日14:00上线BTC和ETH永续合约实时结算功能。[2020/4/29]
同样,在智能合约中,开发者为自己的合约设计的特殊功能意在稳固代币的市值或者项目的寿命,而正是在这些逻辑和功能中,一个细微的失误,比如>、<、+、-这些符号的错误就可能导致整个逻辑与预想出现严重的偏差,留下致命的隐患。
代码实现失误漏洞总结
我们将代码实现过程中产生的失误分为两种:
1.逻辑判断错误
Solidity的if或者require等条件判断表达式对合约代码执行做出限制,开发者如果在编写合约时写出了错误的判断条件,将会造成比较大的逻辑错误,影响合约正常使用。
a)transferFlaw
在transferFrom()函数中,当对allowance值做校验的时,误将校验逻辑写反,从而使得合约代码的逻辑判断错误。有可能造成溢出或者任何人都能转出任何账户的余额。
我们来看一个案例
if(allowed>=value)returnfalse;此处校验逻辑写反了,导致只要授权值allowed小于转出额度,那么都能转账成功,利用这个漏洞,可以不经授权就可以转出他人账户中的代币。
l漏洞修复
推荐使用require(allowed>=value);语句对授权额度进行判断
b)pauseTransfer-anyone
以如下案例合约为例
onlyFromWallet中的判断条件将==写反了,写成了!=,使得除了walletAddress以外,所有账户都可以调用enableTokenTransfer()和disableTokenTransfer()函数,这两个函数可以开启或者关闭合约的转账、授权以及烧币功能,进而影响合约的正常使用。
l漏洞修复
使用正确的require判断语句:
c)allowAnyone
分析如下案例合约
在transferFrom函数中,转账前未对allowed进行校验,转账后对allow的计算也未使用SafeMath,使得任何账户都可可以不经授权就能够转出他人账户中的代币,并且,如果转账额度_value大于allowed,allowed-=_value将发生溢出。
l漏洞修复
i.在转账前增加对allowed的检查,require(allowed>=_value);;
ii.使用SafeMath对allow进行运算,
allowed=allowed.sub(_value);
d)approve-with-balance-verify
部分合约在函数approve()中,增加对被授权账户余额的校验,要求授权的_amount小于或等于当前余额。
一方面,对余额的校验并不能保证被授权账户一定可以转出这个数量的金额:
i.在approve之后,token的所有者自己通过transfer函数,把token转走,导致余额小于allowance。
ii.approve给多个人,其中一个人进行transferFrom操作后,可能导致余额小于之前给其他人approve过的值。
另一方面这个校验可能导致外部合约无法正常调用,必须由Token项目方提前转入一笔数额巨大的Token至中间账户才能继续执行。
例如下面这个合约
l漏洞修复
去掉balances的校验:
2.功能实现与设计不符
我们来详细分析如下案例合约:
上述两个函数重写了ERC20标准中的transfer和transferFrom函数,添加了对冻结账户的检查。
在transfer中,如果msg.sender被冻结,那么其不能进行代币交易。
但是,我们注意到,在transferFrom中,并没有对代币转出地址的检查。
如此一来,一个被冻结的地址可以通过授权第三方,然后通过第三方地址向目标地址发送代币,违背了设计中对冻结地址的限制。
l漏洞修复
在合约正式上链前,项目方应对合约进行充分的测试,确保其实现完全符合设计。
我本将心向明月,奈何明月照沟渠
以上的安全漏洞都是开发人员在实现某些功能需求时,出现低级错误或者只追求完成功能需求导致的。相信在漏洞被曝光或者被攻击者利用时,开发者的内心也是崩溃的,感觉枉费了一番苦功夫。在没有相关测试、审计团队的协助下,对于此类实现与设计不符的漏洞可能真的束手无策,尤其是关于合约逻辑的检测,可能需要用到形式化验证运用数学建模的方法对于合约进行描述之后才能查遗补漏。但是,汲取他人教训并且用于提高应该是每个先驱者在探索新领域时具备的素质,一个人可能会走的更快,而一群人,会走得更远。
标签:比特币balance区块链比特币中国官网联系方式40亿比特币能提现吗比特币最新价格行情走势balance币是什么币区块链工程专业学什么区块链存证怎么弄区块链技术发展现状和趋势
古代社会是封建等级制度,人们的身份等级严明,一般的平民想要成为上等人,只能是通过科举,但是在明朝的时候,却有这么一个农民非常幸运,从一个农民成为当时的一个富商,甚至在美国的一些内刊中.
1900/1/1 0:00:00来源:新华每日电讯 漫画:曹一 记者王正忠、张紫赟 望着厂房内一盒盒码放整齐的盐酸安妥沙星药物,58岁的王祥有些垂头丧气。9年前,这款药曾带给他无限希望,可如今却让他担心不已.
1900/1/1 0:00:00知识就是力量,这句话尤其适用于在信息年代——你对新事物有多了解,就有多少竞争力。这也是为什么加密技术在进入大众视野一年之内,就一跃成为大学里的抢手课程.
1900/1/1 0:00:00大家好 我是多比 看来大家都比较喜欢做皮皮虾的多比昨天的鸡汤看来得到了大家的一致好评啊 好的吧~满足你 对比空口说白话,多比还是更偏好耍皮滴~~比特币矿业股上涨.
1900/1/1 0:00:00一周前,国内三大交易所币安、火币和OKEX分别投了一种新的稳定币Terra。最新的情况是,9月10日,美国纽约金融服务局的批准,数字加密货币GUSD和PAX加入了稳定币阵营得以发行,其最引人注目.
1900/1/1 0:00:00大家好,这里是不定期更新的正经游史,我是正经小弟。时间就是金钱,我的朋友!——地精作为资深玩家的正经小弟,曾在《传奇》中倒卖过屠龙宝刀,在《梦幻西游》中倒卖过霜冷八洲,在《魔兽世界》中倒卖过坐骑.
1900/1/1 0:00:00