亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種得分導(dǎo)向的智能合約模糊測試方法

        2022-07-01 08:17:22陳可欣劉嘉勇
        現(xiàn)代計(jì)算機(jī) 2022年8期
        關(guān)鍵詞:智能

        陳可欣,劉嘉勇,賈 鵬

        (四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,成都 610065)

        0 引言

        近年來,加密貨幣和區(qū)塊鏈技術(shù)在行業(yè)和學(xué)術(shù)界獲得了極大的普及和關(guān)注。區(qū)塊鏈的發(fā)展一共經(jīng)過了以下兩個階段:第一個階段主要解決不信任的情況下網(wǎng)絡(luò)對等方之間的安全轉(zhuǎn)賬問題。第二個階段出現(xiàn)了許多支持智能合約的增強(qiáng)型區(qū)塊鏈平臺,其中最受歡迎的平臺之一是以太坊,它使用圖靈完備的編程語言增強(qiáng)了區(qū)塊鏈平臺,使開發(fā)人員可以編寫智能合約和去中心化應(yīng)用程序。

        隨著以太坊的不斷發(fā)展,智能合約的數(shù)量也在急速增長。智能合約的概念最早是在1995年被提出的,是一種旨在以信息化方式傳播、驗(yàn)證或執(zhí)行合同的計(jì)算機(jī)協(xié)議。智能合約將與合約相關(guān)的所有條款以及邏輯全都編寫到一段代碼中去。智能合約可以進(jìn)行自我執(zhí)行以及自我驗(yàn)證,在執(zhí)行的過程中不需要人工進(jìn)行干預(yù)。然而,智能合約不斷發(fā)展的同時,其存在的安全漏洞也逐漸顯露。近年來,利用以太坊智能合約中的安全漏洞進(jìn)行攻擊的新聞報(bào)道越來越多。一個著名的事件就是針對去中心化的自 治 組 織 DAO (decentralized autonomous organization,DAO)的攻擊,造成了6000 萬美元的損失。智能合約易受攻擊的原因主要有以下幾個方面:

        (1)智能合約的運(yùn)行依賴于底層的區(qū)塊鏈平臺以及其他的協(xié)作合約,合約開發(fā)者沒能完全理解這些合約之間以及合約與底層區(qū)塊鏈平臺之間隱含的關(guān)系。

        (2)智能合約的編程語言與運(yùn)行環(huán)境對于合約開發(fā)者來說都是全新的,這些工具本身也還不夠成熟,合約開發(fā)者沒能很好地處理這些工具自身的不足。

        (3)區(qū)塊鏈具有不可篡改的性質(zhì),智能合約在被部署至區(qū)塊鏈平臺之后難以更新。模糊測試是一種發(fā)現(xiàn)軟件漏洞的有效方法,其基本原理是,在很少或根本不知道文件的底層語法結(jié)構(gòu)的情況下,隨機(jī)地改變輸入文件的某些部分生成變異文件,通過變異文件嘗試觸發(fā)目標(biāo)程序的異常和安全漏洞。該技術(shù)自出現(xiàn)以來得到了廣泛的應(yīng)用,并發(fā)現(xiàn)了大量的軟件漏洞。

        因?yàn)槟:郎y試技術(shù)在挖掘漏洞方面的高效性,開始有研究者將模糊測試技術(shù)應(yīng)用在智能合約的漏洞挖掘場景中,并且提出了一些針對智能合約的漏洞挖掘工具,如Nguyen 等提出的sFuzz、Jiang 等提出 的ContractFuzzer、Luu 等提出的Oyente 等。然而,現(xiàn)有的智能合約漏洞挖掘工具還存在著一些不足之處:sFuzz 結(jié)合了AFL(american fuzzy lop)模糊器中的策略,是一個覆蓋率引導(dǎo)的智能合約模糊測試工具,雖然其在實(shí)現(xiàn)高代碼覆蓋率和發(fā)現(xiàn)漏洞方面是有效的,但并沒有考慮到種子的優(yōu)劣,均等對待每個種子,會導(dǎo)致花費(fèi)很多時間在低質(zhì)量的種子上。Oyente 將需要分析的合約的字節(jié)碼和當(dāng)前以太坊的全局狀態(tài)作為輸入,檢測合約是否存在安全問題,并向用戶輸入有問題的符號路徑。但是,由于符號執(zhí)行的路徑深度限制,驗(yàn)證所有可能的路徑會遇到路徑爆炸問題,當(dāng)路徑約束復(fù)雜且難以解決時,符號執(zhí)行可能無法探索深層路徑,并且具有較差的可伸縮性。ContractFuzzer 使用預(yù)先部署的合約構(gòu)建網(wǎng)絡(luò)并生成事務(wù)以運(yùn)行智能合約,基于一組預(yù)定義的參數(shù)值生成測試用例,并以一組特定于智能合約的測試用例來判斷是否存在某種漏洞。但ContractFuzzer 只是簡單地通過輸入大量的參數(shù)來發(fā)現(xiàn)漏洞,并不能有效地觸發(fā)更深層次的路徑。

        針對上述智能合約模糊測試工具存在的不足,本文提出了一種效率導(dǎo)向的智能合約模糊測試工具ConFuzz。根據(jù)測試用例的執(zhí)行速度、到達(dá)的路徑深度等因素給測試用例進(jìn)行打分,基于分值來調(diào)整測試用例在havoc 階段的用時。實(shí)驗(yàn)結(jié)果表明,ConFuzz 可以在更短的時間里檢測出更多的漏洞,有效提高了針對智能合約的模糊測試的效率。

        本文的組織結(jié)構(gòu)如下:第一節(jié)介紹智能合約的一些常見漏洞。第二節(jié)對ConFuzz的實(shí)現(xiàn)方式進(jìn)行詳細(xì)介紹。第三節(jié)給出了實(shí)驗(yàn)結(jié)果,并與其他方法進(jìn)行了比較。最后,在第四節(jié)中進(jìn)行了總結(jié)并對未來工作進(jìn)行了展望。

        1 智能合約漏洞

        在本節(jié)中,將詳細(xì)介紹智能合約幾種常見漏洞。

        1.1 可重入漏洞

        當(dāng)存在重入漏洞的合約將以太幣發(fā)送給惡意的合約地址時(惡意合約地址來源于輸入或者是調(diào)用者地址),攻擊者可以通過重入漏洞重新進(jìn)入存在漏洞的合約。此時漏洞合約雖然已經(jīng)發(fā)送了以太幣完成交易,但合約狀態(tài)還未更新,攻擊者可以執(zhí)行一些開發(fā)人員不希望執(zhí)行的合約邏輯,比如利用漏洞合約中的轉(zhuǎn)賬操作向攻擊者賬戶進(jìn)行非法轉(zhuǎn)賬。

        1.2 無燃?xì)獍l(fā)送

        以太坊中的每一筆交易都是按照智能合約的規(guī)定一步一步執(zhí)行命令的,每執(zhí)行一個命令都會產(chǎn)生一定的消耗,這個消耗用燃?xì)猓╣as)作為單位。另外,不同命令消耗的燃?xì)猓╣as)數(shù)量也不相同。每一筆交易都被要求包含一個燃?xì)馍舷蓿╣as limit),該上限代表是這筆交易允許消耗的燃?xì)獾淖畲笾担梢岳斫鉃榻灰追?wù)本身的服務(wù)費(fèi)。當(dāng)合約使用send 函數(shù)發(fā)送以太幣到某一合約時,接收合約中的回退函數(shù)將會被調(diào)用,如果回退函數(shù)執(zhí)行過程中消耗的燃?xì)獯笥?300,就會觸發(fā)一個異常,導(dǎo)致轉(zhuǎn)賬失敗,但是原有合約會繼續(xù)執(zhí)行。該漏洞產(chǎn)生的根本原因是使用send 調(diào)用其他合約函數(shù)時,在執(zhí)行期間觸發(fā)的異常不會影響原有函數(shù)的執(zhí)行。

        1.3 異常無序

        智能合約間的相互調(diào)用除了直接調(diào)用以外還有通過函數(shù)的嵌套調(diào)用方式。如果每一個調(diào)用都是對合約函數(shù)的直接調(diào)用,當(dāng)異常發(fā)生時,包括以太幣轉(zhuǎn)賬在內(nèi)的所有交易都會被還原,并返回false。但是,當(dāng)合約間以函數(shù)的方式嵌套調(diào)用其他合約時,由于solidity語言中沒有一個一致的方法去處理異常,交易的fallback 便會在該調(diào)用函數(shù)處停止并返回false。發(fā)起調(diào)用的合約可能無法獲取被調(diào)用的合約中的異常信息。這種處理異常的不一致性會影響到合約的安全性。比如,如果僅僅根據(jù)沒有異常拋出就認(rèn)為轉(zhuǎn)賬是成功的,這是很不安全的。

        1.4 DelegateCall受控漏洞

        DelegateCall 函數(shù)的目的是用于實(shí)現(xiàn)類似于代碼庫的調(diào)用。它可以讓合約在不用傳輸自身狀態(tài)的情況下使用其他合約的代碼。但是當(dāng)函數(shù)的參數(shù)是由當(dāng)前調(diào)用者指定時,攻擊者便可以用合約擁有者的身份執(zhí)行其他合約的任意函數(shù)。利用這個漏洞進(jìn)行攻擊的典型事件是對錢包(wallet)合約的攻擊,該攻擊導(dǎo)致合約的擁有者損失了3000萬美元。

        1.5 塊依賴和時間戳依賴

        當(dāng)一個智能合約使用區(qū)塊狀態(tài)變量作為發(fā)送以太幣等關(guān)鍵操作的執(zhí)行條件,或者作為生成隨機(jī)數(shù)的來源時,就有可能存在此類型漏洞。區(qū)塊狀態(tài)變量包括時間戳、深度、燃?xì)馍舷薜?,由于一個區(qū)塊的時間戳是由礦工挖礦時的系統(tǒng)決定的,礦工可以事先計(jì)算出對自己有利的時間戳,并且在挖礦時將時間設(shè)置成對自己有利的時間。因此一個惡意的礦工能夠通過修改區(qū)塊的時間戳獲取利益。

        1.6 以太凍結(jié)

        以太凍結(jié)漏洞產(chǎn)生的原因是有些合約用于接受以太幣,并轉(zhuǎn)賬給其他地址,但是,這些合約本身并沒有實(shí)現(xiàn)一個轉(zhuǎn)賬函數(shù),而是通過調(diào)用其他合約中的轉(zhuǎn)賬函數(shù)實(shí)現(xiàn)轉(zhuǎn)賬的功能。如果這些提供轉(zhuǎn)賬功能的合約執(zhí)行了銷毀操作的話,那么,調(diào)用了這個轉(zhuǎn)賬功能的合約就有可能發(fā)生以太幣被凍結(jié)的情況。當(dāng)以太幣被凍結(jié)后,因?yàn)楹霞s的代碼無法被修改,也就無法進(jìn)行轉(zhuǎn)出操作。

        1.7 算術(shù)上溢/下溢

        與其他的編程語言一樣,在solidity 語言中,合約余額的檢查中如果直接使用了加減乘除而沒做額外的判斷時,就會存在算術(shù)溢出隱患,攻擊者可以通過傳入超大數(shù)字導(dǎo)致溢出繞過判斷,這樣就可以轉(zhuǎn)走巨額代幣。

        2 智能合約模糊測試實(shí)現(xiàn)

        在本節(jié)中,首先定義智能合約模糊測試中存在的問題,然后逐步詳細(xì)介紹本文的方法。

        2.1 問題描述

        在AFL 的變異機(jī)制中,維護(hù)了一個種子隊(duì)列,每次把種子隊(duì)列中的文件取出來后,對其進(jìn)行變異然后投送給目標(biāo)程序。如表1 所示,AFL 的文件變異方法主要有6 種,其中前4 種變異方式由于不存在隨機(jī)性,所以也叫作確定性變異,后2種因?yàn)榇嬖陔S機(jī)性,稱為非確定性變異。當(dāng)種子隊(duì)列中的所有文件變異結(jié)束后,代表完成了一個cycle,進(jìn)入下一輪變異。現(xiàn)有智能合約模糊測試工具沒有考慮種子的重要程度,所有的種子都會得到相同的變異時間,這一定程度上會影響Fuzz的效率。

        表1 AFL文件變異方法

        2.2 ConFuzz整體結(jié)構(gòu)

        ConFuzz的整體結(jié)構(gòu)如圖1所示。

        圖1 ConFuzz的整體結(jié)構(gòu)

        ConFuzz 從初始種子集中選取種子,根據(jù)表1 所示的種子變異算法對種子進(jìn)行變異以生成fuzz智能合約的測試用例。同時其監(jiān)視測試用例的執(zhí)行,將fuzz 過程中的覆蓋率、分支數(shù)、每秒執(zhí)行的變異種子數(shù)、種子到達(dá)的路徑深度等信息記錄在執(zhí)行日志中。如果發(fā)現(xiàn)了程序崩潰,ConFuzz 就檢查執(zhí)行日志并報(bào)告漏洞類型。如果發(fā)現(xiàn)了新的路徑,那么把到達(dá)該路徑的測試用例添加到種子池中做進(jìn)一步的變異。在種子變異算法上,ConFuzz 根據(jù)種子的執(zhí)行速度、到達(dá)的路徑深度等因素給種子進(jìn)行打分,根據(jù)分值,來調(diào)整在非確定性變異階段havoc 方法的用時。換而言之,打分機(jī)制的根本目的使得執(zhí)行時間短、代碼覆蓋高、到達(dá)更深路徑深度的種子執(zhí)行的時間更長,擁有更多的havoc變異機(jī)會。

        2.3 ConFuzz打分機(jī)制

        如2.1 節(jié)所述,為了解決sFuzz 在非確定性變異階段沒有考慮種子重要程度的問題,ConFuzz 提出了一種打分機(jī)制,來實(shí)現(xiàn)對種子重要性的評估,并且給予重要程度高的種子更多的變異時間。打分機(jī)制被廣泛地應(yīng)用于衡量候選種子質(zhì)量,在AFL、Li 等提出的vFuzz等著名模糊測試框架中,都有運(yùn)用。許多實(shí)踐表明,通過打分機(jī)制,能讓質(zhì)量更高的種子優(yōu)先變異,顯著提高fuzz過程的效率。

        ConFuzz 構(gòu)造了一個名為calculate_score 的函數(shù)對種子進(jìn)行打分,調(diào)整havoc 階段用時,如算法1 所示。第2 行從種子樣本池中選擇種子,遍歷池中的所有種子。第3 到4 行是第一個打分判斷條件,首先計(jì)算出一個速度的平均值,并以這個平均值作為后續(xù)打分的標(biāo)準(zhǔn),即,將每個種子的執(zhí)行速度乘以某個(0,4]之間的數(shù),并將結(jié)果與平均值比較。運(yùn)行快速種子的成本更低,所以ConFuzz給它們更多的時間,如果結(jié)果大于平均值,乘的數(shù)越小的種子,代表該種子的運(yùn)行速度越快,給的分就越高;反之,如果小于平均值,那么乘的數(shù)越大的種子,代表該種子的運(yùn)行速度越慢,得分就越低。第5 到8行是第二個打分判斷條件,根據(jù)測試用例到達(dá)的深度來進(jìn)行打分,能夠到達(dá)更深層次的測試用例更可能揭示無法發(fā)現(xiàn)的漏洞,到達(dá)的深度越深,也就是覆蓋率越高,得分就越高。值得注意的是,在第7行,增加了一個判斷條件,如果最大深度小于3,就不給該種子打分。這樣做有兩個原因:一是因?yàn)樯疃葴\的待測的合約小,分支少,對小合約用大量的樣本進(jìn)行fuzz 并不能提高發(fā)現(xiàn)漏洞的機(jī)會;二是因?yàn)殡S機(jī)性變異過于盲目,變異出到達(dá)更深路徑的種子概率過低。通過加入打分機(jī)制,能夠保證執(zhí)行速度快、覆蓋深度深的種子具有更多的變異次數(shù)、更長的havoc 變異時間,進(jìn)而就有更大的幾率發(fā)現(xiàn)更多的漏洞。

        3 實(shí)驗(yàn)與結(jié)果分析

        在本節(jié)中,通過實(shí)驗(yàn)將ConFuzz 與Contract Fuzzer 和sFuzz 這兩個智能合約模糊測試工具進(jìn)行比較。

        3.1 實(shí)驗(yàn)準(zhǔn)備

        本文的實(shí)驗(yàn)是在配有8GB 內(nèi)存的Ubuntu18.04.1 LTS 上運(yùn)行的。測試合約一共有381 個,都 是 從EtherScan網(wǎng) 站 上 爬 取 的。EtherScan 是2015年推出的一個以太坊區(qū)塊探索和分析的分布式智能合約平臺, 作為探索以太坊的窗口,可以查看合約信息、交易信息等。

        3.2 結(jié)果分析

        ConFuzz 一共測試了381 個合約,共有兩種類型的賬戶去調(diào)用這些合約,包括一個普通賬戶和一個專門測試可重入漏洞的賬戶。每個合約測試時間為1 min,共測試了三次,計(jì)算三次的平均值,結(jié)果如表2所示。其中表格第一列列出了ConFuzz測出的漏洞類型,第二、三列分別列出了該類型漏洞的數(shù)量以及占漏洞總數(shù)的百分比,第四列是該類型漏洞的真陽性率,即ConFuzz 檢測出來的存在該漏洞的合約數(shù)除以經(jīng)驗(yàn)證所有存在該漏洞的合約數(shù)。

        表2 ConFuzz漏洞測試結(jié)果

        可以看到,對于可重入漏洞、無氣發(fā)送、Delegatecall 受控漏洞、異常無序、算術(shù)上溢、算數(shù)下溢這六種類型的漏洞來說,每一個被Confuzz 測出來的漏洞經(jīng)過人工檢測都是真實(shí)存在的,不存在誤報(bào)。而對于塊依賴和時間戳依賴漏洞,ConFuzz 報(bào)告的漏洞中,分別有2 個和4個是誤報(bào),這兩類漏洞產(chǎn)生漏報(bào)的原因是相同的,都是因?yàn)閷^(qū)塊編號或時間戳分配給全局變量,但它們與以太發(fā)送過程無關(guān)。

        為了對比三個工具在速度上的差異,在381個合約中隨機(jī)抽樣100個合約,三個工具的執(zhí)行速度比較如圖2所示。

        圖2 三種工具的速度比較

        圖2三種工具的速度比較。橫軸代表不同的合約,縱軸代表變異樣本執(zhí)行的速度,即一分鐘內(nèi)生成和執(zhí)行的變異樣本的平均數(shù)。為了直觀清晰地看出結(jié)果,將合約樣本數(shù)量進(jìn)行遞增排序。由于ContractFuzzer 平均每秒只生成和執(zhí)行0.1 個測試用例,所以沒有在圖上表現(xiàn)出來。ContractFuzzer 速度明顯偏慢的原因主要有兩個:

        (1)ContractFuzzer 維護(hù)了一個龐大又復(fù)雜的系統(tǒng),包括一個線上的模糊測試工具和線下的以太坊虛擬機(jī)(ethereumvirtual machine,EVM)插樁工具,而Confuzz 不用維護(hù)和模擬整個區(qū)塊鏈網(wǎng)絡(luò)。

        (2)ContractFuzzer 的大部分時間花費(fèi)在對合約的靜態(tài)分析構(gòu)建合約池方面,而Confuzz 不需要進(jìn)行靜態(tài)分析提取函數(shù)選擇器。

        從圖2 可以看出,對隨機(jī)抽樣的100 個合約中的大部分合約來說,ConFuzz 的執(zhí)行速度比sFuzz快。但是對于某些合約,sFuzz的執(zhí)行速度比ConFuzz更快。這是因?yàn)榇嬖谝恍┬『霞s,在第一輪的確定性變異階段就可以fuzz 完成,無法進(jìn)入第二輪的非確定性變異階段。

        同時,實(shí)驗(yàn)計(jì)算381 個合約的平均執(zhí)行速度,結(jié)果表明,ConFuzz 比sFuzz 執(zhí)行的速度提高了8.03%。ConFuzz 速度提高的原因主要有兩個方面。

        (1)增加了打分機(jī)制,使得執(zhí)行速度快的樣本擁有了更多的havoc 時間,可以變異出更多的執(zhí)行速度快的樣本。

        (2)由于速度慢、代碼覆蓋深度淺的樣本得分低,所以對這些樣本花費(fèi)的時間更少,就有更多的時間進(jìn)行有效的樣本變異,執(zhí)行更多效果好的樣本。

        實(shí)驗(yàn)結(jié)果表明,Confuzz 在漏洞挖掘方面相較ContractFuzzer 測出的漏洞數(shù)量更多、準(zhǔn)確率更高、更可靠;在速度上Confuzz 比sFuzz 更快,在相同的時間內(nèi)可以執(zhí)行更多的有效種子樣本,更高效。

        4 結(jié)語

        隨著區(qū)塊鏈和智能合約技術(shù)的發(fā)展,數(shù)百萬智能合約被部署在區(qū)塊鏈平臺上,以實(shí)現(xiàn)分散應(yīng)用的構(gòu)建。然而,智能合約存在的安全漏洞對其未來的發(fā)展構(gòu)成了巨大威脅。本文提出了一個基于打分機(jī)制的智能合約模糊測試工具ConFuzz。實(shí)驗(yàn)結(jié)果表明,ConFuzz 能有效地發(fā)現(xiàn)智能合約存在的8種類型的漏洞,是高效、快速、準(zhǔn)確度高的智能合約模糊測試工具。

        由于ConFuzz 是根據(jù)合約的jumpi 指令計(jì)算合約分支的,如果一個簡單的合約不含有jumpi指令,ConFuzz 就會跳過而不去測試它,從而無法發(fā)現(xiàn)其存在的安全漏洞。未來還會進(jìn)一步考慮這種情況,使得ConFuzz也能有效地測試簡單的合約。區(qū)塊鏈和智能合約仍在不斷地發(fā)展中,越來越多的智能合約被部署。因此,智能合約的安全漏洞問題不容忽視,智能合約的未來將專注于解決這些挑戰(zhàn)。

        猜你喜歡
        智能
        智能與自主
        讓紙變得智能
        一種智能微耕機(jī)的研發(fā)
        智能制造 反思與期望
        智能前沿
        文苑(2018年23期)2018-12-14 01:06:06
        智能前沿
        文苑(2018年19期)2018-11-09 01:30:14
        智能前沿
        文苑(2018年17期)2018-11-09 01:29:26
        智能前沿
        文苑(2018年21期)2018-11-09 01:22:32
        智能制造·AI未來
        商周刊(2018年18期)2018-09-21 09:14:46
        爭渡智能石化
        能源(2018年4期)2018-05-19 01:53:44
        99久热re在线精品99 6热视频| 亚洲毛片在线观看免费| 未发育成型小奶头毛片av| 最新高清无码专区| 91久久精品无码人妻系列| 蜜桃在线观看视频在线观看| 熟女中文字幕一区二区三区| 消息称老熟妇乱视频一区二区| 亚洲成在人线久久综合| 毛片av中文字幕一区二区| 国产三级黄色免费网站| 巨茎中出肉欲人妻在线视频 | 日韩精品专区av无码| 国产成人无码av在线播放dvd| 亚洲香蕉毛片久久网站老妇人| 亚洲国产av综合一区| 国内精品久久久久国产盗摄| 少妇高潮惨叫久久久久久| 99久久久久久亚洲精品| 美艳善良的丝袜高跟美腿| 久久久久亚洲av成人网人人网站| 国产精品刺激好大好爽视频| 亚洲成人色黄网站久久| 亚洲国产成人极品综合| 黑人玩弄漂亮少妇高潮大叫| 亚洲国产午夜精品乱码| 最新中文字幕一区二区| 精品国产精品国产偷麻豆| 永久免费无码av在线网站| 无码av免费精品一区二区三区| 亚洲一二三四五中文字幕| 无码人妻h动漫中文字幕| 又粗又大又黄又爽的免费视频 | 亚洲国产精品无码久久久| 亚洲综合av在线在线播放| 国产一级片内射在线视频| 美女午夜福利视频网址| 欧美成人片一区二区三区| 精精国产xxx在线视频app| 人妖在线一区二区三区| 国产尤物av尤物在线观看|