国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

智能合約安全分析,Vyper 重入鎖漏洞全路徑分析

這篇具有很好參考價值的文章主要介紹了智能合約安全分析,Vyper 重入鎖漏洞全路徑分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

智能合約安全分析,Vyper 重入鎖漏洞全路徑分析

事件背景

7 月 30 日 21:10 至 7 月 31 日 06:00 鏈上發(fā)生大規(guī)模攻擊事件,導致多個 Curve 池的資金損失。漏洞的根源都是由于特定版本的 Vyper 中出現(xiàn)的重入鎖故障。

攻擊分析

通過對鏈上交易數(shù)據(jù)初步分析,我們對其攻擊的交易進行整理歸納,并對攻擊流程進一步的分析,由于攻擊涉及多個交易池。
pETH/ETH 池子被攻擊交易:
https://etherscan.io/tx/0xa84aa065ce61dbb1eb50ab6ae67fc31a9da50dd2c74eefd561661bfce2f1620c
msETH/ETH 池子被攻擊交易:
https://etherscan.io/tx/0xc93eb238ff42632525e990119d3edc7775299a70b56e54d83ec4f53736400964
alETH/ETH 池子被攻擊交易:
https://etherscan.io/tx/0xb676d789bb8b66a08105c844a49c2bcffb400e5c1cfabd4bc30cca4bff3c9801
CRV/ETH 池子被攻擊交易:
https://etherscan.io/tx/0x2e7dc8b2fb7e25fd00ed9565dcc0ad4546363171d5e00f196d48103983ae477c
https://etherscan.io/tx/0xcd99fadd7e28a42a063e07d9d86f67c88e10a7afe5921bd28cd1124924ae2052
由于其攻擊流程基本一致所以我們主要對其中 pETH/ETH 池子 攻擊交易進行詳細的分析:
0xa84aa065ce61dbb1eb50ab6ae67fc31a9da50dd2c74eefd561661bfce2f1620c
交易由 0x6ec21d1868743a44318c3c259a6d4953f9978538
調用攻擊合約 0x9420F8821aB4609Ad9FA514f8D2F5344C3c0A6Ab ,并由該合約創(chuàng)建一次性攻擊合約
0x466b85b49ec0c5c1eb402d5ea3c4b88864ea0f04,并通過在一次性攻擊合約的構造函數(shù)中進行接下來的攻擊流程;
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

攻擊者通過閃電貸從 Balancer 處獲取 80,000 WETH ,并將其通過合約全部提取為 ETH。
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

隨后立即向 Curve 的 pETH/ETH 池提供了 40000 ETH 流動性,并收到了約 32,431.41 個 pETH-ETH LP Token
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

隨后在攻擊合約中調用移除流動性函數(shù),但在其合約函數(shù)調用棧中我們可以看出,該合約在執(zhí)行移除流動性時又返回調用了合約本身的回退函數(shù),并在回退函數(shù)中又調用了交易對的添加流動性操作。
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

根據(jù) pETH/ETH 交易對合約源碼分析,其中在轉賬時使用合約的回退函數(shù)再次調用該合約,此處發(fā)生合約重入,但該 LP 合約添加流動性以及移除流動性都有使用重入鎖,如下圖所示:
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

但實際調用棧中還是發(fā)生了重入了,導致后續(xù)通過攻擊者合約又一次向 LP Token 添加了 40,000 ETH 并獲取了約 82,182.76 個 pETH/ETH Lp Token, 并在攻擊合約的回調函數(shù)結束繼續(xù)移除最開始添加的 32,431.41 pETH/ETH Lp Token 獲得了約 3,740.21 pETH 和 34,316 ETH。
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

隨即又調用移除流動性函數(shù),移除約 10,272.84 pETH/ETH LP Token 獲得約 1,184.73 pETH 和 47,506.53 ETH。
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

其剩余的 7 萬多 pETH/ETH LP Token 依舊留在攻擊者合約中,如下圖:
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析
接下來攻擊者通過 Curve pETH/ETH 池將約 4,924.94 pETH 交換為的 4,285.10 ETH。
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析
最后攻擊者將約 86,106.65 ETH 兌換為 WETH,并向 Balancer 歸還閃電貸資金 80,000 WETH,并將 獲利資金約 6,106.65 WETH 轉移至 0x9420f8821ab4609ad9fa514f8d2f5344c3c0a6ab 地址。
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

至此,針對 pETH/ETH 池子的攻擊流程分析完畢,是一個很經典的重入獲利操作,但是我們通過對被攻擊合約的源碼進行分析,其合約是存在相應的重入鎖機制,正常來說可以防止重入操作,但是并沒有拒絕攻擊者的重入操作;
我們回顧一下 Vyper 中對重入鎖的說明,知道了該重入鎖實現(xiàn)是在函數(shù)起始部位使用指定的插槽存儲是否鎖定的操作。
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

我們將被攻擊 LP 合約的字節(jié)碼進行反編譯查看:
https://library.dedaub.com/ethereum/address/0x466b85b49ec0c5c1eb402d5ea3c4b88864ea0f04/decompiled
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

可以看到其兩個函數(shù)中存儲重入鎖的插槽并不一致,所以導致其重入鎖失效,進而導致被攻擊者利用進行獲利。
Vyper 項目方官方也發(fā)推說明,其某些版本中確實存在重入鎖故障。
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

通過對其 0.2.14 版本以及 0.2.15 版本對比,發(fā)現(xiàn)其在 Vyper 對應的重入鎖相關設置文件 data_positions.py 中存在改動,其改動后的代碼對重入鎖的存儲 key 進行單獨設置,并且,每一個重入鎖都會占用一個不同存儲插槽,從而導致合約的重入鎖功能不可用。
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

該錯誤已在 PR 中修復:#2439 和 #2514
其中修復了添加多個重入存儲插槽的問題,詳見下圖:
智能合約安全分析,Vyper 重入鎖漏洞全路徑分析,智能合約,安全,區(qū)塊鏈,web安全,安全威脅分析

事件總結

此次攻擊事件涉及的攻擊范圍較廣,其根本原因是因為智能合約的基礎設施 Vyper 的 0.2.15、0.2.16、0.3.0 版本存在重入鎖設計不合理,從而導致后期使用這些版本的項目中重入鎖失效,最終遭受了黑客攻擊。文章來源地址http://www.zghlxwxcb.cn/news/detail-708014.html

  • 建議在項目開發(fā)時選擇穩(wěn)定的技術棧以及對應版本,并對項目進行嚴格的測試,防止類似風險。

到了這里,關于智能合約安全分析,Vyper 重入鎖漏洞全路徑分析的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Solidity vs. Vyper:不同的智能合約語言的優(yōu)缺點

    Solidity vs. Vyper:不同的智能合約語言的優(yōu)缺點

    本文探討以下問題:哪種智能合約語言更有優(yōu)勢,Solidity 還是 Vyper?最近,關于哪種是“最好的”智能合約語言存在很多爭論,當然了,每一種語言都有它的支持者。 這篇文章是為了回答這場辯論最根本的問題: 為了弄清問題的本質,我們將先討論語言的工具和可用性,然

    2024年01月18日
    瀏覽(29)
  • 智能合約 -- 常規(guī)漏洞分析 + 實例

    智能合約 -- 常規(guī)漏洞分析 + 實例

    漏洞分析 攻擊者利用合約漏洞,通過 fallback()或者receive() 函數(shù)進行 函數(shù)遞歸 進行持續(xù)取錢。 剛才試了一下可以遞歸10次,貌似就結束了(version: 0.8.20)。 直接看代碼: 銀行合約:有存錢、取錢、查看賬戶余額等函數(shù)。 攻擊合約: 攻擊、以及合約接受以太幣就觸發(fā)的receive()函數(shù)

    2024年02月13日
    瀏覽(28)
  • 智能合約安全漏洞與解決方案

    智能合約安全漏洞與解決方案

    使用OpenZeppelin安全庫,防止了數(shù)字溢出漏洞攻擊,報出了SafeMath錯誤: 不安全寫法:lockTime[msg.sender] += _secondsToIncrease; 安全寫法:? ? lockTime[msg.sender] = lockTime[msg.sender].add(_secondsToIncrease); 整數(shù)溢出真實案例: 2018年4月22日,黑客利用以太坊ERC-20智能合約中數(shù)據(jù)溢出的漏洞攻擊蔡

    2024年02月03日
    瀏覽(23)
  • 分布式鎖設計選型 不可重入鎖建議使用ZooKeeper來實現(xiàn) 可重入鎖建議使用Redis來實現(xiàn) 分布式鎖:ZooKeeper不可重入鎖 Java優(yōu)化建議

    在設計分布式鎖時,需要考慮業(yè)務場景和業(yè)務需求,以保證鎖的正確性和可用性。 例如,在一個電商系統(tǒng)中,每個商品都有一個庫存量。為了避免多個用戶同時購買同一件商品導致庫存出現(xiàn)不一致的情況,可以為每個商品設置一個分布式鎖,確保同一時間只能有一個用戶購買

    2024年02月08日
    瀏覽(21)
  • 智能合約安全,著名的區(qū)塊鏈漏洞:雙花攻擊

    智能合約安全,著名的區(qū)塊鏈漏洞:雙花攻擊

    區(qū)塊鏈技術通過提供去中心化和透明的系統(tǒng)徹底改變了各個行業(yè)。 但是,與任何技術一樣,它也不能免受漏洞的影響。一個值得注意的漏洞是雙花攻擊。 在本文中,我們將深入研究雙花攻擊的復雜性,探討其工作原理、開發(fā)方法、預防措施及其對區(qū)塊鏈生態(tài)系統(tǒng)的影響。 區(qū)

    2024年02月04日
    瀏覽(21)
  • Solidity攻擊合約:重入攻擊與危害分析

    Solidity攻擊合約:重入攻擊與危害分析

    ???????? 以太坊智能合約 開發(fā)中, 重入攻擊 是一種常見的安全漏洞。這種攻擊通常發(fā)生在合約的遞歸調用中,攻擊者通過構造惡意交易,使得原本合約在執(zhí)行過程中不斷調用自身或其他合約,從而耗盡合約的 Gas(交易費用) ,或者導致意外的狀態(tài)改變。 目錄 一、原本

    2024年03月10日
    瀏覽(20)
  • 【論文閱讀】 智能合約安全漏洞檢測技術研究綜述

    【論文閱讀】 智能合約安全漏洞檢測技術研究綜述

    2016 年 6 月,黑客利用 DAO(decentralized autonomous organization)合約的 可重入漏洞 , 竊取了價值約 6000 萬美元的以太幣(即以太坊數(shù)字貨幣); 2017 年 7 月, 由于 Parity 多簽名錢包合約的 Delegatecall 漏洞 (parity multi-sig wallet delegatecall), 價值近 3 億美元的以太幣被凍結; 2018 年 4 月, 惡意攻擊者

    2024年03月14日
    瀏覽(34)
  • Java入門-可重入鎖

    Java入門-可重入鎖

    什么是可重入鎖? 當線程獲取某個鎖后,還可以繼續(xù)獲取它,可以遞歸調用,而不會發(fā)生死鎖; 可重入鎖案例 程序可重入加鎖 A.class,沒有發(fā)生死鎖。 sychronized鎖 運行結果 ReentrantLock 運行結果 如何保證可重入 當一個線程訪問同步塊并獲取鎖時,會在對象頭和棧幀中的鎖記錄里

    2024年02月22日
    瀏覽(26)
  • java~理解可重入鎖

    在Java中,可重入鎖(Reentrant Lock)是一種同步機制,允許線程在持有鎖的情況下再次獲取該鎖,而不會被自己所持有的鎖所阻塞。也就是說,一個線程可以多次獲得同一個鎖,而不會出現(xiàn)死鎖的情況。 可重入鎖在多線程編程中非常有用,它允許線程在訪問共享資源時多次獲取

    2024年02月09日
    瀏覽(25)
  • 互斥場景重入鎖處理方案

    處理方案一:map+超時重入鎖數(shù)據(jù)結構( 注:該方案并發(fā)時可以獲取到鎖進行操作 ) 核心邏輯模擬--加超時時間 并發(fā)問題結果數(shù)據(jù) 問題 問題:鎖對象創(chuàng)建并發(fā)問題 處理方案二:map+不超時重入鎖數(shù)據(jù)結構( 注:該方案并發(fā)時可以獲取到鎖進行操作 ) 核心邏輯模擬--不加超時時間 并

    2024年02月10日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包