原文标题:《关于去中心化金融区块链智能合约漏洞的探索》
区块链是一种新型的分布式系统体系,它使用P2P对等网络通信,区块存储,分布式算法共识和加密算法来防止篡改。从本质上讲,区块链可以看作是由所有网络节点共同维护的分布式数据库。与传统的分布式数据库相比,区块链由于具有完整的数据备份,开放透明的网络,无法篡改,完整的信息可追溯性和弱信任模型,因此更适合对分散式信任有明确要求的应用场景。特别是典型的区块链应用场景包括数字支付,产品可追溯性,版权保护,供应链财务等。在区块链系统中,智能合约在实施分散式应用部署和扩展应用的功能方面发挥着极其重要的作用。区块链系统与传统应用程序相比,在区块链系统架构上运行的智能合约具有开放性和透明性,执行性,不可篡改且不依赖第三方的特点,可以满足各种去中心化应用场景的需求,包括近年来发展迅速的去中心化金融项目。
截至2021年1月15日,去中心化金融以超过45亿美元的资本成为了成功的金融范例,它利用基于区块链的智能合约来确保其完整性和安全性,。去中心化金融是一个新的发展领域,用于交换,借出或借用令牌。通常,这些指令由智能合约调节和/或由多方,分散式治理机制控制的「收益」或收入流。去中心化金融—在现有区块链平台之上逐渐兴起。这个新领域的组成部分包括那些与贷款,资产交易和衍生品市场有关的部分。作为去中心化的应用,智能合约管理着大量的数字资产,从而也使其容易受到各种攻击。
本文将从三个维度具体阐述了智能合约安全性问题:首先,由于以太坊体系结构每一层的漏洞导致的智能合约安全性。其次,也会探讨DeFi和智能合约近期出现的各种攻击。最后还将探讨现有的可行性工具以及来其他的有效实践如何最大限度地减少此类攻击。
以太坊架构不同层的智能合约漏洞
以太坊架构概述
在探讨智能合约漏洞之前,我们先简单概述下有关以太坊智能合约架构。
区块链网络能部署并自动执行编程脚本任务。这些程序称为智能合约,用于定义在交易期间调用的自定义功能和规则。基于智能合约的区块链技术已被应用到各种行业中,例如金融,供应链管理,医疗保健能源和政府服务。只有特定的区块链平台支持智能合约:以太坊是第一个支持智能合约的。其他区块链平台兼容于部署和执行智能合约。一种称为Solidity的脚本类型语言用于在以太坊平台中开发智能合约。在这一部分中,我们介绍了以太坊平台上智能合约实施的相关安全漏洞。智能合约可以持有和管理相应的功能Credit{可能价值数千美元的大量虚拟货币。因此,对手不断尝试操纵智能合约的执行以支持其活动。本质上,智能合约在分布式和无权限网络上运行,该网络继承了许多漏洞。在传统的系统中,可以重新开发或修补这一小部分的中心化应用程序。
相反,在去中心化的区块链网络中,除非采取极端措施,否则无法在实时网络中修改或升级已部署的智能合约。智能合约的一成不变特征是其安全方面的优势也是劣势。由于这种不变性,黑客无法为自己的利益进行更改或修改合约。但是,部署后开发人员也无法修改智能合约应用程序。他们可以取消或终止合约并创建新的智能合约,然后再次部署它。因此,出于安全性考虑,在部署智能合约之前,应对智能合约进行大范围的测试。我们重点介绍了以太坊智能合约架构的基本构建模块,如图1所示,其中包括以太坊的架构。
Justin Sun地址从BNB Chain提取超1000万稳定币转入CEX:金色财经报道,据链上分析师余烬监测,孙宇晨地址在BSC上赎回部分稳定币流动性,然后将赎回的507万枚BUSD 、17万枚TUSD、7万枚USDT转入Binance,将500万枚USDD转入Huobi。[2023/6/21 21:52:12]
图1:用于运行以太坊区块链的环境是通过一个Web用户界面与以太坊体系结构服务的四层进行交互,应用层,用于存储区块链数据的数据库,用于支持共识协议的加密机制以及用于网络层的Internet服务
应用层:以太坊客户端在EVM中执行智能合约,其中智能合约与以太坊账户相关联。以太坊支持两种类型的账户:外部拥有账户和合约账户。EOA用于将用户资金存放在Wei中,Wei是Ether的最小子面额,价值10-18Ether。EOA与公钥相关联并由公钥解决;通过显示相应私钥的所有权来验证对EOA的访问。相反,合约帐户与一段可执行的字节码相关联,它定义了一些令人感兴趣的业务逻辑。智能合约是DApp的基石。DApp通常将用户界面作为其前端,并将一些智能合约作为其后端。一些DApp会发行自己的称为令牌的加密货币,用于初始代币发行和交易所。基于以太坊的令牌是一种特殊的智能合约。智能合约在EVM中执行,这些EVM是使用基于堆栈的体系结构的准图灵完整机器。术语「quasi」是指执行受交易提供的gas限制。在以太坊应用层中,发生各种漏洞,导致许多攻击,如应用层中的图所示。
数据层:包含区块链数据结构。交易是EOA与另一个EOA或合约帐户之间的交互。交易由以下方式指定:
nonce,它是用于跟踪发送方已发起的交易总数的计数器;
收件人,该收件人指定了交易的目标EOA或合约帐户;
价值,即从发件人向收款人转移的金额;
输入,是与交易目的相对应的字节码或数据;
gasPrice和gasLimit,分别指定发送方愿意向包含交易的区块的获胜矿工支付的单价和最大天然气量;
,它是发送者的椭圆曲线数字签名算法签名。执行交易会更新所涉及帐户的状态,从而更新区块链。
共识层:确保区块链的状态一致。在撰写本文时,以太坊大约需要12-14秒来创建一个区块,这意味着多个矿工可以同时创建有效的区块,并且可能有许多区块。以太坊使用GHOST共识协议的变体来选择「最重」分支作为主链,其中「heaviest」分支是根植于所讨论的分叉的子树,并且具有最高的累积区块难度,同时注意到陈旧区块不在主链上。但注意,以太坊用权益证明替代其当前使用的工作量证明。
网络层:管理节点或客户端的以太坊点对点网络,以使节点始终可以从某些活动节点获取区块链的更新状态。以太坊网络是一个结构化的P2P网络,其中每个节点存储整个区块链的副本。为了进行节点发现和路由,每个节点维护一个动态路由表,其中包含160个存储桶,每个存储桶最多包含16个其他节点的ID,IP地址,UDP/TCP端口条目。以太坊使用RLPx协议发现目标客户端,并使用以太坊有线协议来促进客户端之间以太坊区块链信息的交换。
美股三大指数集体收涨 大型科技股普涨:金色财经报道,美股三大指数集体收涨,纳指涨1.28%,标普500指数涨0.99%,道指涨0.47%。大型科技股普涨。[2023/6/2 11:53:42]
以太坊区块链环境:运行在如下四层的环境中:用户与以太坊区块链进行交互的Web界面;以太坊客户的数据库,用于存储区块链数据;出于安全目的的加密机制;以及支持以太坊节点之间的区块链通信的互联网基础设施。我们将以太坊区块链架构与环境区分开来,因为针对以太坊区块链的攻击可能来自环境,并且这些攻击可能在环境中得到更好的解决,而不是由以太坊解决。
以太坊智能合约漏洞
重点介绍了以太坊体系每一层的智能合约漏洞,如图2所示。
图2:以太坊各层漏洞的分类
以太坊应用层
重入性:此漏洞最初是从DAO攻击中发现的,当外部被调用方合约在用方合约完成之前在调用方合约中回调函数时,会发生此漏洞。这使攻击者可以绕开适当的有效性检查,直到调用者合约被耗尽以太币或交易用完为止。
委托呼叫注入:首先从对Parity钱包的攻击中发现了此漏洞。为了促使代码重用,EVM提供了一个操作码委托调用,用于将被调用方合约的字节码插入到调用方合约的字节码中。结果恶意的被调用方合约可以直接修改调用方合约的状态变量。此漏洞是由于被调用方合约可以更新调用方合约的状态变量而导致的。声明旨在通过委托调用作为库共享的无状态合约,可完全防此漏洞。
冻结以太:首次从对Parity钱包的攻击中发现了此漏洞。该漏洞产生由于用户无法将钱存入其合约帐户,而无法从这些帐户中支出资金,从而有效冻结了他们的资金。
升级合约:引入合约升级的思想是为了缓解智能合约一旦部署后就无法修改的问题,即使以后发现它们存在漏洞。为了允许合约升级,有两种方法:将合约分为代理合约和逻辑合约,以使开发人员可以升级后者而不是前者;使用注册管理机构合约来保存更新后的合约。这些方法虽然有效,但却引入了一个新的漏洞:当合约开发者变得恶意时,更新的合约可能是恶意的。此漏洞仍然是一个未解决的问题。
具有意外还原的DoS:发生这种情况的原因是,由于主叫方合约遇到外部呼叫失败而导致事务被还原,或者被叫方合约故意执行还原操作以中断主叫方合约的执行。此漏洞是由执行被调用方合约还原的调用方合约引起的。通过使接收者调用交易来「提取」发件人为接收者预留的资金,可以防止此漏洞,从而有效地防止了发件人的交易被还原。
整数上溢和下溢:首次从针对BEC令牌的攻击中发现了此漏洞。当运算的结果超出了Solidity数据类型的范围时,就会发生这种情况,例如导致对攻击者的余额或其他状态变量进行未经授权的操纵。该漏洞是由Solidity源代码未在数字输入上执行正确的验证引起的,并且Solidity编译器和EVM均未提供整数上溢/下溢检测。可以通过使用SafeMath库来防止此漏洞处理这些问题。
Balancer敦促部分LP尽快移除流动性:金色财经报道,Balancer敦促其部分流动性提供者(LP)尽快从五个资金池中提取资金。Balancer表示,为避免即将公开披露的问题,已将部分Balancer池的协议费用已设置为0,目前正常运行。
但因部分流动性池中相关问题无法被解决,Balancer 敦促部分 LP 尽快提取流动性,包括以太坊主网上的 DOLA / bb-a-USD(当前锁仓额 360 万美元)、Polygon 上的 bb-am-USD/miMATIC(锁仓额 9000 美元)、Optimism 上 Beethoven X(由 Balancer 驱动)的It's MAI life(锁仓额 110 万美元)和Smells Like Spartan Spirit(锁仓额9万美元)以及Fantom上Beethoven X的Tenacious Dollar(锁仓额160万美元)。[2023/1/7 10:59:30]
操纵余额:当合约的控制流决策依赖于此值时,会发生此漏洞。平衡或解决平衡,攻击者可以利用它使自己成为唯一可以获取金钱的人。可以通过不使用任何条件声明中的合约余额来防止此漏洞。通过tx.origin进行身份验证:tx.origin是Solidity中的全局变量,它指的是发起有问题交易的原始EOA。当合约使用tx.origin进行授权时会发生此漏洞,这可能会受到网络钓鱼攻击的危害。通过使用msg.sender而不是tx.origin进行身份验证,可以防止此漏洞,因为msg.sender返回导致该消息的帐户。
错误的可见性:错误地指定功能的可见性,从而允许未经授权的访问。
无保护的自杀:合约的所有者可以使用自杀或自毁方法销毁合约。取消合约时,将删除其关联的字节码和存储。该漏洞是由合约强制执行的身份验证不足引起的。可以通过强制执行例如多因素身份验证来缓解此漏洞,这意味着自杀操作必须得到多方的批准。
将以太币泄漏到任意地址:当任意调用方都可以提取合约的资金时,该漏洞就不会发生,该调用方既不是合约的所有者,也不是向合约存入资金的投资者。此漏洞是由调用者调用将以太币发送到任意地址的功能时无法检查呼叫者的身份引起的。通过对发送资金的功能进行适当的身份验证,可以防止此漏洞。
机密性失效:在区块链中,由于区块链的公共性质,限制变量或函数的可见性并不能确保变量或函数是机密的。防止此漏洞的一种可能解决方案是使用加密技术,例如定时承诺。
签名信息不足:当数字签名对多个交易有效时,就会发生此漏洞,当一个发件人通过代理合约向多个收件人汇款时,可能会发生此漏洞。此漏洞最初是在针对智能合约的重播攻击中利用的。通过在每条消息中合并适当的信息可以防止此漏洞。
具有不受限制的操作的DoS:此漏洞首先从GovernMental合约中观察到。
报告:年轻人在其投资组合中持有加密货币的可能性是43岁及以上投资者的7.5倍:金色财经报道,美国银行本周发布了 2022 年美国富豪私人银行研究报告。报告显示,美国银行发现,年轻富有的美国人在其投资组合中持有加密货币的可能性是43岁及以上的投资者的 7.5 倍。此外,传统的投资建议表明,年轻投资者比年长投资者持有更多而不是更少的股票。然而,21 至 42 岁年龄段的人仅持有四分之一的股票投资组合,而 43 岁及以上的投资者中这一比例为 55%,虽然 29% 的年轻人表示加密是创造财富的主要机会,但只有 7% 的老年人同意,年轻群体通常对私募股权或债务,以及与可持续或环境、社会和治理 (ESG) 相关的投资更感兴趣。[2022/10/17 17:28:34]
未经检查的呼叫返回值:此漏洞也称为处理错误的异常。它有两个变体,称为gas-less发送和unchecked发送。当不检查低级调用的返回值时会出现这种情况,即使函数调用抛出错误,执行也可能会继续。
未初始化的存储指针:回顾下,在Solidity中,合约状态变量始终从插槽0开始连续放置在存储中。对于复合局部变量,将引用分配给未占用的对象存储中的插槽以指向状态变量。
错误的构造函数名称:此漏洞最初是从Rubixi合约中观察到的,该构造函数的名称不正确,它使任何人都可以成为合约的所有者。在Solidity0.4.22版之前,声明与合约名称相同的函数被视为合约构造函数,该函数仅在创建合约时执行。
类型转换:此漏洞最早在中发现。以Solidity语言编写的合约可以通过直接引用被调用方合约的实例来调用另一个合约。
过时的编译器版本:当合约使用过时的编译器时会发生,其中包含错误,因此使已编译的合约易受攻击。通过使用最新的编译器可以防止此漏洞。
简短地址:此漏洞最早在中实现,并进行了广泛讨论。
以太币丢失给孤立地址:以太币失去到孤立发生在汇款时,以太坊仅检查接收者地址的长度不超过160位,而不检查接收者地址的有效性。如果将钱发送到一个不存在的孤立地址,则以太坊会自动注册该地址,而不是终止交易。由于该地址未与任何EOA或合约帐户相关联,因此没有人可以提取已转移的资金,这实际上是丢失的。此漏洞是由EVM不能孤立保护引起的。在撰写本文时,只能通过手动确保收件人地址的正确性来防止此漏洞。
调用堆栈深度限制:此漏洞是由EVM的执行模型不足引起的,并且已被EIP-150的硬分叉所消除,该硬叉重新定义了外部调用的耗油量规则,使其不可能达到1,024in调用堆栈深度。
低估操作码:首先从两次DoS攻击中发现了此漏洞。
交易顺序依赖:这是指并发性问题,即区块链的即将到来的状态取决于交易的执行顺序,但是由矿工决定。
a16z Crypto负责人提醒欺诈风险:有人在Instagram冒充我:金色财经报道,a16z Crypto负责人 Chris Dixon 在其官方社交媒体账户上发布欺诈风险提示,他表示自己不使用任何 Instagram 消息,但现在发现有人冒充他实施欺诈,因此提醒用户注意风险。Chris Dixon 创立并领导 a16z Crypto,该机构刚刚完成了第四只基金 Crypto Fund 4募资,规模高达45亿美元。[2022/6/3 3:59:57]
时间依赖关系:当合约在执行关键操作时将block.timestamp用作触发条件的一部分或作为可由恶意矿工操纵的随机性来源时,会发生此漏洞。该漏洞是由以太坊引起的,它只要求时间戳大于其母块的时间戳并且在当前时钟的900秒以内。
产生随机性:例如,许多和彩票合约都是随机选择中奖者,通常的做法是根据一些初始私有种子生成伪随机数。但是,这些种子由矿工完全控制,这意味着恶意矿工可以操纵这些变量使自己成为赢家。此漏洞是由可操纵的entropy源引起的。
数据层漏洞
难以分辨的链:当以太坊分为ETH和ETC两条链时,首先从跨链重放攻击中观察到此漏洞。回想一下,以太坊使用ECDSA签署交易。在进行EIP-155硬分叉之前,每笔交易都包含六个字段。但是,数字签名不是特定于链的,因为那时甚至还不知道特定于链的信息。结果,为一个链创建的事务可被另一链重用。通过将chainID合并到字段中,已消除了此漏洞。
StateTrie中的「空帐户」:此漏洞首先从参考文献中报告的DoS攻击中发现的。
共识层的漏洞
可外包的难题:回想以太坊采用了名为Ethash的PoW难题,该难题旨在抵御ASIC,并能够限制并行计算的使用。但是,狡猾的矿工仍然可以将搜索难题解决方案的任务划分为多个较小的任务,然后将其外包。该漏洞是由Ethash造成的,它仅使拼图解决方案在原图像搜索中部分顺序,而不是依赖顺序PoW。
概率最终性:此漏洞是由以太坊区块链偏爱可用性而非一致性的设计引起的,这是根据CAP定理选择的。
带有块填充的DoS:首次从Fomo3D合约中观察到此漏洞。该漏洞仅导致攻击者的交易包含在新开采的区块中,而其他交易则被矿工放弃一段时间。当攻击者提供更高的gasPrice以激励矿工选择攻击者的交易时,可能会发生这种情况。此漏洞是由贪婪的采矿激励机制引起的。在撰写本文时,尚无解决方案来防止此漏洞。
诚实的采矿设想:此漏洞是由共识协议引起的,因为它与激励不兼容,请参见。在撰写本文时,此漏洞仍然是一个未解决的问题。
出块奖励:它是指出块奖励机制,用于应对由于快速生成块而导致的陈旧区块增加。但是,这种机制有一个副作用,即允许自私的矿工将陈旧的区块变成出块并获得奖励,从而有效地激励了自私的采矿和双重支出。
验证者的困境:此漏洞最早在参考文献中报道,指的是当验证新交易需要不费吹灰之力的计算时,无论矿工是否选择验证交易,都将受到攻击。如果矿工验证了计算量大的交易,那么他们将花费大量时间,并在下一个区块的竞争中为攻击者提供优势;如果矿工未经验证接受交易,则区块链可能包含不正确的交易。此漏洞是由以太坊中验证资源需求交易的高昂成本引起的。可以通过限制验证块中所有事务所需的计算量来缓解此漏洞。但是,尚不清楚如何消除此漏洞。
网络层的漏洞
无限节点的创建:此漏洞是针对Geth客户端1.8之前的版本。在以太坊网络中,每个节点都由唯一的ID标识,该ID是64字节的ECDSA公钥。攻击者可以在一台计算机上创建无限数量的节点,然后使用这些节点垄断某些受害者节点的传入和传出连接,从而有效地将受害者与网络中的其他对等节点隔离开来。此漏洞是由对节点生成过程的弱限制引起的。通过使用IP地址和公钥的组合作为节点ID,可以消除此漏洞。格斯开发人员尚未采用这种对策,他们认为这对客户端的可用性有负面影响。
不受限制的传入连接:此漏洞在版本1.8之前的Geth客户端中。每个节点在任何时间点可以具有总数为maxpeers的连接,并且可以与其他节点发起多达1/2?个出站TCP连接。但是,其他节点启动的传入TCP连接的数量没有上限。通过为maxpeers建立与没有出站连接的受害节点的许多传入连接,攻击者有机会使受害者黯然失色。在Gethv1.8中,通过对到节点的传入TCP连接的数量实施上限,默认值为?maxpeers/3?=8,消除了此漏洞。
公共对等体选择:在Geth客户端1.8之前的版本中检测到此漏洞。
对等体选择:该漏洞指的是Geth客户端在从其路由表中选择节点以建立出站连接时,总是获取随机选择的桶的头部。由于每个存储桶中的节点都是按活动排序的,因此攻击者可以通过定期向Geth客户端发送消息来使其节点始终位于其他节点之前。通过在路由表中所有节点的集合中随机选择统一的节点,而不是仅从每个存储桶的头中随机选择节点,在Gethv1.9中已消除了此漏洞。
独立块同步:它允许攻击者对以太坊P2P网络进行分区,而不会垄断受害者客户端的连接。回想一下,每个块标题都包含一个难度字段,该字段记录了该块的挖掘难度。区块链的总难度用totalDifficulty表示,是直到当前区块的难度之和。
RPCAPI暴露:此漏洞最初是通过对Geth和Parity客户端的攻击发现的。
引用:
https://www.coindesk.com/understanding-dao-hack-journalists
https://www.freecodecamp.org/news/a-hacker-stole-31m-of-ether-how-it-happened-and-what-it-means-for-ethereum-9e5dc29e33ce/
https://medium.com/blockcat/on-the-parity-multi-sig-wallet-attack-83fb5e7f4b8c
https://nvd.nist.gov/vuln/detail/CVE-2018-10299
https://medium.com/loom-network/how-to-secure-your-smart-contracts-6-solidity-vulnerabilities-and-how-to-avoid-them-part-2-730db0aa4834
https://eprint.iacr.org/2016/1007.pdf
https://www.reddit.com/r/ethereum/comments/4ghzhv/governmentals_1100_eth_jackpot_payout_is_stuck/
https://github.com/KadenZipfel/smart-contract-attack-vectors/blob/master/vulnerabilities/unchecked-call-return-value.md
https://medium.com/hackernoon/hackpedia-16-solidity-hacks-vulnerabilities-their-fixes-and-real-world-examples-f3210eba5148
https://medium.com/golem-project/how-to-find-10m-by-just-reading-blockchain-6ae9d39fcd95
https://medium.com/loom-network/how-to-secure-your-smart-contracts-6-solidity-vulnerabilities-and-how-to-avoid-them-part-2-730db0aa4834
https://blog.ethereum.org/2016/09/22/transaction-spam-attack-next-steps/
https://blog.comae.io/the-280m-ethereums-bug-f28e5de43513?gi=3b0603be9186
https://dl.acm.org/doi/10.1145/3149.214121
https://medium.com/coinmonks/how-the-winner-got-fomo3d-prize-a-detailed-explanation-b30a69b7813f
https://dl.acm.org/doi/10.1145/3212998
https://dl.acm.org/doi/10.1145/2810103.2813659
https://ljk.imag.fr/membres/Jean-Guillaume.Dumas/Enseignements/ProjetsCrypto/Ethereum/236.pdf
https://mp.weixin.qq.com/s/ia9nBhmqVEXiiQdFrjzmyg
https://dl.acm.org/doi/fullHtml/10.1145/3391195
撰文:AbbaGarba,WeBlockCTO翻译:HAO
来源:金色财经
标签:以太坊区块链ETHHTT以太坊币最新价格今日行情2022.10.12区块链的三个基本特征Lido Staked ETHCHTT
十年磨一剑,涨跌皆有因,多空不恋战,入袋方为安。大家好,我是远洋哥,以下是我为大家提供实时分析!欢迎点评交流 ETH行情分析 JPX收购野村投资的区块链企业BOOSTRY 5%的股份:金色财经报道,东京证券交易所运营商JPX将收购由野.
1900/1/1 0:00:00东哥论币:2021年3月9日、凌晨以太坊行情分析与操作策略 十年磨一剑,涨跌皆有因,多空不恋战,入袋方为安.
1900/1/1 0:00:00???成功的秘诀就在于懂得怎样控制痛苦与快乐这股力量,而不为这股力量所反制。如果你能做到这点,就能掌握住自己的人生,反之,你的人生就无法掌握.
1900/1/1 0:00:00唐晓论币:3.7日晚间BTC/ETH行情分析及操作策略 BTC行情分析: 比特币日内行情维持震荡上行,午后小幅回调后价格也是如期突破50000关口,且后续补涨上拉至51141位置附近出现承压,目前价格在50600附近运行.
1900/1/1 0:00:00北京时间2021年3月6号晚上6点,ZKSwap团队推出的流动性挖矿活动正式启动,市场异常火爆,用户参与热情高涨.
1900/1/1 0:00:00ETH行情分析: ?????目前我们从小时级别图可以看到,目前币价经过一波拉升之后,已经到达了一个相对的高点。能明显的看到上方压力位是非常强劲的。另外马上进入回调区间。日线也马上要收线了。此时我们应顺势进场.
1900/1/1 0:00:00