木星链 木星链
Ctrl+D收藏木星链
首页 > ETH > 正文

ENT:深入理解「拒绝服务」漏洞

作者:

时间:1900/1/1 0:00:00

1.前言

拒绝服务(DoS):DoS是DenialofService的简称,即拒绝服务,任何对服务的干涉,使得其可用性降低或者失去可用性均称为拒绝服务。简单的理解就是,用户所需要的正常服务请求无法被系统处理。例如一个计算机系统崩溃或其带宽耗尽或其硬盘被填满,导致其不能提供正常的服务,就构成拒绝服务。拒绝服务攻击:造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。在互联网中,拒绝服务攻击大致可以分为三类:利用软件实现上的缺陷;利用协议上的漏洞;利用资源压制。而在区块链中,拒绝服务攻击扰乱、中止、冻结正常合约的执行,甚至合约本身的逻辑无法正常运行。2.漏洞概述

在Solidity里,拒绝服务漏洞可以简单的理解为「不可恢复的恶意操作或者可控制的无限资源消耗」,也就是对以太坊合约进行DoS攻击,这就可能导致Ether和Gas的大量消耗,更严重的是让原本的合约代码逻辑无法正常运行。举个例子,超市有三个收银点,正常来说人们排队在收银点进行扫码支付,但是有一天网络出现了问题,所有收银点的顾客扫码支付都失败了,而后面的人也不能进行支付买单,就导致了收银点的堵塞,超市不能正常运营。又或者,在支付时有顾客故意闹事,使得后面的顾客也不能去支付,这同样也会导致超市不能运营。我们可以看到有来自内部的,还有来自外部的,都是可能会造成拒绝服务攻击。在智能合约中也是一样的,攻击者通过消耗合约的资源,让用户短暂地退出不可以操作的合约,严重时甚至能永久地退出,从而把以太币锁在被攻击的合约中。3.漏洞分析

蓝色光标:与腾讯在作为元宇宙入口的虚拟人业务有较深入合作:11月16日消息,蓝色光标在互动平台表示,公司与腾讯在游戏、动漫、阅文等层面有深入合作;同时,在作为元宇宙入口的虚拟人业务,也有较深入合作。[2021/11/16 21:54:34]

智能合约中的拒绝服务攻击一般有三种:在外部操纵映射或数组循环。所有者操作。基于外部调用的进展状态。3

}在上面的代码片段中我们可以看到,distribute()函数中会去遍历投资者数组,但是合约的循环遍历数组是可以被外部的人进行人为扩充,如果有攻击者要攻击这个合约,那么他可以创建多个账户加入投资者的数组,让investors的数据变得很大,大到让循环遍历数组所需的gas数量超过区块gas数量的上限,此时distribute()函数将无法正常操作,这样就会造成该合约的拒绝服务攻击。针对以上情况,合约不应该对可以被外部用户人为操纵的映射或循环数组进行批量操作,这里更建议使用取回模式而不是发送模式,即每个投资者可以通过使用withdrawFunds()取回自己应得的代币。如果合约必须需要通过遍历一个变长数组来进行转账,那么最好是估计完成它们大概需要多少个区块以及多少笔交易,从而限制数组长度,此外还必须能够追踪得到当前进行到哪以便当操作失败时从那里开始进行恢复。如下面的代码所示,必须确保在下一次执行payOut()之前另一些正在执行的交易不会发生任何错误。structPayee{addressaddr;uint256value;}Payeepayees;uint256nextPayeeIndex;functionpayOut(){uint256i=nextPayeeIndex;while(i<payees

国务院办公厅卢向东:区块链等新技术与政府业务深入融合:10月12日,第三届数字中国建设峰会数字政府分论坛在福州召开。国务院办公厅电子政务办公室主任卢向东表示,党中央、国务院作出推进数字政府建设的重要决策部署,意义重大,影响深远。目前推进数字政府建设已经具备良好的支撑条件。当前,5G网络覆盖范围不断拓展,云计算统筹优化基础设施资源,物联网、大数据、人工智能、区块链等新技术与政府业务深入融合,新一代信息技术为数字政府建设提供了强有力的技术保障。(经济参考报)[2020/10/15]

nextPayeeIndex=i;}3

//...额外的一些ICO功能//重写transfer函数,先检查isFinalizedfunctiontransfer(address_to,uint_value)returns(bool){require(isFinalized);super

contractPOC{addressowner;AuctionauInstance;constructor()public{owner=msg

modifieronlyOwner(){require(owner==msg

functionsetInstance(addressaddr)publiconlyOwner{//指向原合约地址auInstance=Auction(addr);}functionattack()publiconlyOwner{auInstance

声音 | 中国互金协会副秘书长:我国区块链在金融领域应用总体处于早期尝试向深入探索转变的过渡阶段:金色财经报道,11月20日,“金融进化论:2019新京报金融科技论坛”上,中国互金协会副秘书长杨农表示,当前,我国区块链在金融领域应用,已在供应链金融、金融数据共享和金融信息存证等场景中形成了一些落地案例,总体处于早期尝试向深入探索转变的过渡阶段,且呈现出探索性应用数量较多、参与主体较为多元、底层技术原创有待加强等特点。同时,区块链在我国金融领域的应用探索也面临着如下几个方面的挑战:技术层面仍难以兼顾部分金融应用场景对安全、功能和性能的要求;研发层面自主创新有待加强,对国外开源程序的广泛应用可能导致技术依赖风险;业务层面部分金融应用环节尚存在模糊地带,部分机构在开展区块链应用创新时缺少权威的第三方评估意见作为参考;治理层面存在法律规制困难,如链上资产和智能合约等方面的法律有效性界定不清晰。[2019/11/22]

function()externalpayable{revert();}}攻击者先通过攻击合约调用bid()函数向竞拍合约转账成为新的竞拍者currentLeader,然后新的bid()函数被执行进行竞标的时候,当执行到require(currentLeader

function()payable{//回退函数,使用revert报错revert();}}在Remix中进行调试查看结果,首先使用账户(0x5B38Da6a701c568545dCfcB03FcB875f56beddC4)设置初始竞争价格并部署漏洞合约代码PresidentOfCountry.sol。部署好后合约的地址为0xd9145CCE52D386f254917e481eB44e9943F39138,后面在部署攻击合约时需要用到。

动态 | 2019年7月国内一级市场区块链融资10强发布 区块链行业的发展不断向产业端深入:据中国金融信息网报道,8月8日,中国金融信息网与烯牛数据联合发布2019年7月份国内一级市场区块链项目融资10强榜单。从榜单来看,在整体融资大幅下滑的趋势下,2019年7月份国内区块链项目融资数量出现回升。监测数据显示,数字货币和交易平台类融资项目明显增多,天秤币白皮书的发布在一定程度上提振了市场预期,但是此类项目将面临与天秤币的直接竞争,其商业逻辑未来或将受到天秤币严酷打压。与实体经济结合的项目依然占据着榜单的主流,分别涉及金融、大数据、交通运输、电商、传媒、产权、房地产和游戏领域。从连续发布的榜单来看,区块链行业的发展不断向产业端深入,应用端的开发落地越来越具体,与实体经济结合发展的想象空间逐渐立体化。从技术角度来看,加密、数据库、共识、P2P和智能合约的发展日益成熟,区块链作为集成性创新技术的发挥边界正在逐步拓展。[2019/8/8]

点击president可以查看当前竞争者的地址。

声音 | 央行研究局局长:将深入研究完善金融科技监管制度框架等问题:据财联社消息,央行研究局局长王信今日在数字金融开放研究计划首届学术研讨会上表示,央行高度总是金融科技应用的相关研发,下一阶段值得深入研究的课题包括:Libra等加密数字货币有关问题,如是否会形成法定数字货币、少数数字稳定币并存格局;探索数字金融更好地支持实体经济发展,应开发多元化、全方位金融服务;完善金融科技监管制度框架,发展监管科技,如何将科技巨头纳入宏观审慎监管框架;加强数字金融基础设施建设,加强数字金融领域的国际协调合作等。[2019/7/8]

使用账户(0x5B38Da6a701c568545dCfcB03FcB875f56beddC4)调用becomePresident并携带1eth,执行成功后再点击president查看,发现新的总统地址已经变成了0X5B的账户。

此时有一个攻击者(0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2)编写了一个攻击者合约Attack.sol,携带2eth并设置_target为PresidentOfCountry合约地址(0xd9145CCE52D386f254917e481eB44e9943F39138)进行部署。

部署好后的攻击合约地址为0xa131AD247055FD2e2aA8b156A11bdEc81b9eAD95,此时再点击president进行查看新总统的地址,发现已经是攻击合约的地址了。

之后如果还有其他用户想来竞争总统位置,就需要大于2eth的价格去调用becomePresident函数,这里有个用户(0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c)想去竞争总统,携带3eth去调用becomePresident,结果发现报错并回退,点击president发现总统地址还是攻击合约没,此时不管是谁使用多少的以太币去调用becomePresident,结果都是失败,该合约已经不能进行正常的操作,这就说明合约受到了拒绝服务攻击。

4.2真实案例

下列代码是实际合约中存在拒绝服务攻击的案例,只写了关键的代码并做了相关的改动。可以看到合约的关键代码是用作提款操作,但是在提款中有一个判断要提款的金额和用户在该合约中存款的数量是否相等,而并不是大于等于,那么就有可能发生当用户要提出amount数量的代币时,由于各种原因导致balances变动,甚至是用户不想全部提款,从而使得判断条件require(balances==amount);不成立,这时就会造成短暂的拒绝服务攻击。...functionwithdraw(uint256amount)public{//提款amount数量require(balances==amount);//检查要提款的金额是否等于该用户在合约中的存款balances-=amount;//修改合约中存款的状态变量msg.sender.transfer(amount);//转账到用户账户}而修改的办法就是将判断条件require(balances==amount);修改为require(balances>=amount);就可以了。4.3历史案例

在历史上,2016年2月6日至8日,在游戏KotET(KingogtheEtherThrone)的「TurbulentAge」期间,就遭受到了拒绝服务攻击,导致部分角色的补偿和未接收款项无法退回玩家的钱包中。同年6月,GovernMental合约也遭受到了拒绝服务攻击,当时1100个以太币通过使用250万个gas交易而获得,这笔交易超出了合约能负荷的gas上限,从而导致交易暂停。相关的还有Fomo3D等的拒绝服务攻击。5.解决办法

通过上面的讲解,我们可以发现拒绝服务攻击在智能合约中的影响也是非常严重的,所以针对拒绝服务攻击,合约开发者应该针对上面漏洞分析时讲到的三种情况进行相应的代码修改。比如对于外部操作的映射或者数组循环,需要对长度进行限制等;而对于所有者操作需要考虑合约的非唯一性,不要使得合约因为某个权限账户而导致整个业务瘫痪;基于外部调用的进展状态需要对函数的调用进行异常处理,一般来说内部函数的调用不会造成危害。如果调用失败也只是会进行回退,而外部调用具有不确定性,我们不知道外部调用者想干什么,如果被攻击者攻击,就可能会造成严重的后果,具体表现为恶意返回执行错误,造成正常代码无法执行,从而造成拒绝服务攻击,那么针对这种开发者就应该加入函数执行异常的处理机制。总的来说,合约开发者需要考虑合约代码的代码逻辑全面性和缜密性等,这样才能更好的杜绝拒绝服务攻击。6.参考文献

拒绝服务攻击_百度百科(baidu.com)以太坊智能合约安全入门了解一下(rickgray.me)《智能合约安全分析和审计指南》

标签:ENTRES区块链PAYBitTorrent (new)Restaurant DeFi区块链游戏币有哪些Wallet Pay

ETH热门资讯
NFT:?NFT界的MakerDAO:市场增长的发动机

NFT即非同质化代币,最早的尝试出现在2017年上线的一款加密猫的游戏CryptoKitties.

1900/1/1 0:00:00
数字货币:美国《外交》杂志 | 美国的加密难题:在不破坏加密创新的情况下保护安全

作者:MaryLiu,AmyLiu全球最有影响力的外交类期刊《外交》发表了一篇长文「美国的加密难题」.

1900/1/1 0:00:00
以太坊:一文探讨构建有效安全层的要素:用户自验证文化、安全的共识机制和是否对 ZKP 友好等

作者:Polynya我意识到我从来没有真正解决如何构建有效安全层的问题。这里要澄清的一点是,我说的只是安全性和验证,而非数据可用性.

1900/1/1 0:00:00
LOOT:A16Z:将加密纳入主流,详解加密的最低可行参与方式

当人们谈论近期,设想加密货币的遥远未来时,谈话总是会回到财富创造和再分配的循环。自觉或不自觉地,人们都明白,网络的发展不仅仅是让现有的成员富裕起来,还要求扩大有能力参与的人数.

1900/1/1 0:00:00
比特币:数据洞悉:纵观近期的整个加密市场

本文要点:价格变动:DeFi代币越来越多地与高市值加密资产相关;比特币正在失去市场主导地位。成交量动态:在关于与沃尔玛建立合作伙伴关系的假新闻流传后,莱特币的每小时交易量飙升至10亿美元以上,之.

1900/1/1 0:00:00
NFT:从行业发展深入分析加密货币市场第四季度趋势、热点及重点项目

整体市场及底层公链展望在这个周期中,我们会看到加密市场比以前周期成熟得多,在那些表现出色的区块链网络和协议中,价值叙事和基本面要素将发挥着更大的作用.

1900/1/1 0:00:00