事件背景
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文章中的图来做说明。如下:
上图中:
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
**攻击操作一:**攻击者给Paid代理合约owner(所有者0x6ba1…1120,也就是上一步部署正常合约的地址)转了一笔手续费。攻击者开始攻击,保证所有者地址0x6ba1…1120有ether可以进行其他调用操作,如下图:
https://cn.etherscan.com/tx/0x28494ebcd854735e4d84f55890f0a92376d1af17553d998b2ee391a25dbc18c7
攻击操作二:攻击者调用Paid代理合约owner的权限,更换了owner为攻击者。由于攻击者有Paid合约owner地址私钥,所以可直接使用owner权限,并调用transferOwnership(address newOwner)函数修改owner地址为0x1873…65be。如下图:
https://cn.etherscan.com/tx/0x733dd279b3d24f3415f3850b8eceafc651c1998163dcd0352b9e83c46e2b33d9
攻击操作三:攻击者通过修改后的owner地址0x1873…65be部署攻击合约0xb828…b9c7,如下图:
https://cn.etherscan.com/tx/0x75a22e264ffabbc5e4b84090fb30a76f2b5c4b87ae7a22762cba695d922c04aa
攻击者操作四:攻击者owner调用代理合约中upgrade()函数对攻击者合约进行更新,也就是更新了Paid的逻辑合约为攻击合约,如下图:
https://cn.etherscan.com/tx/0xe4678ca53b308bb35f6fd393ca369e853f936788cd6c318cd38b0a25bec88b70
攻击者操作五:攻击者调用攻击合约中的burn()函数销毁5947万枚PAID代币,如下图:
https://cn.etherscan.com/tx/0x3a483dd881d98541ebbd51e9a64daa700546bae9c2b33a30c2192f9981334b9b
攻击者操作六:攻击者调用攻击合约中的mint()函数给攻击者地址铸币5947万枚PAID代币,如下图:
https://cn.etherscan.com/tx/0x4bb10927ea7afc2336033574b74ebd6f73ef35ac0db1bb96229627c9d77555a0
攻击者后续操作:攻击者铸造5947 万枚 PAID 代币后,随后将部分PAID代币在去中心化交易所 Uniswap 上交易。在后续的交易中,攻击者陆续售出了大约 250 万个 PAID 代币,目前已获得2000 ETH。
总结
通过分析,发生该攻击事件只是因为PAID代理合约所有者owner私钥泄露,合约代码及可升级的合约模型并没有问题,当然也是目前大多数项目的中心化导致。所以建议项目方更要注重合约管理员私钥的安全存储。
安全建议
DeFi今年确实备受关注,黑客攻击也不断发生,包括Harvest Finance,Value DeFi,Akropolis,Cheese Bank和Origin Dollar等均受到不同程度的黑客攻击。针对频频发生的黑客攻击事件,我们给出以下的安全建议:
在项目上线之前,找专业的第三方安全企业进行全面的安全审计,而且可以找多家进行交叉审计;
可以发布漏洞赏金计划,发送社区白帽子帮助找问题,先于黑客找到漏洞;
加强对项目的安全监测和预警,尽量做到在黑客发动攻击之前发布预警从而保护项目安全。
私钥存储安全建议
私钥尽量手抄,确保私钥的准确性,多次校验;
多个安全地方存储
可以将私钥强加密后存在电脑
不要截屏和拍照,会同步到云端
不要拷贝粘贴,会同步到云端
不要使用邮件传输或存储私钥
不要将私钥发到群里
不要将私钥导入未知的第三方网站
深圳零时科技
专注为客户提供全方位区块链安全解决方案及审计服务深圳零时科技有限公司是一家专业的区块链安全漏洞风险检测与安全防御、企业级区块链应用创新解决方案提供商。
公司团队深耕网络安全攻防十余年,并深入研究区块链安全实战经验丰富,旨在为客户提供全方位的安全审计服务及安全解决方案。