摘要:按照流程,用戶驗證身份通過後調用此API轉賬,但由於驗證在前,轉賬在後,兩者並非同時進行,導致攻擊者直接調用轉賬API接口發起轉賬可以直接繞過身份驗證並且可以越權其他用戶進行轉賬。在安全審計過程中,交易所的二次驗證有使用Google驗證碼以及手機和郵箱驗證碼,二次驗證就是爲了保障用戶賬號安全,已經敏感操作的確認,但是由於設計缺陷將導致二次驗證形同虛設。

對於交易所來說,一個邏輯完備,鑑權完整的交易流程必不可少。業務邏輯漏洞獨立與其他服務卻又容易受到其他安全問題的牽擾。與SQL注入、XSS等常規web安全漏洞不同,業務邏輯漏洞使用正常的業務流程中的程序固有不足,邏輯設計缺陷等進行攻擊,甚至繞過已有安全防護措施,一般防護手段以及安全設備無法防禦,因此業務邏輯漏洞一直困擾着廣大開發者和安全測試人員。這裏給出在經過大量對交易所安全測試後總結出的詳細的測試條目,拿出具體案例和大家一起分析存在的安全問題。

二、測試列表

業務邏輯審計列表:

  • 越權操作測試
    • 訂單越權發起、查看、編輯、刪除
    • 地址越權添加、刪除
    • 用戶信息越權查看、編輯
  • 工作流程繞過測試
  • KYC認證缺陷測試
    • 接口識別
    • 人工識別
  • OTC邏輯缺陷測試
  • 數值精度測試
  • 資產安全測試
    • 充值
    • 提現
  • 二次驗證繞過測試
    • Google驗證器
    • 手機及郵箱驗證嗎
  • 盤口價格設置缺陷測試
  • 假充值測試
  • 短地址攻擊測試
  • 數值精度測試

三、案例分析

越權操作

可能是因爲開發人員熱衷於打破樊籬 ,所以越權一直是Web安全中老生常談的問題,並且由於訂單、地址、餘額和個人信息等等功能的聚集,交易所是越權問題的重災區。越權漏洞一般分爲平行越權和垂直越權兩種,而交易所中平行越權佔大多數,不僅可以導致越權查看、修改、撤銷訂單,添加、刪除地址以及修改個人信息,而且配合存在的信息泄露問題,可以變相的獲取所有用戶的KYC信息,因爲是正常請求,比起脫褲更難被WAF所發現。

某交易所修改userPhone可以越權讓任意用戶下單:

某交易所遍歷id可以越權刪除地址:

根據上述示例可以看出,雖然請求頭中含有token和userId等參數,但服務器在接受到請求後並沒有將token和userId與body裏所攜帶的id和userPhone進行校驗,沒有做好鑑權,導致越權。

工作流程繞過

近期零時安全團隊在某交易所發現一起由於越權、信息泄露以及工作流程繞過導致的盜幣事件。因爲事件發生時間太近,不確定廠商是否修復完畢,這裏不再披露詳細的攻擊細節以及截圖,簡單講一講攻擊手法。

攻擊者在某交易所前端文件中發現了轉賬時所調用的API接口。按照流程,用戶驗證身份通過後調用此API轉賬,但由於驗證在前,轉賬在後,兩者並非同時進行,導致攻擊者直接調用轉賬API接口發起轉賬可以直接繞過身份驗證並且可以越權其他用戶進行轉賬。

造成本次攻擊事件的主要原因有三:

  • 前端文件泄露API接口
  • 交易時驗證邏輯可被繞過
  • 未能做好鑑權措施

暴露意味着更大的攻擊面。隱藏好自己的信息,完備邏輯,完整鑑權,來應對還在潛伏着的威脅。

KYC認證缺陷

KYC全稱爲know-your-customer, 充分了解你的客戶 ,瞭解賬戶的實際控制人和交易的實際收益人,還要求對客戶的身份、常住地址或企業所從事的業務進行充分的瞭解,並採取相應的措施。

認證作爲交易所的重要功能之一,認證方式也百花齊放,常見的有身份證正反面照片,手持身份證照片,手持身份證視頻等等。而認證方式有人工識別和接口識別兩種,人工識別的準確性取決於審覈員當天的心情以及前一天的睡眠,PS加AI換臉的手持身份證照片一般來說可以輕鬆通過。對於調用接口來進行識別的,有使用百度識圖接口來驗證,判斷身份證照片上的身份證號以及姓名與用戶輸入的是否相同,來判斷是否通過;有需要用戶自己掏兩塊錢來審覈的支付寶的人臉識別接口。

下圖爲某交易所調用baidu API進行KYC認證的前端代碼:

對於這種形同虛設KYC認證方式,掌握畫圖的初級使用技巧即可可以輕鬆繞過。

OTC邏輯缺陷

OTC指的是Over-the-counter,場外交易市場, 通常是指店頭交易市場或櫃檯交易市場 。對於交易所來說,OTC指的是用戶依託交易所的擔保,賣家和買家進行交易。

正常OTC交易流程爲:

商家賣幣  = 買家購買幣並支付 =商家確認收款 =系統轉賬到買家。

而攻擊者通過越權:

商家賣幣 = 攻擊者購買幣並不支付 = 攻擊者通過越權點擊商家的確認收款  = 系統轉賬到買家。

圖下爲某交易所OTC存在的邏輯缺陷:

利用此類邏輯問題,攻擊者可以輕易的不進行支付而直接獲得系統轉賬。此類問題在零時科技安全團體對交易所客戶進行安全審計時多次出現,對交易所帶來直接的經濟損失。

二次驗證繞過

在安全審計過程中,交易所的二次驗證有使用Google驗證碼以及手機和郵箱驗證碼,二次驗證就是爲了保障用戶賬號安全,已經敏感操作的確認,但是由於設計缺陷將導致二次驗證形同虛設。

在工作流程繞過中談過,如果支付驗證與轉賬操作分爲兩步進行,就一定需要在轉賬時對當前用戶進行驗證以及鑑權來防止繞過和越權。零時科技安全團隊對大量交易所進行安全審計時發現,大部分交易所進行轉賬等敏感操作二次驗證時,將驗證操作與轉賬操作通過不同接口隔離實現,導致驗證碼結構脫離轉賬操作,失去二次驗證的效果;部分交易所雖然服務器驗證了手機號與短信驗證碼的有效性,但是並未驗證手機號是否爲當前用戶所綁定,換句話來說,修改數據包就可以達到使用任意手機號進行驗證,從而任意提幣;還有更難解釋的將驗證碼填空即可繞過驗證。

如下圖,某交易所進行提幣的二次驗證,雖然使用手機和郵箱驗證碼同時驗證,但並未對當前操作用戶的手機號綁定進行驗證,導致可以使用任意手機號碼的驗證碼進行二次驗證,直接提幣。

盤口價格設置缺陷

2019年8月23日,由於AWS東京機房硬件設備故障,導致無法連接到服務。部分交易所因使用其他交易所錯誤的價格數據導致幣價出現劇烈波動,BTC成交價最低爲0.32USD/BTC,ETH以及EOS均受到影響。

在上游數據錯誤的情況下,沒有對數據的有效性進行判斷直接使用導致損失的出現。

在傳統安全行業我們稱之爲供應鏈攻擊,一旦上游的數據、廠商被劫持,修改,對下游沒有做好防護措施的交易所將會造成降維打擊。

沒有絕對安全的系統,因爲代碼之後是人的邏輯

注:以上所有測試均已經過相關交易所授權,請勿自行非法測試。

本文由深入淺出區塊鏈社區合作伙伴 - 零時科技安全團隊 提供。

深入淺出區塊鏈 - 打造高質量區塊鏈技術博客,學習區塊鏈技術都來這裏,關注 知乎 、微博 掌握區塊鏈技術動態。

相關文章