相關報導:OpenSea:仍在調查網絡釣魚攻擊細節受影響個人名單已縮小到17人

推薦:市場牛熊不定又遇上OpenSea被盜, 點擊此處加入PANews群組一起抱團取暖

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

作者: Xing

還是寫一篇文章來复盤一下近來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 天下無賊!