北京時間2020年08月05日,DeFi 期權平臺 Opyn 的看跌期權(Opyn ETH Put)智能合約遭到黑客攻擊,損失約37萬美元。
Opyn 是一個通用期權協議,于今年2月份轉型為保險平臺,通過 oTokens 為 DeFi 平臺提供可交易的 ETH 看跌期權,以此錨定 ETH 市場價格,為高波動性的 DeFi 市場提供相對的穩定性。
PeckShield 安全團隊獲悉 Opyn 平臺遭受攻擊后,迅速定位到問題關鍵點在于:
攻擊者發現?Opyn 智能合約行權(exercise)接口對接收到的 ETH 存在某些處理缺陷,其合約并沒有對交易者的實時交易額進行檢驗,使得攻擊者可以在一筆對自己發起真實的交易之后,再插入一筆偽裝交易騙得賣方所抵押的數字資產,進而實現空手套白狼。
LBank藍貝殼于5月3日20:00首發 CSPR(Casper),開放USDT交易:據官方公告,5月3日20:00,LBank藍貝殼上線 CSPR(Casper),開放USDT交易,同時并開放充值,資料顯示,Casper網絡是基于CasperCBC規范構建的第一個實時權益證明區塊鏈。Casper旨在加速當今企業和開發人員對區塊鏈技術的采用,同時確保隨著網絡參與者需求的發展,其在未來仍能保持高性能。[2021/5/3 21:19:51]
簡單來說,由于 Opyn ETH Put 智能合約中的行權函數 exercise() 沒有對交易者的ETH 進行實時校驗。根據 Opyn 平臺的業務邏輯,看跌期權的買方給賣方轉移相應價值的 ETH,即可獲得賣方抵押的數字資產。狡猾的攻擊者,先向自己發起偽裝的交易,利用這筆 ETH 可以重復使用的特性,再次向賣方用戶發起轉賬,進而騙取賣方已經抵押的數字資產。
LBANK藍貝殼于3月22日18:00首發 DORA,開放USDT交易:據官方公告,3月22日18:00,LBANK藍貝殼首發DORA(Dora Factory),開放USDT交易,現已開放充值。
資料顯示,Dora Factory 是基于波卡的 DAO 即服務基礎設施,基于 Substrate 的開放、可編程的鏈上治理協議平臺,為新一代去中心化組織和開發者提供二次方投票、曲線拍賣、Bounty 激勵、跨鏈資產管理等可插拔的治理功能。同時,開發者可以向這個 DAO 即服務平臺提交新的治理模塊,并獲得持續的激勵。[2021/3/22 19:07:06]
下面為您詳細分析漏洞原因及攻擊過程。
漏洞詳細過程分析
先來說說,Opyn 平臺的業務邏輯:當用戶使用 Opyn 合約行權即買賣期貨(exercise)時,需要買方向賣方轉入相應數量的 ETH 或者 ERC20 Token,然后合約將銷毀買方對應的 oToken,而后買方將獲得賣方已經抵押的資產。
金色首發 EOS超級節點競選投票率達6.49%:金色財經數據播報,截止北京時間6月13日15:50,EOS投票率達6.49%。EOS引力區和EOS佳能作為兩個來自中國的超級節點競選團隊暫居第五和第六名。其中EOS引力區的得票總數為903萬,占比2.96%;EOS佳能的得票總數為877萬,占比2.87%。此前異軍突起的EOSflytomars暫居第17位,得票總數為630萬,占比2.07%。目前躋身前30名的超級節點競選團隊中,有八個團隊來自中國。[2018/6/13]
例如:小王認為行情進入了下跌趨勢,看到 Opyn 上掛著一個小李對 ETH 330美元的看跌期權,于是進入交易系統,向小李轉賬一個 ETH,獲得小李抵押的等額數字資產。若此刻行情已經跌至了300美元,小王便可獲得其中的差價。
IMEOS首發 EOS Go公布新增兩條復選條件 :據金色財經合作伙伴IMEOS報道:今日,EOS Go在 steemit上公布新增的兩條復選條件為:
1. 保證安全的計劃:候選節點是否在steemit上發布文章介紹該節點的安全方法和計劃,“安全方法”標準是向EOS選民展示安全最佳實踐知識和組織實施計劃的機會;
2. 立場:描述該節點分享通脹獎勵和/或向EOS代幣持有人派發股息的立場(候選節點在steemit發布)。主要闡述以下兩個問題:
該組織是否會出于任何原因向EOS令牌選民提供支付,包括BP選舉和社區建議?
該組織是否有書面的無票付款政策?如果是這樣,請提供一個鏈接。[2018/4/27]
圖1. exercise() 函數中循環執行傳入的 vaults 地址列表
如上面的合約代碼片段所示,行權函數 exercise() 的內部是一個循環,依據參數中傳遞的 vaultsToExerciseFrom 中的地址數量依次調用真正的行權邏輯 _exercise() 函數。
圖2. 重用傳入合約的 ETH 來獲得抵押資產
函數處理 ERC20 Token 時,和大部分的 DeFi 項目做法一樣,使用 transferFrom(),如代碼 1882 行所示,從 msg.sender 轉賬到 address(this)。
但是當函數處理的資產為 ETH 時,處理的方式就完全不一樣了。因為在 Solidity 中,msg.value 的意思是合約調用者在調用具有 payable 接口時所轉給該合約的 ETH 數量,僅是一個量值,所以在合約代碼的 1879 行中,檢查 msg.value == amtUnderlyingToPay 僅能確保合約確實收到了 amtUnderlyingToPay 數量的 ETH,并不會對 msg.value 的值造成任何影響。
但是正如上面講到的在 exercise() 中會循環調用 _exercise() 函數,這導致盡管合約實際只收到一次ETH,然而在循環過程中卻可以重復使用。
攻擊點就在這里,由于合約少了一步對 ETH 實時數量的檢驗,使得攻擊者可以先偽造一筆指向自己的交易,然后再把已經花掉的本金再次利用,和平臺其他用戶完成一筆正常交易。
圖3. 攻擊交易分析
在圖3中,我們通過 Bloxy 瀏覽器顯示的調用過程來展示攻擊的過程。由于攻擊者吃掉了很多筆訂單,我們以其中一筆交易為例,向大家展示其攻擊邏輯:
1、攻擊者先從 Uniswap 購入了 75 oETH 為進一步調用函數行權做好籌備;2、攻擊者創建了一個 Vault 地址,作為看空期權賣方,并且抵押24,750 USDC 鑄造出75 oETH,但并未賣出這些期權,等于自己同時買入了以 330 的價格賣出75 ETH 的權利;3、攻擊者在 Opyn 合約中調用了 exercise(),在持有 150 oETH 看空期權的情況下,先向自己的 Vault 地址轉入了75個 ETH,獲得自己事先抵押的 24,750 個 USDC,再重利用了這75個 ETH,成功吃掉了另一個用戶的 24,750 個 USDC,進而實現非法獲利。
修復建議
PeckShield 安全團隊建議,在 Solidity 中,合約可使用一個局部變量 msgValue 來保存所收到 ETH(即 msg.value 的值)。這樣,在后續的步驟中通過操作 msgValue ,就能準確的標記有多少 ETH 已經被花費,進而避免資產被重復利用。此外,我們還可以使用 address(this).balance 來檢查合約余額來規避 msg.value 被重復使用的風險。
各級別性質:日線-上漲,4小時-上漲,1小時-盤整截圖來自OKEX BTC/USDT永續合約1小時圖:對于行情從兩個角度來說,一個角度是客觀的走勢狀態以及根據客觀走勢所制定的應對策略.
1900/1/1 0:00:00每周漲跌幅 BTC-PERP: +21.72% | ETH-PERP: 26.95%FTX 破產法官將考慮是否批準對 FTX 的獨立調查:金色財經報道.
1900/1/1 0:00:00BTC目前已完成了第三次產量減半,上圖為BTC2010-2020長期月線走勢,通過研究可以發現,每次減半前BTC價格均位于上一輪牛市頂點回落的斐波那契0.5壓制線下方運行.
1900/1/1 0:00:00上圖為現貨黃金1980-2009年以及2011-2020年目前的長期月線走勢對比圖,研究可以發現兩者走勢有些相似之處,中間階段兩者都是將近10年的底部大U形盤整,這個階段持續的震蕩消磨.
1900/1/1 0:00:00DeFi之后,誰會是創業者及投資者在區塊鏈領域下一個最好布局機會呢?他給出了這樣的答案——去中心化交易所!OpenAI CEO:ChatGPT已突破百萬用戶,對話費用平均只有幾美分:12月5日.
1900/1/1 0:00:00中國30年金融資本市場里,中國科創板上周剛迎來一周年,總市值2.8萬億元,投資數量527萬人,融資總額2015億元.
1900/1/1 0:00:00