背景
區塊鏈的世界遵循黑暗森林法則,在這個世界我們隨時可能遭受到來自不明的外部攻擊,作為普通用戶不進行作惡,但是了解黑客的作惡的方式是十分必要的。
慢霧安全團隊此前發布了區塊鏈黑暗森林自救手冊
,其中提到了不少關于針對NFT項目方的Discord進行攻擊的手法,為了幫助讀者對相關釣魚方式有更清晰的認知,本文將揭露其中一種釣魚方法,即通過惡意的書簽來盜取項目方Discord賬號的Token,用來發布虛假信息等誘導用戶訪問釣魚網站,從而盜取用戶的數字資產。
釣魚事件
先來回顧一起Discord釣魚事件:2022年3月14日,一則推特稱NFT項目WizardPass的Discord社區被詐騙者入侵,目前已造成BAYC、Doodles、CloneX等NFT被盜,詳情如下:
牽出其中一個解讀:
慢霧:Equalizer Finance被黑主要在于FlashLoanProvider合約與Vault合約不兼容:據慢霧區消息,6 月 7 日,Equalizer Finance 遭受閃電貸攻擊。慢霧安全團隊以簡訊形式將攻擊原理分享如下:
1. Equalizer Finance 存在 FlashLoanProvider 與 Vault 合約,FlashLoanProvider 合約提供閃電貸服務,用戶通過調用 flashLoan 函數即可通過 FlashLoanProvider 合約從 Vault 合約中借取資金,Vault 合約的資金來源于用戶提供的流動性。
2. 用戶可以通過 Vault 合約的 provideLiquidity/removeLiquidity 函數進行流動性提供/移除,流動性提供獲得的憑證與流動性移除獲得的資金都受 Vault 合約中的流動性余額與流動性憑證總供應量的比值影響。
3. 以 WBNB Vault 為例攻擊者首先從 PancekeSwap 閃電貸借出 WBNB
4. 通過 FlashLoanProvider 合約進行二次 WBNB 閃電貸操作,FlashLoanProvider 會先將 WBNB Vault 合約中 WBNB 流動性轉給攻擊者,隨后進行閃電貸回調。
5. 攻擊者在二次閃電貸回調中,向 WBNB Vault 提供流動性,由于此時 WBNB Vault 中的流動性已經借出一部分給攻擊者,因此流動性余額少于預期,則攻擊者所能獲取的流動性憑證將多于預期。
6. 攻擊者先歸還二次閃電貸,然后從 WBNB Vault 中移除流動性,此時由于 WBNB Vault 中的流動性已恢復正常,因此攻擊者使用添加流動性獲得憑證所取出的流動性數量將多于預期。
7. 攻擊者通過以上方式攻擊了在各個鏈上的 Vault 合約,耗盡了 Equalizer Finance 的流動性。
此次攻擊的主要原因在于 Equalizer Finance 協議的 FlashLoanProvider 合約與 Vault 合約不兼容。慢霧安全團隊建議協議在進行實際實現時應充分考慮各個模塊間的兼容性。[2022/6/8 4:09:22]
慢霧:警惕QANX代幣的雙花攻擊風險:據慢霧區消息,近期存在惡意用戶利用QANX代幣的轉賬鎖定、解鎖功能(transferLocked/unlock)觸發的事件記錄與正常使用transfer功能轉賬觸發的Transfer事件記錄相同而進行雙花攻擊。
慢霧安全團隊建議已上架此幣種的平臺及時自查,未上架的平臺在對接此類幣種時應注意以上風險。
QANX: 0xaaa7a10a8ee237ea61e8ac46c50a8db8bcc1baaa[2022/3/26 14:18:46]
該解讀里說的bookmark就是瀏覽器書簽,這個書簽里的內容可以是一段JavaScript惡意代碼,當Discord用戶點擊時,惡意JavaScript代碼就會在用戶所在的Discord域內執行,盜取DiscordToken,攻擊者獲得項目方的DiscordToken后就可以直接自動化接管項目方的Discord賬戶相關權限。
背景知識
要理解該事件需要讀者有一定的背景知識,現在的瀏覽器都有自帶的書簽管理器,在提供便利的同時卻也容易被攻擊者利用。通過精心構造惡意的釣魚頁面可以讓你收藏的書簽中插入一段JavaScript代碼,當受害者點擊書簽時會以當前瀏覽器標簽頁的域進行執行。
慢霧:Crosswise遭受攻擊因setTrustedForwarder函數未做權限限制:據慢霧區情報,2022年1月18日,bsc鏈上Crosswise項目遭受攻擊。慢霧安全團隊進行分析后表示,此次攻擊是由于setTrustedForwarder函數未做權限限制,且在獲取調用者地址的函數_msg.sender()中,寫了一個特殊的判斷,導致后續owner權限被轉移以及后續對池子的攻擊利用。[2022/1/19 8:57:48]
以上圖為例,受害者打開了discord.com官網,并在這個頁面點擊了之前收藏的惡意的書簽“Hello,World!”從而執行了一個彈窗語句,可以發現執行的源顯示的是discord.com。
這里有一個域的概念,瀏覽器是有同源策略等防護策略的,按理不屬于discord.com做出的操作不應該在discord.com域的頁面有響應,但書簽卻繞過了這個限制。
慢霧:跨鏈互操作協議Poly Network遭受攻擊并非由于網傳的keeper私鑰泄漏:對于跨鏈互操作協議Poly Network遭受攻擊事件,慢霧安全團隊分析指出:本次攻擊主要在于EthCrossChainData合約的keeper可由EthCrossChainManager合約進行修改,而EthCrossChainManager合約的verifyHeaderAndExecuteTx函數又可以通過_executeCrossChainTx函數執行用戶傳入的數據。因此攻擊者通過此函數傳入精心構造的數據修改了EthCrossChainData合約的keeper為攻擊者指定的地址,并非網傳的是由于keeper私鑰泄漏導致這一事件的發生。[2021/8/11 1:47:48]
可以預見書簽這么個小功能隱含的安全問題,正常添加書簽的方式會明顯看到書簽網址:
稍微有安全意識的讀者應該會直接看到網址信息明顯存在問題。
慢霧:Cover協議被黑問題出在rewardWriteoff具體計算參數變化導致差值:2020年12月29日,慢霧安全團隊對整個Cover協議被攻擊流程進行了簡要分析。
1.在Cover協議的Blacksmith合約中,用戶可以通過deposit函數抵押BPT代幣;
2.攻擊者在第一次進行deposit-withdraw后將通過updatePool函數來更新池子,并使用accRewardsPerToken來記錄累計獎勵;
3.之后將通過_claimCoverRewards函數來分配獎勵并使用rewardWriteoff參數進行記錄;
4.在攻擊者第一次withdraw后還留有一小部分的BPT進行抵押;
5.此時攻擊者將第二次進行deposit,并通過claimRewards提取獎勵;
6.問題出在rewardWriteoff的具體計算,在攻擊者第二次進行deposit-claimRewards時取的Pool值定義為memory,此時memory中獲取的Pool是攻擊者第一次withdraw進行updatePool時更新的值;
7.由于memory中獲取的Pool值是舊的,其對應記錄的accRewardsPerToken也是舊的會賦值到miner;
8.之后再進行新的一次updatePool時,由于攻擊者在第一次進行withdraw后池子中的lpTotal已經變小,所以最后獲得的accRewardsPerToken將變大;
9.此時攻擊者被賦值的accRewardsPerToken是舊的是一個較小值,在進行rewardWriteoff計算時獲得的值也將偏小,但攻擊者在進行claimRewards時用的卻是池子更新后的accRewardsPerToken值;
10.因此在進行具體獎勵計算時由于這個新舊參數之前差值,會導致計算出一個偏大的數值;
11.所以最后在根據計算結果給攻擊者鑄造獎勵時就會額外鑄造出更多的COVER代幣,導致COVER代幣增發。具體accRewardsPerToken參數差值變化如圖所示。[2020/12/29 15:58:07]
當然如果是一個構造好誘導你拖拽收藏到書簽欄到頁面呢?可以看到twitter鏈接中的演示視頻就是構造了這么個誘導頁面:”Dragthistoyourbookmarked”。
也就是拖著某個鏈接即可添加到書簽欄,只要釣魚劇本寫得足夠真實,就很容易讓安全意識不足的用戶中招。
要實現拖拽即可添加到書簽欄只需要構造一個a標簽,下面是示例代碼:
書簽在點擊時可以像在開發者工具控制臺中的代碼一樣執行,并且會繞過CSP(ContentSecurityPolicy)策略。
讀者可能會有疑問,類似“javascript:()”這樣的鏈接,在添加進入到瀏覽器書簽欄,瀏覽器竟然會沒有任何的提醒?
筆者這里以谷歌和火狐兩款瀏覽器來進行對比。
使用谷歌瀏覽器,拖拽添加正常的URL鏈接不會有任何的編輯提醒。
使用谷歌瀏覽器,拖拽添加惡意鏈接同樣不會有任何的編輯提醒。
使用火狐瀏覽器如果添加正常鏈接不會有提醒。
使用火狐瀏覽器,如果添加惡意鏈接則會出現一個窗口提醒編輯確認保存。
由此可見在書簽添加這方面火狐瀏覽器的處理安全性更高。
場景演示
演示采用的谷歌瀏覽器,在用戶登錄Web端Discord的前提下,假設受害者在釣魚頁面的指引下添加了惡意書簽,在Discord?Web端登錄時,點擊了該書簽,觸發惡意代碼,受害者的Token等個人信息便會通過攻擊者設置好的Discordwebhook發送到攻擊者的頻道上。
下面是演示受害者點擊了釣魚的書簽:
下面是演示攻擊者編寫的JavaScript代碼獲取Token等個人信息后,通過DiscordServer的webhook接收到。
筆者補充幾點可能會產生疑問的攻擊細節:
1.為什么受害者點了一下就獲取了?
通過背景知識我們知道,書簽可以插入一段JavaScript腳本,有了這個幾乎可以做任何事情,包括通過Discord封裝好的webpackChunkdiscord_app前端包進行信息獲取,但是為了防止作惡的發生,詳細的攻擊代碼筆者不會給出。
2.?為什么攻擊者會選擇Discordwebhook進行接收?
因為Discordwebhook的格式為
“https://discord.com/api/webhooks/xxxxxx”,直接是Discord的主域名,繞過了同源策略等問題,讀者可以自行新建一個Discordwebhook進行測試。
3.拿到了Token又能怎么樣?
拿到了Token等同于登錄了Discord賬號,可以做登錄Discord的任何同等操作,比如建立一個Discordwebhook機器人,在頻道里發布公告等虛假消息進行釣魚。
總結
攻擊時刻在發生,針對已經遭受到惡意攻擊的用戶,建議立刻采取如下行動進行補救:
1.立刻重置Discord賬號密碼。
2.重置密碼后重新登錄該Discord賬號來刷新Token,才能讓攻擊者拿到的Token失效。
3.刪除并更換原有的webhook鏈接,因為原有的webhook已經泄露。
4.提高安全意識,檢查并刪除已添加的惡意書簽。
作為用戶,重要的是要注意任何添加操作和代碼都可能是惡意的,Web上會有很多的擴展看起來非常友好和靈活。書簽不能阻止網絡請求,在用戶手動觸發執行的那一刻,還是需要保持一顆懷疑的心。
本文到這邊就結束了,慢霧安全團隊將會揭露更多關于黑暗森林的攻擊事件,希望能夠幫助到更多加密世界的人。
By:耀@慢霧安全團隊
在2017年的Cryptokitties項目奠定了初始基礎之后,在2021年Beeple、CryptoPunks、BoardApeYacht等NFT項目接連爆發,NFT概念走向主流.
1900/1/1 0:00:00金色財經消息,灰度首席執行官MichaelSonnenshein近期接受采訪時表示:“從美國SEC的角度來看,40Act產品有的幾項保護33Act產品并沒有.
1900/1/1 0:00:002021年10月,坐擁28億用戶的社交媒體巨頭Facebook公司宣布更名為“Meta”,未來將全身心專注于虛擬現實與增強現實業務,至此徹底引發了元宇宙概念的爆發.
1900/1/1 0:00:004月19日,音樂NFT平臺KOLO.Market正式上線,它通過鑄造Music-NFT的方式,為樂迷欣賞、收藏音樂提供了一個新的載體,讓經典音樂更易流傳.
1900/1/1 0:00:00頭條 ▌四川省發改委發文稱嚴打挖礦和執行差別電價4月15日消息,四川省發改委發布通知,根據國家和省整治虛擬貨幣“挖礦”活動相關政策規定,嚴禁一切虛擬貨幣“挖礦”活動.
1900/1/1 0:00:00隨著MetaPlatformsInc.和其他一些公司都在將發展重點轉移到虛擬現實平臺上,MorningConsult的一份特殊報告闡述了公眾對元宇宙的興趣和擔憂.
1900/1/1 0:00:00