加密錢包安全審計你的錢包是否安全?
近年來,數(shù)字錢包安全事件頻發(fā)。
2019年11月19日,Ars Technica報道稱兩個加密貨幣錢包數(shù)據(jù)遭泄露,220萬賬戶信息被盜。安全研究員Troy Hunt證實,被盜數(shù)據(jù)來自加密貨幣錢包GateHub和RuneScape機器人提供商EpicBot的賬戶。
這已經(jīng)不是Gatehub第一次遭遇數(shù)據(jù)泄露了。據(jù)報道,去年6月,黑客入侵了大約100 個XRP Ledger錢包,導(dǎo)致近1000萬美元的資金被盜。
2019年3月29日,Bithumb失竊事件鬧得沸沸揚揚。據(jù)猜測,這次事件起因為Bithumb擁有的g4ydomrxhege帳戶的私鑰被黑客盜取。
隨即,黑客將竊取的資金分散到各個交易所,包括火幣,HitBTC,WB和EXmo。根據(jù)非官方數(shù)據(jù)和用戶估計,Bithumb遭受的損失高達300萬個EOS幣(約1300萬美元)和2000萬個XRP幣(約600萬美元)以上。
由于數(shù)字貨幣的匿名性及去中心化,導(dǎo)致被盜資產(chǎn)在一定程度上難以追回。因此,錢包的安全性至關(guān)重要。
2020年8月9日,CertiK的安全工程師在DEF CON區(qū)塊鏈安全大會上發(fā)表了演講主題為:Exploit Insecure Crypto Wallet(加密錢包漏洞利用與分析)的主題報告,分享了對于加密錢包安全的見解。
加密錢包是一種幫助用戶管理帳戶和簡化交易過程的應(yīng)用程序。
有些區(qū)塊鏈項目發(fā)布加密錢包應(yīng)用程序來支持本鏈的發(fā)展——比如用于CertiK Chain的Deepwallet。
此外,還有像Shapeshift這樣的公司,其構(gòu)建了支持不同區(qū)塊鏈協(xié)議的錢包。
從安全的角度來看,加密錢包最需重視的問題是防止攻擊者竊取用戶錢包的助記詞和私鑰等信息。
近一年來,CertiK技術(shù)團隊對多個加密錢包進行了測試和研究,并在此分享針對基于軟件不同類型的加密錢包進行安全評估的方法及流程。
加密錢包基礎(chǔ)審計清單
要對一個應(yīng)用程序進行評估,首先需要了解其工作原理→代碼實現(xiàn)是否遵循最佳安全標準→如何對安全性不足的部分進行修正及提高。
CertiK技術(shù)團隊針對加密錢包制作了一個基礎(chǔ)審計清單,這份清單反映了所有形式的加密錢包應(yīng)用(手機、web、擴展、桌面),尤其是手機和web錢包是如何生產(chǎn)和儲存用戶私鑰的。
應(yīng)用程序如何生成私鑰?
應(yīng)用程序如何以及在何處存儲原始信息和私鑰?
錢包連接到的是否是值得信任的區(qū)塊鏈節(jié)點?
應(yīng)用程序允許用戶配置自定義區(qū)塊鏈節(jié)點嗎?如果允許,惡意區(qū)塊鏈節(jié)點會對應(yīng)用程序造成什么影響?
應(yīng)用程序是否連接了中心化服務(wù)器?如果是,客戶端應(yīng)用會向服務(wù)器發(fā)送哪些信息?
應(yīng)用程序是否要求用戶設(shè)置一個安全性高的密碼?
當用戶試圖訪問敏感信息或轉(zhuǎn)賬時,應(yīng)用程序是否要求二次驗證?
應(yīng)用程序是否使用了存在漏洞且可被攻擊的第三方庫?
有沒有秘密(比如:API密鑰,AWS憑證)在源代碼存儲庫中泄漏?
有沒有明顯的不良代碼實現(xiàn)(例如對密碼學(xué)的錯誤理解)在程序源代碼中出現(xiàn)?
應(yīng)用服務(wù)器是否強制TLS連接?
手機錢包
相比于筆記本電腦,手機等移動設(shè)備更容易丟失或被盜。
在分析針對移動設(shè)備的威脅時,必須考慮攻擊者可以直接訪問用戶設(shè)備的情況。
在評估過程中,如果攻擊者獲得訪問用戶設(shè)備的權(quán)限,或者用戶設(shè)備感染惡意軟件,我們需要設(shè)法識別導(dǎo)致賬戶和密碼資產(chǎn)受損的潛在問題。
除了基礎(chǔ)清單以外,以下是在評估手機錢包時要增加檢查的審計類目:
應(yīng)用程序是否警告用戶不要對敏感數(shù)據(jù)進行截屏——在顯示敏感數(shù)據(jù)時,安卓應(yīng)用是否會阻止用戶截屏?iOS應(yīng)用是否警告用戶不要對敏感數(shù)據(jù)進行截屏?
應(yīng)用程序是否在后臺截圖中泄漏敏感信息?
應(yīng)用程序是否檢測設(shè)備是否越獄/root?
應(yīng)用程序是否鎖定后臺服務(wù)器的證書?
應(yīng)用程序是否在程序的log中記錄了敏感信息?
應(yīng)用程序是否包含配置錯誤的deeplink和intent,它們可被利用嗎?
應(yīng)用程序包是否混淆代碼?
應(yīng)用程序是否實現(xiàn)了反調(diào)試功能?
應(yīng)用程序是否檢查應(yīng)用程序重新打包?
(iOS)儲存在iOS Keychain中的數(shù)據(jù)是否具有足夠安全的屬性?
應(yīng)用程序是否受到密鑰鏈數(shù)據(jù)持久性的影響?
當用戶輸入敏感信息時,應(yīng)用程序是否禁用自定義鍵盤?
應(yīng)用程序是否安全使用“webview”來加載外部網(wǎng)站?
Web錢包
對于一個完全去中心化的錢包來說,Web應(yīng)用程序逐漸成為不太受歡迎的選擇。MyCrypto不允許用戶在web應(yīng)用程序中使用密鑰庫/助記詞/私鑰訪問錢包,MyEtherWallet也同樣建議用戶不要這樣做。
與在其他三種平臺上運行的錢包相比,以web應(yīng)用程序的形式對錢包進行釣魚攻擊相對來說更容易;如果攻擊者入侵了web服務(wù)器,他可以通過向web頁面注入惡意的JavaScript,輕松竊取用戶的錢包信息。
然而,一個安全構(gòu)建并經(jīng)過徹底測試的web錢包依舊是用戶管理其加密資產(chǎn)的不二之選。
除了上面常規(guī)的基礎(chǔ)審計類目之外,我們在評估客戶端web錢包時,還列出了以下需要審計的類目列表:
應(yīng)用程序存在跨站點腳本XSS漏洞嗎?
應(yīng)用程序存在點擊劫持漏洞嗎?
應(yīng)用程序有沒有有效的Content Security Policy?
應(yīng)用程序存在開放式重定向漏洞嗎?
應(yīng)用程序存在HTML注入漏洞嗎?
現(xiàn)在網(wǎng)頁錢包使用cookie的情況很少見,但如果有的話,應(yīng)檢查:
Cookie屬性
跨站請求偽造(CSRF)
跨域資源共享(CORS)配置錯誤
該應(yīng)用程序是否包含除基本錢包功能之外的其他功能? 這些功能存在可被利用的漏洞嗎?
OWASP Top 10中未在上文提到的漏洞。
擴展錢包
Metamask是最有名和最常用的加密錢包之一,它以瀏覽器擴展的形式出現(xiàn)。
擴展錢包在內(nèi)部的工作方式與web應(yīng)用程序非常相似。
不同之處在于它包含被稱為content script和background script的獨特組件。
網(wǎng)站通過content script和background script傳遞事件或消息來與擴展頁面進行交流。
在擴展錢包評估期間,最重要的事情之一就是測試一個惡意網(wǎng)站是否可以在未經(jīng)用戶同意的情況下讀取或?qū)懭雽儆跀U展錢包的數(shù)據(jù)。
除了基礎(chǔ)清單以外,以下是在評估擴展錢包時要增加檢查的審計類目:
擴展要求了哪些權(quán)限?
擴展應(yīng)用如何決定哪個網(wǎng)站允許與擴展錢包進行交流?
擴展錢包如何與web頁面交互?
惡意網(wǎng)站是否可以通過擴展中的漏洞來攻擊擴展本身或瀏覽器中其他的頁面?
惡意網(wǎng)站是否可以在未經(jīng)用戶同意的情況下讀取或修改屬于擴展的數(shù)據(jù)?
擴展錢包存在點擊劫持漏洞嗎?
擴展錢包(通常是background script)在處理消息之前是否已檢查消息來源?
應(yīng)用程序是否實現(xiàn)了有效的內(nèi)容安全策略?
Electron桌面錢包
在編寫了web應(yīng)用程序的代碼之后,為什么不用這些代碼來建造一個Electron中桌面應(yīng)用程序呢?
在以往測試過的桌面錢包中,大約80%的桌面錢包是基于Electron框架的。在測試基于Electron的桌面應(yīng)用程序時,不僅要尋找web應(yīng)用程序中可能存在的漏洞,還要檢查Electron配置是否安全。
CertiK曾針對Electron的桌面應(yīng)用程序漏洞進行了分析,你可以點擊訪問此文章了解詳情。
以下是基于Electron的桌面錢包受評估時要增加檢查的審計類目:
應(yīng)用程序使用什么版本的Electron?
應(yīng)用程序是否加載遠程內(nèi)容?
應(yīng)用程序是否禁用“nodeIntegration”和“enableRemoteModule”?
應(yīng)用程序是否啟用了“contextisolation”, “sandbox” and “webSecurity”選項?
應(yīng)用程序是否允許用戶在同一窗口中從當前錢包頁面跳轉(zhuǎn)到任意的外部頁面?
應(yīng)用程序是否實現(xiàn)了有效的內(nèi)容安全策略?
preload script是否包含可能被濫用的代碼?
應(yīng)用程序是否將用戶輸入直接傳遞到危險函數(shù)中(如“openExternal”)?
應(yīng)用程序會使不安全的自定義協(xié)議嗎?
服務(wù)器端漏洞檢查列表
在我們測試過的加密錢包應(yīng)用程序中,有一半以上是沒有中心化服務(wù)器的,他們直接與區(qū)塊鏈節(jié)點相連。
CertiK技術(shù)團隊認為這是減少攻擊面和保護用戶隱私的方法。
但是,如果應(yīng)用程序希望為客戶提供除了帳戶管理和令牌傳輸之外的更多功能,那么該應(yīng)用程序可能需要一個帶有數(shù)據(jù)庫和服務(wù)器端代碼的中心化服務(wù)器。
服務(wù)器端組件要測試的項目高度依賴于應(yīng)用程序特性。
根據(jù)在研究以及與客戶接觸中發(fā)現(xiàn)的服務(wù)器端漏洞,我們編寫了下文的漏洞檢查表。當然,它并不包含所有可能產(chǎn)生的服務(wù)器端漏洞。
認證和授權(quán)
KYC及其有效性
競賽條件
云端服務(wù)器配置錯誤
Web服務(wù)器配置錯誤
不安全的直接對象引用(IDOR)
服務(wù)端請求偽造(SSRF)
不安全的文件上傳
任何類型的注入(SQL,命令,template)漏洞
任意文件讀/寫
業(yè)務(wù)邏輯錯誤
速率限制
拒絕服務(wù)
信息泄漏
總結(jié)
隨著技術(shù)的發(fā)展,黑客們實施的欺詐和攻擊手段也越來越多樣化。
CertiK安全技術(shù)團隊希望通過對加密錢包安全隱患的分享讓用戶更清楚的認識和了解數(shù)字貨幣錢包的安全性問題、提高警惕。
現(xiàn)階段,許多開發(fā)團隊對于安全的問題重視程度遠遠低于對于業(yè)務(wù)的重視程度,對自身的錢包產(chǎn)品并未做到足夠的安全防護。通過分享加密錢包的安全審計類目,CertiK期望加密錢包項目方對于產(chǎn)品的安全標準擁有清晰的認知,從而促進產(chǎn)品安全升級,共同保護用戶資產(chǎn)的安全性。
數(shù)字貨幣攻擊是多技術(shù)維度的綜合攻擊,需要考慮到在數(shù)字貨幣管理流通過程中所有涉及到的應(yīng)用安全,包括電腦硬件、區(qū)塊鏈軟件,錢包等區(qū)塊鏈服務(wù)軟件,智能合約等。
加密錢包需要重視對于潛在攻擊方式的檢測和監(jiān)視,避免多次受到同一方式的攻擊,并且加強數(shù)字貨幣賬戶安全保護方法,使用物理加密的離線冷存儲(cold storage)來保存重要數(shù)字貨幣。除此之外,需要聘請專業(yè)的安全團隊進行網(wǎng)絡(luò)層面的測試,并通過遠程模擬攻擊來尋找漏洞。