0

详解以太坊智能合约安全性漏洞 如何有效减少 DeFi 攻击?(合集九篇)

大部分人并不知道怎样应用消防安全知识,安全知识手抄报怎么做,内容写什么,大概就是不玩火、不随意摆弄电器设备。不可将烟蒂、火柴杆等火种随意扔在废纸篓内或可燃杂物上,不要躺在床上或沙发上吸烟等等下面小编给大家整理了关于详解以太坊智能合约安全性漏洞 如何有效减少 DeFi 攻击?,希望这篇文章能够帮助到您。

浏览

3276

文章

9

篇1:投资以太坊智能合约安全吗,如何才能保证投资安全?

全文共 810 字

+ 加入清单

投资以太坊智能合约安全吗?传统计算机程序是在个人节点上运行,这种随时都可以运作,但很多人觉得智能合约有安全漏洞。有些人会疑惑,投资以太坊智能合约安全吗,目前的技术人员一直都在想方设法去寻找一些比较合适的方式,希望能够有效提高安全性,希望能够保障资金的安全,不过从目前来看还是有不少的漏洞。

1、投资以太坊智能合约安全吗

把以太坊作为例子,这是一个具有开源效果的区块链平台,区块链上所有的用户一般都是在区块链的智能合约上,但是这中间可能会存在许多想要意见的漏洞,如果智能合约开发者测试不充分,又或者是没有重视,这就可能会产生代码有漏洞。而这些漏洞的存在就容易被黑客利用,并且容易被黑客攻击。功能强大的智能合约逻辑会更加的复杂,很容易会出现漏洞。所以从目前的情况来看,已知的漏洞就已经有很多,比如说时间错的依赖,短地址漏洞等等,所以在我们投资的过程中,随时都有可能会被利用,还是应该引起重视。

2、如何才能够保证投资的安全

投资以太坊智能合约安全吗,从目前的情况来看并不是很安全,但是要想保证投资的安全,首先就应该保持版本的更新,一旦发现有新的必要,及时就马上应该检查新的智能合约,然后再选择最新的安全技术,当然需要了解当前区块链的功能,因为有很多的陷阱还是需要注意,比如对于外部智能合约最好是格外小心,随时都可能会引起恶意代码,又或者是恶意的更改流程,我们需要知道这些公共功能是对所有人开放的,所以很有可能就会被其他人所利用。在我们选择投资时,任何一个环节都不可以忽视,只有认真的投资才能够带来好的效果。

投资以太坊智能合约安全吗?从目前情况来看并不是很安全,因为在这背后会有着许多的漏洞,这些漏洞的存在随时都会导致投资者被利用,因此要想保证投资的安全,首先就应该随时保持版本的更新,另外必须要使用到最新的安全技术,可以有效减少投资过程中的风险,可以避免自己在投资时被其他人所利用。大家可以到OKLink浏览器上查看更多更多的信息。

展开阅读全文

篇2:一文详解DeFi中的关键:智能合约

全文共 1443 字

+ 加入清单

近几个月,DeFi将行情推到了一个新的高度,而在DeFi当中,智能合约起着关键作用。

大家都知道比特币是区块链 1.0 技术架构下的典型应用,但是对智能合约这一区块链 2.0 架构下的杰出应用又了解多少呢?今天,我们就来好好聊聊“智能合约”。

01 什么是智能合约?

“智能合约”这一术语是 1994 年由著名密码学家尼克萨博首次提出的,它是通过编程来准确高效地执行预先设定的合约条款。

详细的解释就是:智能合约其实是一种计算机协议,用一段计算机指令实现自我验证、自动执行,并产生可以验证的证据来证明合约操作的有效性。

当智能合约的双方在区块链上产生资产交易的时候就会自动触发一段代码来自动完成具体的交易流程,这串计算机代码就是智能合约。

02 如何实现智能合约呢?

实现智能合约就需要“图灵完备”的计算机编程语言。“图灵完备”这个词大家似乎了解的不多,可以简单地理解为能把世间一切可以计算解决的问题都计算出来的,这样的一种虚拟机或者编程语言就叫图灵完备。

举一个不太精确但是很容易理解的例子说明一下:比如两口做饭的锅,一口锅可以实现一切的烹饪方法煎、炒、蒸、炖、炸、汆、涮、卤等,而另外的一口锅则只能实现蒸和炖,其他的都不能实现,那么前者就是图灵完备的,后者则不是。

智能合约之所以可以在以太坊上完美应用,就是因为以太坊在其区块链上提供了一种近乎图灵完备的计算环境。只要是编程语言能够实现的计算,其都能支持,这也为智能合约在更加广泛的环境中得以应用坚实了基础。

03 为什么要提出智能合约?

对比智能合约和传统合约,我们就能知道智能合约为什么会出现了。随着科技的进步,我们都会有一些通过双方签订合同来约束彼此经济活动的经历,但即使签订合同,我们也无法保证双方都能在规定期限内完整的履行合同规定的内容。

传统合约受到诸如主客观、经济成本、适用范围、执行力度和执行时间等因素的影响,而智能合约便可以在很大程度上解决这些因素的影响。智能合约的主要特点可以简单地概括为:去中心化、智能高效(自动执行、无人为干预)、准确、低成本。

众所周知,区块链最大的特质就是去中心化,在不信任中创造出信任。基于区块链的智能合约是将合约以数字化的形式写入到区块链中,在区块链优秀特性的加持下自然的具备了去中心化的特点,合约内容公开透明、条理清晰且不可篡改,编程语言就是规束合约的法律条文,交易双方可完全放心的进行交易。

智能合约的整个产生和执行过程都是可追溯、不可篡改的。一旦触发合约就会立即执行,自动按照合约规范进行操作。整个过程智能高效,短时间快速完成更是体现了它的准确和经济。

04 智能合约有哪些应用场景呢?

单说智能合约的应用大家可能不太了解,但大家一定在公共场所、景区和学校校园里不止一次的见过各种样式的自动无人售货机,最初 Nick Szabo 就是根据自动无人售货机提出的智能合约,所以从某种意义上可以说自动售货机是智能合约的第一次大规模应用。

除此之外,智能合约的应用场景还是非常广泛的,例如用于解决金融借贷领域的 P2P 网络金融雷潮事件;用于社会保障领域养老保险、医疗保险,借助智能合约技术,没有第三方的参与避免了贪污腐败问题的发生;用于物联网环境下供应链查询和物品真伪查询;用于房屋租赁、身份认证、知识产权保护、博彩发行、市场预测等。

05 小结

智能合约乘着区块链发展的东风在不断地发展进步,应用的场景范围也在不断地扩展,想必大家通过这些内容对智能合约有了一定的了解,但智能合约它真的智能吗?背地里还藏有哪些应用风险呢?

展开阅读全文

篇3:智能驾驶能减少道路交通安全事故吗

全文共 561 字

+ 加入清单

智能时代的到来,让人们真切的感受到了科学技术对生活的改变。智能驾驶减少道路交通安全事故吗?智能交通的发展对减少少道路交通安全事故也起到了不可替代的作用。下面小编就给大家详细解答一下。

智能驾驶指的是汽车能够部分代替驾驶员,实现决策和操作车辆行驶的目的,这样在驾驶员出现失误的时候,车辆的智能驾驶系统可以避免道路交通事故的发生。互联指的是车辆能够与人、车、路、环境进行信息的交换。信息的交换能够让驾驶员和交通管理者预知潜在危险,及时采取措施从而避免事故的发生。

车联网和智能驾驶不仅能够避免和减少道路交通事故的发生,同时也有利于交通安全管理工作的开展。当前方路段发生事故或者拥堵时,交通管理中心可以通过车联网指挥车辆避免交通事故的发生同时对事故现场进行及时的救援;智能驾驶能够在驾驶员违规操作或者失误操作时给出提示或者警告,有利于驾驶人遵守交通法规和形成良好的驾驶习惯。

目前,车联网和智能驾驶技术在国内还处于初级的阶段,技术还待发展,配套设施还需完善,但是专家认为这并不妨碍我们对于未来数十年甚至十数年后的道路交通安全形势进行畅想。这些需要整车企业、汽车零部件企业以及研究机构的不断努力。

温馨提醒:

要想真正的了解智能驾驶,以及知道电子卡口系统技术有哪些好处?还需要多学习一些智能交通小知识。只有这样才更有利于大家融入智能社会。

展开阅读全文

篇4:SEC寻求可发现安全漏洞的“智能合约”跟踪工具

全文共 304 字

+ 加入清单

美国证券交易委员会(SEC)希望购买可分析智能合约的区块链取证工具,最好能突出其安全性问题。

SEC在7月30日发布了“ DLT智能合约分析工具” 征求请求,表明其在分散金融(DeFi)的基础上主动监控基于代码的区块链合约的新兴趣。

根据CoinDesk审查的文件,SEC希望使用一种能够识别以下内容的工具:合同目的,代币类型,买卖限制,地址白名单和黑名单,修改和合同调用。

SEC在随附要求的文件中说,该工具最好还将“包括针对安全问题和漏洞分析智能合约的能力”。

SEC表示,不同智能合约之间的比较分析也将是一个优势。私营软件供应商必须在8月13日之前提出监管要求。

彭博社法律首次报道了SEC对智能合约工具的兴趣。

展开阅读全文

篇5:大Bug!D-Link路由器存在安全漏洞,易被黑客攻击

全文共 352 字

+ 加入清单

随着互联网的迅速发展,网络安全问题也被高度重视,一不小心用户就会面临被黑客攻击的风险。

美国对电子产品的监管异常严格,特别是路由器这种网络设备,管控就更严了。

现在,美国联邦贸易委员会(FTC)给出的通告显示,D-link的路由器和网络摄像头让数以万计的消费者面临被黑客攻击的风险。

对于这样的通告,旧金山联邦法院接受了FTC的起诉,而后者强调D-Link屡次未能采取合理的软件测试和防治措施,以此保护路由器和网络摄像头免受已知的容易预防的安全漏洞

除了遗漏安全漏洞外,美国联邦贸易委员会还控诉D-Link,以明文的方式储存用户登录凭证。之前,国内就曾爆发了D-Link路由器存在安全漏洞,有泄漏用户网银账号密码的事情。

现在来看,友讯似乎一直都没有很好的处理这些问题,所以使用这个牌子的路由用户还是小心为妙吧。

展开阅读全文

篇6:以太坊无限增发:以太坊智能合约巨大漏洞!

全文共 921 字

+ 加入清单

数字货币的关注度越来越高,各大交易所的用户数量出现暴增模式。但近来被大家一直很看好的以太坊出现了智能合约巨大安全漏洞问题——以太坊无限增发。以太坊无限增发究竟是好是坏呢?以太坊无限增发又是什么意思呢?大家都清楚,以太坊的智能合约安全性是目前所有数字货币交易所中安全系数最高的,而以太坊突如其来的爆出这一问题,导致数字货币圈内人心惶惶。接下来就给大家分析一下以太坊无限增发究竟会带来什么后果,为何大家都担忧?

首先,以太坊无限增发的安全漏洞是由天网RBL安全实验室发现的,通过自己天网智能合约安全检测系统对以太坊智能合约进行全过程的安全检测。在以太坊REC20机制项目的智能合约代码中检测出项目owinership控制不严谨可能会出现高危漏洞,被天网RBL命名为隐形的owner漏洞。且之前也有交易平台被爆出“隐形的owner漏洞”,结果导致价值2000美元的资金被盗取。黑客恰好是因为项目最高权限的缺陷,乘机获取项目权限,直接修改地址窃取该项目的资金,导致该交易平台损失惨重。

也正是因为这则消息的爆出,以太坊无限增发的智能合约安全漏洞与之相同,不少项目投资人都纷纷开始害怕。黑客在盗取到owner权限后,可以不受监管,达到token无限增发的目的,还能一键注销项目,从而导致投资该项目的资金消失不见。同时,这种高危漏洞的受害者主要是普通的使用者,或者说是专门用来欺诈普通用户的,也就是所谓的“收割韭菜”式的欺诈,又被专业人士称为“蜜罐合约”。

基于这种情况的智能合约代码安全问题,如何才能够解决呢?通过在OKLink浏览器上查看,专家针对owner高危漏洞,简单有效的方法就是轻量级全新修复方案,不用修改智能合约代码、重新部署项目,充分对漏洞修复即可。听起来不靠谱,但在进行漏洞修复过程、结果的确令人诧异,直接完全修复了owner高危漏洞。

因此,以太坊无限增发并不是一件好事,而是利用黑客技术完成对普通用户的一种欺诈方式。如果大家对投资以太坊项目感兴趣,建议大家可以使用OKLink浏览器,它是目前国际市场上领先的以太坊浏览器,拥有实时更新的大数据功能,为用户提供真实有效的数字货币信息。除此外,还对圈内所有代币都可进行投资和了解,使用也更方便。

展开阅读全文

篇7:以太坊智能合约安全吗?在以太坊进行交易有哪些优势?

全文共 851 字

+ 加入清单

以太坊是一个去中心化系统,这个系统都是通过智能合约进行约束的。以太坊智能合约安全吗?很多人都想问这个问题,今天就拉了解一下以太坊智能合约安全吗。以太坊这样的系统在众多的去中心化系统中算是比较庞大的一个了。相比于传统的服务系统,以太坊系统的优势还是非常大的。那么,在以太坊进行交易有哪些优势呢?下面就来好好的了解一下,让你更懂以太坊这个系统。

1、以太坊智能合约安全吗?以太坊这个系统上面进行任何交易都是通过智能合约调用进行的。以太坊智能合约安全吗?自然是安全的。如果没有达到智能合约触发的条件,那么,智能合约是不会是生效的。而智能合约生效完成交易是会进行全网广播的,所以不会有任何的安全隐患。之所以有那么多的人看重以太坊区块链系统,主要就是因为安全性足够高。在以太坊进行交易不仅交易速度非常快,而且交易的安全性是非常高的。这样没有中心管理者的系统真的非常的有用,未来随着时间的推移,随着人们对以太坊的了解加深,以太坊会变得越来越流行,越来越大。

2、在以太坊进行交易有哪些优势?以太坊和传统的服务系统之间还是有很大区别的,首先以太坊是没有中心管理者的,没有这个管理者的系统是更好的,因为有人为管理就会有作假嫌疑。以太坊进行交易是不存在撤回的,生成的信息也是不能修改的。也就是进行了的交易就进行了,全网都是知道有这个交易的,任何人都可以查询到这个交易的存在。所以这样的交易是不会有数据更改这样的作假风险的,非常的安全,还能打假。以太坊智能合约安全吗?看到这里,相信你能够肯定的说出以太坊是安全的。

3、以太坊多少钱一枚?以太坊的价值是非常大的,现在一枚以太坊价值一千美元。像以太坊这样值钱的数字货币全球并不多。以太坊智能合约安全吗?自然是安全的。以太坊的价值不仅仅是存在于网络上的,还是可以兑换成为现实中的货币的。你可以直接联系想要购买以太坊的人将以太坊卖掉,也可以直接上交易所通过币币转化将以太坊兑换成为人民币或者美元进行线下花销。当然,无论怎么兑换以太坊,上OKLink看看以太坊价格动态都是第一步要做的。

展开阅读全文

篇8:十种智能家居有200多种漏洞,消费者的安全谁来保证?

全文共 1081 字

+ 加入清单

如今高新技术产品更新换代快,发展速度日新月异,智能家居产品新品的频频推出就是最好的体现,可是这些智能好玩的产品安全吗?消费者不知道,生产商也未必知道。

据报道,惠普的Fortify应用程序安全部门对市面上最热门的10款消费级智能家居产品进行了研究分析,共发现250种安全漏洞。注意是“种”不是“个”,每款产品的漏洞个数显然会更多。

智能≠安全10款智能家居竟有250种漏洞

或许是迫于压力,惠普并没有公布被调查的产品品牌,而只说了它们的种类:它们来自“电视、网络摄像头、家用恒温器、远程电源插座、洒水车控制器、多设备控制中枢器、门锁、家庭警报器、磅秤和车库开门器的制造商”。

以下是惠普的智能家居设备研究报告的部分内容:

有8款设备对设备本身或者相应网站要求的密码强度低于“1234”。

有7款设备在与互联网或者本地网络进行通讯的时候没有进行加密。

有6款设备界面存在安全漏洞,容易受到持续的跨站点脚本攻击。

有6款设备在软件升级下载期间没有加密。黑客可以借此伪造软件更新,对设备重新编程,从而控制设备。

10款设备中有9款至少收集过某种个人信息:邮箱地址、家庭住址、姓名和出生日期。

此次研究惠普Fortify的研究人员让那些智能家居设备接受FortifyonDemand服务的检测,该服务会对软件的已知和潜在安全问题进行测试。研究方法没有问题,问题在于为什么会有这么多漏洞?这些漏洞可能会造成哪些影响?

漏洞原因

惠普副总裁兼Fortify部门总经理迈克·阿米斯特德(MikeArmistead)认为,该行业的现状是造成这些漏洞的原因:制造商都是着急推出产品抢占市场,而没有做产品的安全保护。

这是厂商的问题,还有系统上的问题。现在智能家居设备所运行的系统是产品这些漏洞的客观原因:这些设备通常都是运行Linux操作系统的精简版本,所以常见于运行Linux的服务器或PC上的基本漏洞它们都会有。

是否严重

当系统本身容易产生漏洞,并且设备制造商并没有像对待传统计算机那样花功夫去加强安全保护时,问题就变得比较严重了:既然有那么多种漏洞,并且很多还是基本漏洞,是不是一款设备受到攻击,设备间的重合漏洞会致使攻击向其它设备蔓延?历史上是有很多先例的,例如黑客通过攻击取暖通风系统,盗取了超过7000万人信息的Target事件,似乎应该让今天的智能家居厂商感到问题的严重性。

市场研究公司Gartner估计,到2020年,个人智能家居设备总装机量将上涨至260亿台。“对于黑客来说,那是巨大的新攻击目标。”但是,一者国内智能家居产品还不够成熟,二者国民对于信息安全的意识普遍薄弱,可以想象国内智能

展开阅读全文

篇9:详解以太坊智能合约安全性漏洞 如何有效减少 DeFi 攻击?

全文共 7849 字

+ 加入清单

区块链是一种新型的分布式系统体系,它使用 P2P 对等网络通信,区块存储,分布式算法共识和加密算法来防止篡改。从本质上讲,区块链可以看作是由所有网络节点共同维护的分布式数据库。与传统的分布式数据库相比,区块链由于具有完整的数据备份,开放透明的网络,无法篡改,完整的信息可追溯性和弱信任模型,因此更适合对分散式信任有明确要求的应用场景。特别是典型的区块链应用场景包括数字支付,产品可追溯性,版权保护,供应链财务等。在区块链系统中,智能合约在实施分散式应用部署和扩展应用的功能方面发挥着极其重要的作用。区块链系统与传统应用程序相比,在区块链系统架构上运行的智能合约具有开放性和透明性,执行性,不可篡改且不依赖第三方的特点,可以满足各种去中心化应用场景的需求,包括近年来发展迅速的去中心化金融(DeFi)项目。

截至 2021 年 1 月 15 日,去中心化金融(DeFi)以超过 45 亿美元的资本成为了成功的金融范例,它利用基于区块链的智能合约来确保其完整性和安全性,。去中心化金融是一个新的发展领域,用于交换,借出或借用令牌。通常,这些指令由智能合约(而不是单个集中的法人或个人)调节和 / 或由多方,分散式治理机制(例如 DAO)控制的「收益」或收入流。去中心化金融(DeFi)—在现有区块链平台之上逐渐兴起。这个新领域的组成部分包括那些与贷款,资产交易和衍生品市场有关的部分。作为去中心化的应用,智能合约管理着大量的数字资产,从而也使其容易受到各种攻击

本文将从三个维度具体阐述了智能合约安全性问题:首先,由于以太坊体系结构每一层的漏洞导致的智能合约安全性。其次,也会探讨 DeFi 和智能合约近期出现的各种攻击。最后还将探讨现有的可行性工具以及来其他的有效实践如何最大限度地减少此类攻击。

以太坊架构概述

在探讨智能合约漏洞之前,我们先简单概述下有关以太坊智能合约架构。

区块链网络能部署并自动执行编程脚本任务。这些程序称为智能合约,用于定义在交易期间调用的自定义功能和规则。基于智能合约的区块链技术已被应用到各种行业中,例如金融,供应链管理,医疗保健能源和政府服务。只有特定的区块链平台支持智能合约:以太坊是第一个支持智能合约的。其他区块链平台(例如 EOS,Lisk,比特币和 Hyperledger Fabric)兼容于部署和执行智能合约。一种称为 Solidity 的脚本类型语言用于在以太坊平台中开发智能合约。在这一部分中,我们介绍了以太坊平台上智能合约实施的相关安全漏洞。智能合约可以持有和管理相应的功能 Credit (地址){可能价值数千美元的大量虚拟货币。因此,对手不断尝试操纵智能合约的执行以支持其活动。本质上,智能合约在分布式和无权限网络上运行,该网络继承了许多漏洞。在传统的系统中,可以重新开发或修补这一小部分的中心化应用程序。

相反,在去中心化的区块链网络中,除非采取极端措施,否则无法在实时网络中修改或升级已部署的智能合约。智能合约的一成不变特征是其安全方面的优势也是劣势。由于这种不变性,黑客无法为自己的利益进行更改或修改合约。但是,部署后开发人员也无法修改智能合约应用程序。他们可以取消或终止合约并创建新的智能合约,然后再次部署它。因此,出于安全性考虑,在部署智能合约之前,应对智能合约进行大范围的测试。我们重点介绍了以太坊智能合约架构的基本构建模块,如图 1 所示,其中包括以太坊的架构。

图 1: 用于运行以太坊区块链的环境是通过一个 Web 用户界面与以太坊体系结构服务的四层进行交互,应用层,用于存储区块链数据的数据库,用于支持共识协议的加密机制以及用于网络层的 Internet 服务 [20]

应用层:以太坊客户端在 EVM 中执行智能合约,其中智能合约与以太坊账户相关联。以太坊支持两种类型的账户:外部拥有账户(EOA)和合约账户。 EOA 用于将用户资金存放在 Wei 中,Wei 是 Ether 的最小子面额,价值 10-18 Ether。 EOA 与公钥相关联并由公钥解决;通过显示相应私钥的所有权来验证对 EOA 的访问。相反,合约帐户与一段可执行的字节码(即智能合约)相关联,它定义了一些令人感兴趣的业务逻辑。智能合约是 DApp 的基石。 DApp 通常将用户界面作为其前端,并将一些智能合约作为其后端。一些 DApp 会发行自己的称为令牌的加密货币,用于初始代币发行(ICO)和交易所。基于以太坊的令牌是一种特殊的智能合约(例如 ERC-20)[20]。智能合约在 EVM 中执行,这些 EVM 是使用基于堆栈的体系结构的准图灵完整机器。术语「quasi」是指执行受交易提供的 gas 限制。在以太坊应用层中,发生各种漏洞,导致许多攻击,如应用层中的图所示。

数据层:包含区块链数据结构。交易是 EOA (称为发件人)与另一个 EOA 或合约帐户(称为收件人)之间的交互。交易由以下方式指定:

nonce,它是用于跟踪发送方已发起的交易总数的计数器;

收件人,该收件人指定了交易的目标 EOA 或合约帐户;

价值,即从发件人向收款人转移的金额(单位:Wei)(如果适用);

输入,是与交易目的相对应的字节码或数据;

gasPrice 和 gasLimit,分别指定发送方愿意向包含交易的区块的获胜矿工支付的单价和最大天然气量;

(v,r,s),它是发送者的椭圆曲线数字签名算法(ECDSA)签名。执行交易会更新所涉及帐户的状态,从而更新区块链。

共识层:确保区块链的状态一致。在撰写本文时,以太坊大约需要 12-14 秒来创建一个区块,这意味着多个矿工可以同时创建有效的区块,并且可能有许多区块。以太坊使用 GHOST 共识协议的变体来选择「最重」分支作为主链,其中「heaviest」分支是根植于所讨论的分叉的子树,并且具有最高的累积区块难度,同时注意到陈旧区块不在主链上。但注意,以太坊用权益证明(PoS)替代其当前使用的工作量证明(PoW)。

网络层:管理节点或客户端的以太坊点对点(P2P)网络,以使节点始终可以从某些活动节点获取区块链的更新状态。以太坊网络是一个结构化的 P2P 网络,其中每个节点(即客户端)存储整个区块链的副本。为了进行节点发现和路由,每个节点维护一个动态路由表,其中包含 160 个存储桶,每个存储桶最多包含 16 个其他节点的 ID,IP 地址,UDP / TCP 端口条目。以太坊使用 RLPx 协议发现目标客户端,并使用以太坊有线协议来促进客户端之间以太坊区块链信息(例如交易,区块)的交换。

以太坊区块链环境:运行在如下四层的环境中:用户与以太坊区块链进行交互的 Web 界面 ; 以太坊客户的数据库,用于存储区块链数据 ; 出于安全目的的加密机制;以及支持以太坊节点之间的区块链通信的互联网基础设施。我们将以太坊区块链架构与环境区分开来,因为针对以太坊区块链的攻击可能来自环境,并且这些攻击可能在环境中得到更好的解决,而不是由以太坊解决。

以太坊智能合约漏洞

重点介绍了以太坊体系每一层的智能合约漏洞,如图 2 所示。

图 2:以太坊各层漏洞的分类

以太坊应用层

重入性:此漏洞最初是从 DAO 攻击中发现的 [1],当外部被调用方合约在用方合约完成之前(即某种意义上是循环调用)在调用方合约中回调函数时,会发生此漏洞。这使攻击者可以绕开适当的有效性检查,直到调用者合约被耗尽以太币或交易用完为止。

委托呼叫注入:首先从对 Parity 钱包的攻击中发现了此漏洞 [2]。为了促使代码重用,EVM 提供了一个操作码委托调用,用于将被调用方合约的字节码插入到调用方合约的字节码中。结果恶意的被调用方合约可以直接修改(或操纵)调用方合约的状态变量。此漏洞是由于被调用方合约可以更新调用方合约的状态变量而导致的。声明旨在通过委托调用作为库共享的无状态合约,可完全防此漏洞。

冻结以太:首次从对 Parity 钱包的攻击中发现了此漏洞 [3]。该漏洞产生由于用户无法将钱存入其合约帐户,而无法从这些帐户中支出资金,从而有效冻结了他们的资金。

升级合约:引入合约升级的思想是为了缓解智能合约一旦部署后就无法修改的问题,即使以后发现它们存在漏洞。为了允许合约升级,有两种方法:(i)将合约分为代理合约和逻辑合约,以使开发人员可以升级后者而不是前者; (ii)使用注册管理机构合约来保存更新后的合约。这些方法虽然有效,但却引入了一个新的漏洞:当合约开发者变得恶意时,更新的合约可能是恶意的。此漏洞(即,不安全的联系人更新)仍然是一个未解决的问题。

具有意外还原的 DoS:发生这种情况的原因是,由于主叫方合约遇到外部呼叫失败而导致事务被还原,或者被叫方合约故意执行还原操作以中断主叫方合约的执行。此漏洞是由执行被调用方合约还原的调用方合约引起的。通过使接收者调用交易来「提取」发件人为接收者预留的资金,可以防止此漏洞,从而有效地防止了发件人的交易被还原。

整数上溢和下溢:首次从针对 BEC 令牌的攻击中发现了此漏洞 [4]。当运算的结果超出了 Solidity 数据类型的范围时,就会发生这种情况,例如导致对攻击者的余额或其他状态变量进行未经授权的操纵。该漏洞是由 Solidity 源代码未在数字输入上执行正确的验证引起的,并且 Solidity 编译器和 EVM 均未提供整数上溢 / 下溢检测。可以通过使用 SafeMath 库来防止此漏洞处理这些问题。

操纵余额:当合约的控制流决策依赖于此值时,会发生此漏洞。平衡或解决(balance)平衡,攻击者可以利用它使自己成为唯一可以获取金钱的人。可以通过不使用任何条件声明中的合约余额来防止此漏洞 [5]。通过 tx.origin 进行身份验证:tx.origin 是 Solidity 中的全局变量,它指的是发起有问题交易的原始 EOA。当合约使用 tx.origin 进行授权时会发生此漏洞,这可能会受到网络钓鱼攻击的危害。通过使用 msg.sender 而不是 tx.origin 进行身份验证,可以防止此漏洞,因为 msg.sender 返回导致该消息的帐户。

错误的可见性:错误地指定功能的可见性,从而允许未经授权的访问。

无保护的自杀:合约的所有者(或受委托的第三方)可以使用自杀或自毁方法销毁合约。 取消合约时,将删除其关联的字节码和存储。 该漏洞是由合约强制执行的身份验证不足引起的。 可以通过强制执行例如多因素身份验证来缓解此漏洞,这意味着自杀操作必须得到多方的批准。

将以太币泄漏到任意地址:当任意调用方都可以提取合约的资金时,该漏洞就不会发生,该调用方既不是合约的所有者,也不是向合约存入资金的投资者。 此漏洞是由调用者调用将以太币发送到任意地址的功能时无法检查呼叫者的身份引起的。 通过对发送资金的功能进行适当的身份验证,可以防止此漏洞。

机密性失效:在区块链中,由于区块链的公共性质(即交易细节是众所周知的),限制变量或函数的可见性并不能确保变量或函数是机密的。 防止此漏洞的一种可能解决方案是使用加密技术,例如定时承诺 [6]。

签名信息不足:当数字签名对多个交易有效时,就会发生此漏洞,当一个发件人(例如 Alice)通过代理合约向多个收件人汇款(而不是发起多个交易)时,可能会发生此漏洞。 此漏洞最初是在针对智能合约的重播攻击中利用的。通过在每条消息中合并适当的信息(例如现时值和时间戳)可以防止此漏洞。

具有不受限制的操作的 DoS:此漏洞首先从 Govern Mental 合约中观察到 [7]。

未经检查的呼叫返回值:此漏洞也称为处理错误的异常。它有两个变体,称为 gas-less 发送和 unchecked 发送。当不检查低级调用的返回值时会出现这种情况,即使函数调用抛出错误 [8],执行也可能会继续。

未初始化的存储指针:回顾下,在 Solidity 中,合约状态变量始终从插槽 0 开始连续放置在存储中。对于复合局部变量(例如,struct,array 或 mapping),将引用分配给未占用的对象存储中的插槽以指向状态变量。

错误的构造函数名称:此漏洞最初是从 Rubixi 合约 [9] 中观察到的,该构造函数的名称不正确,它使任何人都可以成为合约的所有者。在 Solidity 0.4.22 版之前,声明与合约名称相同的函数被视为合约构造函数,该函数仅在创建合约时执行。

类型转换:此漏洞最早在 [10] 中发现。以 Solidity 语言编写的合约可以通过直接引用被调用方合约的实例来调用另一个合约。

过时的编译器版本:当合约使用过时的编译器时会发生,其中包含错误,因此使已编译的合约易受攻击。通过使用最新的编译器可以防止此漏洞。

简短地址:此漏洞最早在 [11] 中实现,并进行了广泛讨论。

以太币丢失给孤立地址:以太币失去到孤立发生在汇款时,以太坊仅检查接收者地址的长度不超过 160 位,而不检查接收者地址的有效性。 如果将钱发送到一个不存在的孤立地址,则以太坊会自动注册该地址,而不是终止交易。 由于该地址未与任何 EOA 或合约帐户相关联,因此没有人可以提取已转移的资金,这实际上是丢失的。 此漏洞是由 EVM 不能孤立保护引起的。 在撰写本文时,只能通过手动确保收件人地址的正确性来防止此漏洞。

调用堆栈深度限制:此漏洞是由 EVM 的执行模型不足引起的,并且已被 EIP-150 的硬分叉所消除,该硬叉重新定义了外部调用的耗油量规则,使其不可能达到 1,024 in 调用堆栈深度。

低估操作码:首先从两次 DoS 攻击中发现了此漏洞 [12] [13]。

交易顺序依赖(又名前端运行):这是指并发性问题,即区块链的即将到来的状态取决于交易的执行顺序,但是由矿工决定。

时间依赖关系:当合约在执行关键操作(例如汇款)时将 block.timestamp 用作触发条件的一部分或作为可由恶意矿工操纵的随机性来源时,会发生此漏洞。该漏洞是由以太坊引起的,它只要求时间戳大于其母块的时间戳并且在当前时钟的 900 秒以内。

产生随机性:例如,许多赌博和彩票合约都是随机选择中奖者,通常的做法是根据一些初始私有种子(例如 block.number,block.timestamp,block。难易度或 blockhash)生成伪随机数。但是,这些种子由矿工完全控制,这意味着恶意矿工可以操纵这些变量使自己成为赢家。此漏洞是由可操纵的 entropy 源引起的。

数据层漏洞

难以分辨的链:当以太坊分为 ETH 和 ETC 两条链 [13] 时,首先从跨链重放攻击中观察到此漏洞。回想一下,以太坊使用 ECDSA 签署交易。在进行 EIP-155 [7] 硬分叉之前,每笔交易都包含六个字段(即,随机数,收件人,值,输入,gasPrice 和 gasLimit)。但是,数字签名不是特定于链的,因为那时甚至还不知道特定于链的信息。结果,为一个链创建的事务可被另一链重用。通过将 chainID 合并到字段中,已消除了此漏洞。

State Trie 中的「空帐户」:此漏洞首先从参考文献 [12] [13] 中报告的 DoS 攻击中发现的。

共识层的漏洞

可外包的难题:回想以太坊采用了名为 Ethash 的 PoW 难题,该难题旨在抵御 ASIC,并能够限制并行计算的使用(由于事实上,矿工的大部分工作将是读取数据集。 通过有限的内存带宽)。 但是,狡猾的矿工仍然可以将搜索难题解决方案的任务划分为多个较小的任务,然后将其外包。 该漏洞是由 Ethash 造成的,它仅使拼图解决方案在原图像搜索中部分顺序,而不是依赖顺序 PoW。

概率最终性:此漏洞是由以太坊区块链偏爱可用性而非一致性的设计引起的,这是根据 CAP 定理 [14] 选择的。

带有块填充的 DoS:首次从 Fomo3D 合约中观察到此漏洞 [15]。该漏洞仅导致攻击者的交易包含在新开采的区块中,而其他交易则被矿工放弃一段时间。当攻击者提供更高的 gasPrice 以激励矿工选择攻击者的交易时,可能会发生这种情况。此漏洞是由贪婪的采矿激励机制引起的。在撰写本文时,尚无解决方案来防止此漏洞。

诚实的采矿设想:此漏洞是由共识协议引起的,因为它与激励不兼容,请参见 [16]。在撰写本文时,此漏洞仍然是一个未解决的问题。

出块奖励:它是指出块奖励机制,用于应对由于快速生成块而导致的陈旧区块增加。但是,这种机制有一个副作用,即允许自私的矿工将陈旧的区块变成出块并获得奖励,从而有效地激励了自私的采矿和双重支出。

验证者的困境:此漏洞最早在参考文献 [17] 中报道,指的是当验证新交易需要不费吹灰之力的计算时,无论矿工是否选择验证交易,都将受到攻击。如果矿工验证了计算量大的交易,那么他们将花费大量时间,并在下一个区块的竞争中为攻击者提供优势;如果矿工未经验证接受交易,则区块链可能包含不正确的交易。此漏洞是由以太坊中验证资源需求交易的高昂成本引起的。可以通过限制验证块中所有事务所需的计算量来缓解此漏洞 [17]。但是,尚不清楚如何消除此漏洞。

网络层的漏洞

无限节点的创建:此漏洞是针对 Geth 客户端 1.8 之前的版本。在以太坊网络中,每个节点都由唯一的 ID 标识,该 ID 是 64 字节的 ECDSA 公钥。攻击者可以在一台计算机上创建无限数量的节点(即具有相同的 IP 地址),然后使用这些节点垄断某些受害者节点的传入和传出连接,从而有效地将受害者与网络中的其他对等节点隔离开来。此漏洞是由对节点生成过程的弱限制引起的。通过使用 IP 地址和公钥的组合作为节点 ID,可以消除此漏洞。格斯(Geth)开发人员尚未采用这种对策,他们认为这对客户端的可用性有负面影响。

不受限制的传入连接:此漏洞在版本 1.8 [18] 之前的 Geth 客户端中。 每个节点在任何时间点可以具有总数为 maxpeers 的连接(默认值为 25),并且可以与其他节点发起多达 1 (1 + maxpeers)/2⌋个出站 TCP 连接。 但是,其他节点启动的传入 TCP 连接的数量没有上限。 通过为 maxpeers 建立与没有出站连接的受害节点的许多传入连接,攻击者有机会使受害者黯然失色。 在 Geth v1.8 中,通过对到节点的传入 TCP 连接的数量实施上限,默认值为⌊maxpeers/3⌋= 8,消除了此漏洞。

公共对等体选择:在 Geth 客户端 1.8 之前的版本中检测到此漏洞 [18]。

对等体选择:该漏洞指的是 Geth 客户端在从其路由表中选择节点以建立出站连接时,总是获取随机选择的桶的头部。由于每个存储桶中的节点都是按活动排序的,因此攻击者可以通过定期向 Geth 客户端发送消息来使其节点始终位于其他节点之前。通过在路由表中所有节点的集合中随机选择统一的节点,而不是仅从每个存储桶的头中随机选择节点,在 Geth v1.9 中已消除了此漏洞。

独立块同步:它允许攻击者对以太坊 P2P 网络进行分区,而不会垄断受害者客户端的连接。回想一下,每个块标题都包含一个难度字段,该字段记录了该块的挖掘难度。区块链的总难度用 totalDifficulty 表示,是直到当前区块的难度之和。

RPC API 暴露:此漏洞最初是通过对 Geth 和 Parity 客户端的攻击发现的 [19]。

展开阅读全文