智能合约( Smart Contract )是一种以信息化方式传播、验证或执行合同的计算机协议,该技术允许在没有第三方的情况下进行可信交易,具有合约内容去信任化、不可篡改和经济高效等优势。近年来,智能合约凭借其技术特点,在区块链网络中得以广泛应用,其用例包括数字资产交易、金融衍生品、数字身份、数据存储等领域。

智能合约在加密领域中能够控制大量的价值和数据,成为 Web3 时代最为重要的无形的资产。而部署在区块链上智能合约本身具有不可变的逻辑特点,为我们创造了一个充满活力的去信任、去中心化的一个应用程序生态系统。与此同时,由于智能合约部署后不能修改的特性,如果智能合约存在安全风险问题,会使得某些利用智能合约中的漏洞以获利的黑客有机可乘,将导致资产受损且往往无法挽回,给项目造成巨大损失。
如今,区块链技术和应用尚处于快速发展的初级阶段,面临的安全风险种类繁多,部署在区块链上的智能合约对安全的需求也日新月异。面对安全、低效、不当行为等诸多问题,智能合约代码中的小错误可能会造成数百万甚至数十亿美元的损失。
因此,智能合约安全审计作为智能合约部署和运行的重要环节,承担着全面分析智能合约逻辑设计规范和设计目的,测试智能合约存在的安全风险,根据项目流程进行模拟算法漏洞测试,纠正设计问题,审查代码错误或安全漏洞等作用,成为 Web3 项目构建过程中的重中之重。

“黑客事件频发,智能合约安全的出路在哪里?” Web3 领域的发展对智能合约安全提出了更高的要求和全新的考验,第 16 期 TinTin Meeting 即以智能合约安全为主题,邀请智能合约安全相关专家大咖,圆桌畅谈他们有关智能合约安全相关丰富的行业经验和建议,本次活动吸引到来自国内外近 5000 名开发者的关注,错过直播的小伙伴可以点击下方活动链接,观看活动回放:
YouTube:
https://youtu.be/TR8roxCt35U
精彩内容
智能合约安全攻击对象转向普通用户
活动嘉宾
本次活动的嘉宾主持人是来自 Moonbeam 中文社区经理 Yuki Pan。她在区块链项目运营模式、公链生态拓展解决方案、技术落地等领域有多年的工作经验。
来自区块链安全审计机构 Armors 的嘉宾 Yety 有五年以上数字资产行业经验。Armors 自 2017 年成立以来,累计为 2000 多家区块链平台、交易所、DApp 等项目提供安全审计、跨链迁移、平台安全等全方位的服务,为客户挽回近 40000 BTC 的资产。
嘉宾 Larry Yang 目前担任 Certik 安全工程师,具有丰富的智能合约审计经验。Certik 创立四年以来累计审计约 3500 个项目,审计项目总市值超过 3000 亿美元,Certik 产品线丰富,除常规审计服务,还提供审计之后实时监测、事件分析等服务。

来自 SharkTeam 的嘉宾 Adam 是 6 项信息安全专利发明人,曾参与制定多项信息安全行业标准,是国内最早一批从事区块链技术研发的技术人员之一。SharkTeam 致力于智能合约审计和链上安全分析,其自 2011 年成立后从 Web2 安全研究做到 Web3 安全审计,积累了丰富经验。
信息安全专家 Rivaill 是 Supremacy 联合创始人,为行业内多家项目方输出过安全技术,目前专注于 Web3 领域的安全研究与工程实现。Supremacy 主要为 Web3 项目提供全生命周期的产品安全服务和解决方案。
Verilog Solutions 安全工程师 Daniel Tong 对智能合约安全有较深入的了解和研究。Verilog 主要做精品审计团队,目前审计过的项目很多都成为行业中高口碑的龙头项目。

智能合约几大安全问题
最普遍问题:合约漏洞
Daniel 老师提到目前智能合约安全问题中最普遍、最主要的问题就是合约漏洞问题。合约漏洞的类型有很多种,比如今年出现比较多的次数的就是 DNS 前端的网站劫持。但简而言之,就是背后交互的合约被别人换掉,而往往合约地址前 4 位和后 4 位和真实的合约地址是一样的,很多人经常用合约,可能也不一定能发现有什么问题。
合约安全之防外与防内
从安全审计的角度,Yety 老师提出目前其遇到的比较多的是数字资产增发、恶意后门、邀请机制逻辑设计缺陷问题。这里其实出现了一个“防内”作恶的问题,比如某个项目如果要搞一些套路,就会开始无限地增发,很可能之后直接跑路、转移 owner 权限等问题;此外还有假充值、控制权限等问题,很多项目内部出现了作恶问题。
攻击对象从协议到用户
根据多年的安全审计从业经验,Rivaill 老师发现越来越多黑客从以前攻击项目协议,到现在渐渐开始攻击普通用户。因此,不管是利用协议漏洞也好,通过欺诈、钓鱼也好。目前来说,这个阶段普通用户需要有一个安全意识的提升。在如今的 Web3 生态中没有或很少有法律能够保护到普通用户,我们只能在甄选优质项目的基础上,自己保护自己。

价格操纵问题不容忽视
近年智能合约安全问题总结
语法层面经典漏洞
语法层面的经典漏洞问题在 2021 年和 2022 年上半年或者第一季度应该出现地比较多。如因为默克尔树的结构问题,被盗了资金。再到权限控制漏洞,合约升级漏洞,如之前的笨小孩,这都属于比较经典的合约安全漏洞。这其实是可以通过智能合约审计而有效的防止,所以大家在投资项目的时候一定要关注一下项目是否有过合约审计。
业务安全漏洞
这一层面虽不是合约安全的经典漏洞,但它也属于合约安全的范畴,属于业务安全漏洞。其实 DeFi 跟 NFT 项目出现的安全问题是有区别的,如操纵价格是 DeFi 项目比较容易出的问题,像 NFT 项目比较多的漏洞是参数设置漏洞,属于业务安全漏洞。这一类漏洞其实是相对比较难以防范的。
价值风险和流动性风险
第三个层面是价值风险和流动性风险。实际上有些项目本身具有流动性风险的,这在 NFT 领域比较典型。尤其处于熊市,泡沫在 Web3 领域就会比较多地破裂,这跟技术层面没有太大关系,属于投资属方面大家需要要注意的点。
资产被盗风险
合约审计构建项目安全之盾
全面审计,为 Web3 项目保驾护航
Web3 项目是否有过合约安全审计是衡量项目未来的重要指标之一,而审计报告往往涉及很多技术内容,对于普通用户的阅读理解而言十分不友好。目前,Armors 除 Solidity, Rust 等智能合约外,已增加 Move 合约审计,基本上囊括了加密领域大部分智能合约审计,具有丰富的审计经验。来自 Armors 的嘉宾 Yety 老师则解读了安全审计的具体内容,以帮助大家快速掌握项目的安全度。
Yety 老师介绍道,Armors 团队针对智能合约安全审计的内容主要有:权限漏洞、溢出、重入重放、攻击、漏洞函数、恶意初始化操控、预言机回退攻击、合约升级漏洞条件竞争、访问控制、拒绝服务业务逻辑审计,还有能力安全使用的审计。此外还包括,预言机操控、外部模块安全审计、区块数据依赖安全审计等,共包括 18 个审计项目,以为项目方和用户提供全面的审计信息。
审计之外,项目安全多维度分析
经历了安全审计,该项目就是安全的吗?答案自然是否定的。对于对于普通用户来说,衡量一个项目能不能参与很重要的一个标准是“这个项目有没有经过审计”。但是经过了审计,并不能已经保证它安全,审计并不能作为一种项目背书。信息安全专家 Rivaill 提到很多项目提交审计代码是不完整的,但却也能挂上已审计的证明。他为我们带来了五个维度上的安全分析和标准:
第一,需关注项目状态的更新。审计更多的是作为一种静态的参考,其实除了审计之外,我们还是要有一些动态关注的点。比如第一点,我们是要关注项目状态的更新。比如业务数值是否出现了异常,或者代理合约对逻辑合约指向是否更改,这都是我们需要动态关注的更新。
第二,项目所依赖的流动性风险及影响。因为流动性过小,它可能会导致一个价格操纵的问题。比如有一些借贷平台的这些抵押资产,它的流动性很小,就可以通过操纵抵押制成的价格来完成一个杠杆效应。
第三,针对治理的攻击需要及时关注和规避。我们需要看这个项目是否有它的治理,是否有异常的提案。因为我们知道对于这些大项目来说,都是一般有很多人关注,但是小项目就不一定,我们要经常关注,规避这类风险。
第四,注重项目更新的稳定性。Rivaill 觉得项目是不建议频繁更新的,因为每次引入新的东西都会造成一定的风险。因为审计目前都是单次的,因为单次的审计它是没法对后续项目更新后提供保障。
第五,关注行业中新的攻击向量。攻击向量是黑客用于发动攻击的手段。我们都知道 Web3 生态是日新月异,每隔一段时间都会有一些新技术新的生态去出来。随着这个技术的更新和各种邪恶的各种协议的组合,衍生针对 Web3 的攻击向量,对于这些出来的新型的攻击手段,我们是要对项目进行额外的测试。

暴露问题,才能更好地解决问题
为什么存在项目安全审计,Web3 的安全事件还是频发?相信不少开发者会有这样的疑惑。首先,智能合约存在各式各样的潜在风险,而概括起来主要可分为后端(合约端)安全、前端交互安全和底层协议安全。在这其中,不仅仅是需要各项审计机构的单次服务,更加需要的是一个持续性的安全审计服务,以及不管是从项目方的自查、社会的监督,还是从第三方的专业机构上面的辅助,包括项目方自身的安全意识。
此外,Daniel 老师提到,“为什么提到 Web3 安全事件,大家能够知道很多很多,而你却从来没有听过淘宝、支付宝出现问题?”这是因为它的系统是封闭的,作为普通用户你永远没有“权力”、“途径”去知道它什么时候遇到了什么事。
而 Web3 是去中心化的、透明的,我们能够时时刻刻看到它发生的任何事情。而极大的信息透明度带来的就是无限的信息传播,你需要去甄别去学习,普通人一定要学很多相关的知识去保护自己。Web3 整个行业现在还太早期了,暴露安全问题可以更好地解决问题,很多 Web3 团队也缺乏网络安全经验,安全问题的解决是项目成长的必经之路。
智能合约安全由谁守护?
少交互:尤其是少同自己不熟悉的合约进行交互。最好的状态是我们能够知道每一步操作都在做什么?不要因为害怕错失时机而进入一个网址就开始交易,不轻易的点击一些来目来历不明的链接网址。做好项目调研,明晰交易过程,尤其是投机性心理要尽量的避免,从而最大程度减少资产受损失的风险。
用户私钥保存和个人信息保护:各位用户在每次创建钱包后,一定要安全正确的保护和备份好自己的私钥,不要把私钥和个人的信息泄露给别人。
智能合约安全问题后果严重,对于开发者而言,如何使自己的 Web3 项目更加安全?具有丰富合约审计经验的嘉宾给出了以下建议:
第三方安全审计公司深度合作:好的审计公司不仅会审计代码的安全性,能够从最全面的维度上去保障项目的安全性,从而降低用户资产受到损。
提高安全意识:开发者最好能够养成一种防御性编码的思维,每一个功能,每一个函数,每一个模块的时候都要想是否可能会造成非预期的影响。构建完整个项目之后,提交审计的时候要也要多与审计机构进行沟通,顺便也可以学习了解这方面的安全的知识。

智能合约安全问题的解决并非一朝一夕,非常感谢来自不同项目的审计专家同我们分享了他们关于合约安全问题的见解。通过本次分享会,我们不难发现智能合约安全的解决需要项目开发成员、专业审计团队和用户共同努力,提高安全意识,学习相关安全知识,智能合约安全将由每一位 Web3er 持续守护。
往期精彩
关于我们
ABOUT US
TinTinLand 是赋能下一代开发者的技术社区,通过聚集、培育、输送开发者到各开放网络,共同定义并构建未来。
Discord: https://discord.gg/kmPnTDSFu8
Twitter: https://twitter.com/Tintinland2021
Bilibili: https://space.bilibili.com/1152852334
Medium: https://medium.com/@tintin.land2021
YouTube:https://www.youtube.com/channel/UCfHiMcFt-4btbC75FsReQh
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
