隨著TON生態的發展,Web3釣魚集團也開始infiltrate。 TonConnect SDK作為跨平台錢包連接的工具,存在域名驗證安全隱患。雖然瀏覽器擴充功能可以透過JS腳本對來源進行驗證,但在跨平台通訊時,利用訊息轉發伺服器來源資訊的真實性難以保證。這使得惡意DApp能夠偽造可信任來源進行詐騙。雖然有些SDK嘗試透過額外驗證手段解決這個問題,但許多DApp未進行域名驗證,用戶需提高警惕,識別請求的來源是否一致,以防釣魚攻擊。
作者:思考
背景
隨著TON 生態項目的搭建,Web3 釣魚團夥也開始進入TON 生態的戰場。 目前TON 生態中使用TonConnect SDK 來解決跨平台/應用錢包連接和互動的問題,此類方案都難免會遇到一個難題:如何解決跨平台/通訊應用時的域名驗證?
通常為了讓用戶在使用錢包連接DApp 或確認簽名請求的來源是否可靠時,錢包都會在請求批准頁面提示來源的域名,然後更好地用戶地驗證並確認請求的來源是否與自己操作的來源一致,從而避免惡意侵害來源簽署請求的詐欺。
慢霧安全團隊前端發現了此類錢包和DApp跨平台/應用通訊時的域名驗證安全問題,我們跟MetaMask SDK和WalletConnect Web3Modal的專案方團隊進行了溝通和交易所,發現該問題較難處理。 ,目前MetaMask和WalletConnect尚未完全解決這個問題。
近期,我們發現TON 生態中的TonConnect SDK 也存在相同的問題,因此特此揭露,希望可以幫助使用者識別和防範此類風險。
的
通常瀏覽器擴充錢包和DApp進行互動時會在網頁上註入JS腳本(content script),用於轉發網頁和內容腳本之間的訊息。網頁和內容腳本進行通訊時使用window.postmessage和window .addEventListener,而window.addEventListener可以透過取得訊息的來源來進一步處理訊息,具體操作包含在瀏覽器擴充錢包展示訊息的來源,判斷訊息的來源是否在黑名單內,對訊息的來源進行鑑權等操作由於起源依賴瀏覽器提供的函數功能來獲取,因此無法被複製。
然而跨平台/應用程式訊息通訊時,通常透過訊息轉發伺服器對訊息進行轉發,而訊息轉發伺服器很難對訊息發起的網域進行檢查(因為客戶端的資料可以被偽造),存在因此訊息來源被偽造的問題,以下是跨平台/應用程式訊息通訊的2 個場景:
瀏覽器網頁訊息轉發伺服器錢包APP 其它APP 訊息轉發伺服器錢包APP
以TonConnect SDK 為例,DApp TonConnect SDK 作為錢包和DApp 進行訊息通訊的工具,需要在接入TonConnect SDK 的時候使用配置好dappMetadata,然而dappMetadata 的資料是難以驗證的,惡意DApp 可以透過修改dappMetadata 偽裝成可信任的網站,從而對用戶進行詐欺。
從’@tonconnect/sdk’ 導入{ SendTransactionRequest、TonConnect、UserRejectsError、WalletInfo、WalletInfoInjected };從’antd’ 導入{ notification };從’src/utils’ 導入{ isMobile、openLink };
const dappMetadata = { manifestUrl: ‘https://xxx/tonconnect-manifest.json’,};
導出const 連接器= 新TonConnect (dappMetadata);
把manifest.json設定成以下內容就可以將origin偽造成ton.org:
{ “url”:“https://ton.org”,“name”:“FakeandevilDApp”,“iconUrl”:“https://ton-connect.github.io/demo-dapp/apple-touch-icon. png”,“termsOfUseUrl”:“https://ton-connect.github.io/demo-dapp/terms-of-use.txt”,“privacyPolicyUrl”:“https://ton-connect.github.io/ demo-dapp/privacy-policy.txt”}
以下是配置上述程式碼後的PoC,接下來我們掃描並解析二維碼。
TonConnect SDK透過二維碼的方式將manifestUrl的資料傳遞給錢包應用,而不是其他SDK透過訊息轉發伺服器轉發。錢包應用程式會解析掃描所獲得的manifestUrl的資料可以。發現,我們很容易偽造造成任何DApp的來源與錢包進行了通訊,因此,攻擊者可以利用這個缺陷偽造知名的DApp 實施釣魚和詐騙攻擊。
https://app.tonkeeper.com/ton-connect?v=2&id=24e3f2fdbea19fcd4fe03da3bc3d534d8b988edd01736f0b127a70cf2c531661&r={“manfestUm.”[{“name”:”ton_addr”}]}
連線成功後,偽造的DApp透過TonConnect發起簽名申請,一旦用戶確認了,錢包就會將簽名後的資料廣播到區塊鏈上。由於原始偽造的欺騙性,使用者很難辨別連接和簽名申請的來源。
在MetaMask SDK 中,透過偽修改dappMetadata 即可造成知名的DApp 實施釣魚和詐騙攻擊:
同理,在錢包ConnectModalSign 中,修改元資料即可:
從「https://unpkg.com/@walletconnect/modal-sign-html@2.5.8」導入{WalletConnectModalSign};
const connectButton = document.getElementById(“連接按鈕”);
const web3Modal = new錢包ConnectModalSign({ projectId: “32832b2f363c3e960ea28541f380b8d1″, 元資料: {name:”FakevilDApp”, description:”FakeandevilDAppeturl: “ [“https://walletconnect.com/static/favicon.png”]},});
總結
由於目前主流錢包和DApp 跨平台/應用通訊時的網域驗證問題暫時沒有更好的解決方案,因此SDK專案方通常會增加一些額外的驗證方式,如:WalletConnect 的驗證機制(https://docs. walletconnect) .com/cloud/verify),在DApp通過驗證網域後,錢包方可以透過Verify API來判斷網域是否可信。
但是,很多主流的DApp 對沒有網域進行驗證,所以這個解決方案也很難解決偽造源頭釣魚攻擊。如果大多數DApp 使用Verify 的方式對網域名稱進行認證,那麼將會大大讓使用者避免不必要的攻擊慢霧安全團隊在此也建議使用者註意識別開啟的網站是否和請求顯示的網域一致避免,請批准此類攻擊。
資訊來源:0x資訊編譯自網際網路。版權歸作者慢霧科技所有,未經許可,不得轉載