NFT 訪問列表工具 Premint 被黑,導致用戶的 Bored Ape Yacht Club、Otherside、Moonbirds、Oddities 和 Goblintown 等知名 NFT 被盜,速覽了解其攻擊細節。
— 導讀(Web3Caff 編輯部注)
7 月 17 日,據慢霧區情報反饋,Premint 遭遇黑客攻擊。慢霧安全團隊在第一時間進行分析和預警。
本文來自慢霧區夥伴 Scam Sniffer 的投稿,具體分析如下:
攻擊細節
打開任意 Premint 項目頁面,可以看到有個 cdn.min.js 注入到了頁面中,看調用棧該 js 是由 [boomerang.min.js](https://s3-redwood-labs.premint.xyz/theme/js/boomerang.min.js) 注入,目前該 s3-redwood-labs-premint-xyz.com 域名已經停止解析,無法正常訪問了。
查詢 Whois,該域名在 2022-07-16 註冊於 Tucows Domains Inc:
打開 virustotal.com 可以看到該域名之前曾解析到 CloudFlare:
打開源代碼可以看到 boomerang.min.js 是 Premint 用到的一個 UI 庫:
該 js 是在 s3-redwood-labs.premint.xyz 域名下,猜測:
- 上傳文件接口有漏洞可以上傳任意文件到任意 Path(比較常見的 Web 漏洞)
- 黑客拿到了他們這個 Amazon S3 的權限,從而可以注入惡意代碼
- 這個第三方庫被供應鏈攻擊污染了
把 boomerang.min.js 代碼下載下來,前面都是正常的代碼,但是末尾有一段經過加密的代碼:
這段代碼負責把代碼 s3-redwood-labs-premint-xyz.com/cdn.min.js 注入到頁面。
惡意代碼 cdn.min.js
根據代碼內容,可以大致看到有通過調用 dappradar.com 的接口來查詢用戶的 NFT 資產列表(此前我們也有看到惡意網站通過 Debank,Opensea 的 API 來查詢用戶資產等)。
如果用戶持有相關 NFT 資產:
惡意代碼會以 Two-step wallet 驗證的藉口,發起 setApprovalForAll 讓用戶授權給他們後端接口返回的地址(攻擊者一般為了提高封禁成本,基本上會分流並且每個地址控制在 200 個交易內)。
如果用戶點了 Approve,攻擊者還會調用監測代碼通知自己有人點擊了:
如果當用戶地址沒有 NFT 資產時,它還會嘗試直接發起轉移錢包裡的 ETH 的資產請求:
另外這種代碼變量名加密成_0xd289 _0x 開頭的方式,我們曾經在 play-otherside.org,thesaudisnfts.xyz 這些釣魚網站也見到過。
根據用戶資產發起 setApprovalForAll 或者直接轉移 ETH,並且阻止用戶使用開發者工具 debug。
預防方式
那麼作為普通用戶如何預防?現階段 MetaMask 對 ERC 721 的 setApprovalForAll 的風險提示,遠沒有 ERC20 的 Approve 做得好。
即使很多新用戶無法感知到這個行為的風險,但我們作為普通用戶看到帶 Approve 之類的交易一定要仔細打開授權給相關地址,看看這些地址最近的交易是否異常(比如清一色的 safeTransferFrom),避免誤授權!
這種攻擊和上次 Etherscan 上 Coinzilla 利用廣告注入惡意的攻擊方式挺相似的,那麼在技術上有沒有可能預防?
理論上如果已知一些惡意 js 代碼的行為和特徵:
- 比如說代碼的加密方式
- 惡意代碼關鍵特徵
- 代碼會反 debug
- 會調用 opensea, debank, dappradar 等 API 查詢用戶資產
根據這些惡意代碼的行為特徵庫,那麼我們可以嘗試在客戶端網頁發起交易前,檢測頁面有沒有包含已知惡意特徵的代碼來探測風險,或者直接更簡單一點,對常見的網站設立白名單機制,不是交易類網站發起授權,給到足夠的風險提醒等。
接下來 Scam Sniffer 和慢霧安全團隊也會嘗試探索一下如何在客戶端來預防此類的攻擊發生!
Ps. 感謝作者 Scam Sniffer 的精彩分析!
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。本文內容僅用於信息分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。