![2022DAPP安全指南手冊(cè)_第1頁(yè)](http://file4.renrendoc.com/view12/M0B/2C/09/wKhkGWX456iASVjcAAA2e9Mf7ks988.jpg)
![2022DAPP安全指南手冊(cè)_第2頁(yè)](http://file4.renrendoc.com/view12/M0B/2C/09/wKhkGWX456iASVjcAAA2e9Mf7ks9882.jpg)
![2022DAPP安全指南手冊(cè)_第3頁(yè)](http://file4.renrendoc.com/view12/M0B/2C/09/wKhkGWX456iASVjcAAA2e9Mf7ks9883.jpg)
![2022DAPP安全指南手冊(cè)_第4頁(yè)](http://file4.renrendoc.com/view12/M0B/2C/09/wKhkGWX456iASVjcAAA2e9Mf7ks9884.jpg)
![2022DAPP安全指南手冊(cè)_第5頁(yè)](http://file4.renrendoc.com/view12/M0B/2C/09/wKhkGWX456iASVjcAAA2e9Mf7ks9885.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
DAPP安全指南手冊(cè)PAGEPAGE5目錄DApp與安全概述 6DApp概述 6DApp安全簡(jiǎn)介 7DApp安全攻防 8DeFi的安全 8DeFi概述 8DeFi的功能特性 9DeFi的生態(tài)堆載 11DeFi項(xiàng)目的安全概述 12DeFi的智能合約安全案例分析 14DeFi通證經(jīng)濟(jì)設(shè)計(jì)方面的安全案例分析 26DeFi監(jiān)管安全的案例分析 32DApp安全測(cè)試建議與工具 34安全架構(gòu)分析 34靜態(tài)代碼掃描 35動(dòng)態(tài)應(yīng)用掃描 36手工滲透測(cè)試 37生產(chǎn)環(huán)境中的測(cè)試與追蹤 37針對(duì)智能合約的安全測(cè)試工具 38DApp安全最佳實(shí)踐與案例 39DApp的基本架構(gòu) 39安全開(kāi)發(fā)與測(cè)試的要點(diǎn) 40DApp開(kāi)發(fā)采用DevSecOps流程 41加強(qiáng)安全審計(jì) 41參考資料 43PAGEPAGE10DAppDAppDAppDecentralizedApplication的縮寫,是基于區(qū)塊鏈的應(yīng)用程序。這些類型的DApp。具體包括:去中心化信服務(wù)器傳遞消息,也不需要中心數(shù)據(jù)庫(kù)來(lái)管理數(shù)據(jù)。開(kāi)放生態(tài)系統(tǒng)的發(fā)布不受任何機(jī)構(gòu)限制。各種創(chuàng)意與創(chuàng)新可以自由表達(dá)和實(shí)現(xiàn)。算法及協(xié)議:交易發(fā)生的順序由共識(shí)算法決定。DApp參與者信息一般存儲(chǔ)在參與者的手機(jī)??梢员Wo(hù)數(shù)字資產(chǎn),有利于產(chǎn)權(quán)不會(huì)泄露、被破壞。DAppDApp的顯著特點(diǎn)。在區(qū)塊鏈的時(shí)代,任DApp上。美國(guó)證監(jiān)會(huì)(SEC)將加密貨幣劃分為兩類:實(shí)用型通證(utilitytoken)和證券型通證(securitytoken)。證券型通證被用來(lái)支付紅利、收益、利息,或者通過(guò)投資其他(Equity和資產(chǎn)通證(Asset。實(shí)用型通(app(usertoken)ofProduct)和獎(jiǎng)勵(lì)通證(RewardDAppDApp安全具有一些內(nèi)置安全性、又可以通過(guò)密碼學(xué)增加其魯棒性。但由于DAppEOSPeckshieldEOS三大生態(tài)DApp安全事件報(bào)告:根據(jù)Peckshield2018年720196月,EOS上的DApp安109EOS93)上的DApp安全事件數(shù)量為11起,損失TRX29002019年5月波場(chǎng)發(fā)生的安全事TRX損失就超2700萬(wàn)枚,占總統(tǒng)計(jì)數(shù)據(jù)的約93。而以太坊安全事件(DAppERC20)相關(guān)的安全事件有52.4手段。DApp(DApp手段還總結(jié)了利用區(qū)塊鏈下的傳統(tǒng)安全的手段進(jìn)行風(fēng)險(xiǎn)分析包括但不限于:鏈上攻防鏈下攻防XSS、CSRF、SQL注入、中間人劫持、私鑰存儲(chǔ)、SSRF、除了考慮數(shù)據(jù)的加密還需要考慮共識(shí)算法的安全。(/slowmist/Knowledge-Base/blob/master/dapp_attack_defense.png)DeFiDeFiDeFi是DecentralizedFinance的縮寫(以下簡(jiǎn)稱),可以翻譯為去中心化金融,也可以理解為開(kāi)放式金融(OpenFinance),它是利用去中心化協(xié)議和智能合約提供普惠的、不需要準(zhǔn)入條件的金融服務(wù)。DAO(社區(qū)自治)屬性,DAppDeFi.應(yīng)該說(shuō),2020DeFi的應(yīng)用。DeFi但是也存在下面例舉的痛點(diǎn)。不夠普惠性:以門檻最低的銀行賬戶為例,據(jù)不完全統(tǒng)計(jì),目前全球大約仍有174.63.52.25億人都是沒(méi)有銀行賬號(hào)的。即便在美國(guó)這個(gè)最發(fā)達(dá)的資本主義國(guó)家,目前仍有大約5500萬(wàn)人沒(méi)有銀行賬號(hào)。CeFiCeFi中,這個(gè)費(fèi)用有時(shí)會(huì)很高昂。以跨境轉(zhuǎn)賬為例,目前每筆的平均4.4%+0.3100萬(wàn)元美元到美國(guó),我們需要支付高達(dá)44000.3美元的手續(xù)費(fèi)。再以貸款為例,大額貸款一般都要收取發(fā)放費(fèi)、手續(xù)費(fèi),在美國(guó)這個(gè)費(fèi)率一般是2%。比如,貸款100萬(wàn)元,一般就要支付2萬(wàn)元左右的費(fèi)用。效率低:SWIFTT+22天的時(shí)間才能到賬。中心化安全問(wèn)題:這個(gè)問(wèn)題不言而喻,傳統(tǒng)金融機(jī)構(gòu)都會(huì)有中心化的數(shù)據(jù)庫(kù),DeFi針對(duì)CeFi的不足進(jìn)行了理解,那么DeFi相較之下有哪些特性?以下是DeFi擁有的10個(gè)特性:普惠性:只要一部可以聯(lián)網(wǎng)的手機(jī)或者電腦,在世界任何一個(gè)角落任何一個(gè)人DeFiUniswapCompoundDeFi應(yīng)用進(jìn)行去中心化理財(cái)?shù)?。CeFiDeFi中,用戶在金融交易中可以任意扮演買方或賣方,既可以是服務(wù)方也可以是被服務(wù)方,而且沒(méi)有什么門檻。透明性:DeFi則以及實(shí)際網(wǎng)絡(luò)使用情況。DeFi的隱私??删幊绦裕篋eFi進(jìn)行編程調(diào)整,從而實(shí)現(xiàn)不同的金融邏輯。可組合性:應(yīng)用。可互操作性:DeFi可以將數(shù)字資產(chǎn)與法幣、物理資產(chǎn)的價(jià)值進(jìn)行交互。比如在Synthetix高利息性:DeFi生態(tài)中的利息就要高的多。一個(gè)好的項(xiàng)目會(huì)將貸款發(fā)放費(fèi)、交易費(fèi)拿出來(lái)作為利息,分發(fā)給參與者。零費(fèi)用性卡的年費(fèi),儲(chǔ)蓄卡存款額度很小時(shí),銀行會(huì)收取小額管理費(fèi)等等。DeFi中即便你的賬戶里只有0.000001個(gè)ETH,也不需要支付任何賬戶費(fèi)用。而且根據(jù)數(shù)字貨幣的屬性,它的價(jià)格也不可能出現(xiàn)負(fù)值??煞稚⑿援a(chǎn)市場(chǎng)出現(xiàn)危機(jī)。我們可以將傳統(tǒng)投資與數(shù)字貨幣進(jìn)行組合,從而分散投資風(fēng)險(xiǎn)。CeFi而言,DeFi擁有眾多獨(dú)特的屬性與優(yōu)勢(shì),并且隨著技術(shù)的DeFi并不夠成熟,但其發(fā)展與前景依然被廣泛看好。DeFi術(shù),DEXDeFi6個(gè)層次:(比如以太坊,(界錢包)DeFi生態(tài)提供價(jià)值存儲(chǔ)和價(jià)值共識(shí)的基礎(chǔ)。DEX(去中心化交易所)Uniswap、0X、等等。去中心化交易所必或者多條公鏈上。USDT、USDC,等數(shù)字貨幣。穩(wěn)定幣給去中心化交易所提供DeFi整個(gè)生態(tài)提供了與現(xiàn)實(shí)世界對(duì)應(yīng)的計(jì)量單位。穩(wěn)DeFi應(yīng)用。(FlashMarkerDAOCompound,BzX,DeFi項(xiàng)目DeFi外一種數(shù)字貨幣(大部分的應(yīng)用場(chǎng)景是穩(wěn)定幣的借貸)DeFi的借貸服務(wù)目前是建立在公鏈技術(shù),去中心化交易所和穩(wěn)定幣基礎(chǔ)上的金融服務(wù)。ETF、合成資產(chǎn)、ABS等金融衍生品:不僅是數(shù)字資產(chǎn)的衍生產(chǎn)品,也可以將物DeFisynthetix.io4個(gè)層次的服務(wù)。預(yù)測(cè)市場(chǎng)、保險(xiǎn)、供應(yīng)鏈金融:這個(gè)層次的應(yīng)用利用前面五個(gè)層次的服務(wù),給DeFiNexusMutual,Cover協(xié)議,OpynDEX交易保險(xiǎn)的治Wrapped進(jìn)行借貸服務(wù),利用合成資產(chǎn)與保險(xiǎn)產(chǎn)品進(jìn)行合成生成新的保險(xiǎn)產(chǎn)品。DeFi還不夠成熟,暫時(shí)缺少成熟的具體的應(yīng)用,但是發(fā)展前景廣闊。需要注(Oracle)黑客攻擊事件,其原因就ERC-777UniswapERC-777UniswapDeFiMakerDAOUniswapBetaDeFi生態(tài),目前大部分應(yīng)用都是建立在以太坊公鏈之上,在其他公鏈,比如、EOSDNA上面也有,但相較于以太坊還是要少。應(yīng)用類型方面,目DEX為主。DeFiDeFi項(xiàng)目被黑客攻擊造成1億美金。通證經(jīng)濟(jì)設(shè)計(jì)方面的安全,第三就是監(jiān)管的安全。DeFi第一方面的安全20185CSA大中華區(qū)的區(qū)塊鏈安全工作組也在最近發(fā)布了智能合約安全方面的白皮書也可以參考。DeFiOpynDeFi項(xiàng)目的漏洞。兩個(gè)漏洞都與智能合約代碼有關(guān)。DeFi第二方面的安全:DAO設(shè)計(jì)的一個(gè)關(guān)鍵?;蛘咭?yàn)橥ㄗC經(jīng)濟(jì)設(shè)計(jì)參數(shù)方面DeFiCurve作為例子來(lái)說(shuō)明可能被黑客DeFi90%的項(xiàng)目,因?yàn)橛锌赡軙?huì)因經(jīng)濟(jì),因?yàn)樗嵌鄬W(xué)科的領(lǐng)域,其中某個(gè)領(lǐng)域沒(méi)做好,最后可能不能成功偃旗息鼓了,這些例子已經(jīng)非常多,就不一一列舉了。DeFi第三方面的安全:DeFi生態(tài)還小,監(jiān)管還沒(méi)有開(kāi)始。但是EtherDelta項(xiàng)目被美國(guó)政府罰款作為例子DeFi項(xiàng)目最終都一定要符合本地的監(jiān)管,所以首先項(xiàng)目DeFiDeFi的仿盤,內(nèi)在還是中心化的,不是去中心化,有可能會(huì)圈錢跑路的,所以大家要小心,保證好項(xiàng)目的安全工作,及時(shí)規(guī)避風(fēng)險(xiǎn)。DeFiDeFi的業(yè)務(wù)邏輯由智能合約的代碼實(shí)現(xiàn),智能合約本身的安全可以參考CSAGCR關(guān)于智能合約安全的內(nèi)容。這里主要具體分析兩個(gè)智能合約安全被黑客攻擊成功的案例。另外下面是與智能合約安全有關(guān)的需要考慮的內(nèi)容。DeFiDeFiDeFiDeFi應(yīng)用增加這個(gè)問(wèn)題會(huì)越來(lái)越重要。無(wú)常損失風(fēng)險(xiǎn):例如自動(dòng)做市的流動(dòng)性挖礦提供者的無(wú)常損失,尤其是如果交可用性,和交易對(duì)價(jià)格的穩(wěn)定性來(lái)解決。GasGasGas費(fèi)用高的問(wèn)題。DeFi智能合約地址轉(zhuǎn)賬,造成資金被永遠(yuǎn)鎖定在合約中。這個(gè)需要用戶對(duì)于智能合約和DeFi項(xiàng)目本身的了解。(FlashDeFiDeFi風(fēng)險(xiǎn)本身不是因?yàn)橛蠨eFi項(xiàng)目本身在流動(dòng)性設(shè)計(jì)或者預(yù)言機(jī)選擇的漏洞造成的。過(guò)同樣的智能合約調(diào)用來(lái)獲取。因此解決閃貸(FlashLoan)DeFi風(fēng)險(xiǎn)還是需要DeFi項(xiàng)目本身的流動(dòng)性設(shè)計(jì)和預(yù)言機(jī)設(shè)計(jì)。智能合約授權(quán)濫用風(fēng)險(xiǎn):DeFiCompound,Uniswap,Kyber,Maker等ERC20APIApprove理論上這些項(xiàng)目可以濫用權(quán)限轉(zhuǎn)走用戶授權(quán)的資金。這個(gè)問(wèn)題目前沒(méi)有收到大家的重Opyn20200805日,DeFiOpyn(OpynETHPut)37萬(wàn)美元。Opyn2ETHETHDeFi市場(chǎng)提供相對(duì)的穩(wěn)定性。PeckShield安全團(tuán)隊(duì)獲悉Opyn平臺(tái)遭受攻擊后,迅速定位到問(wèn)題關(guān)鍵點(diǎn)在于:攻擊者發(fā)現(xiàn)Opyn智能合約行權(quán)(exercise)接口對(duì)接收到的ETH存在某些處理白狼。簡(jiǎn)單來(lái)說(shuō),由于OpynETHPut智能合約中的行權(quán)函數(shù)exercise()沒(méi)有對(duì)交易者的ETH進(jìn)行實(shí)時(shí)校驗(yàn)。根據(jù)Opyn平臺(tái)的業(yè)務(wù)邏輯,看跌期權(quán)的買方給賣方轉(zhuǎn)移相應(yīng)價(jià)值的ETH,即可獲得賣方抵押的數(shù)字資產(chǎn)。狡猾的攻擊者,先向自己發(fā)起偽裝的交易,利用這筆ETH可以重復(fù)使用的特性,再次向賣方用戶發(fā)起轉(zhuǎn)賬,進(jìn)而騙取賣方已經(jīng)抵押的數(shù)字資產(chǎn)。下面是PeckShield的詳細(xì)分析:漏洞詳細(xì)過(guò)程分析Opyn合約行ETH或者ERC20然后合約將銷毀買方對(duì)應(yīng)的Opyn上掛著一個(gè)小李對(duì)ETH330美元的看跌期權(quán),300美元,小王便可獲得其中的差價(jià)。圖1 exercise()函數(shù)中循環(huán)執(zhí)行傳入的vaults地址列表如上面的合約代碼片段所示,行權(quán)函數(shù)exercise()的內(nèi)部是一個(gè)循環(huán),依據(jù)參數(shù)中傳遞的vaultsToExerciseFrom中的地址數(shù)量依次調(diào)用真正的行權(quán)邏輯_exercise()函數(shù)。圖2重用傳入合約的ETH來(lái)獲得抵押資產(chǎn)函數(shù)處理ERC20Token時(shí),和大部分的DeFi項(xiàng)目做法一樣,使用transferFrom(),如代碼1882行所示,從msg.sender轉(zhuǎn)賬到address(this)。但是當(dāng)函數(shù)處理的資產(chǎn)為ETH時(shí),處理的方式就完全不一樣了。因?yàn)樵赟olidity中,msg.value的意思是合約調(diào)用者在調(diào)用具有payable接口時(shí)所轉(zhuǎn)給該合約的ETH數(shù)量,僅是一個(gè)量值,所以在合約代碼的1879行中,檢查msg.value==amtUnderlyingToPayamtUnderlyingToPayETH,并不msg.value的值造成任何影響。但是正如上面講到的在exercise()中會(huì)循環(huán)調(diào)用_exercise()函數(shù),這導(dǎo)致盡管合約實(shí)際只收到一次ETH,然而在循環(huán)過(guò)程中卻可以重復(fù)使用。攻擊點(diǎn)就在這里,由于合約少了一步對(duì)ETH筆正常交易圖3攻擊交易分析在圖3中,我們通過(guò)Bloxy瀏覽器顯示的調(diào)用過(guò)程來(lái)展示攻擊的過(guò)程。由于攻擊者吃掉了很多筆訂單,我們以其中一筆交易為例,向大家展示其攻擊邏輯:Uniswap75oETH為進(jìn)一步調(diào)用函數(shù)行權(quán)做好籌備;攻擊者創(chuàng)建了一個(gè)24,750USDC鑄75oET33075ETH的權(quán)利;攻擊者在pn合約中調(diào)用了ie150oEH看空期權(quán)的情況下,先向自己的75個(gè)ETH,獲得自己事先抵押的24,750個(gè)USDC,再75個(gè)ETH,成功吃掉了另一個(gè)用戶的24,750個(gè)USDC,進(jìn)而實(shí)現(xiàn)非法獲利。修復(fù)建議PeckShield安全團(tuán)隊(duì)建議,在Solidity中,合約可使用一個(gè)局部變量msgValue來(lái)保存所收到ETH(即msg.value的值)。這樣,在后續(xù)的步驟中通過(guò)操作msgValue,就能準(zhǔn)確的標(biāo)記有多少ETH已經(jīng)被花費(fèi),進(jìn)而避免資產(chǎn)被重復(fù)利用。此外,我們還可以使用address(this).balance來(lái)檢查合約余額來(lái)規(guī)避msg.value被重復(fù)使用的風(fēng)險(xiǎn)。DeFiMyrose事件起因202091420:00DeFiMyrose.financeJST、USDT、SUN、DACCZEUS、PEARLCRT84003000DeFi(高達(dá)5700多人)20:09中文社區(qū)群"USDT無(wú)法提現(xiàn)。CSA大中華區(qū)的區(qū)塊鏈安全工作組成員知道創(chuàng)宇404區(qū)塊鏈安全研究團(tuán)隊(duì)對(duì)于整個(gè)事件進(jìn)行分析,描述如下:代碼的分析:remixUSDT_Ethereum(合約代碼具體鏈接:/1337/)USDT_Ethereummint合約地址增添一些代幣。withdraw函數(shù)提現(xiàn)測(cè)試??梢钥吹経SDT_Ethereum提現(xiàn)成功,USDT_Tron提現(xiàn)失敗。失敗的回滾信息中,正是safeTransfer函數(shù)中對(duì)最后返回值的校驗(yàn)。知道創(chuàng)宇的合約模擬實(shí)驗(yàn)揭示了以太坊與波場(chǎng)兩個(gè)不同平臺(tái)下USDT代幣合約中transfer函數(shù)關(guān)于返回值處理差異性帶來(lái)的安全風(fēng)險(xiǎn),而關(guān)于"missingreturnvaluebug"2018Medium上公開(kāi)討論過(guò),只不過(guò)是針對(duì)以太坊的,這里對(duì)以太坊中的"missingreturnvaluebug"問(wèn)題做一個(gè)簡(jiǎn)單的介紹:MissingReturnBugERC20標(biāo)準(zhǔn),ERC20被定義為一個(gè)接口,該接ERC20的智能合同中必須實(shí)現(xiàn)哪些功能和事件。在ERC20的開(kāi)發(fā)過(guò)程中,有研究人員對(duì)于ERC20合約中的transfer函數(shù)的正確返回transfer函數(shù)允許在調(diào)用合約中處Failederrorfalse值,另一方聲稱,在無(wú)法確保安全revertERC20標(biāo)準(zhǔn)的,并未達(dá)成一致。ERC20函數(shù)不返回任何東西。那么符合ERC20標(biāo)準(zhǔn)的接口的合約試圖與不符合ERC20的合約進(jìn)行交互,會(huì)發(fā)生什么呢?下面我們通過(guò)一個(gè)合約示例來(lái)做解釋說(shuō)明:interfaceToken{functiontransfer()returns(bool);}contractGoodTokenisToken{functiontransfer()returns(bool){returntrue;}}contractBadToken{functiontransfer(){}}contractWallet{functiontransfer(addresstoken){require(Token(token).transfer());}}在solidity中,函數(shù)選擇器是從它的函數(shù)名和輸入?yún)?shù)的類型中派生出來(lái)的:selector=bytes4(sha3(“transfer()”))transfer()和函數(shù)transfer()返回(bool)具有相同的函數(shù)選擇器,但它們?nèi)匀徊煌捎谌鄙俜祷刂?,編譯器不會(huì)接受transfer()GoodtokenBadtoken不是。時(shí),Badtokentransfer調(diào)用,并且函數(shù)沒(méi)有寫返回值,所以它會(huì)將在這個(gè)內(nèi)存位置找到的任何內(nèi)容作為外部調(diào)用的返回值。EVMEVM員們希望它的表現(xiàn)一樣。2080EVMtrndatasize,這個(gè)操作碼存儲(chǔ)(顧名思義)外部調(diào)用返回?cái)?shù)據(jù)的大小,這是一個(gè)非常有用的操作碼,因?yàn)樗试S在函數(shù)調(diào)用中返回動(dòng)態(tài)大小的數(shù)組。solidity0.4.22更新中被采用,現(xiàn)在,代碼在外部調(diào)用后檢查返回值revert來(lái)說(shuō)是一個(gè)巨大的問(wèn)題。solc≥0.4.22編譯的智能合約(ERC0接口)將無(wú)BadtokensERC20的功能。類似問(wèn)題的合約:{'addr':'0xae616e72d3d89e847f74e8ace41ca68bbf56af79','name':'GOOD','decimals':6}{'addr':'0x93e682107d1e9defb0b5ee701c71707a4b2e46bc','name':'MCAP','decimals':8}{'addr':'0xb97048628db6b661d4c2aa833e95dbe1a905b280','name':'PAY','decimals':18}{'addr':'0x4470bb87d77b963a013db939be332f927f2b992e','name':'ADX','decimals':4}{'addr':'0xd26114cd6ee289accf82350c8d8487fedb8a0c07','name':'OMG','decimals':18}{'addr':'0xb8c77482e45f1f44de1745f52c74426c631bdd52','name':'BNB','decimals':18}{'addr':'0xf433089366899d83a9f26a773d59ec7ecf30355e','name':'MTL','decimals':8}{'addr':'0xe3818504c1b32bf1557b16c238b2e01fd3149c17','name':'PLR','decimals':18}{'addr':'0xe2e6d4be086c6938b53b22144855eef674281639','name':'LNK','decimals':18}{'addr':'0x2bdc0d42996017fce214b21607a515da41a9e0c5','name':'SKIN','decimals':6}{'addr':'0xea1f346faf023f974eb5adaf088bbcdf02d761f4','name':'TIX','decimals':18}{'addr':'0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af','name':'CDT','decimals':18}有兩種方法可以修復(fù)這個(gè)錯(cuò)誤:第一種:受影響的Token合約開(kāi)放團(tuán)隊(duì)需要修改他們的合約,這可以通過(guò)重新部署Token合約或者更新合約來(lái)完成(如果有合約更新邏輯設(shè)計(jì))。第二種:重新包裝BadTransfer函數(shù),對(duì)于這種包裝有不同的建議,例如:libraryERC20SafeTransfer{functionsafeTransfer(address_tokenAddress,address_to,uint256_value)internalreturns(boolsuccess){//note:bothofthesecouldbereplacedwithmanualmstore'storeducecostifdesiredbytesmemorymsg=abi.encodeWithSignature("transfer(address,uint256)",_to,_value);uintmsgSize=msg.length;assembly{//pre-setscratchspacetoallbitssetmstore(0x00,0xff)//note:thisrequirestangerinewhistlecompatibleEVMifiszero(call(gas(),_tokenAddress,0,add(msg,0x20),msgSize,0x00,0x20)){revert(0,0)}switchmload(0x00)case0xff{//tokenisnotfullyERC20compatible,didn'treturnanything,assumeitwassuccessfulsuccess:=1}case0x01{success:=1}case0x00{success:=0}default{//unexpectedvalue,whatcouldthisbe?revert(0,0)}}}}interfaceERC20{functiontransfer(address_to,uint256_value)returns(boolsuccess);}contractTestERC20SafeTransfer{usingERC20SafeTransferforERC20;functionping(address_token,address_to,uint_amount){require(ERC20(_token).safeTransfer(_to,_amount));}}ERC20合約的開(kāi)發(fā)人員需要意識(shí)到這個(gè)錯(cuò)誤,這樣他們就可BadER20Godtoken來(lái)實(shí)現(xiàn):pragmasolidity^0.4.24;/**WARNING:Proofofconcept.Donotuseinproduction.Nowarranty.*/interfaceBadERC20{functiontransfer(addressto,uintvalue)external;}contractBadERC20Aware{functionaddressto,uintvalue)publicreturns(boolresult){BadERC20(token).transfer(to,value);assembly{switchreturndatasize()case0{ //Thisisourresult:=not(0) //resultistrue}case32{ //Thisisourreturndatacopy(0,0,32)result:=mload(0) //result==returndataofexternalcall}default{ //ThisisnotanERC20tokenrevert(0,0)}}require(result); //revert()ifresultisfalse}}事件總結(jié)USDTtransferTIP20規(guī)范的寫法導(dǎo)致函數(shù)在執(zhí)行時(shí)未返回對(duì)應(yīng)的值,最終返回默認(rèn)的false,從而導(dǎo)致在使用USDTtransferfalse,導(dǎo)致用戶無(wú)法提現(xiàn)。USDTUSDT合約進(jìn)行適配,上線前務(wù)必做好充足的審計(jì)與測(cè)試,盡可能減少意外事件的發(fā)生。DeFiDeFi安全審計(jì)的盲區(qū),智能合約本身沒(méi)有安全漏洞,在傳統(tǒng)審計(jì)非常難發(fā)現(xiàn),必0x協(xié)議團(tuán)隊(duì)的經(jīng)濟(jì)學(xué)研究者PeterDeFi項(xiàng)目CurveCurveSwerve臨著巨大的財(cái)務(wù)損失風(fēng)險(xiǎn)。Curve是提供穩(wěn)定幣之間交易的自動(dòng)做市商項(xiàng)目,SwerveCurveDeFi下面是文章的原文翻譯:在20209月19日凌晨的幾個(gè)小時(shí),我發(fā)現(xiàn)了一個(gè)針對(duì)Curve合約的漏洞,當(dāng)合約的放大系數(shù)A更新時(shí),攻擊者可提取大量代幣余額。而使用了Curve合約的Swerve,其一度更新了它的A系數(shù),因此用戶的潛在損失是巨大的,占到了合約余額的36.9%,假設(shè)進(jìn)行一次優(yōu)化后的攻擊,那么大約會(huì)損失9200萬(wàn)美元。幸運(yùn)的是,SwerveCurve幾個(gè)小時(shí)后,他們確認(rèn)了漏洞的存在,我們開(kāi)始一起研究解決方案。實(shí)際上,這種攻擊在A在損失要大一個(gè)數(shù)量級(jí),因此我們將重點(diǎn)討論這類攻擊。這些攻擊的嚴(yán)重程度與AA_old初始參數(shù)值,A_new是更新的參數(shù)值,而n是合約中代幣類型的數(shù)量。利用漏洞造成的損失,取決于參數(shù)A的百分比變化n=4更新從A_old=2000A_new=1000。使用方程1中的公式,攻擊者可利用該漏洞12.9%的yCurve合約余額(或大約7700萬(wàn)美元)。這種攻擊只可能在預(yù)定的參數(shù)A更新過(guò)程中進(jìn)行。Curve合約在正常操作下不易A的更改之前修補(bǔ)此漏洞是至關(guān)重要的(大幅向下調(diào)整A尤其危險(xiǎn))。Curve團(tuán)隊(duì)正在對(duì)A的程序進(jìn)行改進(jìn),這些改進(jìn)應(yīng)允許Curve合約以安全的方式繼續(xù)更新參數(shù)A平均數(shù)和代幣聯(lián)合曲線曲線與一組變量平均值之間的關(guān)系。在數(shù)學(xué)中,平均數(shù)(mean)是表示一組數(shù)據(jù)集中趨勢(shì)的量數(shù)。因此,如果x_1是n個(gè)數(shù)集合中最小的數(shù),x_n是最大的數(shù),則這個(gè)集合的平均數(shù)將呈現(xiàn)為介于x_1和x_n之間的中間值。兩種最常見(jiàn)的平均數(shù)類型是算術(shù)平均數(shù)和幾何平均數(shù)。AMM合約允許用戶交易任何組合的代幣,這樣AMMAMM設(shè)對(duì)于而Curve使用的是算術(shù)平均數(shù)和幾何平均數(shù)的加權(quán)平均數(shù),我稱之為Curve平均數(shù)。Curve平均數(shù)的權(quán)重由所謂的放大參數(shù)A決定。隨著A向無(wú)窮大方向增加,Curve的平均數(shù)收斂到mStable使用的算術(shù)平均數(shù)。相反,如果A設(shè)置為0,Curve的平均數(shù)將與Balancer和Uniswap使用的幾何平均數(shù)相同。對(duì)于A的中間值,Curve的代幣聯(lián)合曲線將位于這兩個(gè)極端的中間。圖1代幣聯(lián)合曲線圖1顯示了四種代幣聯(lián)合曲線。Uniswap保持幾何平均常數(shù),這產(chǎn)生了一個(gè)非常陡峭的曲率。mStable則是算術(shù)平均值常量,它是一條直線,而Curve則位于兩者之間。在參數(shù)值A(chǔ)=1時(shí),Curve類似于Uniswap,在A=10時(shí),Curve更接近于mStable。平均數(shù)和AMM合約持有的價(jià)值1,我們可以看到,所有四條曲線在距離圖形原點(diǎn)45我們可以利用這個(gè)交點(diǎn)到原點(diǎn)的距離,來(lái)快速測(cè)量AMM合約代幣投資組合的價(jià)值。合約持有的價(jià)值也將增加20%。這適用于我們所有的四種聯(lián)合曲線類型。當(dāng)我們考慮CurveCurveAA之后這個(gè)距離明顯減少,這將是一個(gè)嚴(yán)重的問(wèn)題。關(guān)于參數(shù)A的盈虧平衡更新再次參考圖1,假設(shè)Curve合約的代幣余額正好位于45度線的交點(diǎn)處。當(dāng)所有Curve代幣以一比一的價(jià)格比率交易時(shí),就會(huì)出現(xiàn)這種情況。從這個(gè)起點(diǎn)更新A時(shí),Curve從這一點(diǎn)開(kāi)始將參數(shù)設(shè)置A_old10改為A_new=1不會(huì)使Curve流動(dòng)性提供者(LP)面臨財(cái)務(wù)損失的風(fēng)險(xiǎn)。直覺(jué)上,如果初始余額不完全在交叉點(diǎn),但接近于這個(gè)交點(diǎn),則損失的風(fēng)險(xiǎn)仍然很小。關(guān)于參數(shù)A的虧損更新2。該圖說(shuō)明了當(dāng)更新A時(shí),攻擊者如何可能操縱初始條件以實(shí)現(xiàn)巨大的利潤(rùn)。為了便于說(shuō)明,我展示了從A_old10到A_new1的變化,而不是Swerve從A_old=1000到A_new=100的更新。然而,事實(shí)證明,漏洞的嚴(yán)重程Swerve15%。而一個(gè)完全優(yōu)化的攻擊將交易更極端的金額,從而36.9%的代幣庫(kù)存。圖2在惡意交易之間增加一個(gè)變化假設(shè)Curve合約余額最初位于45A_old=1010和1。如圖所示,這會(huì)改變曲線的形狀。最后,攻擊者以更低的價(jià)格買回他出售的代幣。此操作將使合約沿45代幣庫(kù)存的15%丟失。利用漏洞的可行性yesCurve合約要求提前幾天安排A的變更,并通過(guò)去中心化的鏈上治理流程達(dá)成共識(shí)。但是,一旦通過(guò)治理批準(zhǔn)了A中的更改,并且超過(guò)了激活截止日期,合約允許任何調(diào)用方觸發(fā)更新。因此,UniswapCurveACurve修復(fù)關(guān)于A更改的智能合約邏輯目前,Curve合約有兩個(gè)生產(chǎn)版本。對(duì)于未修補(bǔ)的舊版合約,上面提到的內(nèi)容就是漏洞的原理。而對(duì)于較新的合約,仍然存在一個(gè)潛在的漏洞,盡管其嚴(yán)重性要小的多。我將首先描述舊合約的建議更改。Curve合約在舊的Curve合約中,A的變化發(fā)生在一個(gè)大的離散步驟中。此外,合約邏輯允許攻擊者在單筆交易中以不同的A值執(zhí)行交易。特別是,攻擊者可以利用其初始交易來(lái)迫使庫(kù)存極度失衡,然后觸發(fā)A的變化,然后以更新后的A值執(zhí)行更多交易。這使攻擊者可執(zhí)行涉及數(shù)以億計(jì)資金量交易的整個(gè)攻擊,而不會(huì)涉及到風(fēng)險(xiǎn)。為了解決這個(gè)問(wèn)題,我建議更新舊的合約,以便只有受信任的多重簽名帳戶才能激活對(duì)A的更新。此外,激活A(yù)可重新排序交易,這樣他在更新A之前執(zhí)行一筆大交易,然后在A更新后執(zhí)行另一筆大交易。余額檢查可防止在合約處于意外不平衡狀態(tài)時(shí)激活對(duì)A的更改,這足以保護(hù)CurveLP免受此類攻擊。修復(fù)新的Curve合約在較新的Curve合約中,A的變化是在每次交易開(kāi)始前以一系列離散的小步驟逐個(gè)區(qū)塊中以較高的A值進(jìn)行初始交易,并在第二個(gè)區(qū)塊中以較低的A值進(jìn)行最終交A中,流氓礦工就可以繼續(xù)嘗試挖取兩個(gè)區(qū)塊序列。為了保護(hù)這些較新的合約,我建議將A中的步驟長(zhǎng)度減小到每個(gè)區(qū)塊不超過(guò)0.1%。為什么小的的步驟長(zhǎng)度有幫助?這涉及到一個(gè)我還沒(méi)有介紹的因素——Curve合約會(huì)收取一筆費(fèi)用,由于這筆費(fèi)用,任何交易都會(huì)導(dǎo)致代幣聯(lián)合曲線稍微偏離原點(diǎn)。這也適用于攻擊者的巨額交易,這使得攻擊的利潤(rùn)略有下降。如果A的變化足夠小,則完全優(yōu)化的攻擊所獲得的收益,將被攻擊者支付給合約的費(fèi)用所抵消。因此,攻擊者再也不可能通過(guò)在兩筆交易之間夾雜一個(gè)變化來(lái)獲利。關(guān)于安全審計(jì)和智能合約設(shè)計(jì)的經(jīng)驗(yàn)教訓(xùn)合約已經(jīng)過(guò)了多次安全審計(jì),在我寫這篇文章時(shí),Swerve合約剛剛通過(guò)了另一次審計(jì)。在我看來(lái),一個(gè)通用在此,智能合約操作將激活對(duì)A的更新。對(duì)于此漏洞,此模糊測(cè)試過(guò)程將揭示合約遭受災(zāi)難性損失的場(chǎng)景。然后,審計(jì)人員可以進(jìn)一步調(diào)查,以了解根本原因。力手段進(jìn)行審計(jì)。DeFi監(jiān)管安全案例:2018年據(jù)華爾街日?qǐng)?bào)報(bào)道,11月8日發(fā)布的新聞稿表示EtherDelta平臺(tái)作為未注冊(cè)的國(guó)家證券交易所進(jìn)行操作被罰款。SEC的命令,EtherDeltaERC20代幣二級(jí)市場(chǎng)交易的在線平臺(tái),這是一種通常在初始代幣發(fā)行(ICO)EtherDelta是未注冊(cè)的國(guó)家證券交易所。EtherDelta提供了一個(gè)市場(chǎng),通過(guò)結(jié)合使用訂單簿,顯示訂單的EtherDelta的智能合約經(jīng)過(guò)編碼以驗(yàn)證訂單消息,確認(rèn)訂單的條款和條件,執(zhí)行成對(duì)的18的用360ERC202017DAO報(bào)告后,幾乎所有通過(guò)EtherDelta平臺(tái)下達(dá)的訂單都進(jìn)行了交易,該報(bào)告得出結(jié)論認(rèn)為某些數(shù)字資產(chǎn)(DAO代幣)是證券,提供這些數(shù)字資產(chǎn)證券交易的平臺(tái)將受到監(jiān)管。SEC要求交易所根據(jù)豁免進(jìn)行注冊(cè)或運(yùn)營(yíng)。EtherDelta提供了各種數(shù)字資產(chǎn)證券的交易,但未根據(jù)豁免注冊(cè)為交易所或運(yùn)營(yíng)。SECStephanieAvakianEtherDelta既具有在線國(guó)家證券交易所的用戶界面,又具有底層功能,必須在美國(guó)證券交易委員會(huì)注冊(cè)或有資格獲得豁免?!盨EC執(zhí)法部門聯(lián)席主管史蒂文·佩金(StevenPeikin)表示:“我們正在見(jiàn)證使用分布式賬本技術(shù)在證券市場(chǎng)上進(jìn)行重大創(chuàng)新的時(shí)期?!薄暗菫榱吮Wo(hù)投資者,這項(xiàng)創(chuàng)新使美國(guó)證券交易委員會(huì)對(duì)數(shù)字市場(chǎng)進(jìn)行周密的監(jiān)督,并強(qiáng)制執(zhí)行現(xiàn)有法律?!盨EC之前曾針對(duì)未注冊(cè)的經(jīng)紀(jì)交易商和未注冊(cè)的ICO采取執(zhí)法行動(dòng),包括在EtherDelta上交易的一些代幣。在不承認(rèn)或否認(rèn)調(diào)查結(jié)果的情況下,Coburn同意了該命令,并同意支付300,000美元的非法所得,13,000美元的判決前利息和75,000美元的罰款。委員會(huì)的命令承認(rèn)了柯本的合作,委員會(huì)在決定不加重罰款時(shí)考慮了這一合作。重要原因分析:EtherDelta認(rèn)為是證券的數(shù)字貨幣:雖然交易掛SEC要求需要做實(shí)名認(rèn)證,AML和投資合格者驗(yàn)證.EtherDelta的運(yùn)營(yíng)團(tuán)隊(duì)中心化UniSwap的分配方法不同。SEC項(xiàng)目可以從這個(gè)事件吸取以下教訓(xùn)。DeFi(給社區(qū)).交易費(fèi)的收入應(yīng)該屬于所有生態(tài)的參與者,生態(tài)參與者可以通過(guò)DAO投票形式?jīng)Q定獎(jiǎng)勵(lì)多少資金給技術(shù)團(tuán)隊(duì)和運(yùn)營(yíng)團(tuán)隊(duì)。如果DeFi平臺(tái)需要有基于證券的業(yè)務(wù),就需要按照要求在對(duì)應(yīng)的政府監(jiān)管平臺(tái)登記或者申請(qǐng)豁免。另外,我們總結(jié)合規(guī)的DeFi項(xiàng)目還需要有下面的特征:金融特征:該協(xié)議必須明確針對(duì)金融應(yīng)用,例如信貸市場(chǎng),通證交換,衍生工具/合成資產(chǎn)發(fā)行或交換,資產(chǎn)管理或預(yù)測(cè)市場(chǎng)。無(wú)需許可:該代碼是開(kāi)源的,允許任何一方無(wú)需經(jīng)過(guò)第三方即可使用或在其之上進(jìn)行構(gòu)。匿名:用戶無(wú)需透露自己的身份。非托管:資產(chǎn)不由單個(gè)第三方托管。社區(qū)方式治理:?jiǎn)蝹€(gè)實(shí)體不擁有升級(jí)決策和管理特權(quán)。如果有的話,必須存在一個(gè)可以信任的方法把個(gè)體權(quán)利移交給社區(qū)。沒(méi)有預(yù)挖,沒(méi)有創(chuàng)始人獎(jiǎng)勵(lì),沒(méi)有私募。參與者都有相同的機(jī)會(huì)??梢宰宰C明清白,資金流向透明,系統(tǒng)償付能力鏈上可驗(yàn)證。項(xiàng)目的所有代碼,包括智能合約和客戶端代碼都通過(guò)第三方審計(jì)。DAppDAppApp和移動(dòng)應(yīng)用DApp都應(yīng)該至少執(zhí)行一次以下測(cè)試任務(wù):安全架構(gòu)分析和完整性。威脅分析是安全架構(gòu)分析的一個(gè)核心任務(wù),這方面的工具包括:微軟的威脅建模工具(/en-us/azure/security/develop/threat-modeling-tool):這個(gè)工具采用STRIDE威脅分類法,讓使用者可以輸入產(chǎn)品的系統(tǒng)架構(gòu),劃分信任邊界,從而列出自動(dòng)或手動(dòng)地列出各種安全威脅,來(lái)檢驗(yàn)產(chǎn)品在設(shè)計(jì)上是否對(duì)這些威脅都有足夠的防護(hù)措施。對(duì)應(yīng)系統(tǒng)架構(gòu)中所包含的微軟產(chǎn)品的部份,這個(gè)工具能夠自動(dòng)給出已知的威脅及相應(yīng)的防護(hù)措施。OWASP的威脅建模工具(/#/):與OWASP的其他項(xiàng)目一樣,威脅也是一個(gè)開(kāi)源項(xiàng)目。它與用戶的Github賬號(hào)對(duì)接,讓用戶可以直接在瀏覽器里進(jìn)行威脅分析。IriusRisk威脅模型平臺(tái)(/threat-modeling-tool/):這是一個(gè)功能強(qiáng)大的企業(yè)級(jí)威脅分析工具,包含了大部分常用架構(gòu)模塊所對(duì)應(yīng)的威脅清單。SecurityCompass的SDElements工具發(fā)流程的早期就把安全防護(hù)措施植入到系統(tǒng)中。靜態(tài)代碼掃描交互式源代碼安全檢測(cè)Synopsys的SecureAssist的Greenlight。批處理式源代碼安全掃描時(shí)所產(chǎn)生的安全隱患。這方面的工具包括:HCLAppScanSource(/products/appscan/offerings/source),MicroFocusFortifyStaticCodeAnalyzer(/en-us/products/static-code-analysis-sast/overview),Synopsys的Coverity(/software-integrity/security-testing/static-analysis-sast.html),Perforce的klocwork(/products/klocwork)等等。軟件組成分析的安全危脅。這方面的工具包括:Checkmarx的CxSCA(/products/software-composition-analysis),WhiteSource(/),Synopsys的BlackDucksis.html),等等。執(zhí)行代碼安全掃描StaticAnalysis(/products/binary-static-analysis-sast),的CodeSonarforBinaries/codesonar-sast-binary)等。動(dòng)態(tài)應(yīng)用掃描動(dòng)態(tài)應(yīng)用掃描是在程序的執(zhí)行過(guò)程中自動(dòng)地模擬惡意用戶用一些可能會(huì)造成信息HTTP/HTTPS協(xié)議的應(yīng)用尤其有效,因?yàn)檫@類應(yīng)用有眾所周知的攻擊類型,適合自動(dòng)掃描。常用的動(dòng)態(tài)掃描工具包括:需要安裝和單獨(dú)運(yùn)行的掃描軟件,比如HCL的AppScanStandardW3af(/andresriancho/w3af)等。可以單獨(dú)運(yùn)行也可以嵌入到DevOps流水線中的掃描軟件:FortifyWebInspect(/en-us/products/webinspect-dynamic-analysis-dast/),Rapid7appspider(/products/appspider/),的ZAP開(kāi)源工具(/www-project-zap/)等等。QualysApplicationScanning(/apps/web-app-scanning/),Rapid7 的 InsightAppSec(/products/insighta
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品保修合同
- 大型美食城招商合同范本
- 商住樓物業(yè)管理合同
- 汽車維修合同書范本
- 鍋爐工合同書
- 我要出租房屋租賃合同范本
- 室內(nèi)場(chǎng)景識(shí)別定位約束條件下的手機(jī)實(shí)例化AR方法研究
- 2025年外研版三年級(jí)起點(diǎn)七年級(jí)歷史下冊(cè)階段測(cè)試試卷含答案
- 2025年浙教新版九年級(jí)歷史下冊(cè)階段測(cè)試試卷含答案
- 2025年粵人版選修二地理上冊(cè)階段測(cè)試試卷
- 籃球俱樂(lè)部合伙協(xié)議
- 電力基建復(fù)工安全教育培訓(xùn)
- 2018注冊(cè)環(huán)保工程師考試公共基礎(chǔ)真題及答案
- 勞務(wù)經(jīng)紀(jì)人培訓(xùn)
- 如何提高售后服務(wù)的快速響應(yīng)能力
- 成人氧氣吸入療法-中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)
- Unit-3-Reading-and-thinking課文詳解課件-高中英語(yǔ)人教版必修第二冊(cè)
- 高數(shù)(大一上)期末試題及答案
- 婚介公司紅娘管理制度
- 煤礦電氣試驗(yàn)規(guī)程
- 物業(yè)客服培訓(xùn)課件PPT模板
評(píng)論
0/150
提交評(píng)論