加密錢包安全審計你的錢包是否安全
加密錢包安全審計你的錢包是否安全?
近年來,數字錢包安全事件頻發。
2019年11月19,ars technica報道稱兩個加密錢包數據遭220萬賬戶信息被盜。安全研究員troy hunt證實,被盜數據來自加密錢包gatehub和runescape機器人提供商epicbot的賬戶。
這已經不是gatehub次遭遇數據了。據報道,去年6月了大約100 個xrp ledger錢包,導致近1000萬美元的資金被盜。
2019年3月29,bithumb失竊事件鬧得沸沸揚揚。據猜測,這次事件起因為bithumb擁有的g4ydomrxhege帳戶的私鑰被。
隨即將的資金分散到各個包括火幣,hitbtc,wb和exmo。根據非數據和用戶估計,bithumb遭受的損失高達300萬個eos幣(約1300萬美元)和2000萬個xrp幣(約600萬美元)以上。
由于的匿名性及去中心化,導致被盜資產在一定程度上難以追回。因此,錢包的安全性至關。
2020年8月9,certik的安全工程師在def con 安全大會上發表了演講主題為:exploit insecure crypto wallet(加密錢包漏洞利用與分析)的主題報告,分享了對于加密錢包安全的見解。
加密錢包是一種幫助用戶管理帳戶和簡化交易過程的應用程序。
有些項目發布加密錢包應用程序來支持本鏈的發展——比如用于certik chain的deepwallet。
此外,還有像shapeshift這樣的公司,其構建了支持不同協議的錢包。
從安全的角度來看,加密錢包需重視的問題是防止攻擊者用戶錢包的助記詞和私鑰等信息。
近一年來,certik技術團隊對多個加密錢包進行了測試和研究,并在此分享針對基于軟件不同類型的加密錢包進行安全評估的方法及流程。
加密錢包基礎審計清單
要對一個應用程序進行評估156,首先需要了解其工作原理→代碼6991實現是否遵循安全標準→如何對安全性3780不足的部分進行修正及提高。
certik技術團隊針對加密錢包制作了一個基礎審計清單,這份清單反映了所有形式的加密錢包應用(手機、web、擴展、桌面),尤其是手機和web錢包是如何生產和儲存用戶私鑰的。
應用程序如何生成私鑰?
應用程序如何以及在何處存儲原始信息和私鑰?
錢包連接到的是否是值得信任的節點?
應用程序允許用戶配置自定義節點嗎?如果允許,惡意節點會對應用程序造成什么影響?
應用程序是否連接了中心化服務器?如果是,客戶端應用會向服務器發送哪些信息?
應用程序是否要求用戶設置一個安全性高的密碼?
當用戶試圖訪問敏感信息或轉賬時,應用程序是否要求二次驗證?
應用程序是否使用了存在漏洞且可的第三方庫?
有沒有秘密(比如:api密鑰,aws憑證)在源代碼存儲庫中泄漏?
有沒有明顯的不良代碼實現(例如對密碼學的錯誤理解)在程序源代碼中出現?
應用服務器是否強制tls連接?
手機錢包
相比于筆記本電腦,手機等移動設備更容易丟失或被盜。
在分析針對移動設備的威脅時,必須考慮攻擊者可以直接訪問用戶設備的情況。
在評估過程中,如果攻擊者獲得訪問用戶設備的權限,或者用戶設備惡意軟件,我們需要設法識別導致賬戶和密碼資產受損的潛在問題。
除了基礎清單以外,以下是在評估手機錢包時要增加檢查的審計類目:
應用程序是否警告用戶不要對敏感數據進行截屏——在顯示敏感數據時,安卓應用是否會阻止用戶截屏?ios應用是否警告用戶不要對敏感數據進行截屏?
應用程序是否在后臺截圖中泄漏敏感信息?
應用程序是否檢測設備是否root?
應用程序是否鎖定后臺服務器的證書?
應用程序是否在程序的log中記錄了敏感信息?
應用程序是否包含配置錯誤的deeplink和intent,它們可被利用嗎?
應用程序包是否混淆代碼?
應用程序是否實現了反調試功能?
應用程序是否檢查應用程序重新打包?
(ios)儲存在ios keychain中的數據是否具有足夠安全的屬性?
應用程序是否受到密鑰鏈數據持久性的影響?
當用戶輸入敏感信息時,應用程序是否禁用自定義鍵盤?
應用程序是否安全使用“webview”來加載外部網站?
web錢包
對于一個完全去中心化的錢包來說,web應用程序逐漸成為不太受歡迎的選擇。mycrypto不允許用戶在web應用程序中使用密鑰庫/助記詞/私鑰訪問錢包,myetherwallet也同樣建議用戶不要這樣做。
與在其他三種平臺上運行的錢包相比,以web應用程序的形式對錢包進行攻擊相對來說更容易;如果攻擊者了web服務器,他可以通過向web頁面注入惡意的jascript,輕松用戶的錢包信息。
然而,一個安全構建并經過測試的web錢包依舊是用戶管理其加密資產的。
除了上面常規的基礎審計類目之外,我們在評估客戶端web錢包時,還列出了以下需要審計的類目列表:
應用程序存在跨站點腳本xss漏洞嗎?
應用程序存在點擊劫持漏洞嗎?
應用程序有沒有有效的content security policy?
應用程序存在開放式重定向漏洞嗎?
應用程序存在html注入漏洞嗎?
現在網頁錢包使用cookie的情況很少見,但如果有的話,應檢查:
cookie屬性
跨站請求csrf)
跨域資源共享(cors)配置錯誤
該應用程序是否包含除基本錢包功能之外的其他功能? 這些功能存在可被利用的漏洞嗎?
owasp 頂 10中未在上文提到的漏洞。
擴展錢包
metamask是有名和的加密錢包之一,它以瀏覽器擴展的形式出現。
擴展錢包在內部的工作方式與web應用程序非常相似。
不同之處在于它包含被稱為content script和background script的組件。
網站通過content script和background script傳遞事件或消息來與擴展頁面進行交流。
在擴展錢包評估期間重要的事情之一就是測試一個惡意網站是否可以在未經用戶同意的情況下讀取或寫入屬于擴展錢包的數據。
除了基礎清單以外,以下是在評估擴展錢包時要增加檢查的審計類目:
擴展要求了哪些權限?
擴展應用如何決定哪個網站允許與擴展錢包進行交流?
擴展錢包如何與web頁面交互?
惡意網站是否可以通過擴展中的漏洞來攻擊擴展本身或瀏覽器中其他的頁面?
惡意網站是否可以在未經用戶同意的情況下讀取或修改屬于擴展的數據?
擴展錢包存在點擊劫持漏洞嗎?
擴展錢包(通常是background script)在處理消息之前是否已檢查消息來源?
應用程序是否實現了有效的內容安全策略?
electron桌面錢包
在編寫了web應用程序的代碼之后,為什么不用這些代碼來建造一個electron中桌面應用程序呢?
在以往測試過的桌面錢包中,大約80%的桌面錢包是基于electron框架的。在測試基于electron的桌面應用程序時,不僅要尋找web應用程序中可能存在的漏洞,還要檢查electron配置是否安全。
certik曾針對electron的桌面應用程序漏洞進行了分析,你可以點擊訪問此文章了解詳情。
以下是基于electron的桌面錢包受評估時要增加檢查的審計類目:
應用程序使用什么版本的electron?
應用程序是否加載遠程內容?
應用程序是否禁用“nodeintegratio”和“enableremotemodule”?
應用程序是否啟用了“contextisolatio”, “sandbox” and “websecurity”選項?
應用程序是否允許用戶在同一窗口中從當前錢包頁面跳轉到任意的外部頁面?
應用程序是否實現了有效的內容安全策略?
preload script是否包含可能被濫用的代碼?
應用程序是否將用戶輸入直接傳遞到危險函數中(如“openexternal”)?
應用程序會使不安全的自定義協議嗎?
服務器端漏洞檢查列表
在我們測試過的加密錢包應用程序中,有一半以上是沒有中心化服務器的,他們直接與節點相連。
certik技術團隊認為這是減少攻擊面和保護用戶隱私的方法。
但是,如果應用程序希望為客戶提供除了帳戶管理和令牌傳輸之外的更多功能,那么該應用程序可能需要一個帶有數據庫和服務器端代碼的中心化服務器。
服務器端組件要測試的項目高度依賴于應用程序特性。
根據在研究以及與客戶接觸中發現的服務器端漏洞,我們編寫了下文的漏洞檢查表。當然,它并不包含所有可能產生的服務器端漏洞。
認證和授權
kyc及其有效性
競賽條件
云端服務器配置錯誤
web服務器配置錯誤
不安全的直接對象引用(idor)
服務端請求ssrf)
不安全的文件上傳
任何類型的注入(sql,命令,template)漏洞
任意文件讀/寫
業務邏輯錯誤
速率限制
拒絕服務
信息泄漏
總結
隨著技術的發展們實施的欺詐和攻擊手段也越來越多樣化。
certik安全技術團隊希望通過對加密錢包安全隱患的分享讓用戶更清楚的認識和了解錢包的安全性問題、提高警惕。
現階段,許多開發團隊對于安全的問題重視程度遠遠低于對于業務的重視程度,對自身的錢包產品并未做到足夠的安全防護。通過分享加密錢包的安全審計類目,certik期望加密錢包項目方對于產品的安全標準擁有清晰的認知,從而促進產品安全升級,共同保護用戶資產的安全性。
攻擊是多技術維度的綜合攻擊,需要考慮到在管理流通過程中所有涉及到的應用安全,包括電腦硬件軟件,錢包等服務軟件,智能合約等。
加密錢包需要重視對于潛在攻擊方式的檢測和監視,避免多次受到同一方式的攻擊,并且加強賬戶安全保護方法,使用物理加密的離線冷存儲(cold storage)來保存重要除此之外,需要聘請的安全團隊進行網絡層面的測試,并通過遠程模擬攻擊來尋找漏洞。