Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

付东亮:172亿美元Token类资产背后的安全问题

$
0
0

8月10日,由Node Capital组织的Node Family成员企业内部分享会上,降维安全实验室CEO付东亮讨论了智能合约的安全问题,分享了在智能合约审计过程中遇到的各种实际代码漏洞和风险案例,并就目前已知智能合约风险、以太坊里锁仓合约安全度、项目方数字资产管理安全等问题,回答了大家的提问。

付东亮是十年以上反黑客反APT攻击资深安全技术专家,多次为国内大型会议提供网络安全防护技术支持,擅长交易所、区块链生态安全防御体系建设,专注智能合约安全及以太坊生态安全技术研究。

以下为分享内容:

降维安全实验室是由一群在互联网安全行业有十年以上丰富经验的安全专家组建。除了传统安全,我们还有区块链底层技术专家团队、大数据人工智能专家团队等。

创始人之一剑心是全球最大的安全社区乌云网的创始人,除了我们自己的技术输出以外,我们在行业内的人脉关系、信息渠道,也是非常重要的资源。降维安全实验室要做一家真正懂区块链精髓、扎根区块链、维护区块链生态和谐发展的安全公司。

降维安全实验室围绕数字资产安全,为交易所和区块链相关企业提供合约源码审计、公链源码审计、渗透测试、攻击溯源、资产找回等服务,以及交易所防黑客、合约异常监控等产品。


付东亮:172亿美元Token类资产背后的安全问题

交易所实际上属于比较传统的行业,数字货币交易所资产安全肯定是重中之重。我们跟业内头部交易所以及交易所系统开发企业合作,总结出来一些交易所应该注意的点。

外部的有流通资产的安全,主要是指主链币和代币的安全。这部分主要是做好合约审计和监控,提前预防漏洞,发现异常能及时预警做出相应反应就可以。

交易所内部要细讲有点复杂。我们简单总结,分成五个大块:资产安全,用户安全,业务安全,数据安全,基础设施安全。

直白的说,就是保护好交易所和用户的钱,重要信息,别丢了。

智能合约审计,要先从智能合约审计的必要性开始讲起。


付东亮:172亿美元Token类资产背后的安全问题

这是Token类资产价值。

基于以太坊的Token,作为区块链世界,除BTC和ETH之外的最重要数字货币资产,Token的安全关系到交易所和投资者切身的利益。

合约审计属于我们的一个基础服务,首先解决的问题是技术层面的问题。很多token发行方技术能力不足,导致代码漏洞,这个token上交易所交易以后,被黑客攻击,黑客获利,导致交易所和投资用户的损失。

其次我们降维安全实验室,首先关注了智能合约权限管理上的一些问题。比如,有的项目方可以任意增发,销毁token,冻结任意账户的token等。现在存在的案例已经有项目方内讧,砸盘跑路等事情出现。在利益诱惑下,很可能项目方会利用手中的权限,把交易所和投资者当做韭菜一起割了。

另外还有一些像是短地址漏洞,假充值等影响交易所资产安全的漏洞。这些漏洞不产生于智能合约本身,而是交易 所在充值或者提现的实现上,有了bug。这些问题都是可以通过审计避免的。

下边举一些在智能合约审计中,会遇到的漏洞和风险的例子。
付东亮:172亿美元Token类资产背后的安全问题
付东亮:172亿美元Token类资产背后的安全问题

这个是BEC的合约代码,也有很多交易所上了这个Token。简单解释下这个代码的问题。

转出的总金额用传入的地址数量和金额相乘,没有防溢出。如果用户传入的数量和金额乘机溢出,变得很小,就绕过了后边的检测。最终的结果就是,恶意用户获得极大量的Token。

最终攻击者只获得一点点蝇头小利,这个token却直接归0了,给交易所和投资者带来极大损失。


付东亮:172亿美元Token类资产背后的安全问题
付东亮:172亿美元Token类资产背后的安全问题

这个例子是比较著名的合约EDU的代码。

transferFrom函数没有检查from给msg.sender的授权额度,也没有防止整数溢出。导致只要你随便请求一个有钱的地址给你转账,他就会傻傻的转给你。黑客就是通过这种方式,将大量Token转到 自己的交易所地址,然后变现消失。这个合约漏洞影响了不少上交易所的Token,给交易所造成了很大损失。


付东亮:172亿美元Token类资产背后的安全问题
付东亮:172亿美元Token类资产背后的安全问题

这个例子也是真实发生的。代码比较简单,经过auth验证的用户,可以随意给任意地址增加或销毁Token。

这次事件中,黑客通过这个合约的另外一个漏洞,获得了owner的权限,然后给自己增发了1100w的Token。轻松的获利变现,许久后才被发现异常。


付东亮:172亿美元Token类资产背后的安全问题
文字解释:

这个代码是允许owner冻结任意用户Token资产。看起来好像对资 产安全没有太大威胁。

我们将这种类型的威胁标注为【中危】,提醒交易所注意这方面 风险。因为我们设想恶意owner冻结了交易所的相关冷钱包,影 响了交易所给用户提现的行为,从而威胁交易所,要求支付赎金。

听起里挺像绑架,不过这比绑架安全多了。上边我们列举的是比较具体的已知风险,这类风险类型有7大类,19小类,都是可以通过代码审计发现的。另外还有些未知风险,也有可能被我们的智能审计系统提前发现。我们会随时更新审计范围和内容。

但是这是已知风险,未知的该如何预防呢?


付东亮:172亿美元Token类资产背后的安全问题
智能合约监控系统介绍

―基于区块链节点数据,监控token合约的资金异动,权限异动,及 时发现异常风险行为,对相关合作方进行全面监控预警。

―第一时间将风险阻止在影响合作方资金安全之前,为合作方及早采取补救措施赢得宝贵时间,降维安全对每次预警都将提供相应技术分析,每月输出预警服务报告,详细总结一个自然月内,所监控的合约存在的风险行为及其可能导致的后果,为合作企业资产风控提供辅助数据和情报。

―智能合约方面的安全问题,交易所面对的安全问题,或者其他相 关企业有什么安全方面的问题都可以提问。

最后做个小广告,给各位老板们介绍下我们提供的服务。


付东亮:172亿美元Token类资产背后的安全问题
Q&A环节 1、以太坊里锁仓合约的安全度

我理解这个问题的核心意义可能是,在以太坊里的锁仓是不是会有锁不住的情况。其实以太坊本身不提供锁仓这个功能,这个功能完全是依靠智能合约代码实现的。

基于合约实现的功能,那安全性就要看合约代码的安全性了。我们在审计过程中,遇到过十几例,锁仓可以被绕过的情况。有一些是逻辑上的问题,有一些是代码安全性上的问题。

今天作为纯技术分享。我还是给大家分别举个例子来说明吧。


付东亮:172亿美元Token类资产背后的安全问题

这个代码是某个上线代币的源码,转账函数检测msg.sender解锁的金额是否足够,足够的情况下才转账。但是........


付东亮:172亿美元Token类资产背后的安全问题

另外一个转账的方法,transferFrom,就完全没有任何限制。锁仓账户可以通过approve给目标账户授权的方式,把自己本应该锁定的金额全部转出。

再来一个代码本身实现有漏洞的。


付东亮:172亿美元Token类资产背后的安全问题

画红框的地方,从代码实现上,存在溢出漏洞。锁仓形同虚设。所以,以太坊锁仓合约的安全性,还是得看代码的实现,得找优质的安全公司进行审计。

2、针对项目方来讲,数字资产管理有哪些安全建议?

只要是大额的数字货币资产,我们都建议使用冷钱包,不要怕麻烦。甚至可以有多个冷钱包,有一个存储少量需要流通的资产,剩下的暂时不会使用的资产,和助记词一起锁银行保险柜最好。

3、如何避免发生“漏测”,如果发生“漏测”,有什么解决措施?

这个问题提的很好,机器审计也好,人工审计也好,都不可能保证100%完全准确,不但会有”漏测”的情况,还有很大可能出现新形式的未知漏洞,也就是我们说的0day。

关于这个问题,我们降维安全实验室从两个方向去尽可能避免。

第一是提高准确率,我们通过自主研发的源码层自动审计程序+opcode解析层的ai智能判定,以及人工复审的三重机制,尽可能提高准确率。

第二是我们将审计过的代码,提交到我们的erc20自动风险检测系统,从区块链实时取数据进行分析判定,发行异常,风险行为,第一时间进行预警。

再说到解决措施。我们通过刚才提到的风险监控系统,第一时间通知合作交易所,避免或减少资产损失。

另外,我们的情报系统如果收到新的漏洞类型,我们会对审计过的代码,进行复审。存在风险的合约,我们第一时间通知合作方。避免损失。

4、如何提升公司高管以及核心人员的安全意识问题,避免被钓鱼以及等套现资产。

这方面,依靠培训和自觉,恐怕不太有效。钓鱼,或者叫社工,入口千奇百怪,很可能借助公司某个同事的身份,合作商的身份,甚至其他公司老总的身份,等等。

我给大家支个简单有效成本低的小招。

服务器,数据库管理员等工种,访问外网和访问公司服务器资产使用两台电脑。做到物理隔离,可以防御很多风险。

5、目前已知风险中,是否可以解释一下有哪7大类?

分别是这7大类。溢出,条件竞争,访问控制,拒绝服务,Gas消耗,程序逻辑,业务风险。前六项都比较偏技术,我就不在这里赘述了。最后一个业务风险,我简单举例讲一下。


付东亮:172亿美元Token类资产背后的安全问题

这个代码涉及到两个业务风险。

第一个就是最近比较火爆的假充值。合约通过返回true,false状态来判断结果,没有抛出异常。交易所上账系统代码有问题,就会导致token没收到,但是给用户上帐,增加了余额。

另外一个比较少见。没有判断balances[msg.sender] = _value的情况,导致交易所充值钱包自动汇总的时候,没有办法把全部余额提走,这个问题也是实际发生的,如果合约审计的时候不注意,会给交易所带来极大困扰。

Viewing all articles
Browse latest Browse all 12749

Latest Images

Trending Articles





Latest Images