區(qū)塊鏈安全—詳談共識(shí)攻擊(三)

image.png

一、前言

我們?cè)谇懊孢M(jìn)行了兩講公式機(jī)制(參考鏈接如下),在前文的講述中,我們講解了部分共識(shí)的具體流程以及優(yōu)缺點(diǎn)。本文中,我們補(bǔ)充剩下的共識(shí)理念并分析其對(duì)應(yīng)的優(yōu)缺點(diǎn)。除此之外,我們針對(duì)相關(guān)的共識(shí)漏洞進(jìn)行分析,為安全愛(ài)好者提供更多攻擊的參考模型。

區(qū)塊鏈安全—詳談共識(shí)攻擊(一)
區(qū)塊鏈安全—詳談共識(shí)攻擊(二)

二、Ripple Consensus—瑞波共識(shí)算法

1 協(xié)議流程

在介紹協(xié)議前,我們簡(jiǎn)單的介紹下瑞波的由來(lái)。簡(jiǎn)單來(lái)說(shuō),瑞波是一個(gè)基于互聯(lián)網(wǎng)的全球開(kāi)放的支付網(wǎng)絡(luò),人們可以通過(guò)該支付網(wǎng)絡(luò)轉(zhuǎn)賬任意一種貨幣,交易確認(rèn)時(shí)間很短,一般只需要幾秒鐘就能完成。所以此支付網(wǎng)絡(luò)非常簡(jiǎn)便與快捷,所以交易費(fèi)用接近于零。

瑞波共識(shí)協(xié)議(Ripple Consensus Protocol,RCP)中包括了特殊節(jié)點(diǎn)列表并基于此使一組節(jié)點(diǎn)達(dá)成共識(shí)。初始特殊節(jié)點(diǎn)列表就像一個(gè)俱樂(lè)部,如果俱樂(lè)部要接納新成員,必須由俱樂(lè)部會(huì)員進(jìn)行投票,一定比例的會(huì)員通過(guò)才允許接納新會(huì)員。要接納一個(gè)新成員需要該俱樂(lè)部51%的會(huì)員投票通過(guò),并且外部成員對(duì)此沒(méi)有任何影響力。由于該俱樂(lè)部有“中心化”特性,如果其開(kāi)始腐化那么股東們則無(wú)法做任何事情。所以瑞波系統(tǒng)將股東們與其投票權(quán)利分隔開(kāi),并因此比其他系統(tǒng)更中心化。

在Ripple的共識(shí)算法中,參與投票節(jié)點(diǎn)的身份是事先知道的,因此,算法的效率比PoW等匿名共識(shí)算法要高效,交易的確認(rèn)時(shí)間只需幾秒鐘。當(dāng)然,這點(diǎn)也決定了該共識(shí)算法適用場(chǎng)景有限的缺陷。

在介紹協(xié)議前,我們先交代下其中的節(jié)點(diǎn)類型:瑞波共識(shí)包括以下幾種節(jié)點(diǎn)類型:活躍信任節(jié)點(diǎn)、不活躍信任節(jié)點(diǎn)、驗(yàn)證節(jié)點(diǎn)。

下面我們具體的介紹一下RCP協(xié)議的具體內(nèi)容:

①驗(yàn)證節(jié)點(diǎn)保存未經(jīng)驗(yàn)證的交易。

在系統(tǒng)運(yùn)行的過(guò)程中,驗(yàn)證節(jié)點(diǎn)會(huì)接受系統(tǒng)中發(fā)起的交易請(qǐng)求,并保存其在本地,之后等待共識(shí)。而在本輪共識(shí)過(guò)程中新到的交易需要等待,在下次共識(shí)時(shí)再確認(rèn)。

②活躍信任節(jié)點(diǎn)將合法交易發(fā)送至驗(yàn)證節(jié)點(diǎn)。

根據(jù)我們上面的內(nèi)容可知,RCP協(xié)議中存在“信任節(jié)點(diǎn)列表”的概念。而其是驗(yàn)證池中的一部分,其列表中的節(jié)點(diǎn)均來(lái)自驗(yàn)證池。而跟大多數(shù)協(xié)議相同,RCP共識(shí)機(jī)制要求參與共識(shí)的信任節(jié)點(diǎn)必須處于活躍的狀態(tài)(否則無(wú)法進(jìn)行下一步的操作)。而那些不活躍的節(jié)點(diǎn)將會(huì)被踢出列表。

在這里,信任列表中的節(jié)點(diǎn)也會(huì)收到系統(tǒng)中的各個(gè)TXs(交易),包括交易雙方額度、交易歷史等。之后會(huì)對(duì)交易進(jìn)行判斷,判定其交易是否合法,并將合法的交易打包成提議發(fā)送給驗(yàn)證節(jié)點(diǎn)。

image.png

③驗(yàn)證節(jié)點(diǎn)檢驗(yàn)提議來(lái)源。

驗(yàn)證節(jié)點(diǎn)檢查接收到的提議是否來(lái)自信任節(jié)點(diǎn)列表中的合法信任節(jié)點(diǎn),如果是,則存儲(chǔ);如果不是,則丟棄。

在這里我們類似于將權(quán)利下放,將判定工作下放給員工(信任節(jié)點(diǎn))來(lái)做。

image.png

④驗(yàn)證節(jié)點(diǎn)根據(jù)收到的提議確定出交易清單。

開(kāi)始的時(shí)候,我們需要規(guī)定信任列表中的信任節(jié)點(diǎn)數(shù)量,例如M個(gè)。而我們需要規(guī)定交易的認(rèn)可比例N。由此,驗(yàn)證節(jié)點(diǎn)就有其依據(jù)來(lái)判斷交易是否可以被認(rèn)可。當(dāng)每一個(gè)超過(guò)M*N個(gè)信任節(jié)點(diǎn)認(rèn)可的交易將會(huì)被驗(yàn)證節(jié)點(diǎn)認(rèn)可。

例如M為10個(gè)節(jié)點(diǎn),我們可以規(guī)定超過(guò)百分之60就可以添加為合法,即10×60%=6個(gè)節(jié)點(diǎn)

在驗(yàn)證節(jié)點(diǎn)本地需要生成認(rèn)可交易列表。系統(tǒng)為驗(yàn)證節(jié)點(diǎn)設(shè)置一個(gè)計(jì)數(shù)器,當(dāng)計(jì)數(shù)器時(shí)間到了之后驗(yàn)證節(jié)點(diǎn)就要向信任節(jié)點(diǎn)索要交易認(rèn)可列表。

image.png

⑤賬本共識(shí)達(dá)成。

驗(yàn)證節(jié)點(diǎn)接受信任節(jié)點(diǎn)的各種提議,并計(jì)算信任節(jié)點(diǎn)針對(duì)某個(gè)交易所提供的正確與否的消息。在此過(guò)程中,節(jié)點(diǎn)會(huì)持續(xù)更新認(rèn)可交易列表。而

其次,驗(yàn)證節(jié)點(diǎn)認(rèn)可列表的生成并不代表最終賬本的形成以及共識(shí)的達(dá)成,賬本共識(shí)只有在每筆交易都獲得至少超過(guò)一定比例(例如 N%)的信任節(jié)點(diǎn)列表認(rèn)可才能達(dá)成。

如果賬本中每筆交易都獲得超過(guò)比例N的信任節(jié)點(diǎn)認(rèn)可,則共識(shí)達(dá)成,交易驗(yàn)證結(jié)束,否則繼續(xù)上述過(guò)程。

image.png

⑥共識(shí)過(guò)程結(jié)束,形成最新賬本。

共識(shí)過(guò)程結(jié)束后,已經(jīng)形成最新的賬本,將上輪剩余的待確認(rèn)交易以及新交易納入待確認(rèn)交易列表,開(kāi)始新一輪共識(shí)過(guò)程。

之后將賬本發(fā)布,供系統(tǒng)中所有節(jié)點(diǎn)下載使用。

總結(jié)來(lái)說(shuō),協(xié)議分為以下幾個(gè)過(guò)程:①系統(tǒng)中客戶端進(jìn)行交易、②驗(yàn)證節(jié)點(diǎn)接收并存儲(chǔ)交易、③信任節(jié)點(diǎn)發(fā)送提議于驗(yàn)證節(jié)點(diǎn)、④驗(yàn)證節(jié)點(diǎn)驗(yàn)證列表、⑤達(dá)成賬本共識(shí)并關(guān)閉賬本

2 協(xié)議安全分析

根據(jù)我們對(duì)協(xié)議具體內(nèi)容的分析,我們知道瑞波協(xié)議就是易于遭受攻擊,黑客可以偽造node,甚至可以大量擴(kuò)散潛伏,并在某個(gè)時(shí)間突然攻擊所有網(wǎng)絡(luò)。

我們知道,應(yīng)用此協(xié)議的系統(tǒng)能夠做到將交易賬本幾秒鐘部署應(yīng)用到所有節(jié)點(diǎn),效率十分高。所以用此來(lái)維護(hù)整個(gè)網(wǎng)絡(luò)的有效性以及一致性十分合適。并且這點(diǎn)也決定了該共識(shí)算法只適合于權(quán)限鏈(Permissioned chain)的場(chǎng)景。Ripple共識(shí)算法的拜占庭容錯(cuò)(BFT)能力為(n-1)/5,即可以容忍整個(gè)網(wǎng)絡(luò)中20%的節(jié)點(diǎn)出現(xiàn)拜占庭錯(cuò)誤而不影響正確的共識(shí)。

而在整個(gè)社區(qū)中,共識(shí)一旦達(dá)成,當(dāng)前的賬本將會(huì)保存記錄在此之前的所有交易信息,然后關(guān)閉成為最后的賬本。在這個(gè)關(guān)閉的賬本中所有網(wǎng)絡(luò)節(jié)點(diǎn)維護(hù)都是相同的。

三、POET—消逝時(shí)間量證明

此算法在芯片制造商英特爾(Intel)創(chuàng)立之初就被拿來(lái)進(jìn)行使用,由于其耗能十分低,所以喬布斯也曾將其應(yīng)用于產(chǎn)品。它是一種算法,通常用于被許可的區(qū)塊鏈網(wǎng)絡(luò)來(lái)決定采礦權(quán)或網(wǎng)絡(luò)上的塊贏家。它是由英特爾構(gòu)建在可信執(zhí)行環(huán)境的一種彩票協(xié)議。核心是用intel支持SGX技術(shù)的CPU硬件,在受控安全環(huán)境(TEE)下隨機(jī)產(chǎn)生一些延時(shí),同時(shí)CPU從硬件級(jí)別證明延時(shí)的可信性,類似于彩票算法,誰(shuí)的延時(shí)最低,誰(shuí)將獲取記賬權(quán)。

而投票機(jī)制是基于CPU的數(shù)量,也就是說(shuō)一個(gè)CPU只能進(jìn)行一次投票。所以增加記賬權(quán)的唯一方法就是多增加CPU的數(shù)量,具備了當(dāng)初中本聰設(shè)想的一個(gè)CPU一票的可能,同時(shí)增加的CPU會(huì)提升整個(gè)系統(tǒng)的資源,變相實(shí)現(xiàn)了記賬權(quán)與提供資源之間的正比例關(guān)系。

該算法要求網(wǎng)絡(luò)中的每個(gè)參與節(jié)點(diǎn)在定時(shí)器上等待一個(gè)隨機(jī)的時(shí)間量,第一個(gè)完成指定等待時(shí)間的節(jié)點(diǎn)為新塊的贏家。網(wǎng)絡(luò)上的每個(gè)節(jié)點(diǎn)基本上都是在隨機(jī)產(chǎn)生的一段時(shí)間內(nèi)進(jìn)入睡眠狀態(tài),而第一個(gè)醒來(lái)的節(jié)點(diǎn),也就是睡眠時(shí)間最短的節(jié)點(diǎn),醒來(lái)時(shí)向區(qū)塊鏈提交一個(gè)新的塊。

下面我們?cè)敿?xì)介紹下此共識(shí)的大致思路:

  • 1每一個(gè)節(jié)點(diǎn)均需要從enclave(代表一個(gè)可信操作)中獲得一個(gè)隨機(jī)的等待時(shí)間。

  • 2擁有最短時(shí)間的備選人將被選為leader并率先發(fā)布?jí)K。

  • 3enclave是通過(guò)新型的安全CPU指令來(lái)實(shí)現(xiàn)的。其包括兩個(gè)函數(shù)“CreateTimer”、“CheckTimer”。第三步中使用CreateTimer從enclave中產(chǎn)生一個(gè)timer。

  • 4之后使用驗(yàn)證函數(shù)CheckTimer去檢驗(yàn)這個(gè)timer是不是由enclave產(chǎn)生、是否已經(jīng)過(guò)期。

  • 5如果滿足了上述條件就會(huì)生成一個(gè)attestation憑證。其中包含的信息可以用來(lái)校驗(yàn)certificate是否由該encalve產(chǎn)生并已經(jīng)等待了timer規(guī)定的時(shí)間。成為leader的概率與捐獻(xiàn)的資源成正比。因?yàn)槭峭ㄓ锰幚砥鞫恍枰ㄖ频牡V機(jī),所以參與門檻較低并且節(jié)點(diǎn)較多,?整個(gè)共識(shí)機(jī)制更為健壯。

image.png

四、長(zhǎng)程攻擊(Long-Range Attacks)分析

根據(jù)我們前文提及的知識(shí),Pow由于其浪費(fèi)資源的原因?qū)е略絹?lái)越多的區(qū)塊鏈項(xiàng)目轉(zhuǎn)變共識(shí)為Pos,所以在權(quán)益證明已經(jīng)越來(lái)越受關(guān)注。而我們這次提及的攻擊就是主要針對(duì)Pos共識(shí)的一種非常巨大的威脅攻擊。由于其具有弱主觀性并且能進(jìn)行無(wú)代價(jià)模擬的特點(diǎn),所以這種攻擊帶來(lái)的危害更大。

我們知道在區(qū)塊鏈系統(tǒng)中,除了主鏈之外還存在許多與主鏈并行的其他分支鏈。而長(zhǎng)程攻擊就是攻擊者創(chuàng)建了一條從創(chuàng)世區(qū)塊開(kāi)始的長(zhǎng)區(qū)塊鏈分支,并試圖替換掉當(dāng)前的合法主鏈。該分支上可能存有和主鏈不同的交易和區(qū)塊,所以這種攻擊又被稱替換歷史攻擊或歷史覆寫(xiě)攻擊。而當(dāng)保證金被解除綁定,激勵(lì)不從某個(gè)高度區(qū)塊前進(jìn)行長(zhǎng)距離投票就被取消了。換句話說(shuō)就是當(dāng)用戶可以不受制裁的進(jìn)行分叉鏈的創(chuàng)建時(shí),就有可能導(dǎo)致分叉鏈超過(guò)主鏈從而代替主鏈的地位。

1 弱主觀性

這里的弱主觀性是針對(duì)新加入的節(jié)點(diǎn)而言。我們知道在系統(tǒng)中總會(huì)存在長(zhǎng)期不在線或者新加入的節(jié)點(diǎn)。當(dāng)這些節(jié)點(diǎn)回歸系統(tǒng)或者加入系統(tǒng)后,我們需要為其提供創(chuàng)世區(qū)塊。這個(gè)區(qū)塊是獨(dú)一無(wú)二被大家共識(shí)為首區(qū)塊的區(qū)塊。設(shè)置好創(chuàng)世區(qū)塊后,節(jié)點(diǎn)接著就會(huì)收到當(dāng)前區(qū)塊鏈上所有公開(kāi)的分支。然而此時(shí)問(wèn)題就來(lái)了,作為萌新,新區(qū)塊并不知道哪個(gè)是主鏈,哪個(gè)是分支。而對(duì)于離線很久的節(jié)點(diǎn),它也并不知道在它離線的這些日子里主鏈成為了何模樣。對(duì)于在線的節(jié)點(diǎn)而言,這種情況則不會(huì)出現(xiàn)。持在線狀態(tài)的節(jié)點(diǎn)則總能及時(shí)地監(jiān)控并同步主鏈。除非其它分支鏈篡位成功成為了合法主鏈,否則保持在線狀態(tài)的節(jié)點(diǎn)不可能接受其他分支作為主鏈。

而我們?yōu)槭裁凑f(shuō)Pos中存在這種類似的攻擊而Pow中很少出現(xiàn)呢?

image.png

上圖中紅色為創(chuàng)世區(qū)塊,而綠色為主鏈,其他顏色為分叉。

而整個(gè)區(qū)塊鏈上的確有許多不同的分支,并且長(zhǎng)度不一,主鏈可能是他們中任意的一支。

但是我們能發(fā)現(xiàn),圖中主鏈卻十分好認(rèn)。我們只需尋找最長(zhǎng)鏈即可。

而對(duì)于Pow共識(shí),由于在工作量證明區(qū)塊鏈中需要現(xiàn)實(shí)的算力資源來(lái)生產(chǎn)區(qū)塊,因此鏈長(zhǎng)度可以有效地反映出分支上凝聚的工作量,最長(zhǎng)鏈原則也就是說(shuō)凝聚了最多工作量的分支便是主鏈。

也就是說(shuō),倘若系統(tǒng)使用的時(shí)Pow算法,那么除非遭受了51%攻擊,否則不可能有其它從創(chuàng)世區(qū)塊開(kāi)始并與當(dāng)前主鏈存在潛在競(jìng)爭(zhēng)關(guān)系的分支鏈。那些攻擊者倘若要想替換掉主鏈,那么它需要使自己的分支鏈達(dá)到相應(yīng)的長(zhǎng)度,這也是十分耗費(fèi)算力的。所以對(duì)采取工作量證明協(xié)議的區(qū)塊鏈,最長(zhǎng)鏈原則已經(jīng)足夠解決弱主觀性問(wèn)題了。

2 Pos中的長(zhǎng)程攻擊

由于Pos中依據(jù)的是無(wú)代價(jià)模擬的模式,所以最長(zhǎng)鏈原則并不能成為判斷主鏈的依據(jù)。

由于在權(quán)益證明區(qū)塊鏈網(wǎng)絡(luò)中沒(méi)有礦工,所以也就不需要消耗算力來(lái)進(jìn)行計(jì)算與挖礦。并且其系統(tǒng)基于對(duì)驗(yàn)證人進(jìn)行信任,相信他們會(huì)誠(chéng)實(shí)的對(duì)主鏈進(jìn)行持續(xù)的投資、記賬。

在Pos中,驗(yàn)證者僅僅是從交易池中取交易,打包到區(qū)塊中,然后廣播出去,僅此而已。所以說(shuō),無(wú)代價(jià)模擬就是幾乎不消耗算力資源來(lái)創(chuàng)建一條從創(chuàng)世區(qū)塊開(kāi)始的長(zhǎng)分支鏈的能力。

在任何區(qū)塊鏈中,新加入的節(jié)點(diǎn)會(huì)收到許多條分支。在Pos系統(tǒng)中,其中大部分的分支長(zhǎng)度是相同的。所以我們僅僅依憑最長(zhǎng)鏈原則不足以判斷哪一條是主鏈。長(zhǎng)程攻擊恰恰利用了權(quán)益證明協(xié)議區(qū)塊鏈的這兩個(gè)特點(diǎn)。

image.png

3 簡(jiǎn)單攻擊

開(kāi)始的時(shí)候我們先簡(jiǎn)單的介紹一下長(zhǎng)城攻擊中的簡(jiǎn)單攻擊:在本例中,整個(gè)驗(yàn)證池中有三個(gè)驗(yàn)證者,A,B,C。簡(jiǎn)單起見(jiàn),設(shè)定他們的初始持權(quán)數(shù)額均為 33.3% 。

權(quán)益證明協(xié)議區(qū)塊鏈的簡(jiǎn)版,在這種場(chǎng)景下,節(jié)點(diǎn)不會(huì)去檢查區(qū)塊時(shí)間戳。

在權(quán)益證明協(xié)議正常的一輪周期內(nèi),每一個(gè)驗(yàn)證者都有機(jī)會(huì)驗(yàn)證區(qū)塊(即出塊)。

而創(chuàng)世區(qū)塊中記錄了驗(yàn)證者和它們各自的持權(quán)信息。A決定實(shí)施一次長(zhǎng)程攻擊,并且創(chuàng)建了一條分支鏈。她回溯到創(chuàng)世區(qū)塊,開(kāi)始生成她的分支鏈。

由于創(chuàng)世區(qū)塊中保存了驗(yàn)證者的信息,所以攻擊者就不能比主鏈更新的更快,所以最好的情況就是支鏈出塊速度與主鏈一致。所以A只能提前產(chǎn)生區(qū)塊。

image.png

上圖中,下方為主鏈,而上方為A偽造的分支,此時(shí)分支與主鏈長(zhǎng)度相同,也就是說(shuō)成為主鏈的概率與主鏈一致。

之后A進(jìn)行時(shí)間戳的偽造,并且由于A是這條分支鏈的唯一活躍持權(quán)驗(yàn)證人,這樣做并沒(méi)有什么風(fēng)險(xiǎn)。在不驗(yàn)證時(shí)間戳的權(quán)益證明協(xié)議區(qū)塊鏈中,所有的分支鏈都是有效的。

五、變節(jié)攻擊

我們假設(shè)時(shí)間戳已經(jīng)無(wú)法被篡改,所以A需要在相同的時(shí)間內(nèi)生成比主鏈更多的區(qū)塊數(shù)量。但是這如何做到呢?

所以A想到利用B來(lái)幫助他生成。這時(shí)候就該引入一個(gè)名為驗(yàn)證者輪換的概念。

我們知道在權(quán)益證明系統(tǒng)中為了保證系統(tǒng)公平,驗(yàn)證者必須是輪換更替的。

驗(yàn)證者應(yīng)當(dāng)可以選擇退出,并且區(qū)塊鏈系統(tǒng)在某些情況下能輪換更替驗(yàn)證者或是把驗(yàn)證者移除出系統(tǒng)。

在這里,我們假設(shè)B在出塊999個(gè)后選擇退出了區(qū)塊鏈系統(tǒng)。此時(shí)他的私鑰也就沒(méi)有往日那么重要了(因?yàn)樗呀?jīng)成為了一個(gè)平民)。

然而我們知道,雖然B退出了驗(yàn)證者這個(gè)位置,但是他的私鑰仍然可以為999區(qū)塊之前的區(qū)塊簽名,并且具有合法效應(yīng)。

既然 Bob 在系統(tǒng)中沒(méi)有任何質(zhì)押的權(quán)益,他就沒(méi)有任何負(fù)向激勵(lì)不對(duì)區(qū)塊鏈發(fā)動(dòng)攻擊。于是A可以盜取B的私鑰,或者賄賂B,迫使B加入到攻擊中。

當(dāng)A得到了B的私鑰,他就可以像B一樣為區(qū)塊進(jìn)行簽名,也就是說(shuō)B幫助A更快速的生成了區(qū)塊數(shù)量,用以趕超主鏈出塊速度。我們稱這樣的攻擊為變節(jié)攻擊。

六、權(quán)益流損

長(zhǎng)程攻擊的第三種類型被稱為權(quán)益流損。

與上文中提到的內(nèi)容一樣,A作為主鏈的驗(yàn)證者同時(shí)他邊記賬邊密謀從創(chuàng)始區(qū)塊開(kāi)始構(gòu)建自己的分支鏈。由于驗(yàn)證者的初始信息在創(chuàng)世區(qū)塊中早已經(jīng)寫(xiě)好。所以在分支鏈沒(méi)有超過(guò)主鏈長(zhǎng)度之前,A不會(huì)講分支鏈廣播出去。

為了增加攻擊的成功率,A開(kāi)始主動(dòng)拖延主鏈的正常運(yùn)行速度。也就是說(shuō),倘若A的權(quán)益占比足夠多,這種行為可能會(huì)演變?yōu)橐淮位钚詢鼋Y(jié)攻擊。每當(dāng) A 被選舉為主鏈上的區(qū)塊驗(yàn)證者時(shí),她都會(huì)跳過(guò)該塊,放棄自己的區(qū)塊驗(yàn)證的身份。然而這并不會(huì)有其他驗(yàn)證者代替其工作,反而在該區(qū)塊位置不會(huì)有新的區(qū)塊加入到主鏈中。

image.png

然而這樣會(huì)導(dǎo)致A不能從系統(tǒng)中獲得區(qū)塊驗(yàn)證獎(jiǎng)勵(lì)。但是A會(huì)不斷從從主鏈上復(fù)制交易并在自己的分支鏈上廣播出去。這樣會(huì)增加其權(quán)益占比。

通過(guò)采用這樣的策略,一方面拖延主鏈的出塊速度,一方面在分支鏈上盡可能廣播更多的區(qū)塊,Malory最終可以在自己的分支鏈上獲得絕大部分的權(quán)益,并且比主鏈更快地產(chǎn)生區(qū)塊。一旦他的分支鏈長(zhǎng)度超過(guò)了主鏈,他就將發(fā)布最后一筆交易,將自己的權(quán)益交易給其他的驗(yàn)證者,并且緊接著廣播發(fā)布自己的分支鏈。

七、浪子漏洞

Prodigal Contracts 浪子合約是指交易資金因?yàn)槁┒捶颠€給所有者、交易者過(guò)去發(fā)送給以太網(wǎng)的地址,以及特定地址。這種漏洞就像是空手套白狼,買家得到商品,而賣家無(wú)法得到加密貨幣。

合約可向攻擊者指定地址發(fā)送以太幣,而員工地址變量由于調(diào)用消息賦值的工資分發(fā)函數(shù)缺乏對(duì)調(diào)用者的檢驗(yàn)而導(dǎo)致了資金返還,但是交易卻產(chǎn)生了。

對(duì)于此漏洞的防御措施如下: 1. 消息發(fā)送者地址不在合約存儲(chǔ)中且在合約中沒(méi)有Ether。 2. 調(diào)用了CALL(且發(fā)生了Ether交換), DELEGATECALL或SUICIDE。所以要對(duì)此類函數(shù)進(jìn)行嚴(yán)格的過(guò)濾措施。

八、自殺漏洞

智能合約的擁有者可以在以太坊發(fā)生故障時(shí)選擇退回,類似于微信中的撤回選項(xiàng)。但是這個(gè)指令也可以被其他人執(zhí)行,使得交易失敗。

而引起此類漏洞的關(guān)鍵就是suicide函數(shù),suicide函數(shù)可被攻擊者調(diào)用 eg: 調(diào)用suicide前未檢查調(diào)用者身份/授權(quán)用戶列表可被修改。 如攻擊函數(shù)庫(kù),可導(dǎo)致大量依賴合約異常。

而此類攻擊的特征如下:執(zhí)行代碼中包含suicide,且消息發(fā)送者不在合約存儲(chǔ)中。

九、參考資料

本稿為原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)標(biāo)明出處。謝謝。

首發(fā)于:https://xz.aliyun.com/t/3351
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、快速術(shù)語(yǔ)檢索 比特幣地址:(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串...
    不如假如閱讀 16,561評(píng)論 4 87
  • 前言部分 區(qū)塊鏈作為一種去中心化的分布式公共數(shù)據(jù)庫(kù),其并沒(méi)有中央管理機(jī)構(gòu)進(jìn)行管理工作,而是通過(guò)分布式節(jié)點(diǎn)共同利用密...
    CPinging閱讀 943評(píng)論 0 0
  • 常用的兩種集成學(xué)習(xí)方法:bagging & boosting 1.bagging: 每個(gè)學(xué)習(xí)器隨機(jī)的對(duì)樣本進(jìn)行整理...
    雷_哥閱讀 790評(píng)論 0 0
  • 一場(chǎng)溫暖的旅程 人在世界的短暫時(shí)光,會(huì)和不同的人相遇,并且度過(guò)更為短暫的旅程。每一次時(shí)空里人與人的相縫,與...
    君正1127閱讀 312評(píng)論 0 1
  • 認(rèn)識(shí)琦是在大學(xué)的舞蹈協(xié)會(huì)。協(xié)會(huì)舉報(bào)新人報(bào)名,地點(diǎn)在學(xué)校一間練舞房。熙熙攘攘的人群里作為登記員的我,來(lái)回掃視著報(bào)名...
    漩渦如辰_9d3f閱讀 315評(píng)論 1 1

友情鏈接更多精彩內(nèi)容