概述今年,黑客从加密应用程序中窃取了超过20亿美元。随着加密生态系统的发展和吸引更多恶意行为者,问题只会变得更糟。有些事情必须改变。是时候后退一步,反思过去的错误,并改变我们处理这个行业安全问题的方式了。
今年,黑客从加密应用程序中窃取了超过 20 亿美元。随着加密生态系统的发展和吸引更多恶意行为者,问题只会变得更糟。有些事情必须改变。是时候后退一步,反思过去的错误,并改变我们处理这个行业安全问题的方式了。
在本文中,我将:
加密应用程序生态系统由可互操作的协议组成,由智能合约提供支持,依赖于主机链和互联网的底层基础设施。
该堆栈的每一层都有其独特的漏洞。我们可以根据被利用的堆栈层和使用的方法对加密黑客进行分类。
对基础设施层的攻击利用了支持加密应用程序的底层系统的弱点:它依赖于达成共识的区块链、用于前端的互联网服务以及用于私钥管理的工具。
这一层的黑客利用智能合约语言(如 Solidity)的弱点。智能合约语言中存在众所周知的漏洞,例如重入和错误的delegatecall 调用危险,可以通过遵循最佳实践来缓解这些漏洞。 *有趣的事实: Reentrancy,用于执行6000 万美元 DAO 黑客攻击的漏洞,实际上是在Least Authority 对以太坊的安全审计中发现的。想想如果在发布前就解决了,事情会有多么不同,这很有趣。
此类攻击利用单个应用程序的业务逻辑中的错误。如果黑客发现错误,他们可以利用它来触发应用程序开发人员不希望发生的行为。
例如,如果一个新的去中心化交易所在确定用户从交换中获得多少的数学方程式中存在错误,则可以利用该错误从交换中获得比本应获得的更多的钱。
协议逻辑级攻击还可以利用现有的治理系统来控制应用程序的参数。
许多最有影响力的加密黑客利用了多个应用程序之间的交互。最常见的变体是黑客利用从另一个协议借来的资金来利用一个协议中的逻辑错误来扩大攻击规模。
通常,用于生态系统攻击的资金是通过闪贷借来的。在执行闪贷时,你可以从 Aave 和 dYdX 等协议的流动资金池中借到尽可能多的钱,而无需提供抵押品,只要资金在同一笔交易中归还即可。
我收集了 2020 年以来 100 起最大的加密黑客攻击的数据集,被盗资金总计 50 亿美元。
生态系统攻击发生的频率最高。他们占样本组的 41%。
协议逻辑漏洞导致的资金损失最多。
数据集中的三个最大攻击,Ronin 网桥攻击(6.24 亿美元)、Poly Network 黑客攻击(6.11 亿美元)和Binance 网桥攻击(5.7 亿美元),对结果产生了巨大的影响。
如果排除前三名攻击,那么基础设施黑客攻击是损失资金最多的类别。
在样本组中 61% 的基础设施攻击中,私钥被未知方式泄露。黑客可能已经使用网络钓鱼电子邮件和虚假招聘广告等社交攻击获得了对这些私钥的访问权限。
重入攻击是智能合约语言级别最流行的攻击类型。 具体细节可以看我的这篇文章:https://learnblockchain.cn/article/5260 在重入攻击中,易受攻击的智能合约中的函数调用恶意联系人的函数。或者,当易受攻击的合约向恶意合约发送令牌时,可以触发恶意合约中的功能。然后,在合约更新其余额之前,该恶意函数会在递归循环中回调易受攻击的函数。
例如,在Siren Protocol黑客攻击中,提取抵押品代币的函数容易受到重入攻击,并且会被反复调用(每次恶意合约收到代币时),直到所有抵押品都被用完。
协议层上的大多数漏洞利用对于该特定应用程序都是独一无二的,因为每个应用程序都有独特的逻辑(除非它是纯分支)。
访问控制错误是样本组中最常出现的问题。例如,在 Poly Network 黑客攻击中,“EthCrossChainManager”合约有一个函数,任何人都可以调用它来执行跨链交易。
该合约拥有“EthCrossChainData”合约,因此如果您将“EthCrossChainData”设置为跨链交易的目标,则可以绕过 onlyOwner() 检查。
剩下要做的就是设计正确的消息来更改哪个公钥被定义为协议的“keeper”,夺取控制权并耗尽资金。普通用户应该永远无法访问“EthCrossChainData”合约上的功能。
注意:在很多情况下,多个协议使用相同的技术被黑客入侵,因为团队分叉了一个存在漏洞的代码库。
例如,CREAM、Hundred Finance 和 Voltage Finance 等许多 Compound 分支成为重入攻击的受害者,因为 Compound 的代码在允许交互之前不会检查交互的效果。这对 Compound 来说效果很好,因为他们审查了他们为该漏洞支持的每个新代币,但制造分叉的团队并没有尽职调查。
98% 的生态系统攻击都使用了闪电贷。
Flashloan 攻击通常遵循以下公式:使用贷款进行大规模互换,从而推高 AMM 上代币的价格,借贷协议将其用作价格供给。然后,在同一笔交易中,使用膨胀的代币作为抵押品,获得远高于其真实价值的贷款。
数据集不够大,无法从时间分布中得出有意义的趋势。但是我们可以看到,不同类型的攻击在不同的时间发生的频率更高。
2021 年 5 月是生态系统攻击的历史最高点。2021 年 7 月发生了最多的协议逻辑攻击。2021 年 12 月发生了最多的基础设施攻击。很难说这些集群是巧合,还是一个成功的成功案例激发了同一人或其他人专注于特定类别。
智能合约语言级别的漏洞是最罕见的。该数据集始于 2020 年,当时该类别中的大多数漏洞利用已经广为人知,并且很可能会及早发现。
随着时间的推移,被盗资金的分布有四个主要峰值。2021 年 8 月出现一个峰值,这是由 Poly Network 黑客攻击驱动的。2021 年 12 月又出现了另一个大峰值,这是由大量基础设施黑客攻击造成的,其中私钥被泄露,例如 8ight Finance、Ascendex 和 Vulcan Forged。然后,由于 Ronin 黑客攻击,我们在 2022 年 3 月看到了历史新高。最后的峰值是由 Binance 网桥攻击引起的。
我根据托管合同或资金被盗钱包的链对数据集进行了分割。以太坊的黑客数量最多,占样本组的 45%。币安智能链(BSC)以 20% 位居第二。
造成这种情况的因素有很多:
以太坊被盗资金最多(20 亿美元),BSC 位居第二(8.78 亿美元),黑客攻击在以太坊、BSC 和 Polygon 上的资金被盗,在单个事件中排名第三(6.89 亿美元),这主要是因为 Poly Network 攻击。
涉及桥梁或多链应用程序(例如多链交换或多链借贷)的黑客攻击对数据集产生了巨大影响。尽管只占事件的 10%,但这些黑客攻击占被盗资金的 $2.52B。
对于威胁堆栈的每一层,我们都可以使用一些工具来及早识别潜在的攻击向量并防止漏洞利用的发生。
大多数大型基础设施黑客攻击都涉及黑客获取敏感信息,例如私钥。遵循良好的操作安全 ( OPSEC ) 实践并进行经常性威胁建模可以降低发生这种情况的可能性。拥有良好 OPSEC 流程的开发团队将:
模糊测试工具,如 Echidna,测试智能合约如何对大量随机生成的交易做出反应。这是检测特定输入产生意外结果的边缘情况的好方法。
Slither 和 Mythril 等静态分析工具可自动检测智能合约中的漏洞。这些工具非常适合快速找出常见漏洞,但它们只能捕获一组预定义的问题。如果智能合约存在不在工具规范中的问题,则不会出现。
形式验证工具,如 Certora,会将智能合约与开发人员编写的规范进行比较。该规范详细说明了代码应该做什么及其所需的属性。例如,开发贷款应用程序的开发人员会指定每笔贷款都必须有足够的抵押品作为支持。
如果智能合约的任何可能行为不符合规范,形式验证者将识别该违规行为。
形式验证的弱点是测试与规范一样好。如果提供的规范没有说明某些行为或过于宽松,那么验证过程将无法捕获所有错误。
在审计或同行评审期间,一组受信任的开发人员将测试和审查项目代码。审计员将编写一份报告,详细说明他们发现的漏洞以及如何解决这些问题的建议。
拥有专业的第三方审查合同是识别原始团队遗漏的错误的好方法。然而,审计员也是人,他们永远不会什么都抓到。此外,您必须相信,如果审计员发现问题,他们会告诉您,而不是自己利用它。
令人沮丧的是,尽管生态系统攻击是最常见和最具破坏性的变体,但工具箱中没有多少工具适合防止这些类型的攻击。
自动化安全工具专注于一次在一个联系人中查找漏洞。审计通常无法解决生态系统中多个协议之间的交互如何被利用的问题。
Forta 和 Tenderly Alerts 等监控工具可以在发生可组合性攻击时发出预警,以便团队采取行动。但在闪电贷攻击期间,资金通常会在单笔交易中被盗,因此任何警报都来不及防止巨大损失。
威胁检测模型可用于在 mempool 中查找恶意交易,其中交易在节点处理之前就存在,但黑客可以通过使用 flashbots 等服务将交易直接发送给矿工来绕过这些检查。
我对加密安全的未来有两个预测:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!