转载自:比特派钱包
DeFi很火、Compound很热,业内都仿佛打入鸡血一般地参与到这个生态,创新、革命,终结中心化这一天似乎马上就能到来。
预言机、智能合约钱包、去中心化借贷、去中心化交易、去中心化blahblah......
很多区块链行业内的从业者们开始乐观地认为DeFi的黄金大厦已经基本完工。
不过,在DeFi晴朗的天空上,却还飘忽着几朵令人不安的乌云。
2020年4月18日,Uniswap爆出智能合约漏洞,该漏洞被人利用盗取了数十万美金的资产;
2020年4月19日,Lendf.me因相同漏洞,被一位程序员盗取了数千万美金的资产;
这两次的事件,在业内引起了轩然大波,尤其是Lendf.me的被盗,更是引发了更广泛地讨论:
“到底应该由谁来承担责任?”
“似乎去中心化之后就很难说清楚出了问题该找谁?”
“难道DeFi了之后,丢币就全得是用户承担了吗?”
幸运的是,因为盗取Lendf.me的人只是一名普通的程序员,并不是职业的黑客——他并不懂得如何更好的隐匿自己的行踪。因其泄露了IP,并进一步被定位,最终这位程序员只能主动退还资产以避免受到法律上的惩罚。
在这件事情上,Lendf.me的项目方和用户可以说是极其幸运的,他们躲过了巨额资产损失及冗长的法律诉讼的风险,从行业的角度上讲,找回了肯定是好事。但好事归好事,笼罩在DeFi生态上的乌云仍未消散,DeFi的未来还安全吗?
关于智能合约安全,历史上已经发生过很多起事故了,这朵乌云其实一直就在那里,这也是行业需要一直面临下去的风险和挑战。
不过我们今天要跟您聊的是另一朵乌云,从安全的角度上讲,另一朵乌云的复杂度要低很多,但其影响却更广泛——几乎影响到了每一个参与DeFi的用户。
谷燕西:机构资金入场推高比特币市值,其价值共识完全不同于互联网时期价值共识:12月22日,区块链和加密数字资产研究者谷燕西发表专栏文章称,现在比特币的市值已经超过了全美最大商业银行摩根大通的市值,也已经超过了提供全球信用卡清算服务的网络Visa公司的市值。这表明市场已经在全球范围内对比特币的价值形成了共识。如果只是全球普通的散户对比特币的价值形成共识,那么很难将比特币的市值推到现在的这个高度。比特币之所以能达到现在的这个市值,是因为机构资金已经开始进入比特币。他在文中表示,市场中依然存在的一个普遍的观点是认为比特币价值是市场投机的结果,而且这样的投机导致的价值是不会持续的。这个观点通常将比特币价值同历史上类似的泡沫相比较,譬如最近的互联网时期的泡沫。但是比特币目前的价值共识同互联网时期的价值共识有本质上的不同。比特币的价值完全不是依赖于底层的所有权或者预期的收益。比特币价值的特点是它本身就是它的价值。这个价值的大小是完全由市场来判断的,完全是人们的主观判定。谷燕西最后指出,市场对现行的货币产生流通机制并不是十分的乐观,因此才会潜在地把比特币作为一种价值储存和转移工具来使用,因此就导致了比特币价格的不断攀升。[2020/12/22 16:03:48]
其影响程度明明很严重,但却一直被行业内的用户和从业者们所忽视。这朵乌云如达摩克利斯之剑,悬于DeFi的之顶,无论你是否无视它,它一直都在那里,静静地看着你,等待着机会将你一口吞啮。
作为比特派安全实验室成立之后的第一篇文章,我们将系统的把这朵乌云给大家讲清楚,并且还会包括完整的智能合约案例来给大家演示这朵乌云对于普通用户可能造成的资产安全风险。相信通过本文,用户们就能清楚的意识到,当你去参与以太坊的DeFi生态时,很多你不经意地操作所带来的风险可能没那么简单,这其中的风险,可以大到没有上限。
在正式开始讨论之前,我先问大家一个问题:
假设你有100万个以太版本的USDT,现在你决定向一个中心化的交易所转入1万。如果出了问题,你的风险上限是多少?
谷燕西:美国货币监理署加密政策表态有助于商业银行进入加密数字货币领域:针对“美国货币监理署(OCC)表示国家储蓄银行和联邦储蓄协会可以为客户提供加密货币托管服务”一事,中美证券市场长期从业者,区块链和加密数字资产研究者谷燕西在接受币世界采访时表示,美国的零售客户在保存他们的加密数字货币资产方面有了更多的选择,保管的成本因此也会降低。这也有助于商业银行进入加密数字货币领域。因此这对商业银行和零售客户来说都是一件好事。[2020/7/23]
答案很简单,风险只是你存入的1万USDT。剩下的99万都在你的钱包里,无论是黑客还是交易所老板都拿这些钱没办法,他们能偷走的只有那1万。
好了,现在相同的场景放到DeFi里:
还是假设你有100万USDT,现在你决定往一个去中心化的DeFi合约里存1万,如果出了问题,你的风险上限是多少?
还是1万吗?错!你现在的风险上限很可能变成了100万USDT,即便剩下的99万USDT明明还是安安静静地躺在你的钱包里,甚至你可以很小心地把这些USDT保管在绝不触网、绝对安全的硬件冷钱包里也一样,你的百万资产极有可能一瞬间就会灰飞烟灭,BOOM!
为什么会这样呢?原因就在于以太坊生态最基础的授权模型。
当你访问一个智能合约时,智能合约可能会为了“能更方便的操纵你的资产”的目的,向你申请授权,那这个授权调用又是个什么样子呢?
现在我们随便从链上找一笔授权交易来看一下:
https://etherscan.io/tx/0x419d17e216cda75dd9635a752e9aedb8f43ed4bfe31a6f75ed8923779c73eb6e
这笔交易很简单,其实就是这个地址授权给合约无限动用自己全部USDT的权力。
那这么做的好处又是什么呢?
声音 | 谷燕西:Libra迫使各国央行更加协调彼此的货币政策共同应对私营稳定币:今日,CBX研究院院长谷燕西在《Libra,各国央行的潘多拉魔盒》一文中表示,Libra会在全球范围内提供一个金融市场基础设施(FMI)并在其上发行并流通稳定币。这样的一个FMI和数字货币是独立于现有的金融市场之外的一个崭新的金融体系。鉴于Libra协会成员在全球范围内的影响力,这就迫使各国央行认真对待Libra带来的各种冲击并制定自己的应对策略。更为关键的是,Libra迫使各国央行更加协调彼此的货币政策来共同应对Libra以及此后一定会出现的其它的私营稳定币。[2019/7/15]
在完成了这个授权操作后,Uniswap就可以很方便地操作你的资产了,后续的调用少了,访问次数也少了。有的合约甚至还可以帮你兑换以太矿工费,也就是说,让你在没有ETH做矿工费的情况下,仍然可以调用这个合约。
这种授权方式的优点其实就是方便,方便到你甚至不用打开钱包了,也能帮你转币。
“什么?不用打开钱包了也能转币?谁能转我的币?”
这就是问题所在,只要你做了授权,该合约就可以不经你的许可,支配你所有的资产。记住,这跟你的私钥是如何保管的没有关系,哪怕你把你的私钥保管在硬件冷钱包里,放到冰箱里冻起来,该合约仍然能把你的币一扫而空。
好了,现在估计有人会说了,虽然合约能转走我的币,但智能合约代码如果是开源的,并且都经过了第三方审计,里面又没有转走我的币的代码,那我是不是就安全了呢?
其实跟合约授权相关的安全性跟是否开源以及有没有经过第三方审计关系不大,现在DeFi生态的大部分复杂的智能合约,都是可以升级代码的,也就是说,今天的代码可能的确不能转走你的币,但明天Owner作恶更新一下代码,就能把你的币一扫而空了。
看完授权交易的样例之后,我们现在再来看一个合约的样例代码:
声音 | 谷燕西:Libra的一个潜在的竞争者是Twitter和square的CEO Jack Dorsey:今日,在由火讯财经主办的“火讯Facebook Libra周”线上沙龙上,CBX研究院院长谷燕西表示,在潜在用户方面,Facebook确实在全球有27亿的注册用户,数量方面他确实是有优势。但是,具体到数字资产方面,加密数字资产的爱好者的活跃社交群体是Twitter,而不是Facebook,而且推特的用户也是遍及全球。如果一个基于加密数字资产的金融应用,需要在全球推广的话,实际上推特更适合于此目的。Libra稳定币的一个潜在的竞争者是 Twitter和square的CEO Jack Dorsey,他在社交网络和货币支付端方面都有优势,所以他很有可能是Facebook稳定币的一个很大的竞争者,而且他一直是加密数字货币的强烈的爱好者,特别是对比特币。在2018年5月在纽约举行的 Consensus大会上,他就提出,互联网需要自己的稳定数字货币。[2019/6/21]
https://github.com/bitpie-wallet/erc20-approve-issue-demo/blob/master/contracts/ExchangeDemo.sol
在这个样例中,我们模拟了一个智能合约漏洞的情况,假设合约开发者不小心将ExchangeDemo合约的transfer方法访问控制权限设置成了public。在这种情况下,只要你对该合约进行了授权操作,哪怕你没有对该合约进行过任何转账操作,别人都能直接转走你钱包里的全部Token,就这么简单。
当然,真实情况下的合约漏洞可能会很复杂,具体表现形态也是多种多样的,但这里我们想说明的是如果一不小心合约里写出了能被第三方动用授权者资产的漏洞,那毁掉的可就不仅是合约本身了,所有给该合约授权过的人的资产全部会被盗走。
有人可能会说了,那我们不写出能转走授权资产的漏洞就行了吧?道理没错,但现实中这是几乎不可能的。以太历史上无数次的漏洞都证明了这一点,只不过大部分漏洞只能影响到合约内的资产或者只能影响合约的执行方式,而授权相关的漏洞则会危及到所有做过授权的人的全部资产的安全,现在明白你到底在冒多大的风险了吧?
我们继续看下一个样例代码:
https://github.com/bitpie-wallet/erc20-approve-issue-demo/blob/master/contracts/ExchangeDemoV2.sol
在这个例子中,合约开发者升级了ExchangeDemo合约,升级之前的claim方法本来只能支取合约上的token的余额,但开发者将其修改成可以转走用户授权的token,也就是更新之后,用户再进行授权操作,开发者就可以轻松的调用claim方法转走用户钱包里的币了,就这么简单。
上述样例中完整的测试用例及代码可以在https://github.com/bitpie-wallet/erc20-approve-issue-demo/blob/master/test/ExchangeDemo.test.js上看到,有兴趣的同学们可以试试。
通过ExchangeDemoV1和V2两个版本的智能合约样例我们可以看出,因为滥用授权,即便用户没有或者只向合约转入了很少的资产,如果合约有授权转账相关的漏洞,则所有授权过的用户钱包内的资产都将面临风险。即便是没有漏洞,合约开发者也具备更新代码后拿走授权用户钱包内全部资产的权力。
这里我们还可以再进一步展开来谈,一个向你索取无限授权的合约,其目的显然是为了能方便的操纵你的资产,而合约本身的功能当然也会与操纵你的资产相关,无论是交易、借贷、理财等等的,都要操纵资产。
因此,合约本身至少会有相关接口来进行转币操作,当然这个转币操作都是功能性的,比如说为了抵押的目的向合约地址存入5万USDT,或者为了兑换的目的向合约地址存入1千USDT,好了,现在的问题是,既然合约本身就有这类的接口,合约Owner也就有可能未经你的许可继续使用相同调用让你往合约里存入更多的资产,也就是说,即便不升级代码或者没有相关漏洞,这种可能性也是存在的,尤其是那种可以替你代付了以太矿工费的合约,说明连调用的发起审核都可能是由合约Owner来负责的。
也就是说,如果一个智能合约在你授权后能够有一个方法将你的一千元转入合约地址,自然也可以用相同的方法转入一万、十万、一百万,而转入合约地址或者其它相关地址之后,合约Owner其实就有能力拿走这些资产了。
这里我们要说明一下,像0x这类的合约在这一点上是做了一些防范的,他们在调用接口时验证了用户的签名,也就是说至少能确保调用操作是用户发起的。但这种其实就很依赖于合约代码的编写方法了,合约代码里可以验证用户签名,也可以验证合约Owner的签名,当然还可以啥都不验证,合约方法也可以是由用户调用或者是由合约Owner调用,不同的写法会把你钱包里币的控制权给了不同的角色,听着是不是很吓人呢?
估计又有人要说了,如果智能合约的Owner不作恶,不就没这个问题了吗?
这里我们要说明一点:
去中心化首先要做到的是无需第三方信任,如果一个去中心化项目要求你必须信任合约Owner,那去中心化的意义何在呢?
另外,更为重要的是,你本来以为合约Owner对于你的资产的影响仅仅局限于你参与到该智能合约的部分,比如说你为了交易而转给dex、为了理财而转给去中心化借贷合约的币,你以为合约Owner只能影响到你存进去的那部分资产,现在就应该明白了,合约Owner能影响到的不止是这一部分,他还能影响你钱包里的剩余资产,无论你的钱包是热的还是冷的,没关系,都可以是我的。
接着说,即便是我们假设合约Owner是道德上极其完美的人,但随着智能合约越来越复杂,众所周知出现漏洞的风险也就越来越高,在之前的理解里,大部分人可能认为的都是如果出现漏洞,主要的资产风险还是合约内的,攻击者最多也就是把你存在合约里的币都给拿走。但本文中的样例告诉了你这么一个事实,如果合约漏洞恰好是跟授权转账相关的,那风险就扩散了,所有曾经给该合约授权过的地址都会被一扫而空,只要攻击者扫描一下都有那些地址进行过授权操作,然后挨个把这些地址上的币都给转走就好了。
更重要的是,这还给了智能合约的开发者们如何安全的保管Ownerkey提出了更高的要求,如果哪天你的Ownerkey丢了,那完蛋的可不仅仅是存在合约里的币,完蛋的是所有授权用户钱包里的全部资产,这又有谁能承担呢?
看到这里,你是不是就明白为什么本文的标题是“以太坊DeFi生态当前最大的安全隐患”了吧?
由于以太坊生态里对于授权的滥用已经到了非常严重的程度,我们甚至可以说几乎所有的DeFi合约都在毫无节制的索取无限授权,在这种情况下,出于小白鼠的目的实验各种DeFi项目的行为本身无可厚非,但如果告诉你,所冒的风险是你的全部资产,而并非仅仅是拿来参与DeFi的那点儿币,你又该作何感想呢?
区块链行业内对于以太坊生态的授权滥用情况之前曾有过一点点声音,但其实还远远不够,无论是开发者、从业者、用户等群体,99.9%的人对此一无所知,滥用授权的情况几乎是全部,是时候来改变这一现状了。
这里我们列出了一些滥用授权的项目案例:
Compound
Uniswap
Kyber
Maker
0x
Balancer
dYdX
EtherDelta
IDEX
imTokenTokenlon
上述列表中的前面几个Compound、Uniswap、Kyber正是当前DeFi世界中炽手可热的明星项目,但这些项目却无一例外的选择了让用户无限授权以获得用户资产的完全控制权,也就是说任何用户只要是使用过上述项目,你的钱包里的币就有可能随时会面临本文中所提到的风险,这其实是很遗憾的一件事情。
我们对一部分无限授权了的地址进行了筛查,发现多数的地址上都仍存有资产,其中好多地址更是不乏拥有百万千万甚至亿级别的资产,而这些地址的拥有者,其实已经在自己不知情的情况下把资产的支配权交予了别人。
上述合约都应调整自己的授权代码,将其改为按需授权,比如说,你只需要兑换1000USDT,那就只授权1000USDT,额外的所要授权都是越权行为。使用这些合约的用户也应该改变自己的DeFi合约使用行为,应该将不参与DeFi的币放到另一个不会授权给任何应用的地址,以保护自己的资产安全。
由于以太生态的发展演化非常快,我们专门在比特派里设计了以太安全中心,当你切换到以太体系之后就能看到,在以太安全中心里我们目前开发了合约授权检测功能,除了可以看你在比特派里的地址是否有哪些滥用授权的情况,还可以随便看外部的任意一个地址的当前授权情况。对于被滥用的授权,还可以进行授权回收操作。
关于比特派的合约检测功能,我们将专门写一篇说明文章来指导大家如何使用,您的地址现在安不安全?检测一下就知道了。
说到授权被广泛滥用,比特派在这块是怎么做的呢?以比特派钱包中很常用的批量转账功能为例,我们的做法是有限授权,也就是说,如果你需要将100个USDT转到50个地址上,比特派只会授权100个USDT,不会产生任何额外的授权。再比如说,比特派的代付USDT矿工费功能,我们就完全没有使用合约授权,哪怕明明是使用授权方式实现起来更简单,我们都没这么去做,其实就是因为这个道理,项目方应该以用户的权益放在首位,任何徒增用户风险的行为都应该被抵制。
考虑到这朵乌云之下的安全,普通用户参与DeFi应该采取哪些防范措施呢?
1、定期使用像比特派这样的钱包中提供的授权扫描功能,来看看都有哪些合约获得了你的授权;
2、使用多个以太坊地址,将存币地址和参与DeFi地址分开,把仅用于DeFi活动的币放到DeFi地址中,这样即便是乌云压顶了,存币地址里的币还是安全的;
3、回收一些应用的授权,降低风险,至少你应该清楚哪些应用可以不经你的许可直接转走你钱包里的币才行;
4、呼吁项目方不要滥用授权,按需授权,以降低用户的安全风险。
去中心化金融的确代表着未来,也是区块链技术非常重要的应用场景。
但将我们聚在一起的,从来不是天翻地覆的概念、不是深奥晦涩的代码、不是天花乱坠的技术,一直都是私有财产神圣不可侵犯的信念。
只有它能让我们继续走下去,直到拨云见日。
标签:DEFECOINCOINLECDeFiSocial Gaminglitecoin-cashLargo Coinlec币价格
尊敬的EXX用户:? ????您好!根据市场的情况及用户的建议,EXX将于香港时间2020年12月23日10:30开放LON的充提业务.
波卡网络是由"中继链-平行链"组成的,中继链不但可以连接平行链,而且还可以连接下一级中继链,层层递进,从而大大提高了波卡网络的可扩展性.
Filecoin复杂的开采程序和严厉的惩罚机制意味着想要成为filecoin的矿工仍然面临着很多障碍。在此之前,我们对filecoin的开采全过程进行了全面的科普.
在中国新冠疫情已经平和,生活恢复正常的这个冬天,国际上的情况并不容乐观。英国宣布新冠病变异,封锁伦敦,欧陆各国纷纷与英国断航,疫情仿佛要席卷新一轮狂潮,未免让人担忧.
那么挖矿也是区块链唯一的实体项目,而区块链数字货币未来的价值也是非常巨大的,包括昨天比特币突破了历史的新高,可惜没有币而已,所以现在的以太坊就更像一匹黑马.
各位老铁大家好,我是你们的朋友巴德。跟着我的客户都是做了很久的,不是我带他们收获了多少,而是我用心在指导,毫无保留的教技术,经常熬夜盯盘,深夜告知客户出场或进单;我的长远目标是有收获的时候大家都.