背景:NFT 市場 OpenSea 首席執行官 Devin Finzer 週六表示,OpenSea 正在調查一起黑客攻擊事件,部分用戶價值 170 萬美元的 NFT 被盜

原文:复盤 OpenSea 用戶 NFT 被盜事件

作者:Xing  丨 Web3Caff 經授權發布

還是寫一篇文章來复盤一下近來 OpenSea 用戶被盜事件,算是對更多用戶的提醒吧。

首先 OpenSea 官方發過這樣一封郵件通知用戶,大意是說 2 月 18 號開始到 2 月 25 日,你要遷移你的 Listing Order,如果你不遷移的話屆時賣單會過期。

OpenSea 通知遷移賣單的郵件

OpenSea 然後到了開始遷移賣單的日期,很多用戶報導了自己 NFT 被盜事件,看到的消息被盜用戶都稱進行過賣單遷移操作。同時 OpenSea 官方定義此次為 “phishing attack”(釣魚攻擊)。

21 號 @kop_17173  在推特裡讓我看看這次黑客是如何進行攻擊的,並提供了發起本次攻擊的合約地址,本人根據該合約的行為推斷了這次 attack 的過程。

如何攻擊

  1. 黑客首先知道了 OpenSea 需要用戶對其賣單進行遷移,並且知道 OpenSea 官方提前發出了遷移日期和操作步驟的郵件。
  2. 黑客提前做好了釣魚網站,並且通過偽造的郵件通知用戶進行遷移操作,引導受害用戶在該釣魚網站上進行賣單遷移操作。這個遷移操作就是讓用戶對其銷售的賣單進行簽名,然而簽名的賣單價格是 0。
  3. 黑客拿到用戶簽了名的賣單信息,通過調用 OpenSea 的交易合約就能以 0 的價格完成交易,順利拿到受害者的 NFT。

我們以黑客的這筆 Transaction 交易為例,這筆交易總共盜走了 7 個 NFT:

黑客轉走的 NFT

通過這筆交易的 EventLog 來看,這筆交易中有一個事件(OrdersMatched)就是 OpenSea 的交易合約 Wyvem 發出來的,下面截圖底部的紅框可以看到這筆訂單成交的金額是 0。

OpenSea 交易合約發出的事件日誌

OpenSea 上述這個 OrdersMatched 的 Event 是 OpenSea 交易合約成交之後才會發出的,所以斷定黑客是通過該攻擊合約去調用 OpenSea 的交易合約完成了 price 為 0 的交易。

下圖是 OpenSea 交易合約的部分代碼,實際上在 OpenSea 完成一個交易,如果是買家發起操作的話,則會做以下幾步判斷:

  1. 驗證提交的買單參數是否正確
  2. 驗證提交的賣單的參數是否正確,以及是否有賣家的正確簽名
  3. 驗證買單的參數是否匹配賣單的條件(例如價格,有效期等)
OpenSea 交易合約代碼

如果這幾項都校驗通過,則 OpenSea 的交易合約則會調用 NFT 轉移之類的操作完成交易,並在最後發送 “OrdersMatched” 事件來記錄這次交易。

所以這次攻擊事件中,黑客能夠盜取到 NFT 就是通過釣魚拿到用戶報價為 0 的賣單信息(“sell”)以及簽名(“sellSig”)。

之前我在推特中分析過一些 BAYC 以很低的價格被黑客買走,也是因為黑客拿到了 BAYC 擁有者曾經在 OpenSea 掛出過的帶有簽名的低價賣單信息,然而用戶又忘記了取消掛單導致的。

所以這兩次攻擊的本質都一樣,就是黑客手上有低價、且帶有 owner 簽名的賣單信息。不過這次攻擊黑客獲取賣單信息的方式是通過郵件釣魚而已。

一點猜想

以上攻擊過程和手段是通過推友告知的黑客攻擊合約信息,以及看見被盜用戶都是進行了賣單遷移操作這些信息推斷出來的。雖然目前我還沒有看到被盜用戶發出的賣單遷移的釣魚郵件及釣魚網站,但個人覺得八九不離十。

但是對於這個攻擊合約地址的部署時間,差不多是一個月以前了,而第一次發起攻擊交易是在 2 月 19 號,也就是 OpenSea 開始遷移賣單沒多久,相當於這個黑客提前部署了攻擊合約並潛伏了一個月左右。

我這裡猜測一下,懷疑可能是 OpenSea 內部有信息洩漏(內鬼或者內網被攻破),所以黑客才能精準地發起一系列攻擊行為:

首先黑客可能在一個月以前就得知了 OpenSea 要升級合約,OpenSea 會要求用戶遷移賣單,所以黑客提前部署了一個攻擊合約

接著黑客做了個釣魚網站,專門用來騙取用戶進行訂單遷移,但實際上是讓用戶對售價為 0 的賣單進行簽名。正因為 OpenSea 提前通知了所有用戶官方會在那個時間段要求用戶進行遷移,所以這個時候黑客發出的釣魚郵件以及遷移訂單的釣魚操作都會讓用戶放鬆警惕。

另外我看黑客盜取的 NFT 大多都是 BAYC,Doodles,CloneX,Azuki 這類藍籌,而黑客又能精准定位到釣魚郵件的發送對像是藍籌 NFT 的 owner 用戶,而我這個無藍籌 NFT 的 Jpeg 收藏者並沒有收到釣魚郵件,所以推測黑客算是精確打擊。

因為遷移賣單而導致 NFT 被盜的用戶,可以聯繫我將釣魚郵件發給我,我也判斷一下我的猜測是否準確。不過最終的調查結果以 OpenSea 官方公佈的為準!

一點提醒

這裡提醒下大家,所有郵件中的發件人是可以偽造的,而且是很方便偽造,所以不能以郵件發送人來判斷是否是官方發來的郵件!

另外點擊郵件中的鏈接之後,一定要注意:

  1. 瀏覽器顯示的地址是不是你要訪問網站的地址(注意不要有拼寫錯誤)
  2. 瀏覽器顯示的鏈接是不是 HTTPS 的鏈接,如果不是 HTTPS 的鏈接,瀏覽器地址欄那裡會顯示 “不安全的鏈接”,這個時候不要訪問了。

只要保證以上兩點,就能夠識別到絕大多數的釣魚網站。

另外千萬別在電腦上亂裝應用,因為該應用有可能在你電腦上偷偷裝了個根證書,這樣就能讓你訪問釣魚網站的時候,瀏覽器地址欄可以顯示與官方網站一模一樣的網址,同時還能顯示該鏈接是安全的!所以千萬別亂裝未知應用,特別是未知網友給你發的應用!

最後如我之前這篇關於 OpenSea 交易及 NFT 的技術分析文章所說,大家在 MetaMask 上進行 Approve 和 SetApprovalForAll 這類的交易授權時需要特別小心,看看當前網站和授權的對像是否有問題。因為一旦授權,該地址就有權利轉走你的 NFT。

授權 NFT 轉移調用方法,右上角是授權的地址

最後在 OpenSea 上對賣單進行簽名時,也注意一下 MetaMask 彈出要求你簽名的內容,看看價格是不是你希望的售出價格。

OpenSea 掛出賣單簽名信息

如上面這個截圖,MetaMask 中籤名信息往下滑,basePrice 顯示的就是賣單信息中的售價,減去 18 個 0 看看是不是你希望售出的價格。如果釣魚網站要你簽名的話,這個價格會是 0 或者特別低,你對這個賣單簽名之後,黑客就能以 0 或者低價買走你的 NFT。

最後

安全是一個系統性工程,三言兩語絕對不會讓大家明白。求個關注,我推特上也已經不定期的分享過很多即時的安全問題了。希望大家也能從一些信息碎片中慢慢學會在區塊鏈這個狂野且不受監管的世界中保護好自己資產。

願 Crypto 天下無賊!

免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。