買比特幣 買比特幣
Ctrl+D 買比特幣
ads

COI:Rust智能合約養成日記(6)-ODAILY_Bitop下載

Author:

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

相關文章:

Rust智能合約養成日記合約狀態數據定義與方法實現

Rust智能合約養成日記編寫Rust智能合約單元測試

Rust智能合約養成日記Rust智能合約部署,函數調用及Explorer的使用

Rust智能合約養成日記Rust智能合約整數溢出

Rust智能合約養成日記拒絕服務攻擊

拒絕服務攻擊又稱DoS(DenialofService)攻擊,該類型的攻擊將使得智能合約在一段時間內(甚至永久)無法被用戶正常使用。

目前已知的原因大致可分為如下兩類:

合約邏輯中存在的某些缺陷。如某一public函數,其實現沒有考慮到計算復雜度。用戶調用該函數時,實際所需消耗的Gas會超出NEAR公鏈創世區塊配置文件(genesis_config.json)中所定義的"max_total_prepaid_gas":300000000000000`(300TGas),導致交易失敗。

某些跨合約調用情形中,合約的執行依賴于其他外部合約的執行狀態。而外部合約的執行并非總是可靠,以至于本合約的執行可能被外部合約阻塞,無法照常運行。該類問題的發生可表現為合約用戶在合約中的資金被鎖定,以至于無法正常的充值或提現。

慢霧:Distrust發現嚴重漏洞,影響使用Libbitcoin Explorer3.x版本的加密錢包:金色財經報道,據慢霧區消息,Distrust 發現了一個嚴重的漏洞,影響了使用 Libbitcoin Explorer 3.x 版本的加密貨幣錢包。該漏洞允許攻擊者通過破解 Mersenne Twister 偽隨機數生成器(PRNG)來訪問錢包的私鑰,目前已在現實世界中造成了實際影響。

漏洞詳情:該漏洞源于 Libbitcoin Explorer 3.x 版本中的偽隨機數生成器(PRNG)實現。該實現使用了 Mersenne Twister 算法,并且僅使用了 32 位的系統時間作為種子。這種實現方式使得攻擊者可以通過暴力破解方法在幾天內找到用戶的私鑰。

影響范圍:該漏洞影響了所有使用 Libbitcoin Explorer 3.x 版本生成錢包的用戶,以及使用 libbitcoin-system 3.6 開發庫的應用。

已知受影響的加密貨幣包括 Bitcoin、Ethereum、Ripple、Dogecoin、Solana、Litecoin、Bitcoin Cash 和 Zcash 等。

風險評估:由于該漏洞的存在,攻擊者可以訪問并控制用戶的錢包,從而竊取其中的資金。截至 2023 年 8 月,已有超過 $900,000 美元的加密貨幣資產被盜。

解決方案:我們強烈建議所有使用 Libbitcoin Explorer 3.x 版本的用戶立即停止使用受影響的錢包,并將資金轉移到安全的錢包中。請務必使用經過驗證的、安全的隨機數生成方法來生成新的錢包。[2023/8/10 16:18:20]

除了合約邏輯的缺陷,DoS現象發生的原因還可以歸因于人為因素:典型的如:合約的所有者丟失了自己的私鑰,以至于合約中部分only_owner可執行的特權函數無法被調用,使得合約中某些重要的系統狀態值無法及時的更新,這將有可能對項目造成較大的損失。

Web3安全基礎設施Trusta Labs完成超300萬美元種子輪融資:1月17日消息,據官方推特,Web3安全基礎設施Trusta Labs宣布完成超300萬美元種子輪融資,SevenX Ventures和元璟資本(Vision Plus Capital)領投,HashKey Capital、Redpoint China Ventures、GGV Capital和SNZ Holding參投,所籌資金將用于新產品研發、促進新用戶吸納和轉化以及對價值用戶的留存和運營。據介紹,Trusta Labs專注于Web3安全基礎設施,于2022年10月成立,并在次月獲得Gitcoin Open Data Hackathon冠軍。[2023/1/17 11:16:16]

為方便讀者更加深刻地了解智能合約中的DoS攻擊漏洞,本文后續將結合具體DoS攻擊的例子展開描述與分析。本文代碼已上傳至BlockSec官方github,讀者可以自行下載https://github.com/blocksecteam/near_demo/tree/main/DoSDemo

1.循環遍歷一個可被外部調用更改的數據結構

以下是一個用于給合約中注冊用戶“分紅”的簡單智能合約,其狀態數據如下:

Chorus One推出3000萬美元的股權證明投資基金:金色財經報道,收購解決方案Chorus One為超過28個去中心化網絡提供權益證明(PoS)質押系統,該公司推出了一項新基金,將在未來三年內從其資產負債表中投資2500萬至3000萬美元用于PoS網絡、協議和相關產品。以太坊區塊鏈計劃很快從工作量證明共識機制轉變為權益證明機制,從而更加關注資產所有者為獲得驗證新交易塊并將其添加到區塊鏈的權利而質押其代幣的過程。領先的PoS區塊鏈包括Avalanche、Cardano、Polkadot和Solana。ChorusOne由BrianCrain和MeherRoy于2018年創立,該公司是Cosmos可互操作區塊鏈網絡早期激勵性測試網的參與者之一。(coindesk)[2022/4/5 14:04:13]

用戶可通過調用pubfnregister_account()函數進行注冊并初始化。

后續該合約的管理者將調用pubfndistribute_token函數來為系統中用戶進行"分紅"。“分紅”的方式為遍歷用戶數組self.registered,并通過跨合約調用向每一個用戶轉入指定額度amount的代幣以做獎勵。

動態 | Ethfinex Trustless將于3月13日遷移至0x協議的V2版本:據交易平臺Ethfinex官方消息,Ethfinex Trustless將于3月13日遷移至0x協議的V2版本。[2019/3/8]

然而該合約狀態數據(self.registered)的大小沒有限制,并且可以被惡意用戶所操控,使得該合約數據的大小變得過大。以至于DISTRIBUTOR用戶在調用該合約方法時,可能消耗的Gas費用過高,超出了GASLIMIT。

如下是該合約在實際NEARLocalnet中測試的結果

可以看到當系統中注冊的用戶較多時,實際在distribute_token執行的過程中,所設置的prepaid_gas將不足以滿足所有用戶的轉賬操作,以至于本次交易失敗。

推薦的解決方案:

由于GasLimit的限制,合約方法在執行過程中不建議遍歷一個較大的數據結構(該數據結構的大小可被外部用戶操縱)。確需遍歷的,也需要限制該數據結構的大小,并保證當該數據結構的大小達到該最大值時,也不會觸及GasLimit的限制。

動態 | Bitstamp bitFlyerUSA和Bittrex加盟文克萊沃斯兄弟虛擬商品協會:據彭博社報道,管理交易比特幣和以太幣的雙子交易所(Gemini)的文克萊沃斯兄弟,其創建的虛擬商品協會在20日發表稱,大型交易所Bitstamp,bitFlyerUSA,Bittrex已經同意加盟到該協會,四家公司的代表將于9月召開會議,探討建立自律組織等問題。[2018/8/21]

因此推薦采用withdrawal模式對上述合約進行改造。即要求合約方不主動地對所有的用戶逐一發放獎勵,而是先記賬,并設置一個withdraw函數,讓單一用戶通過該函數方法的調用,自行取回“分紅”獎勵。此時合約方也只需要維護逐一用戶已經取回的獎勵數額或者還能取回的獎勵數額即可。

2.跨合約之間的狀態依賴導致合約阻塞

合約在進行跨合約調用時,可能會對外部合約的狀態存在依賴,不恰當的依賴,會導致該合約阻塞,從而可能被發起DoS攻擊

下面考慮一種利用智能合約進行“競價”的場景:

用戶可以通過調用“競價合約”中的pubfnregister_account函數方法注冊賬戶,為參與后續的競價做準備

用戶還可以通過如下接口函數查詢當前系統中目前為止出價最高的用戶ID,及其所出的價格。

用戶還可以通過如下接口函數查詢當前系統中目前為止出價最高的用戶ID,及其所出的價格。

當競價合約收到token時,會通過ft_on_transfer函數調用到如下bid函數。

在該出價函數中,函數的執行邏輯將首先檢查本次用戶的出價是否高于之前出價最高用戶的出價值。如果滿足該條件,將執行self.refund_exe()從“競價合約”中退回之前出價最高用戶的出價代幣。隨后更新目前為止出價最高的用戶ID及其所出的價格。

實際的情況是,根據該合約的邏輯定義:必須要退回之前出價最高用戶的出價代幣,才能將目前為止出價最高的用戶ID進行更替。

在該出價函數中,函數的執行邏輯將首先檢查本次用戶的出價是否高于之前出價最高用戶的出價值。如果滿足該條件,將執行self.refund_exe()從“競價合約”中退回之前出價最高用戶的出價代幣。隨后更新目前為止出價最高的用戶ID及其所出的價格。

實際的情況是,根據該合約的邏輯定義:必須要退回之前出價最高用戶的出價代幣,才能將目前為止出價最高的用戶ID進行更替。

此時測試模擬了“競價系統”的參與的用戶:user0、user1和user2

他們分別擁有10000個初始代幣。user0首先在“競價系統”中出價1000,此時查詢可知current_leader:user0.test.nearhighest_bid:1000。隨后user0立即將剩余的9000個代幣轉給了user2,并銷毀了代幣賬戶。

此后,當user1出價2000時,系統將打算退回user0之前的出價值。但由于此時user0的賬戶已不存在,系統將提示"CannotRefund",始終無法成功完成后續的交易更新狀態。

此時第二位出價者想出價2000:

解決方法:

如果合約的狀態的轉化需要依賴于外部合約的調用處理,則需要考慮外部合約調用可能失敗的情形,防止合約的執行邏輯被阻塞而拒絕服務,即我們需要實現合理的錯誤處理手段。在本例子中,我們可以將無法退回的代幣寄存于合約新增的lost_found用戶組中,當后續用戶滿足條件refund條件時,再由用戶本身來進一步取回代幣(同樣可以實現withdraw函數)。

3.Owner私鑰丟失

去中性化智能合約項目中往往也存在部分中心化的現象:如存在合約的owner。部分合約函數的執行被設置為僅owner可以執行,用以對合約中某些關鍵系統變量值的進行設置更改。我們可以將此類函數稱之為only_owner類型函數。

例如前文在“分紅”合約中所定義的pubfndistribute_token,該函數即為only_owner函數。當合約的owner無法履行職能(私鑰丟失)時,資金將一直被鎖定在合約之中,無法分發給其他用戶。另有大多數的情況下,only_owner函數還可以用來暫停或者重啟合約中的所有交易,可見owner正常履行其職能的重要性。

解決方法:

為避免上述owner個人“失能”情形的發生,我們可增設多位合約的owner共同治理合約,甚至可采用多簽請求的方式來替換原有的合約權限控制方案,以此實現合約的去中心化治理效果。有關智能合約中多簽請求功能的設計實現,將在后續的《智能合約養成日記》中展開詳細的描述。

Tags:USTBITOINCOITrusted NodeBitop下載Sound CoinCatcoin

火幣交易所
加密貨幣:頂峰AscendEX金融課:傳統金融中的ETF究竟是什么?-ODAILY_比特幣

近日,據彭博分析師預測,基于機構需求以及美國可能的政策變化,到2028年,加密支持的交易所交易產品和ETF的管理資產可能超過1200億美元。此外,比特幣現貨ETF或將于2023年在美國獲得批準.

1900/1/1 0:00:00
ULT:Flurry Finance被盜事件分析:項目不立于「危墻之下」-ODAILY_FLUX

北京時間2022年2月22日下午1:46,CertiK安全專家團隊檢測到與FlurryFinance相關的一系列可疑活動,FlurryFinance的Vault合約受到攻擊.

1900/1/1 0:00:00
NET:World Mobile大事件(1.10-1.16)-ODAILY_ORL

2022年1月13日互聯網飛艇即將來到桑給巴爾,WorldMobile能否在谷歌失敗的地方取得成功? 英國數據監管機構將對Worldcoin進行進一步調查:金色財經報道,英國數據監管機構表示.

1900/1/1 0:00:00
COM:千里之堤毀于蟻穴,Fortress Protocol慘遭攻擊-ODAILY_NFT2$價格

前言 北京時間2022年5月9日,知道創宇區塊鏈安全實驗室監測到BSC鏈上借貸協議FortressProtocol因預言機問題被攻擊,這是最近實驗室檢測到的第三起預言機攻擊事件,損失包括1.

1900/1/1 0:00:00
以太坊:SupraOracles專題報告:詳解流動性挖礦-ODAILY_SUPE

流動性挖礦涉及在智能合約中存入加密資產,以換取收益 流動性挖礦可能涉及相當大的風險。本文僅用于教育目的,不應被視為財務建議。在做出任何投資決定之前,請考慮您的個人風險狀況.

1900/1/1 0:00:00
EDO:Qredo和MetaMask Institutional整合進入全面生產-ODAILY_RED

Qredo的MetamaskInstitutional集成已經離開Beta版,并進入全面生產階段,為各地的機構提供久經考驗的機構級Web3和DeFi錢包.

1900/1/1 0:00:00
ads