以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > OKB > Info

balance:合約實現中的事與愿違——實現與設計不符

Author:

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

針對區塊鏈安全問題,成都鏈安科技團隊每一周都將出智能合約安全漏洞解析連載,希望能幫助程序員寫出更加安全牢固的合約,防患于未然。

引子:出塵花品愛池荷,零落秋風可奈何——《病中詠秋荷》清·蔡桓

本期話題

邏輯判斷失誤事與愿違,功能實現不周弄巧成拙

智能合約作為區塊鏈技術革命的核心,乘著以太坊興起的潮流,發展至今已經兩年有余。智能合約的理念最早可以追溯到1995年,幾乎與互聯網同時出現。廣受贊譽的密碼學家尼克薩博最早提出了這個術語,他也是為比特幣打下基礎的學者之一。隨著比特幣的出現和應用,讓智能合約的理念有了實現的機會。

從原理上來說,智能合約的執行依靠的是條件的觸發,也就是類似于程序中的if-then語句。也就是說,智能合約對于其中合同條款的執行取決于預先編譯好的邏輯判斷,進而與真實世界的資產進行交互。本期,我們歸納總結了一些在從設計到實現的過程中出現安全漏洞。

zkSync聯創提出新的治理解決方案L1 Fork,以應對智能合約實施過程中的風險:金色財經報道,Matter Labs聯合創始人兼首席執行官Alex在社交媒體發文,提出“L1 Fork作為終審法院”概念擬解決智能合約實施風險問題,并且表示zkSync愿意資助相關研究。Alex指出,L2合約在緊急升級時存在中心化問題,相比之下L1是可分叉的,任何用戶都可以選擇加入他們主觀認為正確且規范的分叉分支,但這種模式不適用于L2和DeFi協議,因為L2和DeFi協議無法分叉從L1橋接的底層原生資產(例如ETH)。

因此,Alex建議建立一個類似于現實世界司法機構的“鏈上法院”等級制度,每個協議都有自己的治理并定義正常和緊急升級機制且必須指定一份特殊合約作為上訴實例,這種模式可以解決緊急升級時的中心化問題。對于緊急升級,必須有一個上訴期,在此期間任何人都可以向上級“法院”提出質疑但必須繳納預先確定的保釋金,然后,該法院可以取消緊急升級(并且不執行任何其他操作),每個“法院”必須指定可以對任何決定提出上訴的更高一級“法院”,直到以太坊最高“法院”。[2023/9/3 13:14:42]

智能合約愈發復雜

央行:數字人民幣可通過智能合約實現可編程性:7月16日消息,中國人民銀行發布《中國數字人民幣的研發進展》白皮書,其中提到,“數字人民幣通過加載不影響貨幣功能的智能合約實現可編程性,使數字人民幣在確保安全與合規的前提下,可根據交易雙方商定的條件、規則進行自動支付交易,促進業務模式創新。”

央行還表示,利用智能合約技術,賦予數字人民幣可編程特性,提升擴展能力,促進與應用場景的深度融合。[2021/7/16 0:58:02]

我們都知道,一個智能合約包含兩部分:代碼邏輯和數據。

相比于比特幣的腳本語言,智能合約發展的一個終極目標就是“圖靈完備”,簡單來說,就是無論怎樣復雜的交易邏輯或功能都可以實現。

智能合約的開發經過一段時間的沉淀,已經由最初簡單的轉賬、付款等功能需求,向越來越多的交易功能和邏輯進化,比如凍結、暫停、中止、授權。根據復雜性理論,越復雜的系統越容易有出錯的可能。因此,越是功能強大的智能合約,其邏輯就越是復雜,也越容易出現邏輯上的漏洞。

Gate.io已上線ROSE/USDT永續合約實盤交易(USDT結算):據官方公告,Gate.io已上線ROSE/USDT永續合約實盤交易(USDT結算),支持1-20倍做多和做空操作,杠桿率可以在下單時自行選擇。Gate.io永續合約是全球最活躍的區塊鏈資產合約市場之一,日交易量高達8億美金,結算類型分為“BTC結算永續合約”和“USDT結算永續合約”兩種。Gate.io提示:請用戶務必在完全了解風險并能承擔風險的情況下參與,Gate.io平臺不對投資行為承擔擔保、賠償等責任。詳情請見原文鏈接。[2020/11/19 21:23:26]

開發合約也會言多必失?

打個比方來說,邏輯更加復雜的代碼相當于更龐大的城池,在容納更多人口的同時,需要防守的地方也更多。有些精心設計而又容易忽視防范的地方,比如錯綜復雜的下水道系統,正是容易讓整個城池淪陷的重大隱患。

火幣推出永續合約實時結算功能 盈利部分可隨時提取:據火幣官網公告,火幣合約已于新加坡時間4月29日14時正式上線BTC、ETH永續合約實時結算功能,支持用戶在平倉后隨時提取已實現盈利(扣除掉浮動虧損和占用保證金等),無需等至每日4:00、12:00、20:00(GMT+8)結算。該功能暫定試行至新加坡時間2020年6月30日。此前,火幣合約已上線了BTC、ETH和LTC交割。合約的實時結算功能,此次新推出的實時結算功能已覆蓋了交割合約和永續合約。

據悉,目前市場上永續合約的結算機制大多為日結算或每日三結,而實時結算功能需要強大的風控實力支持。詳情請查看火幣合約官網公告。[2020/4/29]

同樣,在智能合約中,開發者為自己的合約設計的特殊功能意在穩固代幣的市值或者項目的壽命,而正是在這些邏輯和功能中,一個細微的失誤,比如>、<、+、-這些符號的錯誤就可能導致整個邏輯與預想出現嚴重的偏差,留下致命的隱患。

公告 | 火幣合約2月7日18時上線LTC交割合約實時結算功能:據火幣官方公告,火幣合約將于2020年2月7日18:00上線LTC交割合約實時結算功能。LTC交割合約實時結算功能暫定試行至2020年6月30日,平臺將根據上線情況作出相應調整,具體以官網公告為準。[2020/2/6]

代碼實現失誤漏洞總結

我們將代碼實現過程中產生的失誤分為兩種:

1.邏輯判斷錯誤

Solidity的if或者require等條件判斷表達式對合約代碼執行做出限制,開發者如果在編寫合約時寫出了錯誤的判斷條件,將會造成比較大的邏輯錯誤,影響合約正常使用。

a)transferFlaw

在transferFrom()函數中,當對allowance值做校驗的時,誤將校驗邏輯寫反,從而使得合約代碼的邏輯判斷錯誤。有可能造成溢出或者任何人都能轉出任何賬戶的余額。

我們來看一個案例

if(allowed>=value)returnfalse;此處校驗邏輯寫反了,導致只要授權值allowed小于轉出額度,那么都能轉賬成功,利用這個漏洞,可以不經授權就可以轉出他人賬戶中的代幣。

l漏洞修復

推薦使用require(allowed>=value);語句對授權額度進行判斷

b)pauseTransfer-anyone

以如下案例合約為例

onlyFromWallet中的判斷條件將==寫反了,寫成了!=,使得除了walletAddress以外,所有賬戶都可以調用enableTokenTransfer()和disableTokenTransfer()函數,這兩個函數可以開啟或者關閉合約的轉賬、授權以及燒幣功能,進而影響合約的正常使用。

l漏洞修復

使用正確的require判斷語句:

c)allowAnyone

分析如下案例合約

在transferFrom函數中,轉賬前未對allowed進行校驗,轉賬后對allow的計算也未使用SafeMath,使得任何賬戶都可可以不經授權就能夠轉出他人賬戶中的代幣,并且,如果轉賬額度_value大于allowed,allowed-=_value將發生溢出。

l漏洞修復

i.在轉賬前增加對allowed的檢查,require(allowed>=_value);;

ii.使用SafeMath對allow進行運算,

allowed=allowed.sub(_value);

d)approve-with-balance-verify

部分合約在函數approve()中,增加對被授權賬戶余額的校驗,要求授權的_amount小于或等于當前余額。

一方面,對余額的校驗并不能保證被授權賬戶一定可以轉出這個數量的金額:

i.在approve之后,token的所有者自己通過transfer函數,把token轉走,導致余額小于allowance。

ii.approve給多個人,其中一個人進行transferFrom操作后,可能導致余額小于之前給其他人approve過的值。

另一方面這個校驗可能導致外部合約無法正常調用,必須由Token項目方提前轉入一筆數額巨大的Token至中間賬戶才能繼續執行。

例如下面這個合約

l漏洞修復

去掉balances的校驗:

2.功能實現與設計不符

我們來詳細分析如下案例合約:

上述兩個函數重寫了ERC20標準中的transfer和transferFrom函數,添加了對凍結賬戶的檢查。

在transfer中,如果msg.sender被凍結,那么其不能進行代幣交易。

但是,我們注意到,在transferFrom中,并沒有對代幣轉出地址的檢查。

如此一來,一個被凍結的地址可以通過授權第三方,然后通過第三方地址向目標地址發送代幣,違背了設計中對凍結地址的限制。

l漏洞修復

在合約正式上鏈前,項目方應對合約進行充分的測試,確保其實現完全符合設計。

我本將心向明月,奈何明月照溝渠

以上的安全漏洞都是開發人員在實現某些功能需求時,出現低級錯誤或者只追求完成功能需求導致的。相信在漏洞被曝光或者被攻擊者利用時,開發者的內心也是崩潰的,感覺枉費了一番苦功夫。在沒有相關測試、審計團隊的協助下,對于此類實現與設計不符的漏洞可能真的束手無策,尤其是關于合約邏輯的檢測,可能需要用到形式化驗證運用數學建模的方法對于合約進行描述之后才能查遺補漏。但是,汲取他人教訓并且用于提高應該是每個先驅者在探索新領域時具備的素質,一個人可能會走的更快,而一群人,會走得更遠。

Tags:比特幣balance區塊鏈比特幣中國官網聯系方式40億比特幣能提現嗎比特幣最新價格行情走勢balance幣是什么幣區塊鏈工程專業學什么區塊鏈存證怎么弄區塊鏈技術發展現狀和趨勢

OKB
比特幣:區塊鏈圈錢游戲,死于2018:一半虛擬幣走向“歸零”

來源:視覺中國 出品/區塊鏈真相 作者/阿倫 雪崩的時候,沒有一片雪花是無辜的。最近一年,“區塊鏈”這個概念坐了趟過山車.

1900/1/1 0:00:00
比特幣:史上最不值錢的錢:100萬億,只夠買1個面包,2瓶水,3個雞蛋

你見過面額最大鈔票是多少?100、1000、5000還是50000?這些都弱爆了,有這么一個窮得只剩下錢的國家,它的鈔票面額竟有100萬億的。不要懷疑自己,你沒看錯,就是100萬億面額的紙幣.

1900/1/1 0:00:00
比特幣:共識的邊界在哪里?

報告摘要 技術是存在邊界的,這決定了需要引入一些其他的激勵和約束機制來使得整個系統正常工作。同時在共識機制設計上,常常需要犧牲系統的某些性能來保證一致性和正確性.

1900/1/1 0:00:00
比特幣價格:史詩級漏洞嚇壞投資者,比特幣一周400億劇震,有人套現1.8萬個

跌破8000美元關口后,過去一周比特幣價格在7800美元到7100美元的區間內不斷浮動。一周內,比特幣經歷5次閃跌4次暴漲,短時間內價格的劇烈波動讓人大跌眼鏡.

1900/1/1 0:00:00
區塊鏈:9月,數字貨幣最新資訊

1.趙長鵬:區塊鏈、數字貨幣這個行業還有幾千倍的發展空間重點值★★★★★趙長鵬在采訪中表示,還是要用時間來證明,他個人認為區塊鏈和數字貨幣這個行業還是發展不到千分之一,后面還有幾千倍的發展空間.

1900/1/1 0:00:00
穩定幣:金融碩士考研專業課《貨幣銀行學》金融學46道必背簡答題及答案

1.簡述布雷頓森林體系的主要內容以及崩潰原因?主要內容:1.建立一個永久性的國際金融機構,即國際貨幣基金組織國際貨幣基金組織是布雷頓森林體系賴以生存和得以正常運行的中心組織.

1900/1/1 0:00:00
ads