
我們忘記保護(hù)的隱形層
當(dāng)大多數(shù)人談?wù)揥eb3安全時(shí),他們通常會想到智能合約。這是有道理的。畢竟,這些代碼片段掌握著真實(shí)的資產(chǎn),定義了協(xié)議邏輯,并保護(hù)著數(shù)十億美元的用戶資金。多年來,安全團(tuán)隊(duì)投入了無限的精力來發(fā)現(xiàn)重入漏洞、訪問控制問題、算術(shù)錯(cuò)誤以及僅在特定執(zhí)行路徑下才會出現(xiàn)的細(xì)微漏洞。但在所有這些對鏈上發(fā)生的事情的癡迷中,我們忽略了絕大多數(shù)用戶實(shí)際與之交互的第一件事:前端。
前端一直被視為閃亮的外殼,幫助用戶與區(qū)塊鏈對話的界面。但這個(gè)“外殼”正迅速成為整個(gè)生態(tài)系統(tǒng)中被濫用最多的層之一。雖然智能合約是不可變的且可審計(jì)的,但前端是可變的、中心化的,并且由完全在區(qū)塊鏈保證之外的基礎(chǔ)設(shè)施提供服務(wù)。然而,是它們構(gòu)建了錢包要求用戶簽名的交易有效負(fù)載。如果這還沒有讓你感到害怕,那它就應(yīng)該讓你害怕了。
信任界面意味著信任攻擊者
前端的真正危險(xiǎn)不一定是技術(shù)復(fù)雜性;而是錯(cuò)位的信任。大多數(shù)用戶不知道在確認(rèn)交易時(shí)實(shí)際簽署的是什么。他們完全依賴于前端向他們展示的內(nèi)容。
一個(gè)“Swap”按鈕可能正在觸發(fā)批準(zhǔn)。一個(gè) staking 界面可能正在傳遞一個(gè)委托調(diào)用。除非錢包以人類可讀的格式解碼數(shù)據(jù),而且許多錢包仍然沒有這樣做,否則用戶無法驗(yàn)證他們正在做什么。
這使得前端入侵成為 Web3 中竊取資金最有效的方法之一。攻擊者不需要破壞合約或在核心協(xié)議中找到漏洞。他們所需要的只是篡改前端的一種方式,即使是暫時(shí)的,他們也可以隱形地坐在用戶和區(qū)塊鏈之間。每一次點(diǎn)擊都成為劫持意圖的機(jī)會。
這些攻擊是如何發(fā)生的
這些攻擊的實(shí)施方式并沒有什么特別之處。有時(shí)它就像 DNS 劫持一樣簡單,攻擊者可以訪問項(xiàng)目的域名記錄并將其指向惡意服務(wù)器。在其他情況下,攻擊者通過受感染的依賴項(xiàng)注入代碼,替換惡意邏輯,在將交易數(shù)據(jù)傳遞給錢包之前修改交易數(shù)據(jù)。還有一些案例中,前端直接通過訪問云儀表板或 CDN 配置而被入侵,從而允許攻擊者實(shí)時(shí)更改 UI 腳本。
效果總是一樣的。用戶像往常一樣訪問應(yīng)用程序,連接他們的錢包,并簽署他們認(rèn)為安全的交易。但他們簽署的卻是完全不同的東西,通常是批準(zhǔn)一個(gè)不受信任的合約,或者將 tokens 轉(zhuǎn)移到由攻擊者控制的錢包。而且由于區(qū)塊鏈完全按照簽名執(zhí)行,因此沒有撤消按鈕。
證明這一點(diǎn)的近期事件
我們已經(jīng)看到了一些這方面的痛苦例子。最著名的例子之一是?2022 年的 Curve Finance 事件,攻擊者控制了 Curve 的 DNS 并向用戶提供了一個(gè)虛假的前端。該網(wǎng)站看起來一模一樣。錢包提示看起來也很正常。但在幕后,每筆交易都被路由到攻擊者的錢包。僅在幾個(gè)小時(shí)內(nèi)就損失了近 60 萬美元。
另一個(gè)例子是?BadgerDAO,在攻擊者將惡意 JavaScript 注入其前端后,損失了超過 1 億美元。該代碼悄悄地更改了特定用戶(尤其是鯨魚)的交易有效負(fù)載,讓這些用戶自己點(diǎn)擊進(jìn)入毀滅。
這些事件的共同之處在于智能合約保持不變。邏輯是健全的,審計(jì)是干凈的,但當(dāng)前端講述一個(gè)不同的故事時(shí),這一切都無關(guān)緊要了。
為什么這個(gè)問題不會消失
Web3 中前端安全特別困難的原因在于它屬于一個(gè)奇怪的灰色地帶。它是鏈下的,因此大多數(shù)鏈上安全工具無法監(jiān)控它。它經(jīng)常在審計(jì)期間被忽略,尤其是在優(yōu)先考慮交付而非安全性的項(xiàng)目中。而且它非常依賴于中心化基礎(chǔ)設(shè)施,如 DNS、云存儲和 JavaScript 包注冊表,這些都沒有提供與區(qū)塊鏈相同的保證。
更糟糕的是,圍繞前端驗(yàn)證的工具仍然不成熟。與可以在鏈上驗(yàn)證的合約字節(jié)碼不同,前端代碼經(jīng)常更改,很少被固定或散列,并且?guī)缀鯊牟灰杂脩艨梢詸z查的方式發(fā)布。這為有針對性的攻擊創(chuàng)造了一個(gè)完美的環(huán)境,尤其是在 token 啟動、空投或 UI 升級等敏感時(shí)期。
需要改變什么
為了讓 Web3 安全地發(fā)展,安全性需要擴(kuò)展到智能合約之外。開發(fā)人員必須像對待后端一樣,以同樣的偏執(zhí)和嚴(yán)謹(jǐn)對待前端。這意味著鎖定依賴項(xiàng),避免不必要的第三方腳本,保護(hù) DNS 配置,并將前端審計(jì)視為每次重大發(fā)布的一部分。
錢包提供商也應(yīng)該發(fā)揮作用。用戶需要更清楚地了解他們正在簽署的內(nèi)容。這可能意味著改進(jìn)的解碼、更好的警告,甚至前端真實(shí)性檢查?,F(xiàn)在,人們對界面的信任度過高,而驗(yàn)證其完整性的努力卻不足。
從用戶的角度來看,建議是嚴(yán)厲但誠實(shí)的:不要盲目信任任何 UI。如果你正在與高價(jià)值協(xié)議交互,請不要只檢查域名。檢查源代碼。使用跟蹤惡意合約的瀏覽器擴(kuò)展。如果有什么感覺不對勁,就不要簽名。
結(jié)論
Web3 不僅僅是關(guān)于無需信任的執(zhí)行。它是關(guān)于整個(gè)信任邊界,它的起點(diǎn)、如何轉(zhuǎn)移以及它的終點(diǎn)?,F(xiàn)在,前端恰好位于該邊界的中間,并且已成為任何足夠聰明的人利用用戶所見與簽名內(nèi)容之間差距的游樂場。
你的合約可能很完美,但如果你的前端受到攻擊,結(jié)果是一樣的。資金損失,信任被打破,用戶想知道這一切是如何出錯(cuò)的。是時(shí)候讓行業(yè)停止將前端視為事后才考慮的事情了。因?yàn)閷τ诤诳蛠碚f,它已經(jīng)成為他們攻擊的第一個(gè)目標(biāo)。






.png)





















