區塊鏈錢包漏洞可竊取加密貨幣
Check Point研究人員在Everscale區塊鏈錢包中發現安全漏洞,可以竊取用戶加密貨幣。
Ever Surf
Ever Surf是一個跨平臺的消息應用,一個區塊鏈瀏覽器,也是Everscale區塊鏈的加密貨幣錢包。使用React Native開發框架編寫,同時上傳到了Google Play Market和Apple Store應用市場。同時,還有一個可運行在任意平臺的Ever Surf web版本。

圖1 Ever Surf web版
漏洞分析
Surf錢包中用于對交易進行簽名的密鑰只保存在用戶設備上。所有對區塊鏈的操作都是在客戶端來實現的。因此,與其他非托管錢包類似,無需注冊過程。
用戶首次運行應用時,會被建議創建一個新的錢包。Surf會生成一個seed詞組和公私鑰對。此外,用戶會被要求創建一個6位數字的PIN碼:

圖2 Ever Surf中的PIN碼設置
然后該PIN碼被用于登入應用和確認交易。Surf有應對暴力破解PIN碼的保護機制:

圖3 Ever Surf 預防暴力破解PIN碼
即使沒有這類保護機制,創建的密鑰和seed 詞組都保存在瀏覽器的本地存儲中。本地存儲是使用localstorage特征從JS訪問的key-value存儲,比如:
// Store value on the browser beyond the duration of the sessionlocalStorage.setItem('key', 'value');// Retrieve value (persists even after closing and re-opening the browser)alert(localStorage.getItem('key'));
Surf以下面的格式將密鑰和seed 詞組保存在本地存儲的“surf.ton.wallet” key中:

圖4 保存在瀏覽器localStorage中的加密的錢包數據
本地存儲在web瀏覽器中并不是受保護的。比如,在Firefox中本地存儲以非加密的SQLite數據庫的形式存儲:
Mozilla\Firefox\Profiles\{profile_name}\webappstore.sqlite
Chrome 將local storage以非加密的levelDB數據庫的形式存儲:
Google\Chrome\User Data\Default\Local Storage\leveldb\
也就是可以通過物理或惡意軟件訪問用戶計算機的用戶就可以獲得這些數據。
此外,本地存儲還可以被瀏覽器擴展訪問,然后瀏覽器擴展可以泄露保存的數據。研究人員創建了一個簡單的Chrome web擴展實現了該功能:
alert(localStorage.getItem("surf.ton.wallet"));
安裝該擴展后,打開Surf網站后,就可以看到包含加密的keystone的消息:

圖5 使用瀏覽器擴展從localStorage中提取加密的錢包數據
因為控制用戶錢包的數據是保存在用戶計算機上的,因此對用戶資金的唯一保護就是強加密。
Keystore加密
Surf應用會在用戶輸入正確PIN碼后加密seed詞語并向用戶顯示:

圖6 Surf要求用戶輸入PIN碼
研究人員分析發現askForPassword函數會被調用,并接收加密的keystore。

圖7 負責取回seed詞語的函數
askForPassword函數會調用validatePassword 函數來執行PIN碼驗證。

圖8 askForPassword函數讀取和驗證PIN碼
最重要的動作是PIN碼驗證。通過調用deriveKeyFromPasswordAndSalt 函數,Surf會生成派生密鑰,用于解密keystore。然后在isDerivedKeyCorrect 函數中使用nacl_secret_box_open執行解密過程:

圖9 Surf使用nacl_secret_box_open解密密鑰
在deriveKeyFromPasswordAndSalt函數中,Surf會使用使用Scrypt密鑰派生函數從PIN碼中派生出解密密鑰:

圖10 – Surf 派生keystore解密密鑰
攻擊場景
Checkpoint研究人員重新實現了nodeJS的密鑰派生和keystore解密,并對PIN碼執行了暴力破解攻擊。在4核Intel i7處理器上每秒鐘可以破解95個密碼。雖然效率不高,但是足以對6位PIN碼發起攻擊了。在最壞情況下,檢查10^6個可能的表中只需要175分鐘。
研究人員在測試中,在Surf中創建了一個新的密鑰,并從瀏覽器的本地存儲上復制出了keystore:
{ "encSeed": { "encStr":"6rjkbh88WXkrJWl4os3cjRzvZkQGlnV39U3YvLYUrM7yzf6h79XxXX/VziNde2bkPeSnJZ11Yi4T8CFgPJMyI1W+EN0Yzw+FDdtTq5gaKHjk5nF60CSHZ4qKXObIQ7zBbped", "nonce":"2Tdr9FFP0RcpjecwcS8XtcC5M2/FRY+I" }}
攻擊過程只花費了38分鐘。最后成功獲得了派生密鑰,并解密了seed詞組,可以用于恢復另一個設備上的密鑰。

圖11 PIN碼暴力破解結果
漏洞修復
Checkpoint研究人員將該漏洞提交給了 Ever Surf 開發者,開發團隊通過發布桌面版的方式修復了該漏洞。目前,該web版本只用于開發用途。賬戶的seed詞組不在Ever Surf web版中使用。
參考及來源:https://research.checkpoint.com/2022/check-point-research-detects-vulnerability-in-the-everscale-blockchain-wallet-preventing-cryptocurrency-theft/