BlockSec:2023 年度报告!区块链安全的新挑战和新趋势
2024-01-1905:21
BlockSec
2024-01-19 05:21
BlockSec
2024-01-19 05:21
收藏文章
订阅专栏

尽管 2023 年大部分时间都是 Web3 市场的熊市,但由于协议漏洞导致的攻击仍然对整个生态构成了严重威胁。去年我们目睹了不少损失重大的攻击事件,例如 Euler Finance 遭受黑客攻击损失 1.9 亿美金。但同时,这也使我们看到了区块链安全中的新挑战和新趋势,例如编译器导致的漏洞、开发库之间的不兼容问题等。

Web3 项目方为了防范外部攻击,提出了多种解决方案,例如部署监控和威胁警报系统。迫不得已时,也会向白帽寻求援助。虽然这些方案能带来一些改善,但只能解决某一部分或某一阶段的安全问题。社区仍然缺乏系统性的方法来指导 Web3 项目方提升安全性。

在这篇文章中,我们将通过一些典型案例揭示 2023 年 Web3 安全的新趋势,介绍目前主流的解决方案及其局限性,并分享 BlockSec 在面对这些挑战时所采取的应对策略。

- 1 -

区块链安全新趋势

    趋势 1:知名协议遭受重创

2023 年,一些知名且运行已久的Web3项目方遭受攻击,其中包括Curve、Balancer 和 KyberSwap等知名协议。

下表显示了这些协议的上线时间和遭受攻击的时间。值得注意的是,它们被攻击的漏洞大多是在后续升级中新引入的,所以攻击时间会大大晚于协议的上线时间。(表中显示的持续时间并非精确时间,仅作为大致参考)

除了上表中提到的情况外,Aave V2 在 11 月份收到社区的漏洞报告后也紧急暂停了服务。尽管最终没有遭到攻击,但仍然引发了人们对这些知名协议安全性的担忧。

这些头部协议都曾经过数次审计,项目方内部也采取了多项安全措施。

下表显示了每个协议的审计机构。需要注意的是,一个审计机构可能只对协议的部分智能合约进行审计。表中所列出的审计机构并不一定意味着对那些发生漏洞的合约进行过审计,只是使用此表来展示这些项目方在维护协议安全方面投入了大量的资源

幸运的是,项目方会通过补偿计划对资金受损的用户进行相应的赔偿。 例如,Kyber Network 通过 KyberSwap Treasury 向用户提供损失补偿。同样,Curve 社区投票通过了赔偿计划,以补偿流动性提供者 (LP)的经济损失。这些补偿的行动可以帮助用户重建对 DeFi 社区的信心,尽管项目方付出了巨大的代价。

    趋势 2:全新挑战层出不穷

在去年,涉及编译器错误和第三方库兼容性问题的新型攻击向量也已经出现。比如:去年 7 月底 Curve 由于特定版本的 Vyper 编译器存在漏洞遭到攻击,一些协议因在流行的第三方开发库(如:thirdweb)中集成 ERC-2771 和 Multicall 标准时的缺陷而受到黑客攻击。这些复杂的挑战凸显了安全措施不断发展的重要性,以有效防止新的和不可预见的漏洞。

>> 编译器漏洞

1983 年,Ken Thompson 在获得图灵奖时发表了题为《Reflections on Trusting Trust》的演讲,演讲的内容得到了社会各界的广泛好评。在这次演讲中,他描述了通过修改 C 编译器在程序中插入后门(backdoor)来进行攻击的过程。然而,恶意编译器的真实案例并不多见(除了众所周知的 XcodeGhost 安全事件)。即使我们将安全模型从恶意编译器放宽到良性但意外的编译器行为,造成严重经济损失的公开案例仍然很少见。

然而,2023 年由 Vyper 编译器漏洞引发的 Curve 安全事件打破了这一固有印象。这起安全事件造成了约 7000 万美金的损失,引发 Web3 世界一片哗然(部分已退还,实际损失约为 2300 万美元)。漏洞原因在于 Vyper 编译器的 0.2.15、0.2.16 和 0.3.0 版本存在重入锁机制失效的漏洞, 这意味着攻击者可以利用重入性来进行攻击。而如果编译器生成正确的字节码,这种情况就不会发生——因为开发人员已经添加了代码来防止重入攻击的发生。


>> 协议标准的不兼容性

DeFi 的可组合性意味着不同的智能合约和标准可以相互连接在一起,最终构建一个强大的应用程序。然而,这一特性也会引发兼容性问题。例如,每个智能合约单独执行时可以运行良好,但相互连接后却会产生新的安全漏洞。

ERC2711 和 Multicall 的不兼容问题就是这样的一个例子。 具体来说,ERC2711 是一个通过可信转发器合约接受元交易的接口标准,而 Multicall 是一种可以在单个交易中批量处理多个函数的智能合约。

在从可信中转合约转发调用时,实际的调用地址是从 calldata 中获取的,但攻击者是可以在转发请求中插入恶意 calldata 进行伪造,从而操纵用户的代币。如果我们单独看这两个标准,它们都能正常运行。然而,当它们组合在一起时可能会打破一些我们原有的设想,并引发意想不到的问题。获取更多相关信息,请参阅 OpenZeppelin 的博客。

需要注意的是,这两个标准是在主流的开发库(包括 OpenZeppeline 和 thirdweb)中实现的。开发人员会过分信任此类主流的代码库,在代码审计时将其排除在外。所以有时即使协议本身不易受到攻击,也可能会产生新的被忽视的安全漏洞。

    趋势 3:旧漏洞,新威胁

“精度损失”是指在计算过程中,精确度和准确度降低的情形。这通常是由于结果的小数位数少于预期造成的。事实上,使用静态分析程序可以轻松检测到精度损失的问题。精度损失的存在并不意味着安全漏洞的存在,只有造成严重后果时,才会被视为安全漏洞。 

那么,如何评估精度损失的影响呢?这通常需要了解协议的语义和代码的上下文。

许多攻击针对的是从主流协议(如 Compound v2 和 Aave v2)分叉出来的协议,这些协议很容易受到已知精度问题的影响。例如,Hundred Finance 和 Channels Finance(从 Compound v2 分叉出来)的攻击事件,涉及精度损失和市场未正确初始化的错误。在这些事件中,由于数字的舍入问题,攻击者可以使用更少的代币来赎回抵押品。

- 2 -

当前解决方案的局限性

事实上,许多知名的项目方都已投入了大量资源来确保安全性,在项目上线前也会进行多轮的安全审计。然而,考虑到这些项目保管着大量用户资产,强调安全的重要性并不为过除了代码审计之外,行业各路高手还提出了其他解决方案,例如威胁监控系统。让我们一起深入研究目前的解决方案以及存在的局限性。

    代码审计

在本文中,代码审计指的是在协议上线之前对代码进行安全评估的过程。通常通过手动代码审查、静态分析、动态模糊测试和形式化验证这几种评估方式的组合来完成。此外,这个过程可以由一家(或几家)审计公司或通过社区驱动的方式来进行。但实际上,代码审计本身存在一定的局限性

首先,代码审计只能覆盖项目上线前的阶段。审计结束后,在协议运行的过程中,是无法通过代码审计来持续评估协议安全性的。

其次,代码审计通常难以识别需要复杂交互和特定状态才能触发的微妙漏洞。DeFi 的可组合性使得一个协议可以灵活地与其他协议集成(或被集成),但同时也显著扩展了整个程序空间。这给人工代码审查和静态分析带来了巨大的挑战 -- 难以探索所有的程序状态。尽管动态模糊测试在某些情况下可以帮助探索程序状态,但会受到交易和状态依赖性的限制。更重要的是,业内目前没有能够检测 DeFi 协议漏洞的模糊测试预言机,这在行业和学术界仍然是一个悬而未决的问题。

再次,合格的代码审计人员紧缺,人才库有限,且这一问题在短期内难以解决。因为代码审计涉及到网络安全、金融和数学的跨学科领域,而目前全球只有少数几所大学提供相关教育和人才培养。这就导致高质量的代码审计成本高昂,且通常需要几个月时间才能排上队。因此,有些项目方为了保证项目如期上线,可能会跳过代码审计这一环节。

最后,用户很难评估代码审计的质量。理论上,用户将他们的资产投入到协议中,是最关心协议安全的人。但由于普通用户无法判断代码审计的好坏,就出现了只盖“萝卜章”的审计方式,而这反过来又损害了协议和用户资产的安全性。

总之,代码审计可以帮助确保协议的安全,但其固有的局限性意味着它不能成为唯一的安全解决方案

    威胁监测

威胁监测的基本思路是监控并检测可疑威胁,但仍存在以下几点问题:

首先,准确性很重要,尤其是需要平衡低 FP(False Positives) 和 FN(False Negatives) 结果。如果一个警报系统有太多的误报,那么在实践中就无法使用。因为没有项目方会愿意用不准确的告警信息作为立即启动自动防御策略的条件,这会给项目的持续运营带来过多的干扰。

其次,目前大多数威胁监测系统只能报告可疑交易,并且需要手动确认才能执行进一步操作。这是由于前面提到的高 FP 问题导致的。然而,这样就降低了监测系统的实用性,因为黑客对项目的攻击通常在极短的时间内发生,等到项目方收到告警信息、再人工介入,为时已晚

- 3 -

BlockSec 的安全指南

我们认为协议安全需要在协议生命周期的不同阶段采用多重防御措施,包括高质量的代码审计、上线前的安全测试,攻击检测和阻断,以及上线后的安全事件响应。此外,我们还想强调一些被大众所忽视的视角。

首先,我们认为任何小的代码或配置升级都需要进行彻底的安全测试。这样的测试应该在协议的实际运行状态下而不是在基于用户数据的虚假状态上进行。 如前所述,协议状态对于定位复杂协议中的漏洞至关重要。

第二,除了常规的人工干预之外,使用一个自动响应攻击的系统是很有必要的。这就需要一个准确、及时的攻击检测系统,且误报率降低为接近于零。

第三,建立良好的安全事件应对方案,并且需要能够提供全面安全服务的合作伙伴。 例如,当漏洞发生时,合作方可以协助创建作战室、推荐采取的措施、帮助审查和审核安全补丁、跟踪资金流向等。

    BlockSec 提供全方位安全服务

基于上述视角,BlockSec 为协议提供全方位安全服务:

>> 专业的代码审计服BlockSec 提供高质量的代码审计服务。通过利用静态分析工具、动态模糊测试以及具有创造性学术研究支持的差分测试系统等方式对协议进行深入的代码审计,我们的审计服务涵盖协议本身以及底层的 EVM 执行引擎。此外,我们的静态分析工具 Hookscan 得到了 Uniswap Lab 的支持,用于检测 Uniswap V4 Hooks(Uniswap v4 hook )合约中的漏洞。

>> 安全测试平台 Phalcon Fork这是一款协作友好的安全测试平台,支持团队测试和用户公测两种模式。Phalcon Fork 可以镜像主网状态并在更新代码和配置时为协议提供安全测试环境的框架。其中内置的 Phalcon Explorer 还可以帮助开发者调试交易。Phalcon Fork 发送的所有交易都可以与其他开发者和普通用户共享协作,从而构建了一个可以让用户参与测试过程的公测 DApp。

>> 攻击监控和自动化阻断平台 Phalcon BlockPhalcon Block 可以帮助项目方主动监控恶意合约和攻击交易(甚至在黑客启动攻击交易之前),并在威胁发生前自动化地完成攻击阻断,严密守护用户资产。凭借 AI 算法和行为混合检测引擎(hybrid detection engine),再辅以用户依据业务实际配置的监控策略,Phalcon Block 完美平衡了 FP 和 FN,将误报率降低到极致,从而让自动化的攻击防御成为可能。在 Phalcon Block 正式推出前,该项技术已成功阻止 20 多次攻击并挽回约 1400 万美元。

>> 安全事件响应BlockSec 自成立以来,始终在第一时间识别黑客攻击,并快速做出原因分析。在安全事件发生后,BlockSec 可帮助项目方审查安全补丁,提供白帽救援[AnySwap、TransitSwap、Paraspace],跟踪黑客资金流向,查明攻击者的身份等(HopeLend)。

- 4 -

总结

回顾 2023 年,我们发现 Web3 安全出现了新的挑战和趋势,许多知名协议受到攻击。我们深知,在技术层面确保项目安全是一个复杂且长久的挑战。仅仅依赖代码审计或监测系统已经不再足以满足目前项目方的安全需求,我们需要一个全方位的安全解决方案,将各种应对方式有机结合起来,并贯穿项目方的整个生命周期。

BlockSec 对维护区块链安全的全周期解决方案,结合了尖端的审计技术、自动攻击防御工具和安全响应事件管理。我们是各大项目方加强安全措施并保护用户资产的协议的主要合作伙伴,2024 年和 BlockSec 一起,携手应对区块链安全领域不断变化的威胁。



【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

专栏文章
查看更多
数据请求中

推荐专栏

数据请求中

一起「遇见」未来

DOWNLOAD FORESIGHT NEWS APP

Download QR Code