什么是日蚀攻击
首先简单介绍一下日蚀攻击
以太坊的节点发现机制基于Kademlia,但其目的却不同,Kademlia旨在成为在分布式对等网络中存储和查找内容的手段,而以太坊仅用于发现新的节点。由于以太坊的节点是由其公钥表示的,并且不受IP限制,因此在一个机器上可以同时存在很多节点。攻击者在很少的服务器上制作出很多的节点,并积极的ping受害者的服务器。通过Kademlia协议,攻击者的节点信息将存储并填充在受害者节点列表中。下一步就是让受害者重启机器,手段包括断电、ddos攻击等等。重启后,攻击者再不停的ping被害者的节点以建立tcp连接,一旦被害者所有的tcp连接都是攻击者制造的,那么就达到了把被害者与正常的网络隔离的目的,当然最大的目的应该还是为了双花。有一篇论文是专门介绍日蚀攻击的,大家可以找来看看。
网上有很多关于日蚀攻击的详细介绍,在这里不做赘述。
过去30天以太坊流通量减少超过22.7万枚:金色财经报道,Ultrasound.money数据显示,过去30天以太坊流通量减少227,835.29枚。当前以太坊流通量约为120,293,305枚,当前年化通缩率为1.07%。[2023/5/14 15:02:21]
以太坊是如何防止日蚀攻击的
在刚才提到的论文中,提到了以太坊的geth1.8.0解决了日蚀攻击,于是作者拿1.8.0和1.7.3做对比,理清了以太坊解决这个问题的做法。
直接看代码。
以太坊启动时加载p2p网络的流程如下,
cmd/geth/main.goinit方法->geth->startNode()->utils.StartNode()->stack.Start()->running.Start()
开发者身份服务平台Auth0集成以太坊登录Sign-In with Ethereum服务:4月12日消息,开发者身份服务平台 Auth0 集成以太坊登录Sign-In with Ethereum服务,用户在所有 Auth0 客户端都可以使用以太坊钱包登录。
注,Sign-In with Ethereum是一套通过以太坊账号登录第三方 Web 应用的技术规范,使用户能够通过以太坊帐户和 ENS 配置文件控制其数字身份,而不是依赖传统的中间人。[2022/4/12 14:18:49]
这个running.Start()调用的即是p2p/server.go中的Start()方法,看看这个方法做了什么:
//Startstartsrunningtheserver.//Serverscannotbere-usedafterstopping.func(srv*Server)Start()(errerror){......srv.loopWG.Add(1)gosrv.run(dialer)srv.running=truereturnnil}
SoFi CEO:本人拥有比特币和以太坊,没利用加密技术的公司将被“抛在后面”:2月15日消息,SoFi首席执行官Anthony Noto表示,他和他的家人拥有一些加密货币。“我们拥有比特币,以太坊以及其他加密货币,”他还警告说,不承认区块链好处的公司可能会被“抛在后面”。据了解,SoFi是一个在线借贷平台,于2019年末开始支持加密货币交易服务,允许用户在平台上买卖比特币、以太坊或莱特币。(CNBC)[2022/2/15 9:53:53]
这篇文章主要关注解决日蚀攻击相关代码,其他的不做介绍。
上面的gosrv.run(dialer)连接池管理协程,负责维护TCP连接的列表,监听各种信号,处理peer的增删改
func(srv*Server)run(dialstatedialer){...running:for{scheduleTasks()select{...casec:=<-srv.posthandshake://Aconnectionhaspassedtheencryptionhandshakeso//theremoteidentityisknown(buthasn'tbeenverifiedyet).iftrusted{//EnsurethatthetrustedflagissetbeforecheckingagainstMaxPeers.c.flags|=trustedConn}//TODO:trackin-progressinboundnodeIDs(pre-Peer)toavoiddialingthem.select{casec.cont<-case<-srv.quit:breakrunning}casec:=<-srv.addpeer://Atthispointtheconnectionispasttheprotocolhandshake.//Itscapabilitiesareknownandtheremoteidentityisverified.iferr==nil{//Thehandshakesaredoneanditpassedallchecks.p:=newPeer(c,srv.Protocols)//Ifmessageeventsareenabled,passthepeerFeed//tothepeerifsrv.EnableMsgEvents{p.events=&srv.peerFeed}name:=truncateName(c.name)srv.log.Debug("Addingp2ppeer","name",name,"addr",c.fd.RemoteAddr(),"peers",len(peers)1)gosrv.runPeer(p)peers=pifp.Inbound(){}}...casepd:=<-srv.delpeer://Apeerdisconnected.d:=common.PrettyDuration(mclock.Now()-pd.created)pd.log.Debug("Removingp2ppeer","duration",d,"peers",len(peers)-1,"req",pd.requested,"err",pd.err)delete(peers,pd.ID())ifpd.Inbound(){}}}...}
Pax Treasury在以太坊网络增发超1730万枚BUSD:金色财经报道,Whale Alert数据显示,北京时间11月11日00:48,Pax Treasury在以太坊网络增发17,303,940枚BUSD,增发哈希为0x10b20c242bcf9686a0458502ad1410094ebca7631979c728e42e23a75c6b57b3。[2020/11/11 12:14:57]
注意加粗的代码,有一个针对inboundCount的操作,当有posthandshake、addpeer消息的时候,会先去check,如果add或del了一个peer,则有对应的inboundCount或者inboundCount--。看看到底check了什么:
protoHandshakeChecks最终也是调用encHandshakeChecks:
以太坊上BTC锚定币总发行量突破9万枚:据DeBank数据显示,9月17日,BTC锚定币总发行量突破9万枚,近30天增长了104.86%。其中WBTC发行量为5.87万枚,占比超65%。紧随其后的是renBTC以及HBTC,发行量分别为2.27万枚和0.48万枚。[2020/9/17]
func(srv*Server)encHandshakeChecks(peersmap*Peer,inboundCountint,c*conn)error{switch{case!c.is(trustedConn|staticDialedConn)&&len(peers)>=srv.MaxPeers:returnDiscTooManyPeerscasepeers!=nil:returnDiscAlreadyConnectedcasec.id==srv.Self().ID:returnDiscSelfdefault:returnnil}}
inboundConn表示连接类型为主动连接过来。
看加粗的这段逻辑:如果该连接是信任的,且是主动连接过来的,且主动连接过来的节点数量大于srv.maxInboundConns()时,则拒绝此连接。
可以看出来,以太坊是通过限制主动连接过来的数量来阻止日蚀攻击的。我们顺便看下这个数量是多少:
func(srv*Server)maxInboundConns()int{returnsrv.MaxPeers-srv.maxDialedConns(。func(srv*Server)maxDialedConns()int{ifsrv.NoDiscovery||srv.NoDial{return0}r:=srv.DialRatioifr==0{r=defaultDialRatio}returnsrv.MaxPeers/r}
MaxPeers默认是25,defaultDialRatio表示能够接受主动连接的比例,默认是3,所以最多允许传入的tcp连接数量就是25/3=8个
亲爱的用户: 胖比特国际站已上线项目Augur(REP),district0x(DNT),OceanProtocol(OCEAN).
尊敬的用户: 您好!新一波BHT5折申购活动将于9月11日重磅来袭,双重好礼等您来,500万BUT5折申购??BUT锁仓30天享100%年化收益.
据新浪财经消息,9月6日至7日,中国发展高层论坛专题研讨会“贸易、开放与共享繁荣”在北京钓鱼台国宾馆举行.
亲爱的用户: BigProxy上线一周多以来,广大用户踊跃参与,EOS抵押数量即将突破1,000万.
亲爱的KuMEX用户 KuMEX将于2019年9月11日上线首届持仓奖励活动。KuMEX将根据用户持仓比例分配奖励,每日奖励0.5BTC,活动进行10天,总奖金5BTC.
尊敬的币权BQB用户: 9月6日最新消息币权BQB和牛顿达成战略合作,牛顿将于近期推出新的Newmall机制,以挣钱的商城为理念,赋能有社群的团队可以直接推广商城.