本文Hash(SHA1):46341861ab5088427bfcdebb00a06688893878ed
编号:链源Security Knowledge No.005
TON作为最初由Telegram团队开发的公链,随着开源社区的持续推进和它每秒能够处理数百万笔交易的高吞吐量优势,大规模应用商和个人开发者对它的关注度越来越高,但作为一条和ETH及类ETH迥异的公链,它的发展势必会带来新的思考和问题,链源安全团队从TON的架构和Locker合约等方面进行了安全分析,希望能够帮助读者在TON链上提高保护自身资产安全的能力。
架构
通过对TON白皮书的研读,我们发现有以下几个关键点关联到了实际的安全问题:
1. TON底层的智能合约需要支付租金并向用户收费
在TON上,智能合约需要持有TON代币余额以支付租金。如果合约资金用尽,合约将被删除,虽然TON官方点明合约是可以恢复的,但智能合约的确可能因资金不足而被删除,这可能导致数据丢失和服务中断。
2. 智能合约之间的调用是异步且非原子的
TON的智能合约调用是异步的,类似于微服务之间的通信,这使得调用后的执行需要在未来的区块中完成,异步调用增加了一致性维护的难度,可能会引入错误,并且原子性的缺失可能导致部分失败的事务无法回滚,从而影响数据的一致性。
3. 智能合约无法运行其他合约的getter方法
TON的智能合约只能通过发送异步消息与其他合约通信,无法直接读取其他合约的数据,这种限制可能会导致数据获取延迟,并可能使合约设计更加复杂,增加了潜在的漏洞风险。
4. 智能合约代码不是不可变的,可以轻易修改
这是TON公链区别性很大的一点,它允许智能合约代码修改,这使得合约可以随着需求变化进行更新,但是代码的可变性可能导致恶意修改,增加了安全漏洞的风险。
5. 合约状态中不应有无限数据结构
TON不支持无限数据结构,因为这会导致Gas费用增加并可能导致DoS攻击,在这一点上它们规避了EVM的问题,因为无限数据结构可能被攻击者利用,通过添加大量条目导致服务拒绝。
6. TON的钱包相当于合约,一个公钥可以部署多个钱包
这同样是和EVM迥异的一点,TON的钱包是独立的智能合约,每个公钥可以有多个钱包,但多个钱包地址就会增加管理的复杂性和潜在的攻击面。
Locker合约
在TON区块链上,每个账户都可以部署智能合约,这使得用户可以高度自定义和增强他们的钱包功能,这相当于将EVM中的EOA地址和OA地址的功能进行了有机结合。
TON的智能合约可以处理两种类型的消息:内部消息和外部消息。内部消息从一个合约发送到另一个合约,外部消息从互联网发送到合约,并且它的智能合约会回复所有的内部消息。
通过对TON所公布的locker-contract合约进行分析可知,TON目前存在着消息反弹的问题,如果发送到locker合约的消息无法被处理,消息会被反弹回发送者,这意味着如果恶意攻击者向一个未部署合约的账户发送带有反弹标志的信息,转账金额在扣除手续费后会被反弹回攻击者的账户,形成假充值/假转账攻击。
在这一点上建议对接TON公链的交易所或钱包可以验证智能合约部署,在处理充值前,确保接收地址已部署了智能合约,以避免反弹攻击,并采用多重验证,在入账前,进行多重验证,包括检查发送者和接收者地址的合法性,并确保金额符合预期。
结语
总的来说TON通过创新的设计在扩展性和灵活性方面取得了显著进展,适合大规模的去中心化应用。然而,其复杂性和潜在的安全风险也要求开发者具备更高的技术水平和安全意识。总体而言,TON是一个前景广阔但仍需谨慎管理的新公链。
链源科技是一家专注于区块链安全的公司。我们的核心工作包括区块链安全研究、链上数据分析,以及资产和合约漏洞救援,已成功为个人和机构追回多起被盗数字资产。同时,我们致力于为行业机构提供项目安全分析报告、链上溯源和技术咨询/支撑服务。
感谢各位的阅读,我们会持续专注和分享区块链安全内容。