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 的精彩分析!