針對區塊鏈安全問題,成都鏈安科技團隊每一周都將出智能合約安全漏洞解析連載,希望能幫助程序員寫出更加安全牢固的合約,防患于未然。引子:外以欺于人,內以欺于心–唐·韓愈《原毀》前景提要
上回書,轉賬過程紛繁復雜,安全應對各個擊破。面對直接涉及以太轉賬的游戲合約,在使用官方提供的轉賬函數同時,添加不同賬戶類型的區別處理以及失敗情況下的異常處理乃明智之舉。此外,構建合約邏輯避免依賴于合約余額確切值應銘記在心,如有特殊考慮,切記定義狀態變量明確余額變化,萬不可想當然而為之。本期話題
第九回,合約安全隱私未必,外部讀取暴露無遺。
我們在前幾回主要討論的都是在合約內部構建函數和代碼書寫規范時產生的一些誤區和安全隱患。但是對于智能合約這個嶄新的概念,僅僅從合約層面本身考慮合約的安全可能并不足夠。合約開發者在這個產業蓬勃發展的過程當中,為了趕上項目進度,不得以邊學習邊實踐,即使在代碼書寫層面功底很扎實的情況下,仍然會因為區塊鏈技術的特殊性埋藏一些不自知的安全隱患。所以,這一回我們將要闡述的安全隱患就是因為“合約中的一切都是公開可見”這一特性造成的。基礎小知識
NFT項目We Like The Rocks使用EtherRock廢棄的智能合約重啟:NFT項目We Like The Rocks使用EtherRock廢棄的智能合約重啟,該項目通過巖石編號來控制稀缺性,允許任何人鑄造巖石。連續創業者Gary Vaynerchuk以60 ETH (19.4萬美元)買入三塊石頭,目前其網站上掛售的前100個巖石最低價為100 ETH。
NFT項目EtherRock的匿名開發人員于2017年部署了兩個幾乎相同的NFT合約,第一個合約代碼存在漏洞,允許任何人支付Gas費創建無限多個NFT,開發人員采用第二個合約建立了NFT項目EtherRock,使EtherRock NFT的總數限制為100 個,如今該項目的巖石交易價格高達170萬美元。一位名為James William的區塊鏈開發人員于8月5日重啟了存在漏洞的第一個合約,推出NFT項目We Like The Rocks,EtherRock的匿名開發者對此感到不滿,We Like The Rocks此前于8月8日在OpenSea上線幾天后下架。(decrypt)[2021/8/29 22:44:47]
在第七期的關于未初始化局部變量中我們介紹了變量存儲的知識。Solidity對復雜的數據類型,比如數組和結構體,會默認存儲在Storage當中。沒有提到的是關于智能合約中對于變量從作用域的劃分。目前的劃分包括三種,全局公有變量,全局私有變量,局部變量。其中,全局變量一般儲存在storage當中,而結構、數組或映射類型的局部變量,默認會放在存儲storage中,除結構、數組及映射類型之外的局部變量,會儲存在棧中。公有和私有是可見性說明符,公有變量在合約內部外部均可見,而私有變量僅在當前合約可見。另外還有兩個可見性類別在這里我們也介紹一下:external,表示僅在外部可見,即僅可用于消息調用;internal,僅在內部可見,表示的意思是僅在Solidity合約與子合約均可見,不僅限于當前合約內。問題出在哪
Bitget跟單四期上線:新增BCH/USD帶單合約:據官方公告,Bitget一鍵跟單四期已于今日正式上線。本期產品對交易員帶單功能和跟隨者跟單功能進行了多重優化。優化內容包括:新增BCH/USD反向合約跟單,滿足用戶多元交易需求;新增一鍵全倉功能,支持同交易對同方向的多條跟單一鍵平倉;新增交易對單獨設置跟單參數,可自由切換多種杠桿形式;新增自動取消長期不開倉的帶單交易員;同時,綜合排名統計周期由近7日增至近21日,未來排名展示將更嚴謹。用戶可前往APP體驗,iOS用戶可更新至版本1.1.3,Android 用戶可更新至版本:1.0.6。[2020/12/11 14:55:00]
由于狀態變量一般是需要永久存儲的變量,所以一定會儲存在storage中,聯系第七期的知識,storage是存在于區塊鏈當中的,可以類比為計算機的存儲磁盤。那么狀態變量其實一直存在于區塊鏈當中,對于結構、數組或映射類型的局部變量也是同樣的道理。這樣一來,即使加上了可見性說明符,例如私有狀態變量,根據區塊鏈公開的特性,它也還會是公開的,因為這個私有僅限于合約層面的私有,合約之外依然可以讀取。這個附加的可見性說明符就像騙子給皇帝穿上的新衣,以“騙”到合約層面的函數和變量,在合約外部卻形同虛設。那么,從外部如何讀取狀態變量呢,下面我們從合約外部的角度分析具體的流程。如何從合約外部讀取變量
當前BTC全網合約持倉總量為34.05億美元 24小時減少5800萬美元:據合約帝持倉報告顯示,當前全網合約持倉總量為34.05億美元,24小時減少5800萬美元。其中,Huobi合約7.05億美元,24小時減少3.41%;OKEx合約8.68億美元,24小時減少2.53%;BitMEX合約4.78億美元,24小時增加4.60%;Binance合約7.2億美元,24小時減少0.02%;Bybit合約6.32億美元,24小時減少1.49%。[2020/12/4 14:01:20]
一、狀態變量接著上面的概念,合約的狀態變量都是存在于區塊鏈中,就像存儲在磁盤中的文件,因此,那么我們可以直接通過訪問區塊鏈獲取這些狀態變量的值。例如針對以下案例合約進行全真模擬操作:將上面的合約部署在ropsten測試鏈上,獲得地址0x9e550E6911b38412964C5C956383757c9FA7F860,然后登陸METAMASK錢包進入瀏覽器控制臺console:1.查看變量a,輸入:web3.eth.getStorageAt('0x9e550E6911b38412964C5C956383757c9FA7F860',0,function(x,y){console.log(y。)會得到:2.查看變量str獲取16進制結果,輸入:web3.eth.getStorageAt('0x9e550E6911b38412964C5C956383757c9FA7F860',1,function(x,y){console.log(y。)轉換為字符串,輸入:web3.eth.getStorageAt('0x9e550E6911b38412964C5C956383757c9FA7F860',1,function(x,y){console.log(web3.toAscii(y)。)會得到:3.查看ownerweb3.eth.getStorageAt('0x9e550E6911b38412964C5C956383757c9FA7F860',2,function(x,y){console.log(y。)4.查看balanceOf這個稍微復雜一些,由于映射變量不是按照定長變量的順序存儲,其是一個鍵值對,EVM采用的機制是將其存在sha3(key+slot)處輸入進控制臺,得到:二、局部變量局部變量直接編碼到opcode中,例如上面合約localVar函數中的local變量三、建議上面的讀取操作驗證了只要是儲存在storage里面的變量,都是可以通過不執行合約函數就直接獲取的。因此,依賴可見性說明符,將隱私,不可公開的數據存儲在區塊鏈上是很不安全的做法。如果真的要將隱私數據儲存在區塊鏈中,也要進行相應的加密處理。欲窮千里目更上一層樓區塊鏈時代的安全包含傳統互聯網安全,智能合約安全等多個方面,對于合約層面的安全考量固然是一方面,但是對于數據存儲方面,不沿用互聯網安全的理念,盲目信賴新技術卻又不深入挖掘新技術某些特性、限制條件、特殊情況,勢必無法做到真正意義上的全面防護。目前區塊鏈產業步伐放緩,正是我們深入學習了解這個領域的最佳時機,也是這個產業提升穩健性的最佳契機。更上層樓,與君共勉。參考資料:
專家:貿易領域的智能合約需依靠物聯網傳感器來充分發揮其潛力:根據紐約大學區塊鏈和商業專家說法,在某些行業,如果不與物聯網傳感器一起實施,智能合約的效率是有限的。7月10日,紐約大學斯特恩商學院的副教授Hanna Halaburda和Yannis Bakos在Unitize會議上介紹了他們的研究,主題是智能合約和物聯網傳感器之間的互動,以提高商業效率。
Halaburda解釋稱,物聯網對于在貿易部門中最大化智能合約的利益至關重要。她引用了一家水果運輸公司和零售商之間的合同,并稱智能合約解決了自動執行的問題,但沒有激勵運輸公司確保水果的質量。然而,當在過程中加入物聯網傳感器時,智能合約可以根據交付水果的質量增加細節(比如儲存溫度)或調整支付。因此,任何一方都不需要基于對方的信任來完成自己的那部分協議。(Cointelegraph)[2020/7/10]
:以太坊智能合約OPCODE逆向之理論基礎篇:https://paper.seebug.org/640/:可見性和getter函數:https://solidity-cn.readthedocs.io/zh/develop/contracts.html#getter:JSON-RPC#eth_getstorageat:https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getstorageat:以太坊數據存儲的思考和解讀:https://blog.csdn.net/Blockchain_lemon/article/details/79308137:HowtoreadEthereumcontractstorage:https://medium.com/aigang-network/how-to-read-ethereum-contract-storage-44252c8af925相關閱讀:鏈安團隊漏洞分析連載第一期一一溢出漏洞鏈安團隊漏洞分析連載第二期——拒絕服務漏洞鏈安團隊漏洞分析連載第三期——競態條件漏洞鏈安團隊漏洞分析連載第四期——底層函數誤用漏洞鏈安團隊漏洞分析連載第五期一一權限驗證錯誤鏈安團隊漏洞分析連載第六期一一游戲合約漏洞全面匯總鏈安團隊漏洞分析連載第七期一一存儲器局部變量未初始化鏈安團隊漏洞分析連載第八期一一以太坊轉賬安全風險
24小時合約市場爆倉超1.17億美元 BTC合約爆倉1.1億美元:據合約帝行情統計報告顯示:過去24小時合約市場全網總計爆倉1.17億美元,爆倉人數9006人。其中Huobi 爆倉995萬美元,OKEx爆倉2438萬美元,BitMEX爆倉3932萬美元,Binance爆倉4341萬美元。爆倉金額前三的幣種是BTC1.1億美元,ETH326萬美元,BSV134萬美元。[2020/4/2]
作者:互鏈脈搏·金走車ICO模式是否要走到盡頭?10月份的ICO融資額承9月之勢,可謂是自6月份以來的下降“四連擊”.
1900/1/1 0:00:00編者按:不少人認為區塊鏈正處于基礎設施階段,目前只能投資基礎設施。美國知名風投機構USV卻不那么認為.
1900/1/1 0:00:00作為一項全新的應用技術,“區塊鏈”這一概念從2015年初誕生之始,便面臨著“如何落地”的困惑。當“去中心化應用”與“區塊鏈游戲”先后出現,很多人就順理成章地認為:區塊鏈技術的第一個落地應用是“區.
1900/1/1 0:00:0011月6日,比特幣礦商Bitfury宣布了其8000萬美元的最新融資。該輪融資由歐洲風險投資基金KorelyaCapital牽頭,韓國互聯網巨頭NaverGroup,亞洲機構MacquarieC.
1900/1/1 0:00:00解謎獎比特幣的游戲又來了,不同的是,這次的發起人可能是個真·土豪。10月2日,匿名用戶Pip在BitcoinChallenge網站上發布了一張圖片,他稱,這張圖片中隱藏著310個比特幣.
1900/1/1 0:00:00SEC首宗未注冊加密證券交易所案件塵埃落定,結局是交易所EtherDelta創始人同意繳納近40萬美元罰款.
1900/1/1 0:00:00