• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于蛻變測試的區(qū)塊鏈智能合約漏洞檢測方法

    2023-11-19 06:53:18陳錦富王震鑫蔡賽華馮喬偉陳宇豪許容天PatrickKwakuKudjo
    通信學報 2023年10期
    關(guān)鍵詞:安全漏洞測試用例合約

    陳錦富,王震鑫,蔡賽華,馮喬偉,陳宇豪,許容天,Patrick Kwaku Kudjo

    (1.江蘇大學計算機科學與通信工程學院,江蘇 鎮(zhèn)江 212013;2.江蘇省工業(yè)網(wǎng)絡安全技術(shù)重點實驗室,江蘇 鎮(zhèn)江 212013;3.威斯康星國際大學學院商業(yè)計算系,阿克拉 RE 00233)

    0 引言

    隨著區(qū)塊鏈的發(fā)展,智能合約的使用得到了極大的普及[1]。由于不需要第三方就可以直接被調(diào)用并且自動執(zhí)行交易[2-4],智能合約的影響力已經(jīng)擴散到很多方面。同時,針對智能合約的攻擊造成經(jīng)濟損失的風險也在逐漸提升,與傳統(tǒng)的分布式應用程序平臺不同的是,區(qū)塊鏈的智能合約平臺在開放的網(wǎng)絡中運行,任何用戶都可以參與其中。這就導致了任意存在惡意的節(jié)點都可能利用一些安全漏洞非法地從智能合約中獲利[5]。

    目前,以太坊智能合約[6]安全事故發(fā)生的頻率逐年增加,每一次安全問題帶來的破壞力都是巨大的,這不僅對市場造成了毀滅性的打擊,還使用戶對智能合約的安全性產(chǎn)生懷疑。TheDao 事件[7-8]是以太坊歷史上最著名的安全事件,它導致了以太坊公鏈的硬分叉。

    雖然已經(jīng)發(fā)現(xiàn)了智能合約安全漏洞的多種類型[9],但是這些漏洞通常在編寫智能合約代碼時易被忽視或者在合約分析時沒有完全被檢測出來,因此仍然有大量的智能合約存在安全漏洞[10-11]。到目前為止,研究人員已經(jīng)提出了多款針對智能合約的測試工具[12-13],如SmartDec 開發(fā)的分析工具SmartCheck[14],SRI 系統(tǒng)實驗室開發(fā)的Securify 分析工具[15],Badruddoja等[16]開發(fā)的Oyente 靜態(tài)分析工具,F(xiàn)eist 等[17]提出的智能合約分析工具Slither。

    一般來說,區(qū)塊鏈模型由數(shù)據(jù)層、網(wǎng)絡層、共識層、合約層、應用層組成,共識層中封裝了網(wǎng)絡節(jié)點之間的共識算法以及激勵機制,在合約部署的調(diào)用過程中,數(shù)據(jù)存儲在節(jié)點中的順序與優(yōu)先級均服從共識機制的算法,因此調(diào)用智能合約需要額外的支出以保證各節(jié)點之間的協(xié)同和共識。以以太坊為例,調(diào)用智能合約涉及計算資源gas 的支付,它與以太幣之間存在較復雜的換算標準,因此在動態(tài)測試中獲取測試預言時將會面臨更大的困難[18-19],這將導致獲取預期結(jié)果消耗的資源代價過大或無法獲取預期結(jié)果。

    綜上,本文提出了基于蛻變測試(MT,metamorphic testing)的方法用于檢測智能合約的安全漏洞。通過分析多種類型的智能合約安全漏洞,設(shè)計相應的蛻變關(guān)系,將生成的測試用例分為源測試用例和后續(xù)測試用例,并分別在部署的智能合約中執(zhí)行,進而驗證兩組測試用例執(zhí)行的結(jié)果是否符合蛻變關(guān)系。

    本文的主要貢獻如下。

    1) 提出了一種基于蛻變測試的區(qū)塊鏈智能合約漏洞檢測方法,通過收集智能合約實例驗證測試結(jié)果是否符合蛻變關(guān)系,從而判斷智能合約是否存在相應的安全漏洞。

    2) 從區(qū)塊鏈智能合約漏洞觸發(fā)原理的角度出發(fā),提出了面向區(qū)塊鏈智能合約安全漏洞的蛻變關(guān)系設(shè)計方法,并根據(jù)此方法設(shè)計了6 種適于智能合約安全漏洞測試的蛻變關(guān)系。

    1 相關(guān)工作

    由于區(qū)塊鏈具有不可篡改的特性,為了在智能合約被部署前盡可能地檢測智能合約是否存在安全風險,國內(nèi)外研究人員對智能合約分析工具進行了相關(guān)的研究。

    由 SmartDec 開發(fā)的智能合約分析工具SmartCheck[18]通過將Solidity 源代碼直接轉(zhuǎn)換為基于XML 的中間表示,然后根據(jù)XPath 模式檢查中間表示以識別潛在的安全漏洞,這種方法缺乏準確性,因為某些錯誤不能表示為XPath 模式。例如,重入攻擊漏洞很難表示為XPath 模式,因此不會被檢測到。此外,由于Smartcheck 使用XPath 模式來檢測某些bug 的特定語法,因此即使bug 片段語法發(fā)生細微變化,也不會與XPath 模式匹配。由SRI系統(tǒng)實驗室開發(fā)的Securify[19]通過解析和反編譯EVM 字節(jié)碼,然后將生成的代碼轉(zhuǎn)換為語義事實,最后將事實與預定義的模式列表相匹配以檢測安全漏洞,但是Securify 無法檢測到重入、未經(jīng)檢查的發(fā)送、未處理的異常,還存在TOD 誤報的問題。根據(jù)研究發(fā)現(xiàn),Securify 報告的誤報是因為過度的近似執(zhí)行[20]。此外,Grieco 等[21]提出使用模糊測試對智能合約安全漏洞進行檢測的方法Echidna,該方法使用靜態(tài)分析框架Slither編譯合約并對其進行預處理,處理并識別智能合約中的重要常量和函數(shù),然后進行模糊測試。該方法需要檢測隨機交易中的違規(guī)屬性,這使對違規(guī)屬性的定義顯得非常重要。在軟件測試中,預言問題會經(jīng)常伴隨著測試軟件類型的多樣化出現(xiàn),有時難以對隨機的測試用例得出的結(jié)果進行判斷。因此,本文將使用蛻變測試解決在區(qū)塊鏈智能合約領(lǐng)域中出現(xiàn)的預言問題。

    蛻變測試與其他智能合約檢測方法的優(yōu)勢對比如表1 所示。

    表1 蛻變測試與其他智能合約檢測方法的優(yōu)勢對比

    2 預備工作

    本文所提方法主要基于區(qū)塊鏈智能合約漏洞分析和蛻變測試,下面針對相關(guān)概念和預備工作進行介紹。

    2.1 蛻變測試分析以及蛻變關(guān)系的設(shè)計

    針對區(qū)塊鏈軟件的測試普遍面臨預言問題。通常,在執(zhí)行測試用例x之后,需要一種稱為測試預言的系統(tǒng)機制來檢查執(zhí)行結(jié)果。如果執(zhí)行結(jié)果與預期結(jié)果不一致,說明x是導致失敗的測試用例;否則,說明x不是導致失敗的測試用例。然而,在許多現(xiàn)實測試中,測試預言可能不存在,或者它可能存在但資源限制使其無法使用。當預言問題發(fā)生時,許多可靠測試集問題策略的適用性和有效性都會變得有限。

    目前,蛻變測試被廣泛應用于多個場景,具有代表性的是將蛻變測試應用于機器學習分類器[22]。在Weka3.5.7版本上進行了測試,以k-最近鄰(KNN,k-nearest neighbor)和樸素貝葉斯分類器(NBC,naive Bayesian classifier)的實現(xiàn)為例。通過改變算法的實現(xiàn)來注入漏洞,然后使用交叉驗證和蛻變測試方法來檢測漏洞。實驗證明,一些錯誤很難通過交叉驗證檢測到,但可以通過蛻變測試檢測到。

    蛻變測試的核心元素是一組蛻變關(guān)系(MR,metamorphic relation)[23],它是與多個輸入及其預期輸出相關(guān)的目標函數(shù)或算法的必要屬性。在實現(xiàn)蛻變測試時,首先生成一些程序輸入(稱為源輸入)作為原始測試用例,在此基礎(chǔ)上使用蛻變關(guān)系生成新的輸入作為后續(xù)測試用例。蛻變測試會根據(jù)相應的蛻變關(guān)系驗證源測試用例和后續(xù)測試用例的輸出。

    基于上述的指導思想,在區(qū)塊鏈智能合約中構(gòu)建蛻變關(guān)系需要滿足以下兩點特性。

    1) 針對區(qū)塊鏈智能合約的蛻變測試中,蛻變關(guān)系是它的核心元素。

    2) 蛻變關(guān)系的生成,需要確定多個輸入及其預期輸出的目標函數(shù)或算法。

    針對這兩點特性,需要對待測的智能合約進行處理和分析,通過處理確定目標算法,作為構(gòu)建蛻變關(guān)系的依據(jù)。

    2.2 智能合約整型溢出漏洞原理

    使用蛻變測試方法,通過設(shè)計蛻變關(guān)系的多樣性可以檢測多種類型的漏洞。在此之前,需要對相應類型的漏洞原理進行分析。

    在區(qū)塊鏈中,整型溢出漏洞是最常見同樣也是非常嚴重的安全漏洞,它導致的經(jīng)濟損失在區(qū)塊鏈領(lǐng)域中占比很高。

    在solidity 語言中,整型變量支持的整數(shù)類型以8 bit 為步長遞增,定義的范圍為28~2256,在定義時沒有特別說明的整型變量是256 bit。如圖1 所示,一個uint8 類型變量可以存儲的數(shù)據(jù)范圍為[0,28-1]。這意味著在智能合約的使用中,通過算數(shù)操作使變量存儲的內(nèi)容超過整型定義的上限或下限(變量x1在算數(shù)操作后溢出到x2的位置),那么將會導致合約執(zhí)行的結(jié)果發(fā)生錯誤,對使用合約的用戶都將造成巨大損失。

    圖1 智能合約中溢出漏洞的觸發(fā)原理

    存在此類漏洞的智能合約通常出現(xiàn)在交易轉(zhuǎn)賬、代幣發(fā)行等智能合約中。根據(jù)國家區(qū)塊鏈漏洞庫中近年來收錄的有關(guān)整型溢出的漏洞案例可知,多數(shù)受到攻擊的智能合約為通過代幣發(fā)行的整型溢出漏洞造成項目增發(fā)無限量代幣,它們通常與存儲代幣的參數(shù)未進行溢出漏洞的檢查相關(guān)。

    2.3 智能合約重入攻擊漏洞原理

    重入攻擊是區(qū)塊鏈系統(tǒng)早期最著名同時也是危害性最大的攻擊方式之一[24]。近幾年來,重入攻擊對區(qū)塊鏈造成了巨大的經(jīng)濟損失。在以太坊的智能合約中,可以聲明一個不帶任何參數(shù)和返回值的匿名函數(shù),稱為fallback 函數(shù),當對這個合約發(fā)送消息時,如果沒有找到相匹配的函數(shù)就會調(diào)用fallback 函數(shù)。如圖2 所示,攻擊者調(diào)用攻擊合約,在被攻擊合約更新攻擊者的余額之前調(diào)用fallback函數(shù),fallback 函數(shù)再次調(diào)用取款方法,然后繼續(xù)循環(huán)上述流程,直至攻擊合約中的資源被消耗完畢或攻擊合約中的余額被完全盜取。

    根據(jù)solidity 的定義,向合約發(fā)送send、transfer、call 消息時都會調(diào)用fallback 函數(shù),不同的是send和transfer 有2 300 gas 的限制,傳遞給fallback 函數(shù)的gas 只用于日志的記錄。因此,如果增加其他操作則可能會超過gas 的限制。而call 則會把剩余的gas 都傳遞給fallback 函數(shù),使其可能會擁有足夠的gas 進行循環(huán)調(diào)用和使用其他方法進行攻擊。

    3 區(qū)塊鏈智能合約蛻變測試方法

    本節(jié)將在傳統(tǒng)軟件的蛻變測試基礎(chǔ)上,結(jié)合區(qū)塊鏈智能合約的特點,與傳統(tǒng)蛻變測試的流程融合后設(shè)計出適合智能合約的蛻變測試框架。

    3.1 區(qū)塊鏈智能合約的蛻變測試特點

    區(qū)塊鏈系統(tǒng)中,智能合約有“公開透明”“不可篡改”的特點。隨著區(qū)塊鏈的發(fā)展,智能合約的類型更加多元,可實現(xiàn)的功能也更加豐富,因此帶來的安全缺陷也更加多樣。這意味著在針對智能合約的整個蛻變測試中,需要對智能合約進行完整的分析或預處理,包括智能合約每個方法實現(xiàn)的功能。根據(jù)智能合約的具體功能分析合約可能存在的潛在漏洞,這些依據(jù)對后續(xù)確定目標變量、設(shè)計蛻變關(guān)系都是至關(guān)重要的。因此,智能合約應在部署上鏈之前進行完備的安全漏洞測試。為了應對在區(qū)塊鏈測試中更加頻發(fā)的測試預言獲取難題,本文提出了基于蛻變測試的智能合約安全漏洞檢測方法。

    3.2 區(qū)塊鏈智能合約的蛻變測試原理

    由于蛻變測試中蛻變關(guān)系的特殊機制,蛻變測試擁有兩組相對應的測試用例輸入,即源測試用例和后續(xù)測試用例,通過判斷它們的輸出是否符合蛻變關(guān)系從而獲得測試判定。在智能合約測試中可以繞過測試預言的獲取階段,有效地應對了測試預言獲取的難題,從漏洞觸發(fā)角度設(shè)計蛻變關(guān)系并用于相應智能合約的蛻變測試,保證了測試的準確率。

    3.3 區(qū)塊鏈智能合約的蛻變測試方法流程

    為了將蛻變測試方法在區(qū)塊鏈智能合約中有效實現(xiàn),本文提出了一種區(qū)塊鏈智能合約蛻變測試方法。圖3 給出該方法的實施流程,整個方法分為4個模塊:智能合約分析模塊,通過分析和預處理確定待測合約的相關(guān)變量和輸入域;蛻變關(guān)系設(shè)計模塊,根據(jù)智能合約存在的多類型漏洞觸發(fā)邏輯構(gòu)建蛻變關(guān)系;測試用例生成模塊以及蛻變關(guān)系驗證模塊。

    圖3 區(qū)塊鏈智能合約蛻變測試方法

    為了更全面地對區(qū)塊鏈智能合約的蛻變測試的流程進行解釋,在算法1 中以偽代碼的形式對圖3中展示的流程進行進一步展示。其中,k[i]為輸入域內(nèi)隨機生成的源測試用例,MR 為設(shè)計的蛻變關(guān)系,k’[i]為后續(xù)測試用例。判斷輸出的結(jié)果是否符合預先設(shè)計的蛻變關(guān)系,若不符合,則說明智能合約存在相應的安全漏洞。

    算法1區(qū)塊鏈智能合約蛻變測試算法

    3.4 區(qū)塊鏈智能合約的蛻變測試框架

    根據(jù)3.1 節(jié)中描述的特點可知,與傳統(tǒng)軟件的蛻變測試相比,針對區(qū)塊鏈智能合約的蛻變測試對智能合約的分析或預處理也在整體的測試流程中占有重要的作用。因此,將蛻變測試方法融入?yún)^(qū)塊鏈智能合約中。智能合約分析、蛻變關(guān)系設(shè)計以及蛻變關(guān)系驗證3 個方面組成了整個測試流程的框架,如圖4 所示。

    根據(jù)圖4 可以看出,除了智能合約分析,蛻變關(guān)系設(shè)計和蛻變關(guān)系驗證也是整個蛻變測試的核心。因此,第4 節(jié)將詳細介紹蛻變關(guān)系的設(shè)計方法和設(shè)計過程。

    4 區(qū)塊鏈智能合約漏洞的蛻變關(guān)系設(shè)計

    本節(jié)將詳細展示針對第3 節(jié)中介紹的區(qū)塊鏈智能合約出現(xiàn)的漏洞的蛻變關(guān)系應如何設(shè)計。具體來說,蛻變關(guān)系的設(shè)計涉及2 個步驟:1) 將待測的智能合約進行分析,提取可能觸發(fā)漏洞的函數(shù)及目標變量,涉及蛻變關(guān)系中測試用例輸入的變量,需要確定它們的輸入域;2) 針對待測智能合約的功能及可能出現(xiàn)的漏洞類,根據(jù)潛在漏洞涉及的變量與輸出之間的屬性設(shè)計蛻變關(guān)系。

    4.1 整型溢出漏洞蛻變關(guān)系設(shè)計——上溢

    根據(jù)整型溢出的特點,將對可能存在整型溢出漏洞的智能合約進行初步分析,使生成的源測試用例和后續(xù)測試用例的蛻變關(guān)系滿足觸發(fā)整型溢出漏洞的必要條件。圖5 為一個存在加法溢出漏洞的智能合約的部分內(nèi)容,其描述了一個銀行定期儲蓄的智能合約。在合約中,針對每個用戶設(shè)置了一個mapping 用于設(shè)置定期儲蓄時間,值為uint256 類型。之后的3個函數(shù):deposit()為存款函數(shù),并且儲蓄時間至少為一周;increaseLockTime()為增加儲蓄時間的函數(shù),用戶可以根據(jù)需求自行增加儲蓄時間;withdraw()為取款函數(shù),當用戶擁有余額且當前的時間戳遲于儲蓄結(jié)束后預定的時間戳后可以將儲蓄余額取出。

    圖5 存在加法溢出漏洞的智能合約的部分內(nèi)容

    此案例為智能合約加法溢出的實例。通過分析,合約中涉及輸入的主要參數(shù)為存款數(shù)和定期儲蓄時間,這兩類參數(shù)雖然同時影響取款操作的輸出結(jié)果,但整型溢出漏洞是否觸發(fā)主要在于儲蓄時間lockTime,由于設(shè)置定期儲蓄時間時并未使用SafeMath 進行溢出檢測,因此通過增加定期儲蓄時間,可以使儲蓄時間發(fā)生上溢,使儲蓄時間溢出,那么定期儲蓄時間將會溢出到0。以此跳過時間檢測機制取出存款。

    根據(jù)此智能合約的設(shè)計邏輯,當目標變量x為定期儲蓄時間時,f(x)為取款操作執(zhí)行時取出的存款,得出蛻變關(guān)系設(shè)計依據(jù)的必要屬性為

    在沒有觸發(fā)加法溢出的前提下,每次在確定的輸入域中根據(jù)蛻變關(guān)系改變目標變量的輸入,相應的輸出就必然遵循該必要屬性。基于此,可以設(shè)計蛻變關(guān)系MR1

    其中,x1、x2分別表示目標變量(儲蓄時間),對應的P(x1)、P(x2)分別表示在改變了儲蓄時間后進行取款操作的結(jié)果。

    MR 的公式基于已提出的一階謂詞邏輯的蛻變關(guān)系形式化模型[25],具有精確的描述形式,同時也具備較強的兼容性,MR2~MR6的蛻變關(guān)系也是基于此模型構(gòu)建的。根據(jù)智能合約中的定義,確定了構(gòu)建蛻變關(guān)系涉及的4 個輸入變量和一個輸出變量:定期儲蓄時間A、存款金額B、增加儲蓄時間P、取款金額M和儲蓄余額在每一次測試前后的差值S。因此,將MR1的形式化公式分解為表格形式,如表2 所示。

    表2 MR1 中目標變量間的蛻變關(guān)系

    在該蛻變關(guān)系中,源測試用例的輸入以隨機測試的方法隨機生成。后續(xù)測試用例生成的蛻變關(guān)系在源測試用例的基礎(chǔ)上倍數(shù)遞增,當儲蓄時間遞增到發(fā)生溢出時,儲蓄時間將會溢出到從0 開始,因此每次后續(xù)測試用例執(zhí)行后,將執(zhí)行一次取款操作。如果該操作成功執(zhí)行,即取款金額與儲蓄余額的差值相等,說明檢測出了儲蓄時間的溢出,該合約存在整型溢出的漏洞。

    根據(jù)此智能合約的設(shè)計,當目標變量x為定期儲蓄時間時,f(x)為取款操作后用戶的余額差值,得出蛻變關(guān)系設(shè)計依據(jù)的必要屬性為

    在沒有觸發(fā)溢出漏洞的前提下,每次在確定的輸入域中根據(jù)蛻變關(guān)系改變目標變量的輸入,相應的輸出就必然遵循該必要屬性。在表2 所示的蛻變關(guān)系的基礎(chǔ)上,可以進一步改進對智能合約整型溢出漏洞檢測的蛻變關(guān)系MR2

    其中,x1、x2分別表示目標變量(單次轉(zhuǎn)賬金額),對應的P(x1)、P(x2)分別表示目標變量的兩次不同的實際取值(轉(zhuǎn)賬操作后接收方賬戶的余額)。

    在solidity 中,整型變量支持的整數(shù)類型以8 bit為步長遞增,即整型定義的范圍為28~2256,在定義時沒有特別說明的整型變量是256 bit。在蛻變測試中以28為下限,試圖在一個uint8 的整型變量中存儲數(shù)字256,則它將會溢出變成0。

    將MR2的形式化公式分解為表格形式,如表3所示。

    表3 MR2 中目標變量間的蛻變關(guān)系

    在隨機生成的源測試用例的基礎(chǔ)上,每一次生成后續(xù)測試用例時依次增加28n的儲蓄時間,這種蛻變關(guān)系可以大大減少測試整型溢出漏洞時的時間復雜度。

    通過上述2 種關(guān)于檢測智能合約整型溢出漏洞的蛻變關(guān)系,可以在實驗中針對測試具體的智能合約中觸發(fā)漏洞的變量進行修改,從而驗證待測合約是否存在整型溢出漏洞。

    4.2 整型溢出漏洞蛻變關(guān)系設(shè)計——下溢

    對于智能合約中出現(xiàn)的減法溢出型漏洞,通常其整型變量的賦值會超出其下限。圖6 是一個存在減法溢出漏洞的智能合約的部分內(nèi)容。

    圖6 存在減法溢出漏洞的智能合約的部分內(nèi)容

    此案例為智能合約減法溢出漏洞的實例。通過分析,合約中涉及輸入的主要參數(shù)為接收轉(zhuǎn)賬用戶的代幣存量,如果在對balances[owner]的計算中未使用SafeMath,當轉(zhuǎn)出代幣總量大于owner 賬戶余額時,balances[owner]產(chǎn)生減法溢出,變成一個極大值,造成代幣增發(fā)的嚴重后果。

    根據(jù)此智能合約的設(shè)計,當目標變量x為單次發(fā)起轉(zhuǎn)賬交易的金額時,f(x)為轉(zhuǎn)賬操作后發(fā)送方賬戶的余額,得出蛻變關(guān)系設(shè)計依據(jù)的必要屬性為

    在沒有觸發(fā)漏洞的前提下,每次在確定的輸入域中根據(jù)蛻變關(guān)系改變目標變量的輸入,相應的輸出就必然遵循該必要屬性。基于此和3.1 節(jié)加法溢出中改進的蛻變關(guān)系設(shè)計思路,可以設(shè)計減法溢出的蛻變關(guān)系MR3

    其中,x1、x2分別表示目標變量(單次轉(zhuǎn)賬金額),對應的P(x1)、P(x2)分別表示目標變量的兩次不同的實際取值(轉(zhuǎn)賬操作后發(fā)送方賬戶的余額)。

    根據(jù)智能合約中的定義,確定了構(gòu)建蛻變關(guān)系涉及的4 個參數(shù):發(fā)送方賬戶A、接收方賬戶的個數(shù)B、每次給接收方賬戶轉(zhuǎn)賬的金額M、發(fā)送方賬戶余額在每一次測試前后的差值S。將MR3的形式化公式分解為表格形式,如表4 所示。

    表4 MR3 中目標變量間的蛻變關(guān)系

    在該蛻變關(guān)系中,為了檢測后續(xù)測試用例是否會觸發(fā)減法溢出,將給每個接收方賬戶轉(zhuǎn)賬的金額作為變量,通過增加該變量逐步增加發(fā)送方轉(zhuǎn)賬的總金額,當發(fā)送方賬戶轉(zhuǎn)賬金額的總量大于發(fā)送方本身的余額時,如果觸發(fā)減法溢出,發(fā)送方在轉(zhuǎn)賬操作后的余額將會大于轉(zhuǎn)賬操作前的余額。

    4.3 整型溢出漏洞蛻變關(guān)系設(shè)計——乘法溢出

    根據(jù)合約功能的設(shè)計,若在合約功能中出現(xiàn)乘法運算,則可能伴隨著加減法超過整型定義范圍的上下限導致乘法溢出。圖6 中智能合約中轉(zhuǎn)賬功能的設(shè)計就伴隨著乘法溢出。

    在圖6 所示的合約中,發(fā)送方賬戶每次可以轉(zhuǎn)給不止一個接收方賬戶等量的金額,那么當接收方賬戶數(shù)量遞增時,發(fā)送方每次轉(zhuǎn)賬的總金額也會根據(jù)乘數(shù)數(shù)量的遞增而增加,從而發(fā)生溢出。

    根據(jù)此功能設(shè)計,當目標變量x為單次發(fā)起轉(zhuǎn)賬交易的目標賬戶數(shù)時,f(x)為轉(zhuǎn)賬操作后發(fā)送方賬戶的余額,得出蛻變關(guān)系設(shè)計依據(jù)的必要屬性為

    在沒有觸發(fā)漏洞的前提下,每次在確定的輸入域中根據(jù)蛻變關(guān)系改變目標變量的輸入,相應的輸出就必然遵循該必要屬性?;诖?,可以設(shè)計乘法溢出的蛻變關(guān)系MR4

    其中,x1、x2表示目標變量(接收方賬戶的數(shù)量),對應的P(x1)、P(x2)分別表示目標變量的兩次不同的實際取值(轉(zhuǎn)賬操作后發(fā)送方賬戶的余額)。

    將MR4的形式化公式分解為表格形式,如表5所示。

    表5 MR4 中目標變量間的蛻變關(guān)系

    在該蛻變關(guān)系中,為了檢測后續(xù)測試用例是否會觸發(fā)溢出,將接收方賬戶的個數(shù)作為變量,通過接收方賬戶數(shù)量自增的方式逐步增加發(fā)送方轉(zhuǎn)賬的總金額,當發(fā)送方賬戶轉(zhuǎn)賬金額的總量大于發(fā)送方本身的余額時,如果觸發(fā)溢出,發(fā)送方在轉(zhuǎn)賬操作后的余額將會大于轉(zhuǎn)賬操作前的余額,變?yōu)橐粋€極大值。

    4.4 針對智能合約重入攻擊漏洞的蛻變關(guān)系設(shè)計

    根據(jù)重入攻擊漏洞的原理,將針對存在重入攻擊漏洞的智能合約進行初步分析,將源測試用例和生成的后續(xù)測試用例認為是滿足觸發(fā)重入攻擊漏洞的必要關(guān)系。和整型溢出漏洞不同的是,觸發(fā)重入攻擊漏洞需要通過重入攻擊操作而不是改變相關(guān)參數(shù),因此測試用例需要在涉及相應的攻擊合約的基礎(chǔ)上生成。圖7 是一個存在重入攻擊漏洞的智能合約和攻擊者在觸發(fā)重入攻擊漏洞時調(diào)用的攻擊合約的部分內(nèi)容。

    圖7 存在重入攻擊漏洞的智能合約和攻擊者在觸發(fā)重入攻擊漏洞時調(diào)用的攻擊合約的部分內(nèi)容

    存在重入攻擊漏洞的代碼在6 行和7 行,根據(jù)1.3 節(jié)中的描述,向合約發(fā)送call 消息存在重入攻擊的風險,攻擊者會在7 行更新用戶余額之前遞歸地從合約中取款。在分析重入攻擊漏洞的原理后,針對這兩行存在重入攻擊漏洞的代碼,設(shè)計一個重入攻擊的智能合約,在后續(xù)的實驗中可以通過攻擊操作作為測試用例,檢測智能合約是否存在重入攻擊漏洞的風險。圖8 是一個發(fā)起重入攻擊的合約的部分內(nèi)容。

    圖8 發(fā)起重入攻擊的合約的部分內(nèi)容

    此案例是智能合約重入攻擊漏洞的實例。根據(jù)分析,在合約需要接收ether 時,fallback 函數(shù)必須聲明為payable,因此第4 行函數(shù)為fallback 函數(shù)。可以看出,fallback 函數(shù)內(nèi)再次調(diào)用了withdraw 方法,使被攻擊合約再次進行新一輪的轉(zhuǎn)賬操作,實現(xiàn)重入攻擊。

    重入攻擊的次數(shù)和攻擊合約的gas 數(shù)量由被攻擊合約的具體余額決定,因此可能存在假陰性的問題(合約存在重入攻擊漏洞,但是gas 數(shù)量和余額的條件不滿足二次攻擊的實現(xiàn),會誤以為被測合約不存在重入攻擊漏洞)。

    根據(jù)此功能設(shè)計,當目標變量x為fallback 函數(shù)每次使用withdraw 取出的金額時,f(x)為使用攻擊合約調(diào)用該智能合約的地址余額,得出蛻變關(guān)系設(shè)計依據(jù)的必要屬性為

    在沒有觸發(fā)漏洞的前提下,每次在確定的輸入域中根據(jù)蛻變關(guān)系改變目標變量的輸入,相應的輸出就必然遵循該必要屬性。為了在測試的基礎(chǔ)上減小假陰性出現(xiàn)的概率,針對蛻變關(guān)系進行了優(yōu)化,設(shè)計蛻變關(guān)系MR5

    其中,x1、x2表示目標變量(fallback 函數(shù)中每次使用withdraw 取出的金額),對應的P(x1)、P(x2)分別表示使用攻擊合約模擬重入攻擊時合約地址的余額數(shù)量。

    根據(jù)智能合約中的定義,確定了構(gòu)建蛻變關(guān)系涉及的4 個輸入變量和一個輸出變量:攻擊者的錢包地址A、攻擊者發(fā)動攻擊使用的合約地址B、被攻擊合約的地址P、fallback 函數(shù)中每次攻擊取出的金額M和攻擊合約中的余額S。因此,將MR5的形式化公式分解為表格形式,如表6 所示。

    表6 MR5 中目標變量間的蛻變關(guān)系

    在該蛻變關(guān)系中,為了準確檢測是否會觸發(fā)合約中可能存在的重入攻擊漏洞,將測試用例設(shè)置為調(diào)用攻擊合約發(fā)動的重入攻擊,在源測試用例測試階段就有可能觸發(fā)重入攻擊漏洞。為了避免假陰性的情況,源測試用例中的目標變量將在合約規(guī)定的范圍內(nèi)隨機生成,如果滿足蛻變關(guān)系,則說明重入攻擊沒有觸發(fā)。后續(xù)測試用例將會在源測試用例的基礎(chǔ)上自減并進行下一輪的重入測試。直到源測試用例自減到一個設(shè)置的極小值,如果輸出的結(jié)果仍然滿足輸出關(guān)系,則證明被測合約不存在重入攻擊漏洞。

    通過后續(xù)實驗發(fā)現(xiàn)蛻變關(guān)系MR5存在局限性:如果源測試用例和后續(xù)測試用例均能成功地觸發(fā)重入攻擊漏洞,那么仍然無法驗證該合約是否存在重入攻擊漏洞。因此,對蛻變關(guān)系進行進一步的改進。

    根據(jù)此功能設(shè)計,當目標變量x為fallback 函數(shù)每次使用withdraw 取出的金額時,f(x)為用戶直接調(diào)用智能合約進行取款操作后用戶地址的余額差值,g(x)為用戶通過調(diào)用攻擊合約對該智能合約進行取款操作后用戶地址的余額差值,得出蛻變關(guān)系設(shè)計依據(jù)的必要屬性為

    在沒有觸發(fā)漏洞的前提下,每次在確定的輸入域中根據(jù)蛻變關(guān)系改變目標變量的輸入,相應的輸出就必然遵循該必要屬性?;诖?,得到蛻變關(guān)系MR6

    其中,x1、x2表示目標變量(正常取款操作和調(diào)用攻擊合約的操作取出的金額),對應的P(x1)、P(x2)分別表示2 種操作后取款用戶錢包中的余額差值。

    為了充分避免假陰性的情況出現(xiàn),將攻擊合約中fallback 函數(shù)中的withdraw 函數(shù)每次遞歸取款的金額設(shè)置為1。

    根據(jù)智能合約中的定義,確定了蛻變關(guān)系涉及的4 個輸入變量和一個輸出變量:正常取款操作A、調(diào)用的攻擊合約觸發(fā)重入攻擊的操作B、被攻擊合約的地址P、2 種操作取款的金額M和不同操作執(zhí)行后取款用戶的錢包余額差值S。因此,將MR6的形式化公式分解為表格形式,如表7 所示。

    表7 MR6 中目標變量間的蛻變關(guān)系

    在該蛻變關(guān)系中,將目標變量轉(zhuǎn)化成2 種不同的操作,分別是正常取款和調(diào)用攻擊合約取款的操作,通過對比不同操作執(zhí)行的結(jié)果是否符合輸出蛻變關(guān)系,判斷合約是否存在重入攻擊漏洞。

    5 實驗分析

    為驗證本文提出的蛻變測試方法在檢測智能合約中存在相應漏洞的有效性,設(shè)計了多個存在相關(guān)漏洞的實例進行驗證。本節(jié)展示了實驗的細節(jié),主要包括實驗設(shè)置、實驗流程、實驗數(shù)據(jù)和實驗結(jié)果與分析。

    5.1 實驗設(shè)置

    存在不同漏洞的智能合約在進行蛻變測試時需要相應的蛻變關(guān)系進行測試,利用國家安全漏洞庫CNVD、CVE 和GitHub 中收錄的漏洞實例及其他文獻的數(shù)據(jù)集中收集的漏洞合約實例進行實驗,收集的每個實例都有完整的源代碼。使用相應的蛻變關(guān)系進行蛻變測試,驗證蛻變測試的有效性。

    本文具體方案設(shè)置如下:在Remix IDE 上編譯和部署待測試的智能合約,版本號為0.4.26+commit.4563c3fc,EVM 鏡像選擇default,調(diào)用合約的用戶地址為 0x5B38Da6a701c568545dC fcB03FcB875f56beddC4,測試重入攻擊漏洞時調(diào)用攻擊合約的用戶地址為0xAb8483F64d9C6d1EcF9b849 Ae677dD3315835cb2。蛻變測試實驗中待選的蛻變關(guān)系如表8 所示。

    表8 蛻變測試實驗中待選的蛻變關(guān)系

    5.2 實驗流程

    第4 節(jié)已經(jīng)完成了針對蛻變關(guān)系設(shè)計的工作。針對區(qū)塊鏈智能合約安全漏洞的蛻變測試的整體流程介紹如下。

    1) 分析智能合約的具體功能和調(diào)用方法涉及的參數(shù)變量,確定測試用例生成的目標變量與輸入域,并在輸入域中生成源測試用例集E。

    2) 根據(jù)目標變量中存在的函數(shù)關(guān)系確定其中的必要屬性,根據(jù)必要屬性設(shè)計相應的蛻變關(guān)系,包括輸入蛻變關(guān)系和輸出蛻變關(guān)系。

    3) 使用設(shè)計的蛻變關(guān)系,基于源測試用例集生成相應的后續(xù)測試用例集E’。

    4) 將源測試用例e和與之對應的后續(xù)測試用例e’在待測智能合約中運行,獲取相應的輸出結(jié)果。

    5) 驗證源測試用例e和對應的后續(xù)測試用例e’的輸出結(jié)果是否符合輸出蛻變關(guān)系,如果不符合,則證明測試結(jié)果不通過。

    智能合約的蛻變測試總體流程如圖9 所示。

    5.3 實驗數(shù)據(jù)

    被測合約均來源于近年來區(qū)塊鏈的安全事故實例以及一些經(jīng)典案例,其中大量的智能合約都存在的漏洞類型包含整型(加法、減法及乘法)溢出漏洞和重入攻擊漏洞。實驗驗證的合約實例及存在的漏洞如表9 所示。

    表9 實驗驗證的合約實例與存在的漏洞

    通過對智能合約的具體功能和相應漏洞的分析,待測的智能合約使用的蛻變關(guān)系將在第4 節(jié)中構(gòu)建的6 個蛻變關(guān)系中選取,蛻變測試流程中所有的源測試用例生成策略采取蛻變測試常用的隨機測試用例生成技術(shù)[26],即它們都來源于目標變量輸入域內(nèi)的隨機值,在此基礎(chǔ)上獲得的源測試用例和選取的蛻變關(guān)系進一步獲得后續(xù)測試用例。根據(jù)表9所示的合約實例,使用蛻變測試驗證在區(qū)塊鏈智能合約上的蛻變測試有效性,并且和常用的智能合約檢測方法Slither 的檢測結(jié)果進行對比。

    5.4 實驗結(jié)果與分析

    為了評估基于蛻變測試的區(qū)塊鏈智能合約安全漏洞檢測方法的有效性,針對以下2 個問題對實驗結(jié)果進行分析:MT 是否可以檢測到MR 對應的智能合約安全漏洞?MT 是否比其他智能合約測試方法更好?

    1) MT 是否可以檢測到MR 對應的智能合約安全漏洞?

    為了驗證這個問題,根據(jù)表8 提供的蛻變關(guān)系,使用圖9 提出的蛻變測試流程對表9 中的智能合約實例進行了完整的蛻變測試,結(jié)果如表10 所示,實驗按照智能合約編號順序依次進行檢測。其中,“√”表示檢測出相應的漏洞,“×”表示未檢測出相應的漏洞。

    表10 蛻變測試方法的檢測結(jié)果

    根據(jù)表10 的實驗結(jié)果可以看出,針對區(qū)塊鏈智能合約的蛻變測試方法的有效性得到了驗證,蛻變關(guān)系使后續(xù)測試用例的生成具有較強的針對性。顯然,蛻變測試開展的基礎(chǔ)就是蛻變關(guān)系的正確性,即需要事先確定蛻變關(guān)系一定符合程序的必要關(guān)系。如果測試輸出不滿足蛻變關(guān)系,則相應的測試用例中一定存在失效,即程序一定存在故障?;谶@個原則,參考沒有通過蛻變關(guān)系驗證的輸出結(jié)果(失敗的測試用例),得出相應的智能合約存在漏洞的結(jié)果。

    如果測試輸出滿足蛻變關(guān)系,則并不意味著相應的測試用例執(zhí)行結(jié)果一定是正確的。由于現(xiàn)有的源測試用例的生成策略具有隨機性,定量的測試用例可能導致測試結(jié)果存在假陰性的概率,使編號2和編號4 的智能合約實例中存在的漏洞未能檢測出。因此有限類型和數(shù)量的蛻變關(guān)系對不同智能合約檢測仍然存在局限性。

    綜上,蛻變測試在區(qū)塊鏈智能合約中的應用是可行的,并且具有有效性。

    2) MT 是否比其他智能合約測試方法更好?

    為了驗證這個問題,使用常用的智能合約檢測方法Slither 對表9 中的智能合約實例進行測試。Slither 方法的結(jié)果針對合約中的方法設(shè)置相應指標和潛在漏洞的置信度,具體的潛在漏洞以置信度評級的方式顯示,在此將置信度不高的測試指標結(jié)果認定為Slither 檢出的漏洞。根據(jù)Slither 的檢測結(jié)果和蛻變測試的檢測結(jié)果進行對比,實驗結(jié)果如表11和圖10 所示。其中,“?”表示未能檢測出任何漏洞。

    圖10 兩種檢測方法的檢測結(jié)果

    表11 Slither 測試方法的測試結(jié)果

    從表11 和圖10 可以看出,蛻變測試在檢測整型溢出漏洞方面明顯優(yōu)于Slither 方法。在智能合約中,整型溢出漏洞是最常見的智能合約安全漏洞,但是在檢測整型溢出漏洞的各種方法中,蛻變測試可以通過觸發(fā)漏洞的形式以檢測是否存在具體的漏洞,在準確率上占有明顯優(yōu)勢。

    相比于Slither 方法,蛻變測試有較大優(yōu)勢,并且隨著蛻變關(guān)系進一步的完善,這種優(yōu)勢將擴散到更多的漏洞類型和更廣泛的智能合約應用場景中。

    5.5 實驗說明

    根據(jù)文獻[27]可知,Slither 作為一款常用且精確度較高的測試工具,由于自身局限性,截止到該文獻發(fā)表日期,它還無法檢測與整型溢出相關(guān)的智能合約漏洞。之所以選擇Slither作為對比方法,是因為Slither工具在提高測試者對合約的了解、協(xié)助代碼審查方面具有優(yōu)秀的表現(xiàn)。在未來的工作中,將參考Slither的相關(guān)功能嘗試為區(qū)塊鏈智能合約的蛻變測試方法增加預處理機制,這樣可以為測試時蛻變關(guān)系的選擇以及蛻變關(guān)系的設(shè)計階段提供更客觀全面的依據(jù)。

    此外,蛻變關(guān)系作為蛻變測試中重要的元素組成部分,蛻變關(guān)系的識別是影響測試結(jié)果的重要因素。蛻變測試在整型溢出漏洞和重入攻擊漏洞的檢測中最明顯的優(yōu)勢在于通過蛻變關(guān)系優(yōu)化了動態(tài)測試面臨的測試預言難以獲取導致影響測試準確率的問題,由于這類漏洞的目標變量較固定,在面臨不同功能的智能合約測試都有較好的泛化性,在動態(tài)測試的過程中通過觸發(fā)漏洞從而進行檢測也更加實用。因此蛻變測試在針對這兩類漏洞的測試中有著良好的表現(xiàn)。本文根據(jù)已知漏洞的觸發(fā)原理設(shè)計蛻變關(guān)系,但此類方法存在部分局限性,主要在于智能合約的常見漏洞并不局限于整型溢出漏洞和重入攻擊漏洞,還有時間戳依賴漏洞和交易順序依賴漏洞等,這些漏洞的觸發(fā)條件也與區(qū)塊鏈網(wǎng)絡層的安全熟悉相關(guān),因此暫時還無法僅通過合約層的漏洞觸發(fā)原理構(gòu)建蛻變關(guān)系,隨著區(qū)塊鏈智能合約的發(fā)展,漏洞類型也將進一步增加,筆者將基于此方法分析更多類型的漏洞并設(shè)計蛻變關(guān)系,使蛻變測試的適用范圍更廣。此外,對于未知漏洞,筆者仍然需要從輸入域和輸出域的關(guān)系入手,識別科學的蛻變關(guān)系。與蛻變測試在其他的場景中應用類似,此方法最重要的內(nèi)容是蛻變關(guān)系的識別,因此該方法的有效性在很大程度上取決于蛻變關(guān)系的選擇,這是此類方法應用到區(qū)塊鏈智能合約領(lǐng)域中依然存在的挑戰(zhàn)。在后續(xù)的工作中,尋找有效的蛻變關(guān)系識別方法[28]并應用到區(qū)塊鏈智能合約領(lǐng)域?qū)⒆鳛楣P者改進此方法的一部分。

    6 結(jié)束語

    在區(qū)塊鏈智能合約方面,本文提出了一種基于蛻變測試的智能合約安全漏洞檢測方法,通過對實例合約的測試,檢測智能合約中存在的整型溢出和重入攻擊漏洞??紤]到區(qū)塊鏈的不可篡改性和gas的消耗問題,蛻變測試具有明顯的優(yōu)勢。一方面,蛻變測試避免了獲取測試預言可能存在的大量資源消耗和獲取困難的情況,緩解了動態(tài)測試中的Oracle 問題。另一方面,對具體的智能合約漏洞設(shè)計了相應的蛻變關(guān)系,使蛻變測試中測試用例的生成具有更強的針對性,提升了測試過程中觸發(fā)與檢測相應漏洞的概率,降低了假陽性的概率。

    未來的工作主要有:1) 為了覆蓋更廣泛的智能合約安全漏洞類型,將進一步設(shè)計更多的蛻變關(guān)系,在現(xiàn)有的智能合約功能和已發(fā)現(xiàn)的漏洞的基礎(chǔ)上,完善關(guān)于智能合約的蛻變關(guān)系庫;2) 針對整體測試框架中智能合約分析的部分,將結(jié)合Slither 智能合約分析工具,對蛻變關(guān)系的設(shè)計和選擇提供更合理的指標支撐并提高蛻變測試的自動化程度。

    猜你喜歡
    安全漏洞測試用例合約
    基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
    安全漏洞太大亞馬遜、沃爾瑪和Target緊急下架這種玩具
    玩具世界(2018年6期)2018-08-31 02:36:26
    基于混合遺傳算法的回歸測試用例集最小化研究
    基于安全漏洞掃描的校園網(wǎng)告警系統(tǒng)的開發(fā)與設(shè)計
    基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
    安全漏洞Shellshock簡介
    河南科技(2014年11期)2014-02-27 14:16:49
    合約必守,誰能例外!——對“情勢變更”制度不可寄于過高期望
    軟件回歸測試用例選取方法研究
    NSFOCUS 2010年2月之十大安全漏洞
    男人舔女人的私密视频| 国产精品一区二区三区四区久久 | 国产区一区二久久| 国语自产精品视频在线第100页| 黄片大片在线免费观看| 免费高清在线观看日韩| 亚洲真实伦在线观看| 久久国产亚洲av麻豆专区| 在线av久久热| 日日干狠狠操夜夜爽| 亚洲国产精品合色在线| 国产人伦9x9x在线观看| 最新美女视频免费是黄的| 亚洲国产日韩欧美精品在线观看 | 曰老女人黄片| 俄罗斯特黄特色一大片| 激情在线观看视频在线高清| 成人国语在线视频| 亚洲av熟女| 天天躁夜夜躁狠狠躁躁| 十八禁网站免费在线| 国产av一区在线观看免费| 一本久久中文字幕| 999精品在线视频| 精品第一国产精品| 村上凉子中文字幕在线| 变态另类成人亚洲欧美熟女| 国产亚洲精品综合一区在线观看 | 久久久久久久久久黄片| 一本一本综合久久| 不卡一级毛片| 免费一级毛片在线播放高清视频| 精品国产乱码久久久久久男人| 久久精品国产亚洲av香蕉五月| 久久精品国产清高在天天线| 亚洲熟妇中文字幕五十中出| 黑丝袜美女国产一区| 亚洲黑人精品在线| 精品熟女少妇八av免费久了| 国产v大片淫在线免费观看| 观看免费一级毛片| 正在播放国产对白刺激| 一级毛片高清免费大全| 欧美不卡视频在线免费观看 | 99re在线观看精品视频| 午夜福利在线在线| 国产高清视频在线播放一区| 亚洲精品粉嫩美女一区| 一a级毛片在线观看| 国产成+人综合+亚洲专区| 久久亚洲精品不卡| 成人一区二区视频在线观看| 久久久久久国产a免费观看| 久久精品国产综合久久久| 岛国视频午夜一区免费看| 一边摸一边做爽爽视频免费| 午夜成年电影在线免费观看| 久久这里只有精品19| 国产精品日韩av在线免费观看| 欧美激情久久久久久爽电影| 免费在线观看黄色视频的| 国产精品自产拍在线观看55亚洲| 午夜免费成人在线视频| 国产成人精品久久二区二区免费| 国产视频内射| 久久中文字幕一级| 在线国产一区二区在线| 中文字幕精品亚洲无线码一区 | 亚洲aⅴ乱码一区二区在线播放 | 窝窝影院91人妻| 日韩大码丰满熟妇| www.999成人在线观看| 国语自产精品视频在线第100页| 亚洲av电影不卡..在线观看| 亚洲国产精品成人综合色| 日韩欧美一区视频在线观看| 欧美日韩瑟瑟在线播放| 在线播放国产精品三级| 久久九九热精品免费| avwww免费| 日本成人三级电影网站| 91大片在线观看| 欧美乱妇无乱码| 久久中文看片网| 久久久久久人人人人人| 亚洲 欧美一区二区三区| 欧美性猛交╳xxx乱大交人| 免费高清在线观看日韩| 啦啦啦免费观看视频1| 一区二区三区高清视频在线| 日韩免费av在线播放| 亚洲一区二区三区色噜噜| 欧美精品亚洲一区二区| 99国产精品99久久久久| 97超级碰碰碰精品色视频在线观看| 18美女黄网站色大片免费观看| av在线天堂中文字幕| 91麻豆精品激情在线观看国产| 亚洲熟妇中文字幕五十中出| 午夜a级毛片| 美女大奶头视频| 麻豆久久精品国产亚洲av| 一级黄色大片毛片| 免费观看精品视频网站| 高清在线国产一区| e午夜精品久久久久久久| 好男人在线观看高清免费视频 | 老司机福利观看| 人人妻人人澡人人看| tocl精华| 免费女性裸体啪啪无遮挡网站| 日韩欧美三级三区| 男女做爰动态图高潮gif福利片| 午夜福利一区二区在线看| 侵犯人妻中文字幕一二三四区| 日韩有码中文字幕| 亚洲一卡2卡3卡4卡5卡精品中文| 黄色视频不卡| 精品卡一卡二卡四卡免费| 18禁裸乳无遮挡免费网站照片 | 午夜免费鲁丝| 最新美女视频免费是黄的| www国产在线视频色| 久久中文字幕人妻熟女| 亚洲av电影在线进入| 久热这里只有精品99| 亚洲成人国产一区在线观看| 欧美成人午夜精品| 午夜日韩欧美国产| 在线观看舔阴道视频| 人人澡人人妻人| 精品国产乱子伦一区二区三区| 欧美国产日韩亚洲一区| √禁漫天堂资源中文www| 国产欧美日韩一区二区精品| 久久久久久大精品| 免费观看人在逋| 在线视频色国产色| 精品少妇一区二区三区视频日本电影| 成人永久免费在线观看视频| 人人澡人人妻人| 人妻丰满熟妇av一区二区三区| 亚洲精品av麻豆狂野| 亚洲欧洲精品一区二区精品久久久| xxxwww97欧美| 午夜精品久久久久久毛片777| 国产亚洲精品久久久久5区| 欧美黄色片欧美黄色片| 巨乳人妻的诱惑在线观看| 久热爱精品视频在线9| 国产激情欧美一区二区| 国产真实乱freesex| 久久久久久国产a免费观看| 午夜福利一区二区在线看| 草草在线视频免费看| 亚洲第一av免费看| 丁香欧美五月| 精华霜和精华液先用哪个| 亚洲精品国产区一区二| 国产精品98久久久久久宅男小说| 午夜成年电影在线免费观看| 欧美中文日本在线观看视频| 观看免费一级毛片| 中文在线观看免费www的网站 | 国语自产精品视频在线第100页| 精品国产国语对白av| 啦啦啦观看免费观看视频高清| 国产成人av激情在线播放| 制服人妻中文乱码| xxx96com| 亚洲色图 男人天堂 中文字幕| 51午夜福利影视在线观看| www.999成人在线观看| av欧美777| 国产99白浆流出| 亚洲av五月六月丁香网| 热re99久久国产66热| 亚洲 欧美一区二区三区| 国产亚洲精品av在线| 久久久久国产精品人妻aⅴ院| 激情在线观看视频在线高清| 国产aⅴ精品一区二区三区波| 精品欧美一区二区三区在线| x7x7x7水蜜桃| 日韩大码丰满熟妇| av有码第一页| 亚洲男人天堂网一区| 国产精品一区二区精品视频观看| 亚洲欧洲精品一区二区精品久久久| 在线av久久热| 国内精品久久久久久久电影| 三级毛片av免费| 亚洲国产欧美一区二区综合| 日本精品一区二区三区蜜桃| 在线观看免费视频日本深夜| 日本熟妇午夜| 9191精品国产免费久久| 一本久久中文字幕| 国产精品一区二区三区四区久久 | 在线播放国产精品三级| 可以免费在线观看a视频的电影网站| 精品欧美国产一区二区三| 亚洲av日韩精品久久久久久密| 99热只有精品国产| 国产高清激情床上av| www.999成人在线观看| 深夜精品福利| 亚洲成人精品中文字幕电影| 国产1区2区3区精品| 久久久国产成人精品二区| 最近最新免费中文字幕在线| 草草在线视频免费看| 久久精品aⅴ一区二区三区四区| 国产99白浆流出| 好男人电影高清在线观看| 午夜福利高清视频| 一区二区三区激情视频| 国产精品国产高清国产av| 男女那种视频在线观看| 国产亚洲精品综合一区在线观看 | 精品国产亚洲在线| 亚洲最大成人中文| 99久久99久久久精品蜜桃| 免费在线观看日本一区| 熟女少妇亚洲综合色aaa.| 真人一进一出gif抽搐免费| 国产av又大| 午夜亚洲福利在线播放| 极品教师在线免费播放| 成人av一区二区三区在线看| 国产激情欧美一区二区| 男女那种视频在线观看| www.熟女人妻精品国产| 两人在一起打扑克的视频| 欧美人与性动交α欧美精品济南到| 91麻豆av在线| 国内精品久久久久精免费| 一级毛片高清免费大全| 成人永久免费在线观看视频| 窝窝影院91人妻| 50天的宝宝边吃奶边哭怎么回事| 国产精品永久免费网站| 人妻久久中文字幕网| 18禁黄网站禁片午夜丰满| 国产亚洲av嫩草精品影院| 免费看十八禁软件| 一级作爱视频免费观看| 99热这里只有精品一区 | 精品久久久久久久久久久久久 | 人人澡人人妻人| 一级毛片高清免费大全| 成人国产综合亚洲| 在线观看舔阴道视频| 一级黄色大片毛片| 亚洲真实伦在线观看| 1024香蕉在线观看| 美女高潮到喷水免费观看| 欧美黑人巨大hd| 日本一区二区免费在线视频| 欧美日韩亚洲国产一区二区在线观看| 夜夜躁狠狠躁天天躁| 怎么达到女性高潮| 亚洲天堂国产精品一区在线| 99久久99久久久精品蜜桃| 黑人巨大精品欧美一区二区mp4| 日韩中文字幕欧美一区二区| 亚洲自拍偷在线| 午夜影院日韩av| 国产在线观看jvid| 精华霜和精华液先用哪个| 亚洲第一av免费看| 午夜视频精品福利| 757午夜福利合集在线观看| 日韩国内少妇激情av| 久久精品成人免费网站| 搡老妇女老女人老熟妇| 黄频高清免费视频| 18美女黄网站色大片免费观看| 欧美成人一区二区免费高清观看 | 久久久久九九精品影院| 久久久久久人人人人人| 国产熟女xx| 757午夜福利合集在线观看| 国产乱人伦免费视频| 亚洲精品一卡2卡三卡4卡5卡| 亚洲人成网站在线播放欧美日韩| 久久国产亚洲av麻豆专区| 黄色毛片三级朝国网站| 久久国产亚洲av麻豆专区| 国产片内射在线| 一本精品99久久精品77| www.熟女人妻精品国产| 午夜成年电影在线免费观看| 波多野结衣av一区二区av| 丁香欧美五月| 神马国产精品三级电影在线观看 | 午夜影院日韩av| 美女免费视频网站| 久久国产乱子伦精品免费另类| 草草在线视频免费看| 国产一区在线观看成人免费| 中文字幕人成人乱码亚洲影| 国产精品综合久久久久久久免费| 欧美又色又爽又黄视频| 女人高潮潮喷娇喘18禁视频| 日韩欧美 国产精品| 国产精品1区2区在线观看.| 欧美精品啪啪一区二区三区| 欧美乱色亚洲激情| 国产精品亚洲一级av第二区| 一级a爱片免费观看的视频| 18禁国产床啪视频网站| 香蕉丝袜av| 国产成人影院久久av| 91麻豆av在线| 国产1区2区3区精品| 伦理电影免费视频| 国产熟女xx| 午夜激情av网站| 午夜视频精品福利| 亚洲色图av天堂| 老汉色∧v一级毛片| 人人妻人人澡欧美一区二区| 丁香欧美五月| 十八禁网站免费在线| 亚洲成人国产一区在线观看| av在线天堂中文字幕| 桃红色精品国产亚洲av| 日韩一卡2卡3卡4卡2021年| 18禁黄网站禁片午夜丰满| 别揉我奶头~嗯~啊~动态视频| 亚洲国产中文字幕在线视频| 50天的宝宝边吃奶边哭怎么回事| 我的亚洲天堂| 欧美不卡视频在线免费观看 | 人妻丰满熟妇av一区二区三区| 老司机福利观看| 亚洲欧美日韩高清在线视频| 国产伦在线观看视频一区| 岛国在线观看网站| 此物有八面人人有两片| 一二三四社区在线视频社区8| 欧美日韩亚洲综合一区二区三区_| 久久精品国产清高在天天线| 欧美黑人欧美精品刺激| 日韩高清综合在线| 啦啦啦韩国在线观看视频| 色婷婷久久久亚洲欧美| 日本成人三级电影网站| 久久精品国产亚洲av香蕉五月| 性色av乱码一区二区三区2| av片东京热男人的天堂| 国产精品久久电影中文字幕| 国产成人精品久久二区二区免费| 国产视频一区二区在线看| 99re在线观看精品视频| 丝袜美腿诱惑在线| 女警被强在线播放| 亚洲在线自拍视频| 老熟妇乱子伦视频在线观看| 亚洲成人久久性| 一区二区日韩欧美中文字幕| 亚洲狠狠婷婷综合久久图片| 在线观看免费日韩欧美大片| 两个人看的免费小视频| 看片在线看免费视频| 午夜两性在线视频| 国内少妇人妻偷人精品xxx网站 | 中文在线观看免费www的网站 | 日本黄色视频三级网站网址| www日本在线高清视频| 少妇 在线观看| 午夜视频精品福利| 国产精品久久久久久精品电影 | 99re在线观看精品视频| 久久99热这里只有精品18| 亚洲精品美女久久av网站| 成人亚洲精品一区在线观看| 操出白浆在线播放| 级片在线观看| 黄网站色视频无遮挡免费观看| 亚洲精品美女久久av网站| 欧美成人免费av一区二区三区| 日本免费一区二区三区高清不卡| av在线播放免费不卡| 女性生殖器流出的白浆| 免费搜索国产男女视频| 久久亚洲真实| 俄罗斯特黄特色一大片| 夜夜夜夜夜久久久久| 级片在线观看| 51午夜福利影视在线观看| 特大巨黑吊av在线直播 | www日本在线高清视频| 亚洲成人久久性| 999久久久国产精品视频| 十八禁网站免费在线| 色播亚洲综合网| 在线观看免费午夜福利视频| 99久久99久久久精品蜜桃| 免费av毛片视频| 国产视频内射| 亚洲熟女毛片儿| 午夜亚洲福利在线播放| 欧美日韩福利视频一区二区| 国产免费男女视频| 午夜福利一区二区在线看| a级毛片在线看网站| 久久 成人 亚洲| 日韩欧美一区视频在线观看| 麻豆国产av国片精品| 在线十欧美十亚洲十日本专区| 免费av毛片视频| 亚洲成a人片在线一区二区| 一二三四在线观看免费中文在| 好男人电影高清在线观看| 亚洲,欧美精品.| 欧美日韩福利视频一区二区| 女人高潮潮喷娇喘18禁视频| 午夜视频精品福利| av欧美777| 亚洲国产欧美一区二区综合| 色综合欧美亚洲国产小说| 亚洲精品国产区一区二| 免费观看人在逋| 国产激情偷乱视频一区二区| 又黄又爽又免费观看的视频| 91麻豆精品激情在线观看国产| av福利片在线| 人人妻人人看人人澡| 午夜影院日韩av| 免费看美女性在线毛片视频| 日韩有码中文字幕| 中文资源天堂在线| 看黄色毛片网站| 亚洲免费av在线视频| 精品一区二区三区av网在线观看| 看免费av毛片| 大型黄色视频在线免费观看| 亚洲精品中文字幕一二三四区| 精品久久久久久成人av| 国产免费男女视频| 国产高清激情床上av| 日本 欧美在线| 99精品在免费线老司机午夜| 亚洲精品在线观看二区| 琪琪午夜伦伦电影理论片6080| 精品欧美一区二区三区在线| www日本在线高清视频| av中文乱码字幕在线| 午夜福利在线在线| 视频在线观看一区二区三区| 久久精品国产99精品国产亚洲性色| 欧美日韩瑟瑟在线播放| 久久精品国产清高在天天线| 欧美乱妇无乱码| 国产精品亚洲一级av第二区| 在线观看免费午夜福利视频| 亚洲国产精品sss在线观看| 久久精品国产99精品国产亚洲性色| 午夜a级毛片| 久久国产精品人妻蜜桃| 亚洲av日韩精品久久久久久密| 国产成+人综合+亚洲专区| 免费人成视频x8x8入口观看| 久久久久久免费高清国产稀缺| 国产国语露脸激情在线看| 久久国产乱子伦精品免费另类| 亚洲av电影不卡..在线观看| 久久精品国产清高在天天线| 真人做人爱边吃奶动态| 制服丝袜大香蕉在线| 亚洲专区国产一区二区| 精品熟女少妇八av免费久了| 欧美av亚洲av综合av国产av| 国产激情久久老熟女| 国产免费av片在线观看野外av| 黄片播放在线免费| 欧美性猛交╳xxx乱大交人| 在线十欧美十亚洲十日本专区| 亚洲精品久久国产高清桃花| 男人舔女人的私密视频| 首页视频小说图片口味搜索| 在线永久观看黄色视频| 久久国产亚洲av麻豆专区| 一夜夜www| 国产视频一区二区在线看| 日韩有码中文字幕| 啦啦啦免费观看视频1| 欧美中文综合在线视频| 99在线人妻在线中文字幕| 亚洲一区二区三区不卡视频| 男女视频在线观看网站免费 | 久久欧美精品欧美久久欧美| 美女扒开内裤让男人捅视频| 一二三四社区在线视频社区8| 欧美乱码精品一区二区三区| 18美女黄网站色大片免费观看| 成人av一区二区三区在线看| 成年免费大片在线观看| 美女午夜性视频免费| 最新美女视频免费是黄的| 欧美日韩中文字幕国产精品一区二区三区| 99国产精品一区二区三区| 国产成人影院久久av| 欧美+亚洲+日韩+国产| 午夜福利成人在线免费观看| 十八禁网站免费在线| 国产伦在线观看视频一区| 一边摸一边抽搐一进一小说| 韩国精品一区二区三区| bbb黄色大片| 日韩成人在线观看一区二区三区| 中文字幕最新亚洲高清| 亚洲狠狠婷婷综合久久图片| 久热爱精品视频在线9| 国产极品粉嫩免费观看在线| 男人舔女人下体高潮全视频| 最近最新中文字幕大全电影3 | 我的亚洲天堂| 免费女性裸体啪啪无遮挡网站| 国产亚洲精品久久久久久毛片| 国产熟女午夜一区二区三区| 国产av在哪里看| 在线播放国产精品三级| 露出奶头的视频| 成人国产综合亚洲| 99精品久久久久人妻精品| 国产成人系列免费观看| 欧美一级a爱片免费观看看 | 免费在线观看成人毛片| 国产精品久久久人人做人人爽| 看片在线看免费视频| 一个人观看的视频www高清免费观看 | 免费高清视频大片| 老司机深夜福利视频在线观看| 又大又爽又粗| 午夜免费成人在线视频| 欧美日韩亚洲国产一区二区在线观看| 中文字幕人成人乱码亚洲影| 国产99久久九九免费精品| 狠狠狠狠99中文字幕| 丝袜在线中文字幕| x7x7x7水蜜桃| 精华霜和精华液先用哪个| 亚洲国产精品久久男人天堂| 香蕉av资源在线| 巨乳人妻的诱惑在线观看| 久久精品成人免费网站| 国产精品亚洲一级av第二区| 好男人在线观看高清免费视频 | 最近最新中文字幕大全免费视频| 婷婷精品国产亚洲av| 视频在线观看一区二区三区| 久久香蕉精品热| 1024手机看黄色片| 国内少妇人妻偷人精品xxx网站 | 嫩草影院精品99| 美女国产高潮福利片在线看| 两性夫妻黄色片| 最好的美女福利视频网| 国产成人啪精品午夜网站| 久久精品影院6| 国产亚洲精品av在线| 亚洲中文av在线| 人人妻人人看人人澡| а√天堂www在线а√下载| 午夜激情av网站| 免费在线观看黄色视频的| 波多野结衣巨乳人妻| 国产一区二区三区在线臀色熟女| 91九色精品人成在线观看| 日韩欧美免费精品| 岛国在线观看网站| 女生性感内裤真人,穿戴方法视频| 中文在线观看免费www的网站 | 欧美激情 高清一区二区三区| 怎么达到女性高潮| 丝袜美腿诱惑在线| 一级黄色大片毛片| 久9热在线精品视频| 波多野结衣av一区二区av| 观看免费一级毛片| 淫秽高清视频在线观看| 色老头精品视频在线观看| 两性夫妻黄色片| 免费看a级黄色片| 成人18禁在线播放| 亚洲中文av在线| 激情在线观看视频在线高清| a在线观看视频网站| 亚洲全国av大片| 欧美成人免费av一区二区三区| 亚洲第一青青草原| 欧美日本视频| 日本 欧美在线| 亚洲 国产 在线| 亚洲国产中文字幕在线视频| 日韩三级视频一区二区三区| 女人爽到高潮嗷嗷叫在线视频| 在线观看午夜福利视频| 99久久久亚洲精品蜜臀av| 欧美黄色淫秽网站| 欧美激情 高清一区二区三区| 亚洲 欧美一区二区三区| 18禁美女被吸乳视频| 999久久久精品免费观看国产| 亚洲人成伊人成综合网2020| 一级a爱片免费观看的视频| 久久人妻av系列| 中文字幕另类日韩欧美亚洲嫩草| 一边摸一边做爽爽视频免费| 国产真实乱freesex| 亚洲中文字幕一区二区三区有码在线看 | 欧美国产精品va在线观看不卡|