實戰必讀! 發現百萬級用戶公鏈漏洞,我們靠的是這套方法

本文作者負責支撐工信部、發改委、央行、雄安新區及多省市區塊鏈產業落地,保障場景建設質量。受託測試的公鏈是國際兩大楔入式側鏈技術解決方案之一,擁有註冊用戶百萬級。本文將介紹如何利用一套測試方法,發現該公鏈賬戶系統設計缺陷的實戰過程和經驗總結。

測試——最經濟有效的區塊鏈質保手段

對於區塊鏈產品或系統而言,質量問題,如可靠性、兼容性、性能和安全性等都是無法迴避的關鍵問題,也是其影響相關應用和行業發展的重要因素。

業界常用的質量保障手段,包括軟件工程方法、正式技術評審、度量與控制、標準與過程、SCM和SQA、測試等方法。從工程實踐看,只有綜合運用上述方法才能獲得高質量系統,其中測試是保障區塊鏈信息系統質量最有效、最經濟的手段之一。

圖1 質量保障手段

百萬級用戶待測公鏈簡介

本次受託開展測試的公鏈A,是以側鏈技術爲基礎的新型非中心化應用,已成爲國際兩大楔入式側鏈技術解決方案之一,擁有註冊用戶百萬級,關注量近千萬。其實現了雙向SPV楔入方式與側鏈系統或DAPP進行數據交互,適用於金融、保險、電子商務、虛擬代幣、股權衆籌、醫療信息等行業領域。其核心技術(側鏈技術)是一種在不改變區塊鏈信息系統或區塊鏈場景現有架構基礎上,採用擴容方式增加新功能,實現新業務場景的重要解決方案。如下圖所示:

圖2 公鏈A系統架構

公鏈A有幾大優勢:

  1. 各側鏈系統上數據存儲交易相對獨立;
  2. 側鏈系統擴容不會增加區塊鏈信息系統主鏈負擔,不會降低主鏈運行效率;
  3. 能有效避免區塊鏈信息系統主鏈上數據的過度膨脹和不可控;
  4. 實現靈活定製的各項區塊鏈側鏈參數,如區塊間隔、交易費、獎勵等。

測試環境部署詳解

數字資產提現和充值操作是區塊鏈信息系統兩個原子操作,在精準扶貧場景下,使用充值和提現原子操作,可實現貧困人口扶貧款入賬和出賬、扶貧物資的發放和使用、扶貧權限的監督和控制等。充值和提現原子操作,其遠不止書面意義,所有涉及數值變化的所有操作可簡單歸納爲提現和充值兩部分。公鏈A的提現和充值操作,在其構建的全球數字資產交易網絡中,提現操作可根據資產名字、數量、接收者地址、一級密碼、二級密碼生成的交易數據,實現不同側鏈、不同賬戶、不同資產之間的基於虛擬貨幣構建的數字資產價值的上鍊和轉移。

以提現和充值原子操作爲測試對象,爲充分驗證公鏈A升級前後的功能,可如下構建一套區塊鏈仿真測試環境,測試仿真環境物理部署如下。

圖3 仿真環境物理部署圖

測試環境主側鏈邏輯部署如下,不同側鏈(也是由區塊依次鏈接構建的區塊鏈信息系統)之間無法直接交互,需通過主鏈之間完成價值傳遞。

圖4 仿真環境邏輯部署圖

測試用例設計細節

爲較好開展提現和充值測試,分析公鏈A升級前後的結構變化,由於賬戶體系變化,結合影響域理論,建議重點對不同賬戶體系下的提現和充值進行測試。本次,採用探索式測試方法,結合正交矩陣法設計測試用例,設計側鏈A採用base58check地址(新賬戶體系),側鏈B採用Digital地址(舊賬戶體系)。

圖5 測試用例設計圖

如上圖,對採用Digital實現的舊賬戶體系與採用base58check實現的新賬戶體系之間的充值、提現原子操作採用正交矩陣法進行用例設計,基於公鏈A開源代碼編寫測試腳本,共設計4組16個用例,對新賬戶到新賬戶、新賬戶到老帳戶、老帳戶到老帳戶、老賬戶到新賬戶之間的充值和提現操作進行單筆和多筆交易。(因可能涉及用戶隱私,故詳細測試用例暫不披露)

測試過程展現

結合上述思路,側鏈A採用base58check地址(新賬戶體系),側鏈B採用Digital地址(舊賬戶體系),預期通過多次調用數字資產提現測試腳本,側鏈B資產將轉移至側鏈A。

  1. 批量執行提現操作(如圖4次),側鏈A資產從100增加至500;
  2. 側鏈B資產從799.29減少至 399.29(不包含手續費)。

圖6 批量提現操作

系統批量執行提現,側鏈A資產成功從100增加至500,側鏈B資產未減少,數字資產憑空增加。反之,也存在數字資產憑空消失現象。

側鏈A提現前後資產變化:

側鏈B提現前後資產變化:

測試結果剖析

公鏈A發生數字資產提現操作異常,提現操作後側鏈A資產增加,側鏈B資產未有變化。採用如下步驟,對測試結果進行剖析,分析定位缺陷所在。

  1. 分析測試腳本、執行日誌,未發現缺陷和異常告警;
  2. 分析側鏈A/B間通信數據,側鏈B發佈充值成功通知;
  3. 靜態分析側鏈B源代碼,發現提現或充值操作設計缺陷。

公鏈A迭代升級後,新引入一種採用base58check實現的新賬戶體系,且同時存在採用Digital實現的舊賬戶體系,從而導致新舊賬戶體系之間提現和充值原子操作異常。採用Digital實現的舊賬戶體系存在設計缺陷,其對於非Digital發起的任一操作不做響應,但又返回非空的特定值。在舊賬戶體系中,特定值代表執行失敗,然而不同賬戶體系下,非空值也許意味着成功(非空即爲真)。也就是基於此,採用Digital實現的舊賬戶體系對於採用base58check實現的新賬戶體系發起的任一充值和提現原子操作均返回特定值,舊賬戶體系是未正確執行,在新賬戶體系下,卻意味着成功執行。

經深入瞭解其開發流程,發現其根本原因在於新版本上線前,未嚴格執行准入準出制度,自測試用例不足,測試不充分,無法保障新系統上線質量,從而引入賬戶系統設計缺陷,新版本無法向下兼容,最終導致公鏈A提現異常。

對讀者的建議

運營人員:建議提早禁止舊版本登陸,強制升級至新版本,同步對採用base58check實現的新賬戶體系進行升級改造,防範採用Digital實現的舊賬戶體系進行重放攻擊,並全面禁止數字地址跨鏈轉賬到側鏈或應用鏈,擁有數字地址的老賬戶可以先把資產中轉到新的base58check賬戶,然後再跨鏈轉移到側鏈。

開發人員:建議對升級補丁或版本變更部分做合理、有效分析,邀請同行確定其影響域,充分開展自測試後再提交合並。

測試人員:採用下述准入準出制度,充分設計測試用例,嚴格執行確保測試未達到要求前,系統測試不進入下一階段。

建議的准入準出制度:

1. 測試用例設計已經通過評審

2. 按照集成構件計劃及增量集成策略完成了整個系統的集成測試

3. 達到了測試計劃中所規定的覆蓋率的要求

A. 語句覆蓋率最低不能小於 98%

B. 測試用例執行覆蓋率應達到 100%

C. 測試需求執行覆蓋率應達到 100%

4. 在測試中發現的錯誤已經得到修改,各級缺陷修復率達到標準。

A. 一、二級錯誤修復率應達到100%

B. 三、四級錯誤修復率應達到98%以上

C. 五級錯誤修復率應達到90%以上

作者簡介:相里朋,工信部電子五所高級工程師、中國計算機學會區塊鏈專委會委員、貴陽區塊鏈測試認證中心、重慶區塊鏈測試認證中心主任,開展區塊鏈質量保障技術研究。支撐工信部、發改委、央行、雄安新區、重慶市、貴州省、廣東省等地市,推進區塊鏈產業落地,保障場景建設質量。借調貴陽副市長祕書,市祕書長助理。完成省課題2項,標準5項(《區塊鏈系統測評和選型規範》、《區塊鏈與分佈式記賬信息系統評估規範》),區塊鏈叢書1本(區塊鏈與產業創新),發表SCI及期刊5篇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章