加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > Filecoin > Info

以太坊智能合約為何安全漏洞頻發?_以太坊:比特幣以太坊最新價格行情

Author:

Time:1900/1/1 0:00:00

最近,隨著DeFi火熱,以太坊智能合約安全漏洞頻發。究竟是什么原因造成的,以及如何更好地防范這些漏洞?

概述

相比于比特幣而言,以太坊更易發生安全事故。這主要是因為以太坊虛擬機是圖靈完備的,以太坊可實現函數間相互調用、嵌套調用,智能合約間相互調用等各種復雜邏輯。而比特幣只實現了基于棧的非圖靈完備的虛擬機,并只能通過操作碼進行入棧和出棧操作。另外比特幣也沒有復雜的DApp應用,所以邏輯上簡單,故而沒有太多空間引發安全漏洞。

以太坊上各種DApp復雜的智能合約邏輯是引發安全漏洞的主因。以太坊智能合約的安全漏洞主要可以分為邏輯問題和合約代碼問題兩種。

邏輯問題?

最近頻繁的“閃電貸”攻擊是一個典型的邏輯問題引起的安全漏洞。在各種閃電貸攻擊中你可以看到清晰的邏輯問題。攻擊者只要制造出兩個系統之間的價格差,便能通過閃電貸攻擊獲利。

BitMEX創始人:考慮到美聯儲的貨幣政策,以太坊合并的預期價格為2,815美元:8月5日消息,BitMEX創始人Arthur Hayes在最新博文中分析了美聯儲接下來的貨幣政策與以太坊合并對以太坊未來價格的可能影響。Arthur認為,劇烈下行的經濟數據可能會使得美聯儲的加息計劃承受壓力,是時寬松利率將重新成為政策選項。

其隨后提出,根據“加息是否會結束”和“以太坊2.0合并是否會成功”兩個因素所組成的四種情況,進行每種情況25%的加權計算,可以得出以太坊合并后的預期價格為2,815美元。[2022/8/5 12:03:49]

閃電貸攻擊的邏輯細節大家可以閱讀之前一篇專門講閃電貸的文章:“造富神器”閃電貸。本文主要闡述合約代碼問題。

合約代碼問題?

我們知道,幾乎稍微復雜一點的代碼都或多或少地存在問題。了解出現問題的原因,并且歸納問題類別可以幫助我們更好地防范它們。下面是Ownbit錢包團隊整理的關于以太坊智能合約安全最容易出現問題的點。

財富管理公司:比特幣仍然低效 以太坊更加高效:財富管理公司Bessemer Trust在其《季度投資前景》報告中分別在三種情況下討論了比特幣,包括作為價值存儲、交易方式和分類賬。該報告稱,從能源使用的角度來看,比特幣仍然非常低效,而其他加密貨幣,例如以太坊,在這方面效率更高。報告稱:“與美元或其他法幣相比,比特幣的有限供應是其長期保值能力的最大吸引力。”不過,該報告表示,由于比特幣的價格波動,它不會取代美元,甚至不會成為當前傳統資產配置的重要組成部分。(decrypt)[2021/4/23 20:49:14]

1.重入

這是排名第一的問題。所謂“重入”就是一個方法被多次循環調用。而這通常是合約開發者所意想不到的。例如一個取款合約:

function?withdrawEther()?public?{uint?amount?=?userBalances;bool?success,?)?=?msg

動態 | 以太坊未確認交易63625筆:據Etherscan.io數據顯示,以太坊未確認交易63625筆。當前挖礦難度2496.16 TH,交易處理能力8.8 TPS。截至目前以太坊全球均價為160.84美元,最近24小時跌幅為4.86%。[2019/9/27]

這是一段很簡單的取款合約,讓用戶取走他的ETH余額。開發者并沒有意識到這段代碼可能會被重入。方法是:只要調用者是一個合約賬戶,那么msg.sender.call將默認調用該合約賬戶的fallback函數。攻擊者只需要在其fallback函數再次調用withdrawEther就可以源源不斷地取走ETH。

發生在2016年6月,著名的TheDAO攻擊,從而導致了ETC分叉的事件,就是通過同樣的方法實施攻擊的。從事后看來,這只是一個小小的程序問題。要修復這個問題也非常容易,只需要將兩行代碼調換順序即可:

????userBalances?=?0;????(bool?success,?)?=?msg.sender.call.value(amount)("");

V神:以太坊團隊即便沒有我 也能做得更好:今日V神在王峰十問上回應了其本人的去留對以太坊發展的影響。2017年,一則V神去世的謠言曾一度導致以太坊市值大跌40億美元。V神稱,至于其死亡傳聞是不是造成以太坊價格下跌,現在還不是很清楚,因為當時市場本身就比較低迷,而且價格下跌已經發生了。非常堅信的是,DAO分叉這件事發生,社區內是有很多人支持的,當時有進行碳投票、各種社區民意調查等等,結果就是有80%的人支持分叉。V神認為,以太坊團隊即便沒有他,也絕對有能力完成Casper和分片路線圖,即使自己想要消失一段時間,也完全相信他們會做得很好。[2018/6/22]

2.讓你的交易不打包

以太坊區塊的打包機制是按照給予的礦工費進行優先打包,并且每個區塊有總GasLimit的限制。所以攻擊者可以制造出若干使用GasLimit非常大,并且GasPrice給得非常高的交易,讓它們優先占滿區塊,從而讓目標交易無法被打包。

比特幣以太坊雙雙下跌 下午行情難以好轉:根據火幣全球專業站數據顯示,比特幣當前價格為人民幣48974元,較最高53294元的高位,跌幅達到3.23%;而以太坊也出現下跌的現象,以太坊目前暫報價格為人民幣2829元,較之前的3009元人民幣的高位,下跌了3.19%。根據目前的以太坊及比特幣的價格走勢來看,今天下午兩個幣種走勢難以出現大幅上升。[2018/3/27]

所以,在編寫合約邏輯時,不能假設你的交易會在有限時間內被打包,否則就容易受到此類攻擊。著名的“Fomo3D”事件就是用了這樣的攻擊方法。

Fomo3D游戲規則是獎勵最后一個購得某個商品的人。每次商品被買入將重置該商品的定時器,如果在定時器達到0之前沒有其他購買者,則你將獲得系統的獎勵。攻擊者在Fomo3D中買入商品,然后同時發送大量占用區塊的攻擊交易,以至于在接下來的13個區塊內,其他購買者的交易無法被打包。這時定時器達到0,并認為無其他購買者。攻擊者便獲得了獎勵,完成了攻擊。

3.錯誤使用tx.origin

如果你發現一個合約使用了tx.origin,那么可以留心一下此處可能存在的漏洞。在大部分情況下,我們應該使用msg.sender來替代tx.origin,因為使用tx.origin容易引發安全漏洞。

很多時候,合約開發人員會假定msg.sender和tx.origin是相等的,但其實不是。例如:用戶A?調用?合約B,而合約B進一步調用?合約C,那么在合約B和C中tx.origin都將是A,而msg.sender則一個是A,一個是B。

一般攻擊者會引誘A調用一個誘導合約B,而B再去調用由A部署的目標合約C,因為合約C錯誤地使用了tx.origin,合約B可以通過傳遞過來的tx.origin獲得對合約C的控制權,從而完成攻擊。

4.溢出攻擊

智能合約里的數據是可能溢出的,例如:uint256,你覺得很大:2^256。它的確很大,但依然可以溢出。例如一個合約允許對一個數據進行加減,攻擊可以通過對這個數據進行精心策劃的調用,讓其通過溢出達到允許執行某些邏輯的目的,從而實現攻擊。

5.fallback?可以revert

fallback是可以revert的,就是說,你如果向對方轉移ether,對方可以讓你總是不成功。

例如你編寫一段合約,并且依賴于你成功向某個地址轉移ether,那么攻擊可以部署一個合約,將其fallback寫成revert來讓你來的調用總是失敗:

function?()?public?payable?{???revert?()?;?}

6.?selfdestruct可以定義任意受益者,而不會調用fallback

當你以為可以通過revert進行阻止所有人向你付款ether時,你可能又錯了。攻擊者通過創建一個合約,并且然后銷毀這個合約。銷毀合約以太坊將退還一部分ether作為鼓勵,而這個退還可以指定任意受益者,而對方的fallback函數不會被調用。

這就是說,開發者要意識到你沒有辦法完全阻止別人向你的合約賬戶轉移ether。

7.?未正確使用delegatecall

在使用delegatecall時,要注意上下文的變化。用call進行合約調用時,上下文被切換至被調用合約。而用delegatecall進行合約調用時,上下文依然在本合約。

delegatecall和call不同的調用上下文也是合約安全漏洞較常出現的地方。

8.不同方法傳氣不一樣

當我們進行ether轉移時,不同的方法傳氣不一樣。使用send()和transfer()?傳遞氣僅為2300,而使用call.value()()?則將剩余的氣全部傳遞。因此,最新的安全規范是建議使用call而不是?send或者transfer進行ether轉移。

如果你發現一個合約還是使用send或者transfer,那么你可以制造出目標合約,讓其轉移OutofGas。

結語

以上這些點是合約代碼最常出現問題的點。每個錯誤的原因都比較原子化,理解相應的原理可以幫助我們有效地避免這些問題。當合約邏輯復雜時,一定會有更加復雜、隱藏得更深的邏輯問題,這時,這些原子點的檢查依然可以幫助我們找到它們。

以太坊智能合約的安全問題主要是因為其“過于靈活”引起的。靈活性和安全性如同天平的兩端。以太坊選擇了靈活性,某種程度上便把安全性的潛在風險留給了市場。

一個DeFi項目能否安全穩定地運行,或是會被黑客攻擊,取決于合約開發人員對原理的理解、對細節的把控,以及嚴肅認真的態度。線上合約犯錯的代價是巨大的,這就對合約開發人員提出了更高的要求!

Tags:以太坊ALLETHTHE比特幣以太坊最新價格行情SwapAllLETHTHEX價格

Filecoin
LOEx|11月19日行情研報:BTC盤中突破18000點位_EOS:EOSWIN

一、 AICoin指數行情顯示,美東時間11月17日,灰度比特幣信托持倉量增加1773枚BTC,增長0.35%,總持倉量已達515166BTC.

1900/1/1 0:00:00
CoinBene滿幣支持BTCV硬分叉,開展BTCV交易賽、充值賽活動,壕送10,000美金_BTC:coinup官網

尊敬的用戶: 為慶祝BTCV硬分叉升級,回饋社區新老用戶的支持,CoinBene滿幣聯合BitcoinVault開展交易賽、充值賽活動,壕送10,000美金大獎,邀您體驗.

1900/1/1 0:00:00
BiONE關于支持 ZEC(Zcash)硬分叉及網絡升級的公告_BIO:HTT

尊敬的BiONE用戶: 為支持ZEC的硬分叉及網絡升級,我們將于2020年11月18日上午10:00暫停ZEC代幣充值、提現業務,交易不受影響.

1900/1/1 0:00:00
谷燕西:未來加密數字金融世界中的監管是怎樣的?_數字資產:數字金融

未來的加密數字金融世界一定是在以分布式記賬技術為主的金融市場基礎設施之上運行的。由于分布式記賬技術的特點,在這個未來的金融世界當中,數字資產的真實性,交易用戶的真實性和交易的真實性都有更好的保證.

1900/1/1 0:00:00
幣圈小蝶:幣圈優秀的交易員都是怎樣做交易計劃_BOX:GATE

?那么,如何制定和執行交易計劃呢?要弄清楚這個問題,我認為需要明白以下幾個理念:交易計劃的含義和特點是什么?一份合格的交易計劃應該包括哪些環節? 執行計劃的障礙有哪些? 交易計劃的含義 交易計劃.

1900/1/1 0:00:00
首個 DeFi 無風險儲蓄方案終于要來了?_RES:ESC

CrescoFin希望通過保險方案為加密用戶提供無風險存款方案,并有望為Aave引入機構級用戶,而該企業已為此投入了1.25億美金.

1900/1/1 0:00:00
ads