區塊鏈智能合約安全威脅實時防御框架法

  點擊數:904  發布時間:2020-06-16 09:40
區塊鏈是當前炙手可熱的技術,其不可篡改、不可偽造、不可抵賴、可追溯、無需第三方可信機構、支持智能合約等特性,為包括醫療、物流、電商、金融、教育等行業賦能。近年來,區塊鏈安全尤其是區塊鏈智能合約安全事件層出不窮。因此,在線監測區塊鏈安全威脅,并對安全威脅做出處置,具有重大研究意義和實用價值。深入研究智能合約運行時信息獲取、智能合約虛擬機插樁等技術,提出了一種針對區塊鏈安全威脅的實時防御框架,并利用該框架,以重入攻擊、整數溢出攻擊為威脅示例開展防御邏輯分析,以期能對該框架的應用提供思路。
關鍵詞:智能合約 ,區塊鏈 ,安全威脅

區塊鏈是當前炙手可熱的技術,其不可篡改、不可偽造、不可抵賴、可追溯、無需第三方可信機構、支持智能合約等特性,為包括醫療、物流、電商、金融、教育等行業賦能。近年來,區塊鏈安全尤其是區塊鏈智能合約安全事件層出不窮。因此,在線監測區塊鏈安全威脅,并對安全威脅做出處置,具有重大研究意義和實用價值。深入研究智能合約運行時信息獲取、智能合約虛擬機插樁等技術,提出了一種針對區塊鏈安全威脅的實時防御框架,并利用該框架,以重入攻擊、整數溢出攻擊為威脅示例開展防御邏輯分析,以期能對該框架的應用提供思路。

區塊鏈是當前炙手可熱的技術,其不可篡改、不可偽造、不可抵賴、可追溯、無需第三方可信機構、支持智能合約等特性,為包括醫療、物流、電商、金融、教育等行業賦能。然而,作為各種分布式應用(Decentralized Application,DApp)的底層技術,區塊鏈本身的安全性將從根本上決定上層分布式應用的安全性、可用性以及性能。

區塊鏈部署于互聯網中,而互聯網存在著各種網絡威脅。尤其是區塊鏈及其上的分布式應用涉及到大量的金錢,區塊鏈成為黑客的一個重要攻擊目標。近年來,區塊鏈安全事件層出不窮,從底層P2P網絡、中間層虛擬機到上層的智能合約,都成為黑客們攻擊的對象。下面列舉一些區塊鏈威脅的例子。

Marcus等人發現以太坊P2P網絡節點發現機制的缺陷,利用該缺陷實現了日蝕攻擊,導致被攻擊節點被隔絕等。由于以太坊虛擬機沒有校驗地址的位數,并自動補齊缺失的位,將會導致短地址攻擊,黑客可以利用該虛擬機漏洞盜取各種代幣。

智能合約的漏洞更是層出不窮,其中最著名的是2016年發生的TheDAO合約重入漏洞攻擊。TheDAO合約通過眾籌,在合約中存儲了價值數千萬美元的以太幣。黑客利用合約的重入漏洞,盜取了高達6千萬美元的以太幣,并導致以太坊分叉為了ETH和ETC。2018年以來,多款代幣合約被爆發現整數溢出漏洞,黑客利用這些漏洞發動了整數溢出攻擊,導致了大量代幣被盜。

區塊鏈的安全威脅已經成為制約區塊鏈未來發展的關鍵問題,因此如何在安全威脅進行在線檢測,并實時對安全威脅做出處置,具有重大的研究意義和實用價值。

本文以智能合約運行時信息獲取、智能合約虛擬機插樁、安全威脅檢測技術為基礎,提出了一種區塊鏈安全威脅實時防御框架,并基于重入攻擊、整數溢出攻擊討論該框架的應用邏輯,為該框架在區塊鏈安全威脅防護研究和實踐提供參考思路。

1 區塊鏈安全威脅分析

1.1 區塊鏈層次結構

以以太坊(Ethereum)為例,區塊鏈結構主要包含應用層、數據層、共識層以及網絡層4層,如圖1所示。

網絡層,區塊鏈采用對等(Peer-to-Peer)網絡技術組織各個節點,主要包括節點發現、傳播機制和驗證機制。

共識層,主要包含共識機制和激勵機制。共識機制是用來維護區塊鏈中對等節點間達成一致的策略和方法。典型的共識機制包括工作量證明(Proof of Work,PoW)、權益證明(Proof of Stake,PoS)和股份授權證明(Delegate Proof ofStake,DPoS)等;激勵機制主要包括發型機制和分配機制,通過引入獎勵和懲罰來引導區塊鏈節點遵循規則,實現區塊鏈系統的良性運行。

數據層,主要包括數據區塊、交易以及事件,包含區塊鏈中的各種數據結構。

應用層,包括賬戶、智能合約以及運行智能合約的虛擬機(Environment VirtualMachine,EVM)。智能合約的出現,為區塊鏈提供了可編程特性。通過編程的方式設計智能合約,預先定義特定行為和觸發的狀態,從而實現在沒有第三方的情況下,智能合約達到觸發條件就自動執行。

1.2 基于區塊鏈層次結構的威脅分析

根據區塊鏈層次結構,區塊鏈安全威脅主要分為網絡層安全威脅、共識層安全威脅、數據層安全威脅以及應用層安全威脅。

網絡層安全威脅。因為區塊鏈網絡結構為對等網絡,因此P2P網絡面臨的安全威脅也會對區塊鏈網絡層造成安全威脅。這些攻擊包括拒絕服務攻擊、日蝕攻擊等。此外,RPC API漏洞暴露可能導致賬戶劫持攻擊。

共識層算法安全威脅。它主要對共識機制發起攻擊,控制區塊鏈按照對攻擊者有利的方向發展。目前主要的共識層攻擊有51%攻擊、自私挖礦攻擊、女巫攻擊等。

數據層安全威脅。由于區塊鏈的公開、不可篡改、分布等特性,容易導致數據層遭受隱私泄露、惡意信息傳播等攻擊。

應用層安全威脅。它包括針對虛擬機、智能合約及其他攻擊。虛擬機沒有校驗地址的位數,將會導致短地址攻擊。智能合約的攻擊包括重入攻擊、整數溢出攻擊等。其他攻擊則包括面向應用提供接口的攻擊、Parity多重簽名錢包攻擊等。

應用層安全威脅種類多樣,且已經暴露出來的針對應用層的安全威脅直接造成了巨大的經濟損失,因此本文聚焦于對應用層攻擊的防御框架的研究。

2 區塊鏈信息獲取方法研究

區塊鏈信息是進行實時防御的核心要素,目前在區塊鏈信息獲取領域已有大量研究。這些研究主要可以將獲取方法分為4類:下載與區塊文件解析、調用Web3 API、爬取區塊鏈瀏覽器以及插樁區塊鏈節點。下面將對這4種方法進一步展開描述。

2.1 下載與區塊文件解析

區塊鏈節點在同步過程中會從其他節點下載區塊文件,所以可以通過解析區塊文件獲得區塊鏈信息。Kiffer等人采用這種方法獲取數據,用以研究以太坊的硬分叉。MAIAN是一款智能合約安全漏洞自動化發掘工具,該工作也通過此方法獲得智能合約字節碼用以漏洞發掘。

2.2 調用Web3 API

以太坊提供了一套API,用戶可以通過調用這些API獲取區塊鏈信息。文獻[10]中開發的欠優化智能合約檢測系統即是調用API,web3.eth.getCode()獲取智能合約字節碼。文獻[11]是調用API,debug.traceTransaction()獲取智能合約的執行軌跡,用以計算虛擬機操作碼的執行次數。Bartoletti等人設計了一款針對比特幣和以太坊的數據搜集框架,也是通過調用比特幣節點和以太坊節點提供的API實現的。EtherQL通過調用以太坊節點名為EthereumJ提供的API來獲取數據。

2.3 爬取區塊鏈瀏覽器

區塊鏈瀏覽器如Etherscan向網站訪問者展示區塊鏈數據,因此可以通過爬取區塊鏈瀏覽器的網頁獲取數據。ZEUS通過這種方式爬取智能合約源代碼并基于形式化分析檢測合約漏洞。兩份最新的研究也是通過爬取Etherscan、Etherchain和EtherCamp獲取智能合約字節碼,然后檢測智能合約中的旁氏合約。Huang等人爬取數據用于估計挖礦和投資收益。Bartoletti等人基于兩個數據集對智能合約進行統計分析,這兩個數據集分別來自于以太坊區塊鏈瀏覽器和比特幣區塊文件。

2.4 插樁區塊鏈節點

區塊鏈節點同步區塊重放所有的交易并在虛擬機中執行智能合約,因此可以通過插樁區塊鏈節點獲取信息。文獻[19]插樁了節點Geth來獲取交易的發送者、接收者和交易金額用于復雜網絡的分析。Grossman通過這種方法獲取內部交易信息與storage的運行時信息,用以檢測智能合約的無回調對象。文獻[21]通過GasReducer的方法獲取智能合約執行軌跡用于衡量GasReducer的優化效果。

現存的技術或多或少存在以下3個問題:數據獲取不完整、數據信息混淆以及數據獲取效率低。文獻[22]研究設計了一款區塊鏈數據搜集框架,名為DataEther,解決了上述問題。因此,本項目沿用DataEther的方法獲取區塊鏈數據,從而為本文的區塊鏈安全威脅實時防御框架提供數據基礎。

3 區塊鏈安全威脅實時防御框架

3.1 設計目標

研究高擴展的區塊鏈安全威脅實時防御框架,圍繞以下幾個目標開展對防御框架的設計:

(1)獲取完備的智能合約執行信息;

(2)設計可擴展框架,允許在不修改虛擬機的前提下,檢測新類型的安全問題;

(3)基于設計框架討論對實際攻擊的應用邏輯。

3.2 安全框架設計

區塊鏈安全威脅實時防御框架如圖2所示,由基于智能合約虛擬機的插樁點、區塊鏈信息獲取模塊、威脅檢測模塊以及安全威脅處置模塊組成。它主要實現的功能包括智能合約運行時信息獲取、威脅檢測以及安全威脅處置。

3.2.1 智能合約運行時信息獲取

本文設計通過對智能合約虛擬機進行插樁來實現對智能合約運行時信息的完備提取。智合約運行時信息獲取的詳細設計見3.3節。區塊鏈信息獲取模塊收集智能合約虛擬機插樁點采集數據,并將數據傳遞到監測模塊中的威脅檢測中間件做威脅檢測。

3.2.2 威脅檢測

威脅檢測主要的執行單元是威脅檢測模塊。威脅檢測模塊由威脅檢測中間件和可擴展檢測算法庫構成。

威脅檢測中間件實現對可擴展檢測算法庫中檢測算法的注冊、調度和卸載,實現智能合約運行時信息從區塊鏈信息獲取模塊到檢測算法的數據傳遞,實現將威脅檢測結果發送到安全威脅處置模塊。

可擴展檢測算法庫由多個檢測算法組成,算法庫自身是可縮減可擴展的彈性架構。根據檢測需要,通過威脅檢測中間件,注冊添加新的檢測算法。注冊檢測算法的同時,將算法所需的數據信息事件注冊威脅檢測中間件,威脅檢測中間件將所需的信息事件內容通知到區塊鏈信息獲取模塊,信息獲取模塊根據事件需求將插樁點采集到的智能合約運行時信息處理后上傳到威脅檢測中間件。

詳細的事件通知設計見3.4節。檢測算法根據威脅檢測中間件提供的數據實現威脅檢測,并將結果傳遞回威脅檢測中間件。檢測算法庫中,檢測算法的生命周期包括注冊、更新、卸載以及使用調度。這些生命周期管理都在威脅檢測中間件完成。

3.2.3 安全威脅處置

安全威脅處置模塊收到威脅中間件發出的威脅檢測結果,根據結果情況提供不同的安全威脅處置。安全威脅處置跟進一步的設計見3.5節。

3.3 智能合約運行時信息獲取

智能合約運行時信息獲取是為檢測智能合約安全問題做準備,其中的關鍵點是保障運行時信息的完備性。考慮到未來可能會出現新種類的安全威脅,所以采集部分運行時的信息是不可取的。本文對合約執行的兩個階段進行插樁,從而確保信息獲取的完備性。

第一階段,外部交易提交階段。由于智能合約執行必須由外部交易觸發,所以對外部交易提交階段插樁,能夠準確得知智能合約的初始執行信息,包括交易hash、交易發送方、智能合約地址、以太幣數量、汽油上限、汽油定價、調用的函數ID、函數參數以及創建的合約字節碼等。

第二階段,智能合約解釋執行階段。虛擬機內建了一個解釋執行器對智能合約進行解釋執行,因此本文對解釋執行器插樁能夠獲得每一條字節碼的執行情況。

智能合約包含超過130種字節碼,而針對每一種字節碼,解釋執行器都提供了一個對應的解釋執行例程。因此,本文將對所有的解釋執行例程插樁,獲取的信息包括讀/寫的棧(stack)內容、讀/寫的存儲器(memory)內容、讀/寫的倉庫(storage)內容。除此以外,本文將對以下6種字節碼的解釋執行例程進行特別插樁處理,因為這6種字節碼會產生內部交易。

CREATE:用于創建新合約,因此本文將額外獲取被創建合約的字節碼和合約地址。

CALL/CALLCODE/DELEGATECALL/STATICCALL:用于調用合約,因此本文將額外獲取被調用合約的字節碼、被調函數ID、調用參數以及汽油限制。

SELFDESTRUCT:用于銷毀合約,因此本文將額外獲取合約被銷毀時殘留的以太幣和以太幣的接收合約地址。

此外,本文介紹的方法還將記錄智能合約運行時的環境信息,包括區塊高度、挖礦難度和時間戳等。

插樁代碼和虛擬機原本代碼共享計算資源,因此插樁代碼的執行會帶來運行時開銷(runtime overhead)。除了采集信息的完備性,本文提出一種按需(on-demand)的虛擬機插樁方法,降低了運行時開銷。這種按需插樁的基本思路并不在一開始就將所有的插樁點全部插樁,而是根據用戶編寫的檢測程序注冊的事件通知,在需要的位置插樁。

3.4 事件通知

用戶在編寫檢測程序時,需要注冊事件處理例程,只有注冊后才會收到相應的事件通知。為了確保檢測程序能夠接收到完整的智能合約運行時信息,實現字節碼級的檢測,本文提供了兩類事件通知。

(1)交易執行TransApply(INFO):當外部交易或內部交易執行時生成此事件,檢測程序將得到交易所有信息和環境信息。

(2)字節碼執行ExeOp(INFO):每一條字節碼執行時都將生成此事件,檢測程序將得到該字節碼的運行時信息和環境信息。

雖然通過上面兩種事件通知,檢測程序能夠獲得完整的智能合約運行時信息,但兩種事件可能過于底層,需要用戶對虛擬機有較強的掌握。為了降低用戶的使用難度,本文定義如下具有一定語義的事件。

(1)合約創建ContractCreate(INFO):當合約創建時生成此事件,檢測程序將得到合約創建時所有的運行時信息,包括被創建合約的字節碼和環境信息。

(2)合約調用ContractInvoke(INFO):當合約調用時生成此事件,檢測程序將得到合約調用時所有的運行時信息,包括被調用合約的字節碼和環境信息。

(3)合約銷毀ContractDestruct(INFO):當合約調用時生成此事件,檢測程序將得到被銷毀合約地址、殘留以太幣數量、接收殘留以太幣的賬戶以及環境信息。

(4)基本塊執行ExeBB(INFO):每個基本塊第一條字節碼執行時生成此事件,檢測程序將得到基本塊第一條字節碼地址和環境信息。

(5)算數操作被執行ExeArith(INFO):當算數操作被執行時生成此事件,檢測程序將得到該算數操作的運行時信息和環境信息。

(6)位操作被執行ExeBit(INFO):當位操作被執行時生成此事件,檢測程序將得到該位操作的運行時信息和環境信息。

(7)跳轉操作被執行ExeJump(INFO):當跳轉操作被執行時生成此事件,檢測程序將得到該跳轉操作的運行時信息,包括跳轉目標,以及環境信息。

(8)日志產生LogProduce(INFO):智能合約通過記錄日志向區塊鏈外發送信息,當日志產生時生成此事件,檢測程序將得到日志信息以及環境信息。

3.5 安全威脅處置

當檢測程序檢測到安全威脅時,需要處理安全威脅。由于智能合約在虛擬機內運行,而檢測程序在虛擬機外,因此本文擬修改虛擬機,在虛擬機中內建多個威脅處理模塊。檢測檢測程序檢測到威脅后,給虛擬機的威脅處理模塊發送命令,執行用戶指定的處理措施。常見的威脅處理措施包括中止當前智能合約的執行、禁止調用危險合約以及禁止創建惡意合約。

4 基于實時防御框架的防御示范

基于本文提出的區塊鏈安全威脅實時防御框架,以整數溢出攻擊和重入攻擊作為典型攻擊,示范討論該框架的防護邏輯,以期對區塊鏈實時防御框架的進一步研究及應用提供參考思路。

4.1 重入攻擊檢測

4.1.1 威脅描述

若智能合約A存在重入漏洞,則A在執行過程中會調用合約B,而合約B又會調用合約A,形成一個調用環。若重入漏洞被攻擊者利用,可能引起嚴重的安全問題,尤其是當該調用環在一次外部交易提交過程中被多次執行時。例如:TheDAO合約存在重入漏洞,攻擊者攻擊該漏洞偷走了價值超過6千萬美元的以太幣[3]。這次安全事件也是造成以太坊分裂為ETH和ETC的直接原因。

4.1.2 檢測思路

檢測重入攻擊的基本思路是檢測外部交易是否使得合約調用出現環結構。為了檢測調用環,需要知道外部交易和內部交易信息,所以檢測程序需要注冊交易執行的事件通知TransApply,并在事件處理函數中實現檢測功能。下面首先給出重入攻擊的形式化定義,然后給出實時的重入攻擊檢測方案。首先定義一個結構,稱之為單交易圖OG,這是由一個外部交易引起的交易圖,是一個5元組數據。

(1)ACC,單個外部交易涉及的所有賬戶的集合。

(2)EOA,外部交易的調用者,EOA ACC。

(3)T,單個外部交易及其觸發的所有內部交易的集合。

(4)N,自然數集合,表示T中各交易的相對順序,其中外部交易的順序為1。

(5),1.jpg遷移函數,2.jpg,例如3.jpg

在一個單交易圖OG中,若存在一個賬戶4.jpg使得5.jpg,則認為OG中出現了調用環,可認為該交易是重入攻擊。為了降低可能的誤報,本方案允許用戶設置一個閾值,當調用環執行次數大于該閾值才認為是重入攻擊。

本方法基于實時的調用環檢測,即當調用環即將形成時檢測出調用環,而不是外部交易完全執行完后再檢測。本方法的優勢在于可以在攻擊過程中予以檢測和阻斷;如果等外部交易完全執行后再檢測,則一次攻擊已經完成,無法做到及時阻斷,且可能造成誤報。下面基于圖2描述本方案的調用環檢測過程。

圖3中,一個外部賬戶EOA調用了合約A,A在執行過程中陸續調用了其他5個合約。本例涉及一個外部交易(1)和8個內部交易(2~9),交易的由圖中數字按從小到大的順序執行。如果在外部交易提交完成后檢測調用環,將會得到圖中3的調用圖。從圖3可以發現3個調用環,分別為2→3→7、5→6→7和8→9→7。但是,由于交易執行存在順序,所以只有5→6→7是真正的調用環,其余兩個為誤報。

本方法設計的檢測程序注冊了交易執行的事件通知,而事件的獲取是通過虛擬機插樁實現的,所以事件通知的順序完全按照交易執行的順序。因此,事件處理例程的執行順序也是按照交易執行的順序,則本文提出的方法能夠獲知交易執行順序。本文設計了交易表用以檢測調用環,如圖4所示。

發送者集合表示某外部交易執行過程中所有出現的發送者;接收者表示當前(外部或內部)交易的接收者。交易表按照交易執行順序從上到下排列。當有新的交易產生時,檢測當前交易的接收者是否出現在發送者集合中。若出現,說明合約執行出現了調用環,本方法繼而回溯到目前為止的交易,匹配交易的發送者和接收者,直到形成閉環。以圖3為例,當交易7執行時,本方法檢測到調用環,因此在交易8和交易9產生前即可實時采取應對措施。

4.2 整數溢出攻擊檢測

4.2.1 威脅描述

整數溢出是智能合約的一類出現頻率很高的安全問題,可能導致嚴重的后果,尤其是各種代幣被盜。2018年4月的報道披露了8個存在整數溢出漏洞的代幣合約[4]。整數溢出是一類傳統的安全問題,在x86代碼中也普遍存在。但是,在區塊鏈智能合約領域中,整數溢出會帶來直接的經濟損失,因此檢測整數溢出攻擊是保障區塊鏈安全的重要措施。

4.2.2 檢測思路

整數溢出由算數操作引起,所以檢測程序本應注冊算數操作被執行的事件ExeArith。當事件處理例程被調用時,將會收到算數操作的信息,包括算數操作類型和操作數。檢測算數操作是否會產生溢出是容易的,但只要溢出就認為發生了整數溢出攻擊會帶來大量的誤報,在實際應用中是不能接受的。

圖5是一個算數運算庫的代碼,作用是防止整數溢出。當加法溢出時(語句2),中止執行智能合約(語句3)。所以,如果智能合約調用該庫中的函數,即使發生了整數溢出,也不會帶來安全問題。所以,認為圖5的加法函數存在整數溢出漏洞是誤報。

為了解決整數溢出檢測的高誤報問題,本方案提出基于污點分析排除誤報。污點分析是安全領域常用的技術,由污點源、污點傳播和污點槽(taint sink)3大組件組成。本方案將整數溢出的運算結果和操作數標記為污點源,如圖5中的a、b、c;監控所有的EVM操作,追蹤污點傳播;如果污點傳播到污點槽即一些關鍵位置,則認為發生了整數溢出攻擊。典型的污點槽包括倉庫、內部交易的參數以及合約返回值。下面給出整數溢出攻擊檢測時用到的污點分析規則。

6.jpg

其中,8.jpg7.jpg的操作結果;9.jpg表示操作結果有溢出;10.jpg表示任意操作本身是污點;Arith表示算術運算;11.jpg表示所有操作數和結果都被標記為污點;

式(1)是算數運算采用的污點分析規則,如果任意操作數本身就是污點或者算數運算的結果溢出,那么算數運算的所有操作數和結果都被標記為污點。

12.jpg

其中,OP表示EVM操作;13.jpg表示將操作結果標記為污點。

式(2)是通用的污點分析規則,當EVM操作不是算數操作也不是污點槽操作時匹配此規則。當EVM操作的某個操作數是污點,那么操作的結果也被標記為污點。

14.jpg

其中,SSTORE/INVOKE/RET表示污點槽操作,分別對應寫倉庫、內部交易和合約返回值操作。

式(3)是污點槽采用的污點分析規則,如果污點槽操作(寫倉庫、內部交易、合約返回值)的操作數是污點,則檢測到了整數溢出攻擊。

采用污點分析后,由于圖5中的污點源沒有傳播到污點槽,所以本方案可以排除誤報。圖5是CVE-2018-13746披露的智能合約整數溢出漏洞,有漏洞的合約叫kBit。圖6中,語句2的加法運算存在溢出漏洞,溢出后的結果將會存儲在balances[target]中,而balances是位于倉庫中的全局變量,所以語句2執行時,檢測程序認為是整數溢出攻擊。

為了實現污點分析,檢測程序需要監控每條EVM操作的執行情況,因此檢測程序注冊字節碼執行事件ExeOp。這樣每條字節碼執行時,事件處理例程都將得到通知,檢測程序在事件處理例程里實現對污點源的標記與跟蹤。

5 結語

本文針對區塊鏈應用層安全威脅,深入研究智能合約運行時信息獲取、智能合約虛擬機插樁和安全威脅檢測技術,提出了一種檢測算法可擴展的區塊鏈安全威脅實時防御框架。該框架設計了基于虛擬機插樁智能合約運行時信息全面采集方式,威脅檢測算法注冊、管理、調度機制以及檢測結果與處置方法聯動機制,利用本文提出的實時防御框架,開展基于重入攻擊、整數溢出攻擊的防御邏輯討論,為該框架在區塊鏈安全威脅防護研究和實踐提供了參考思路。

作者簡介 >>>

白楊(1988—),女,碩士,工程師,主要研究方向為信息安全、數據安全、云計算安全。

選自《通信技術》2020年第六期 (為便于排版,已省去原文參考文獻)

來源:信息安全與通信保密雜志社

相關文章


熱點新聞
推薦產品
 
三分彩计划网页版 绝地求生下载 22选5绝招 海南4十1彩票开奖结果 (*^▽^*)MG花花公子_破解版下载 凤凰彩票平台真的吗 (-^O^-)MG伴娘我最大登陆 重庆时时彩综合走势图 (★^O^★)MG自由精神玩法介绍 (^ω^)MG轩辕帝传试玩网站 (★^O^★)MG跳跳猫猫巨额大奖视频 双色球黑龙江36选7 (*^▽^*)MG现金咖啡免费下载 重庆时时彩预测计划 (★^O^★)MG蛇和梯子技巧介绍 (★^O^★)MG四灵闯关 (*^▽^*)MG神奇的栈游戏说明