火星链 火星链
Ctrl+D收藏火星链
首页 > FTT > 正文

ECON:保险库受到黑客攻击?Pinecone被攻击事件全解析

作者:

时间:1900/1/1 0:00:00

原标题:《独家|灵踪安全:Pinecone被攻击事件分析》

作者:灵踪安全

8月19日,BSC上的收益聚合项目PineconeFinance的保险库受到黑客攻击,损失约350万没PCT代币。

截至写稿时为止,项目方已经针对此次攻击中受损的用户发布了补偿计划:项目团队及投资人共持有491万枚代币,将用所有代币补偿用户。

尽管此次攻击受损的金额相对近期动辄千万、上亿美元的金额不算太大,但这起攻击事件还是给我们留下了值得吸取的经验和教训。

这次攻击出现漏洞的地方在于转账过程使用的代币有损耗,而合约对这个损耗没有处理好于是就导致漏洞出现从而被黑客攻击。

在正常状况下,用户之间转账代币的时候,如果代币在转账过程中没有损耗,处理起来是比较简单的。但如果某些代币在转账过程中会出现损耗,则处理这类代币的转账就要非常小心了。

比特币开发人员正在开发保险库功能,可阻止恶意黑客:金色财经报道,比特币开发人员James O'Beirne正在开发一项比特币保险库功能,当黑客试图窃取他们的比特币时提醒用户,然后通过将资金转移到更安全的钱包来阻止盗窃。该功能类似于一种比特币智能合约或“契约”,对比特币的使用方式施加限制,保险库用户必须在花费比特币(BTC)之前在两个不同的区块中传输两个单独的交易,在第一次交易(有时间延迟)后发出警报,允许用户批准交易或将代币扫到另一个钱包。O'Beirne在他的提案草案中写道:“托管比特币的风险是众所周知的,该提案引入了一种机制,可以显著减轻密钥泄露的最坏情况结果:代币丢失。”[2023/3/1 12:35:24]

在Pinecone项目中,其代币PCT是作为资金池的质押代币,在其合约设计的代币转账过程中会有手续费的损耗。而项目将这个损耗计入了用户的份额中,于是用户份额和质押的PCT总额就会出现偏差。这个偏差就能被攻击者用来领取多余的奖励。

彭博社:比特小鹿斥资4000万新元收购新加坡最高安全级别保险库Le Freeport:9月19日消息,据彭博社援引知情人士报道,吴忌寒旗下公司比特小鹿斥资4000万新元(约2840万美元)收购新加坡最高安全级别保险库Le Freeport,吴忌寒本人已确认了该笔交易,据会计监管机构记录显示该笔收购发生在7月。Le Freeport的造价高达1亿新元(近7100万美元),并于2010年开业。知情人士表示,收购款约3/4流向了包括星展集团在内的债权人,而曾经持有Le Freeport 70%股权的Yves Bouvier和其他股东在偿还债务并支付成本后获得了约500万新元(近355万美元)。[2022/9/19 7:06:23]

具体而言,本次攻击存在漏洞的合约有:

PineconeFarm合约,其地址为:

0x4099f27fb72788b7bb5cb64e3d2b865eb82d0f8f

Synthetix:用户现在可以直接在质押界面访问 iearnfinance SNX 保险库:7月8日,Synthetix官方发布推特称,用户现在可以直接在 Staking 界面访问 iearnfinance SNX 保险库,yEarn SNX 保险库能够为希望获得质押奖励而无需每周管理其头寸的用户提供一劳永逸的质押。[2021/7/9 0:39:54]

farm合约使用的策略合约IPineconeStrategy,其地址为:

0x1e542DB46eb87cc8E5fA8e1856eC53F89dc4bC89

PCT代币合约,其地址为:

0x6019384a802310117a6E889e7021d2d0A144fE50

漏洞涉及的相关代码片段为:

PancakeBunny回应:没有保险库遭到破坏:币安智能链(BSC) DeFi 收益聚合器 PancakeBunny (BUNNY)针对代币闪崩事件发推回应称,没有保险库遭到破坏。漏洞只是攻击了BUNNY的价格。[2021/5/20 22:23:57]

PineconeToke的_transfer()函数:

在这里,PineconeToken的transferFrom的调用了_transfer()函数,在_transfer()中用户转账会收取手续费,因而实际到账的金额比transferFrom传入的amount值要小。

Coin Metrics联合创始人:Bitmex保险库有价值约20亿美元的比特币:10月2日凌晨,Coin Metrics联合创始人Nic Carter发推称,“Bitmex保险库里有价值约20亿美元的比特币(约19.3万枚BTC)。我们将在美东时间10月2日上午9点(北京时间晚上9点)知道其资金是否被冻结。”[2020/10/2]

PineconeFarm合约的deposit()函数:

在上述代码中,PineconeFarm将存入的PCT质押到IPineconeStrategy合约中获取收益。通过使用BSC的vm?trace工具,可以发现这个IPineconeStrategy是一个VaultRabbitCake合约。PineconeFarm对用户份额share的计算会用到_wantAmt。而这个_wantAmt和下面的函数片段又有关联。

策略合约的deposit()函数

从上述代码可以看出,在计算sharesAdded时,其分母是wantTotal,而wantTotal依赖balance()。balance是关联的总锁仓PCT余额。由于实际的PCT余额小于deposit传入的金额_wantAmt,这就会造成用户份额在计算时增加了。

最后,当攻击者调用withdraw函数时,只要输入比deposit值大的参数就可以赎回超过质押数的PCT代币。

按照这个机制,黑客在攻击时,可以重复重复调用deposit和withdraw功能,从而导致合约质押的PCT损耗不断增加、资金池持有的PCT余额不断变小。然后在计算奖励时,由于使用资金池中的余额作为分母,而分母越小,则可额外领取的奖励就越多。

了解了代码的漏洞及相关机制后,我们再来看黑客诸多攻击中的一次攻击:

这次攻击中,黑客的地址为:0xfc6682db7e9f57882e8b18ebc9adc7a19f770494,其交易流程如下:

可以看出第一笔交易0xe446f质押了8.1万PCT,然后在0x76d33提取奖励时却提取了16万PCT。

我们继续查看withdraw交易的参数,可以看出传入amount值为22603495a2af5d0ccc34,将其转换为10进制数就是16万,远超质押金额8.1万。详细细节如下图所示:

从这次攻击的漏洞原因看,在转账时有损耗的代币在参与收益类项目时,存在较多的问题。因此灵踪安全提醒项目方要充分考虑损耗对收益计算的影响。

对此类问题,灵踪安全一直以来都会在审计时特别和项目方强调。另外我们也再次强调审计在项目中的重要性,希望项目方在项目上线前充分做好审计工作。

作者:

灵踪安全CEO谭粤飞

美国弗吉尼亚理工大学(VirginiaTech,Blacksburg,VA,USA)工业工程硕士(Master)。曾任美国硅谷半导体公司AIBTInc软件工程师,负责底层控制系统的开发、设备制程的程序实现、算法的设计,并负责与台积电的全面技术对接和交流。自2011至今,从事嵌入式,互联网及区块链技术的研究,深圳大学创业学院《区块链概论》课程教师,中山大学区块链与智能中心客座研究员,广东省金融创新研究会常务理事?。个人拥有4项区块链相关专利、3本出版著作。

标签:PINEECONCONEPIN比特币行情软件pinescriptPinecone FinanceCONEGAMEEpinToken

FTT热门资讯
ETH:以太坊GAS费短暂飙升至2400Gwei,疑似与0n1Force发售引发“GAS WAR”有关

巴比特讯,8月20日零时左右,以太坊GAS费短暂飙升,数据显示,GAS费瞬时飙升至2400Gwei以上。这或许和一款名为”0n1Force“的NFT项目发售有关.

1900/1/1 0:00:00
CUR:佳士得将拍卖NFT套装「Curio Cards」,下个被主流拥抱的项目会是谁?

作者|秦晓峰编辑|郝方舟出品|Odaily星球日报 北京时间今天凌晨,英国老牌拍卖行佳士得宣布,将于今年10月拍卖一套古早级NFT卡片「CurioCards」,共计30张.

1900/1/1 0:00:00
RAN:Web3 基金会 Grant 资助项目达 300 个!

加入PolkaWorld社区,共建Web3.0! 在寻求服务和支持构建去中心化网络的团队过程中,我们刚刚达到了另一个重要的里程碑——我们通过Grant计划资助了300个项目.

1900/1/1 0:00:00
SHE:国会议员呼吁SEC主席关注加密货币的监管

据Coindesk8月17日消息,国会议员麦克亨利和汤普森呼吁美国证券交易委员会主席根斯勒就加密货币“关注”发表评论,两位国会议员写道.

1900/1/1 0:00:00
ROB:虚拟平行空间,谁在构建元宇宙?

我们抬头看时,总是觉得星星遥远,但其实,宇宙大爆炸时形成的原子就是形成我们身体的原子,所以星星并不远,因为我们就是星星本身。——卡尔·萨根暖阳的下午,有点困,思想有些疲惫.

1900/1/1 0:00:00
LOCK:从《个人信息保护法》谈NFT平台应如何履行告知义务

包括NFT技术应用在内的数字技术进一步加深了人的物理存在与数字存在、过去现在与未来存在的联系,拓展了人类认识自身意义的能力.

1900/1/1 0:00:00