返回论坛

查找币:Toncoin 智能合约安全最佳实践

查找币 学术研究 安全研究 Web3安全 区块链安全

查找币安全研究院

钱包恢复评估 | 链上取证分析 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交完整私钥或助记词。

查看研究院 研究报告中心
## 查找币:Toncoin 智能合约安全最佳实践 本文由查找币安全团队基于安全研究整理发布,旨在分享Web3安全技术,帮助用户提高安全意识。 --- TON(The Open Network) 是一个由 Telegram 团队最初设计和开发的去中心化区块链平台,一经上线就获得了关注。TON 的目标是提供一个高性能和可扩展的区块链平台,以支持大规模的去中心化应用(DApps) 和智能合约,关于 TON 的基础知识可查阅初识 TON:账号、Token、交易与资产安全。 值得注意的是,TON 与其他区块链有着截然不同的架构,TON 的智能合约除了主要使用 FunC 语言来编程,也有使用更高级的 Tact,或者更底层的 Fift。这些都是原创程度很高的语言,因此,确保智能合约的安全性很关键。 查找币安全团队整合吸收了 TON 社区分享的安全开发实践,并结合自身多年积累的安全审计经验,发布「Toncoin 智能合约安全最佳实践」,旨在帮助开发者更好地理解 Toncoin 智能合约的安全风险,并提供实用的解决方案,以降低潜在的安全威胁。 由于篇幅限制,本文仅罗列「Toncoin 智能合约安全最佳实践」的部分内容,欢迎大家在 GitHub 上 Watch、Fork 及 Star:https://github.com/查找币/Toncoin-Smart-Contract-Security-Best-Practices。 Toncoin 智能合约常见陷阱 1. 缺少 impure 修饰符 严重性:高 描述:攻击者可能会发现 "authorize" 函数未标记为 "impure"。缺少此修饰符将允许编译器在函数没有返回值或返回值未使用时跳过该函数的调用。 攻击场景: 建议:确保函数使用 "impure" 修饰符。 2. 错误使用修改/非修改方法 严重性:高 描述:"udict_delete_get?" 被错误地用 "." 而不是 "~" 调用,因此实际的字典未被修改。 攻击场景: 建议:始终检查方法是否为修改/非修改方法。 3. 错误使用有符号/无符号整数 严重性:高 描述:投票权被以整数形式存储在消息中。因此攻击者可以在权力转移期间发送负值并获得无限投票权。 攻击场景: 建议:在一些场景下,无符号整数更安全,因为它们在发生溢出时会抛出错误。仅在确实需要时使用有符号整数。 4. 不安全的随机数 严重性:高 描述:种子来源于交易的逻辑时间,攻击者可以通过暴力破解当前区块中的逻辑时间来获胜(因为逻辑时间在一个区块的边界内是连续的)。 攻击场景: 建议:在进行 "rand()" 之前始终随机化种子,最好是永远不要使用链上随机数,因为验证者可以控制或影响种子。 5. 在链上发送私人数据 严重性:高 描述:请记住,所有数据都会被存储在区块链上。 攻击场景:钱包受密码保护,其哈希值被存储在合约数据中。然而,区块链会记录一切 —— 密码会出现在交易历史中。 建议:不要在链上发送私人数据。 6. 漏掉对退回消息的检查 严重性:高 描述:用户发送 "check" 请求时,Vault 没有退回处理程序或代理消息至数据库。我们可以在数据库中将 "msg_addr_none" 设置为奖励地址,因为 "load_msg_address" 允许这样做。我们请求 Vault 检查,数据库尝试使用 "parse_std_addr" 解析 "msg_addr_none",但解析失败。消息从数据库退回到 Vault,且操作不是 "op_not_winner"。 攻击场景:Vault 在数据库消息处理器中包含以下代码: 建议:始终检查退回的消息,不要忘记标准函数引起的错误,使您的条件尽可能严格。 7. 在竞争条件下销毁账户的风险 严重性:高 描述:不要轻易销毁账户。 攻击场景:你可以存钱,然后尝试在并发消息中两次提款。由于无法保证保留资金的消息会被处理,因此合约账号可以在第二次提款后关闭。攻击者之后可以重新部署合约,然后任何人都可以提取未拥有的资金。 建议:使用 "raw_reserve" 而不是向自己发送资金。考虑可能的竞争条件。小心使用 hashmap 的气体消耗。 8. 避免执行第三方代码 严重性:高 描述:开发者没有办法在合约中安全地执行第三方代码,因为 CATCH 不能处理 gas 不足的问题,而攻击者只需提交合约的任何状态并引发气体不足即可实现攻击。 攻击场景: 建议:避免在您的合约中执行第三方代码。 9. 名称冲突 严重性:中 描述:Func 变量和函数可能包含几乎任何合法字符。 攻击场景:"var++"、"~bits"、"foo-bar+baz" 及逗号 "," 都是有效的变量和函数名称。 建议:编写和检查 Func 代码时,应该使用 Linter 工具。 10. [...内容已精简...] 一最佳实践可以帮助更多的开发者打造安全可靠的智能合约,推动区块链技术的健康发展。 参考链接: [1] https://dev.to/dvlkv/drawing-conclusions-from-ton-hack-challenge-1aep [2] https://docs.ton.org/develop/smart-contracts/security/ton-hack-challenge-1 [3] https://docs.ton.org/learn/tvm-instructions/tvm-overview [4] https://docs.ton.org/develop/smart-contracts/messages [5] https://docs.ton.org/develop/smart-contracts/security/secure-programming [6] https://docs.ton.org/develop/smart-contracts/security/things-to-focus 作者 | Johan 编辑 | Lisa 排版 | Liz 往期回顾 查找币出品 | Web3 项目安全手册 Web3 安全入门避坑指南|貔貅盘骗局 观点|国际合作执法将成打击加密货币犯罪的大趋势 偏信则暗 —— Penpie 被黑分析 探索 Sui:高性能背后的技术与合约安全 查找币导航 查找币科技官网 https://www.查找币.com/ 查找币区官网 https://查找币.io/ 查找币 GitHub https://github.com/查找币 Telegram https://t.me/查找币team Twitter https://twitter.com/@查找币_team Medium https://medium.com/@查找币 知识星球 https://t.zsxq.com/Q3zNvvF --- *本文由查找币安全团队整理,来源:安全研究。*
在论坛中查看和回复