PAID Network攻击事件分析 – 作者:noneage

图片[1]-PAID Network攻击事件分析 – 作者:noneage-安全小百科

​事件背景

PAID Network 是去中心化生态,部署在以太坊的 DApp 项目,旨在重新定义民事法律体系,从而通过专有的 SMART 协议、社区管理的仲裁系统、声誉评分、DeFi 工具,为开展业务提供一种新方法。

零时科技区块链安全情报平台监控到消息,北京时间2021年3月6日,PAID Network官方发推称合约遭到黑客攻击,由于PAID Network项目使用的是可升级的存储代理合约模型,攻击者利用PAID Network代理合约owner权限部署了恶意逻辑合约,并盗取了超过5900万个PAID令牌。

何为可升级合约?

以太坊上可升级合约的开发模型主要有以下几类:

Master-Slave contracts 主从模式;

Eternal Storage contracts 外部存储合约;

Upgradable Storage Proxy Contracts 可升级的存储代理合约;

经过初步分析,PAID Network项目使用的是第三种模型Upgradable Storage Proxy Contracts(可升级的存储代理合约),这种模型的特点是存在三个组件:代理合约,业务合约和数据结构基类合约。三个组件配合,最终使得合约有节省Gas,合约可升级,合约数据引用一致等优点。

Upgradable Storage Proxy Contracts(可升级的存储代理合约)模型的工作模式,这里我们用MuditG文章中的图来做说明。如下:

图片[2]-PAID Network攻击事件分析 – 作者:noneage-安全小百科

上图中:

User部分为用户,不做过多解释

UpgradeabilityProxy:代理合约,该代理合约固定不变,继承数据结构基类合约,并与用户和业务合约做交互。代理合约会有一个fallback方法,该方法会通过delegate call调用业务合约。

Logic Contract:业务合约,该业务合约可根据需求随时更新,也继承数据结构基类合约,并与代理合约做交互,也就是将该合约调用接口对接到代理合约。

Storage structure:数据结构基类合约,该合约同时被代理合约和业务合约继承,可以保持存储指针在链上的一致性。

从以上分析可以明确,代理合约可以随时更新,也就是PAID Network项目中的升级合约。

事件分析

零时科技安全团队跟进此事件并分析得出攻击步骤:

攻击者盗取PAID代理合约所有者owner私钥,通过该owner将自己的地址修改为owner,并使用攻击者地址部署了攻击合约,之后使用owner权限将PAID代理合约的业务合约地址更新为攻击合约,最终利用攻击者合约中的burn()销毁函数和mint()铸币函数给攻击者地址创造了5947万枚PAID代币。

详细攻击步骤如下:

初步分析,Paid代理合约owner部署Paid逻辑合约,通过所有者0x6ba1…1120地址部署业务合约0x8c86…48df。这一步是正常的部署合约操作,如下图:

https://cn.etherscan.com/tx/0x722caf4a8ba43f06f2c26e41cf49b9200af9f0593444d0b81713c2292782d15b

图片[3]-PAID Network攻击事件分析 – 作者:noneage-安全小百科

攻击操作一:攻击者给Paid代理合约owner(所有者0x6ba1…1120,也就是上一步部署正常合约的地址)转了一笔手续费。攻击者开始攻击,保证所有者地址0x6ba1…1120有ether可以进行其他调用操作,如下图:

https://cn.etherscan.com/tx/0x28494ebcd854735e4d84f55890f0a92376d1af17553d998b2ee391a25dbc18c7

图片[4]-PAID Network攻击事件分析 – 作者:noneage-安全小百科

攻击操作二:攻击者调用Paid代理合约owner的权限,更换了owner为攻击者。由于攻击者有Paid合约owner地址私钥,所以可直接使用owner权限,并调用transferOwnership(address newOwner)函数修改owner地址为0x1873…65be。如下图:

https://cn.etherscan.com/tx/0x733dd279b3d24f3415f3850b8eceafc651c1998163dcd0352b9e83c46e2b33d9

图片[5]-PAID Network攻击事件分析 – 作者:noneage-安全小百科

攻击操作三:攻击者通过修改后的owner地址0x1873…65be部署攻击合约0xb828…b9c7,如下图:

https://cn.etherscan.com/tx/0x75a22e264ffabbc5e4b84090fb30a76f2b5c4b87ae7a22762cba695d922c04aa

图片[6]-PAID Network攻击事件分析 – 作者:noneage-安全小百科

攻击者操作四:攻击者owner调用代理合约中upgrade()函数对攻击者合约进行更新,也就是更新了Paid的逻辑合约为攻击合约,如下图:

https://cn.etherscan.com/tx/0xe4678ca53b308bb35f6fd393ca369e853f936788cd6c318cd38b0a25bec88b70

图片[7]-PAID Network攻击事件分析 – 作者:noneage-安全小百科

攻击者操作五:攻击者调用攻击合约中的burn()函数销毁5947万枚PAID代币,如下图:

https://cn.etherscan.com/tx/0x3a483dd881d98541ebbd51e9a64daa700546bae9c2b33a30c2192f9981334b9b

图片[8]-PAID Network攻击事件分析 – 作者:noneage-安全小百科

攻击者操作六:攻击者调用攻击合约中的mint()函数给攻击者地址铸币5947万枚PAID代币,如下图:

https://cn.etherscan.com/tx/0x4bb10927ea7afc2336033574b74ebd6f73ef35ac0db1bb96229627c9d77555a0

图片[9]-PAID Network攻击事件分析 – 作者:noneage-安全小百科

攻击者后续操作:攻击者铸造5947 万枚 PAID 代币后,随后将部分PAID代币在去中心化交易所 Uniswap 上交易。在后续的交易中,攻击者陆续售出了大约 250 万个 PAID 代币,目前已获得2000 ETH。

总结

通过分析,发生该攻击事件只是因为PAID代理合约所有者owner私钥泄露,合约代码及可升级的合约模型并没有问题,当然也是目前大多数项目的中心化导致。所以建议项目方更要注重合约管理员私钥的安全存储。

安全建议

DeFi今年确实备受关注,黑客攻击也不断发生,包括Harvest Finance,Value DeFi,Akropolis,Cheese Bank和Origin Dollar等均受到不同程度的黑客攻击。针对频频发生的黑客攻击事件,我们给出以下的安全建议

在项目上线之前,找专业的第三方安全企业进行全面的安全审计,而且可以找多家进行交叉审计;

可以发布漏洞赏金计划,发送社区白帽子帮助找问题,先于黑客找到漏洞;

加强对项目的安全监测和预警,尽量做到在黑客发动攻击之前发布预警从而保护项目安全。

私钥存储安全建议

私钥尽量手抄,确保私钥的准确性,多次校验;

多个安全地方存储

可以将私钥强加密后存在电脑

不要截屏和拍照,会同步到云端

不要拷贝粘贴,会同步到云端

不要使用邮件传输或存储私钥

不要将私钥发到群里

不要将私钥导入未知的第三方网站

来源:freebuf.com 2021-03-11 17:32:39 by: noneage

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论