黑客今年從加密應(yīng)用程序中竊取了 20 多億美元。國慶期間,行業(yè)又經(jīng)歷了 TokenPocket 閃兌服務(wù)商被盜(損失超 2100 萬美元)和 BNB Chain 跨鏈 橋 BSC Token Hub 遭攻擊(損失約 5.66 億美元)的加密盜竊事件。
隨著加密生態(tài)系統(tǒng)的發(fā)展,安全攻防戰(zhàn)只會越演越烈。因此,本文將:
-
提出加密安全事件的分類法;
-
列舉出迄今為止讓黑客最賺錢的攻擊手段;
-
回顧當(dāng)前用于防止黑客攻擊的工具的優(yōu)缺點;
-
討論加密安全的未來。
黑客類型
加密應(yīng)用生態(tài)系統(tǒng)由互操作協(xié)議組成,由智能合約支持,依賴于鏈和互聯(lián)網(wǎng)的底層基礎(chǔ)設(shè)施。此堆棧的每一層都有其獨有的漏洞。我們可以根據(jù)利用的堆棧層和使用的方法對加密黑客進行分類。
攻擊基礎(chǔ)設(shè)施
對基礎(chǔ)設(shè)施層的攻擊利用了加密應(yīng)用程序的底層系統(tǒng)中的弱點:依賴用于達成共識的區(qū)塊鏈、用于前端的互聯(lián)網(wǎng)服務(wù)和用于私鑰管理的工具。
攻擊智能合約語言
這一層的黑客利用了智能合約語言(如 Solidity)的弱點和漏洞,例如可重入性(reentrancy)和實現(xiàn)委托調(diào)用(delegatecall)的危險,這些可以通過遵循安全規(guī)范來規(guī)避。
攻擊協(xié)議邏輯
這類攻擊利用單個應(yīng)用程序業(yè)務(wù)邏輯中的錯誤。如果黑客發(fā)現(xiàn)了一個錯誤,他們可以利用這個錯誤觸發(fā)應(yīng)用程序開發(fā)者沒有預(yù)料到的行為。
例如,如果一個新的 DEX 在決定用戶從交易中獲得多少錢的數(shù)學(xué)方程中出現(xiàn)了錯誤,那么這個錯誤就可以被利用,使用戶從交易中獲得比本應(yīng)可能獲得的更多的錢。
協(xié)議邏輯級攻擊還可以利用用于控制應(yīng)用程序參數(shù)的治理系統(tǒng)。
攻擊生態(tài)系統(tǒng)
許多知名的加密黑客利用了多個應(yīng)用程序之間的交互。最常見的是黑客利用一個協(xié)議中的邏輯錯誤,利用從另一個協(xié)議借來的資金來擴大攻擊規(guī)模。
通常,用于生態(tài)系統(tǒng)攻擊的資金是通過閃電貸(flashloan)借來的。在執(zhí)行閃電貸時,你可以從 Aave 和 dYdX 等協(xié)議的流動性池中借到你想要的金額。
數(shù)據(jù)分析
我收集了 2020 年以來 100 起規(guī)模最大的加密貨幣黑客攻擊的數(shù)據(jù)集,被盜資金總計 50 億美元。
生態(tài)系統(tǒng)受到的攻擊最為頻繁。他們占 41%。
協(xié)議邏輯漏洞導(dǎo)致了最多的金錢損失。
金額最大的三個攻擊:Ronin 跨鏈橋攻擊(6.24 億美元),Poly.NETwork 攻擊(6.11 億美元)和 BSC 跨鏈橋攻擊(5.7 億美元)。
如果排除前三大攻擊,則針對基礎(chǔ)設(shè)施的被盜案件是損失資金最多的類別。
黑客是如何下手的?
基礎(chǔ)設(shè)施
在 61% 的基礎(chǔ)設(shè)施漏洞中,私鑰是通過未知的方式泄露的。黑客可能通過網(wǎng)絡(luò)釣魚郵件和虛假招聘廣告等社會攻擊獲得這些私鑰。
智能合約語言
可重入性攻擊是智能合約語言級別上最熱門的攻擊類型。
在可重入攻擊中,易受攻擊的智能合約中的函數(shù)調(diào)用惡意合約上的一個函數(shù)。或者,當(dāng)易受攻擊的合約向惡意的合約發(fā)送代幣時,可以觸發(fā)惡意合約中的函數(shù)。然后,在合約更新其余額之前,惡意函數(shù)在遞歸循環(huán)中回調(diào)易受攻擊的函數(shù)。
例如,在 Siren Protocol 黑客攻擊中,提取質(zhì)押品代幣的函數(shù)很容易被重入,并被反復(fù)調(diào)用(每次惡意合約接收代幣時),直到所有質(zhì)押品耗盡。
協(xié)議邏輯
協(xié)議層上的大多數(shù)漏洞都是特定應(yīng)用程序獨有的,因為每個應(yīng)用程序都有唯一的邏輯(除非它是純分叉 )。
訪問控制錯誤是樣本組中最常見的重復(fù)出現(xiàn)的問題。例如,在 Poly Network 黑客事件中,“EthCrossChainManager” 合約有一個任何人都可以調(diào)用的功能來執(zhí)行跨鏈交易。
注意:有很多情況下,多個協(xié)議使用相同的技術(shù)會被黑客攻擊,因為團隊分叉了一個有漏洞的代碼庫。
例如,許多 Compound 分叉,如 CREAM、Hundred Finance 和 Voltage Finance 都成為了重入性攻擊的受害者,因為 Compound 的代碼在允許交互之前無需檢查交互的效果。這對 Compound 來說很有效,因為他們審查了他們支持的每個新代幣的漏洞,但制作分叉的團隊并沒有這么做。
生態(tài)系統(tǒng)
98% 的生態(tài)系統(tǒng)攻擊中都使用了閃電貸。
閃電貸攻擊通常遵循以下公式:使用貸款進行大規(guī)模交易,推高貸款協(xié)議用作喂價( price feed)的 AMM 上的代幣價格。然后,在同一筆交易中,使用膨脹的代幣作為質(zhì)押品,獲得遠高于其真實價值的貸款。
黑客在哪里下手?
根據(jù)失竊的合約或錢包所在的鏈對數(shù)據(jù)集進行分析。以太坊的黑客數(shù)量最多,占樣本組的 45%。幣安 智能鏈(BSC)以 20% 的份額位居第二。
造成這種情況的因素有很多:
-
以太坊和 BSC 擁有最高的 TVL(在應(yīng)用程序中存入的資金),所以對這些鏈上的黑客來說,獎勵的規(guī)模更大。
-
大多數(shù)加密貨幣開發(fā)人員都知道 Solidity,這是以太坊和 BSC 上的智能合約語言,而且有更復(fù)雜的工具支持該語言。
以太坊的被盜資金最多(20 億美元)。BSC 位居第二(8.78 億美元)。
涉及跨鏈橋或多鏈應(yīng)用程序(例如多鏈交易或多鏈借貸)對數(shù)據(jù)集產(chǎn)生了巨大的影響。盡管這些黑客事件只占總數(shù)的 10%,但卻竊取了 25.2 億美元的資金。
如何防止黑客攻擊?
對于威脅堆棧的每一層,我們都可以使用一些工具來早期識別潛在的攻擊載體并防止攻擊的發(fā)生。
基礎(chǔ)設(shè)施
大多數(shù)大型基礎(chǔ)設(shè)施黑客攻擊都涉及黑客獲取諸如私鑰等敏感信息。遵循良好的操作安全(OPSEC)步驟并進行經(jīng)常性的威脅建模可以降低這種情況發(fā)生的可能性。擁有良好 OPSEC 流程的開發(fā)團隊可以:
-
識別敏感數(shù)據(jù)(私鑰、員工信息、API 密鑰等);
-
識別潛在的威脅(社會攻擊、技術(shù)利用、內(nèi)部威脅等);
-
找出現(xiàn)有安全防御的漏洞和弱點;
-
確定每個漏洞的威脅級別;
-
制定并實施減輕威脅的計劃。
智能合約語言和協(xié)議邏輯
1. 模糊測試工具
模糊測試工具,如 Echidna,測試智能合約如何對大量隨機生成的交易做出反應(yīng)。這是檢測特定輸入產(chǎn)生意外結(jié)果的邊緣情況的好方法。
2. 靜態(tài)分析
靜態(tài)分析工具,如 Slither 和 Mythril,自動檢測智能合約中的漏洞。這些工具非常適合快速找出常見的漏洞,但它們只能捕獲一組預(yù)定義的問題。如果智能合約存在工具規(guī)范中沒有的問題,也不會被發(fā)現(xiàn)。
3. 形式化驗證
形式化驗證工具,如 Certora,將比較智能合約與開發(fā)人員編寫的規(guī)范。該規(guī)范詳細說明了代碼應(yīng)該做什么以及所需的屬性。例如,開發(fā)人員在構(gòu)建一個貸款應(yīng)用程序時,會指定每筆貸款都必須有足夠的質(zhì)押品支持。如果智能合約的任何可能行為不符合規(guī)范,則形式化驗證者將識別該違規(guī)行為。
形式化驗證的缺點是測試只和規(guī)范保持一樣的標(biāo)準(zhǔn)。如果所提供的規(guī)范沒有說明某些行為或過于寬松,那么驗證過程將無法捕獲所有的錯誤。
4. 審計和同行評審
在審計或同行評審期間,一組受信任的開發(fā)人員將測試和評審項目代碼。審計員將撰寫一份報告,詳細說明他們發(fā)現(xiàn)的漏洞,以及如何修復(fù)這些問題的建議。
讓專業(yè)的第三方評審合約是發(fā)現(xiàn)原始團隊遺漏的漏洞的好方法。然而,審核員也是人,他們永遠不會捕抓到所有漏洞。此外要信任審計員,如果審計員發(fā)現(xiàn)了問題,他們會告訴您,而不是自己利用它。
5. 生態(tài)系統(tǒng)攻擊
盡管生態(tài)系統(tǒng)攻擊是最常見和最具破壞性的類型,現(xiàn)有工具中沒有很多工具適合防止這類攻擊。自動安全工具專注于每次在一個合約中查找錯誤。審計通常無法解決如何利用生態(tài)系統(tǒng)中多個協(xié)議之間的交互。
像 Forta 和 tenerly Alerts 這樣的監(jiān)視工具可以在發(fā)生組合性攻擊時提供早期警告,以便團隊采取行動。但在閃電貸攻擊中,資金通常在單筆交易中被盜,因此任何預(yù)警都太晚了,無法防止巨大損失。
威脅檢測模型可以用來發(fā)現(xiàn)內(nèi)存池中的惡意交易,在節(jié)點處理它們之前,交易就存在于內(nèi)存池中,但黑客可以通過使用 flashbot 等服務(wù)直接將交易發(fā)送給礦工,從而繞過這些檢查。
加密安全的未來
我對加密安全的未來有兩個預(yù)測:
1. 我相信最好的團隊將從把安全視為基于事件的實踐(測試->同行評審->審核)轉(zhuǎn)變?yōu)閷⑵湟暈橐粋€連續(xù)的過程。他們將:
-
對主代碼庫中的每一個新增代碼執(zhí)行靜態(tài)分析和模糊處理;
-
對每一次重大升級都進行正式驗證;
-
建立具有響應(yīng)動作的監(jiān)視和警報系統(tǒng)(暫停整個應(yīng)用程序或受影響的特定模塊);
-
讓一些團隊成員制定和維護安全自動化和攻擊響應(yīng)計劃。
安全工作不應(yīng)在審計后結(jié)束。在許多情況下,例如 Nomad 跨鏈橋黑客攻擊,其漏洞是基于審計后升級中引入的錯誤。
2. 加密安全社區(qū)應(yīng)對黑客攻擊的過程將變得更有組織和精簡。每當(dāng)黑客攻擊發(fā)生時,貢獻者就會涌入加密安全群組聊天,渴望提供幫助,但缺乏組織意味著重要細節(jié)可能會在混亂中丟失。我認(rèn)為在未來,這些群聊將轉(zhuǎn)變成更有條理的組織形式:
-
使用鏈上監(jiān)控和社交媒體監(jiān)控工具,快速檢測主動攻擊;
-
使用安全信息和事件管理工具協(xié)調(diào)工作;
-
采取獨立的工作流程,使用不同的渠道溝通黑白客的工作、數(shù)據(jù)分析、根本原因和其他任務(wù)。