錢包私鑰無心洩露!北科大教授深夜暴氣深入區塊鏈,成功搶救被駭以太貓(真實故事-最新版)

Photo by Pawel Janiak on Unsplash

楔子 — 深夜的熱錢包通知

事情是這樣開始的 — 2018 年 12 月 15 日晚上 10 點 49 分,我正在電腦前工作,突然收到一則手機通知,內容顯示有大約 0.096 ETH(大約美金 8.44 元的以太幣)從尾號 99a80 的以太幣錢包被轉出。

手機錢包的以太幣轉出通知

想想不對,這錢包帳號看來是明明是太太的(同步匯入到我的手機錢包App 幫老婆代管)但我什麼都沒做,怎會無端有錢轉出?啊!突然想起週末前拜託學生將某個 Unity VR 挖礦遊戲程式碼(內有錢包私鑰!)上傳到實驗室 GitHub 帳號,方便後續管理更新 … 再一想,實驗室 GitHub 帳號才剛創好還沒付費,學生上傳程式碼,肯定只能上傳成 Public Repo(公開專案)…印象中區塊鏈高手 — 圖靈鍊公司創辦人 Jeff Hu & 李婷婷 Lee Ting Ting 上回才跟說,有駭客專門寫程式掃描 GitHub 公開專案裡的錢包私鑰,一旦掃到,就會瞬間把錢提走。看來,事有蹊蹺!不妙!

私鑰洩漏,錢被偷了!

馬上私訊學生「你是不是在上傳 Unity VR 挖礦專案到 GitHub? 」學生回說對,正在整理… 我突然想起,學生只是拿我的程式碼回去整理,我並未告訴他程式碼裡有私鑰(為了控制智能合約運作)…

「私鑰被偷了!快停止作業!XD」

懷疑私鑰無新洩漏,趕快訊息學生確認…

檢查一下錢包記錄,裡頭的錢確實在內含私鑰字串的程式碼上傳到 GitHub 平台的公開專案後,被瞬間領走!戶頭裡只剩下小小乾乾的 0.001 ETH 左右 — 一共 0.0968 顆以太幣(折合台幣約 250 元)被偷;這不打緊,要緊的是,這是太太的錢包,裡頭不只有錢,還有兩隻超級珍貴的以太加密貓一隻是 Tabby 一隻是 DocPurr,都屬於限量的「奇異貓咪系列」當中最稀有的,各僅限量 250 隻!外加另外三隻普通貓,一共五隻,竟然就這樣通通落難到了駭客的手中!

兩隻比較貴的限量奇異貓都個別取過名字,一隻叫做「Dora Meow(朵拉喵)」(寶夫人名叫 Dora / 朵拉),另一隻長得像酷愛做研究的怪博士,因此就隨著筆者外號寶博士,名為「寶博士喵」。兩隻一起可以說完全是天造地設不可竄改般的永恆存在;前者在 250 隻限量 Tabby 貓當中編號第 186 號,後者在 DocPurr 貓 250 隻裡頭,編號第 150 號;總之,都相當罕見!要能同時擁有,恐怕天下沒有幾人(至少自以為)。

名貓有主,卻身陷囹圄

就當時狀況看來,駭客已經透過網路爬蟲取得了太太錢包的私鑰,可說是擁有了完全控制權,隨時可能把太太錢包裡頭所有的貓都偷走!

註:以太貓是一種非同質貨幣( ERC721),每一顆都有獨一無二的編號及不可取代性,只要購買後,就可以存在錢包裡「真正地擁有它」,但只要付手續費,也可以隨時把它轉送給他人。

目前被駭錢包內的 Dora Meow 所屬的 Tabby 奇異貓目前市價不低,最便宜的一隻認養費要 0.75 ETH(以太幣),高出駭客所得 — 0.0968 ETH近 10 倍;而寶博士喵所屬的 DocPurr 奇異貓 現今更是要價不斐,最低認養費就要 1.87 ETH!就算是今天(2018/12/16)熊市當前,折合新台幣依舊要超過 5,000 元!

奇異貓咪 Tabby 和 DocPurr 的市場價格(2018/12/16)由低至高

太太的禮物

談錢傷感情,先不講這兩隻貓一隻在今年 3 月入手時花費 0.28 ETH,以當時 一枚以太幣是 $864 美金,認養價折合台幣就要大約 7,000 元;另一隻今年 8 月時花費 0.4 ETH認養,以當時 1 ETH 折合 $321 美金來說,認養費值新台幣 3,800 元!最最重要的是,這兩隻貓都是送太太的禮物!而且送出去後,每每想要回來放入自己的私人貓藍拿來炫耀、晒貓,都被太太嚴詞拒絕(笑),沒想到現在竟然雙雙落入駭客手中,隨時有可能被搶走、變賣!這怎麼可以!?一定要救回來!一喵都不能少🐱🐈😹!

救貓行動開始!

一開始我很天真,想說私鑰被盜,等於我跟駭客兩人都可以控制這個錢包(和裡面的貓),所以理論上只要我能比駭客早用這個錢包登入以太貓官網:CryptoKitties.co 謎戀貓,利用平台內建的「贈送」功能,迅雷不及掩耳地趕緊把貓轉移到安全的錢包裡就沒事了,沒想到…

ALERT! Insufficient Fund! (資金不足)!

沒錯!妳應該也想到了,以太坊區塊鏈上的每筆操作,包括以太貓平台上的認養貓、出售貓、生小貓等等,都需要所謂的「燃料費(Gas Fee)」,也就是需將以太坊區塊鏈網路運算/執行合約所必要的「算力費用」支付給礦工,所以如果錢包裡沒有錢(以太幣),就勢必無法做任何操作!且是連送出交易的機會都沒有 — 轉移貓咪需要的交易確認「CONFIRM」按鈕根本按不下去!

救貓行動 Part 2!

好,這時我開始進行第二步計畫:試著用另外一個錢包,轉一點錢(以太幣)進這個被駭錢包,然後用最快的速度登入這個被駭錢包所屬的以太貓帳號,點選「贈貓」按鈕,把貓迅速送出去。

果不其然,這個計策還是失敗了!每一次轉進被駭錢包的以太幣,都以迅雷不及掩耳的速度被轉出,轉到駭客的錢包裡(目前駭客所得超過 12 個以太幣)。從下圖可以看到從最下方的「OUT (被盜/轉出)0.0968 ETH 」,就是駭客盜走我錢包裡以太幣的紀錄。從該記錄往上看,可以發現,事情發生後,我就多次試著轉帳 0.02, 0.01, 0.01, 0.01 其中光 0.01 ETH 我就轉了三次,每次都是想要比速度,希望能搶在駭客程式作動前,用手速把貓轉出。但是都輸了… 而且那些錢又通通再被駭客的吸金大法給吸走!(跪)

發現錢包被盜,嘗試轉入以太幣把貓領出,屢試屢敗…

我開始感到萬念俱恢

看來駭客應該是取得私鑰以後,便透過電腦程式不斷自動偵測該錢包餘額及動作,只要有新的錢進到錢包,立刻就會啟動吸金轉移大法,把錢吸走。

怎麼辦呢?

只好向最近區塊鏈圈傳說中的最神祕的組織,如同區塊鏈世界裡的光明會、共濟會一般的存在 — 0x1 學院0x1 Academy)成員求救。

進入 0x1 組織的核心群組

為了向 0x1 區塊鏈高手求援,我進入了 0x1 組織的核心群組「0x1 Core」,在那裡,我對群組說道:

發生了慘劇,我想要救貓。 — 寶博士

其中最強的某兩個成員(他們經常被認為是同一人),在瞭解情況後,回覆說「我們試試看」然後就消失了。

2018/12/15 晚上 11 點 34分(距離事情發生將近一小時),在 0x1 Core 群組發生的對話

幾分鐘過去,J 回覆了。

“打0.000333進去” — J說

我原先還有點懷疑,但想說既然 J 說得肯定,我也沒有不去試試的道理。

成功進去了!!沒有被轉走!

神祕的 0.000333 ETH 就這樣巧巧地作為先遣部隊,深入了敵營,進入了被駭的錢包而沒有被駭客發現。

錢包裡多了錢,燃料費應該就足夠了,便趕緊去轉貓!轉幾隻呢?先轉一隻,而且得先轉一隻最貴的!

第二個神祕數字出現了:

“永遠不要打超過0.00168” — J說

如同神諭一般,不知為何,J 就是知道能夠怎樣避開敵方駭客的火線… 其實有原因,但總之那時先無法理解思考這麼多啦,最最要緊的,是要救貓!搶回寶李一家的重大資產,而且要救就要先救最貴的 — 寶博喵

緊張時刻

要知道,現下我們所有動作都在駭客的眼皮底下,不只在區塊鏈上可以查看我們的所有交易記錄(包括剛剛摸進去的 0.000333 ETH),駭客一旦發現我們的營救行動,除了會計畫功虧一簣,更可以隨時把我們所有錢跟貓瞬間領光轉走,甚至透過(以該被駭錢包私鑰簽署)智能合約以封鎖外部的所有行動!

第一隻貓救援成功!博士貓順利出脫!

救出後興奮向 J & T 通報

轉移成功!我們順利的在駭客眼皮底下救走第一隻價值台幣 7,000 元的以太貓!!

時間就是金錢,接下來的動作要快,下一隻要救的貓也不便宜。駭客非常可能針對駭入的錢包隨時有在進行「異常行為偵測」,並在發現受害者的行動後,做出防護或反擊。雖然我在聊天室裡和 J 的對談口氣依舊輕鬆,但按下另外一筆 0.000333 ETH 轉出按鈕時,手指卻是顫抖的。

成功了!第二批援救部隊又進去了!

2018/12/15 晚間 11:47 至 2018/12/16 凌晨 0:18 一共將近半小時的區塊貓營救記錄

從上圖的區塊鏈記錄來看(依據時間由下至上),可以很清楚的看到,「0.000333 ETH」救援部隊一共進去了三次,第一次帶回了寶博喵,第二次帶回了朵拉喵以及另外一隻貓,第三次則帶回了第四隻普通喵。

自此,寶博士喵和朵拉喵都被營救回了寶博士名為「D Furball」的貓藍,他們看起來都鬆了口氣,開心地和其他的奇異貓咪們簇擁在一起(笑)~

寶博士名為「D Furball」的貓藍,寶博士喵和 Dora Meow 重相聚!

總之就這樣,從 2018/12/15 晚間 11:472018/12/16 凌晨 0:18 共耗費近半小時的時間,轉了三筆營救用的以太幣,總計 0.000999 ETH,把四隻貓給順利救了回來!

最後兩隻被救回的貓,看起來果然還是有點驚魂未定。🤣

左邊白色那隻應該是我的第一隻認養的以太貓,也算是有紀念價值

ONE MORE THING…

故事還沒結束(!)

我原先刻意留下了最後一隻貓在受駭錢包裡(如下圖 — 是在 TFF 台北金融發展基金會FinTech eMBA 區塊課時所生),想說也許 J 會想玩玩別種營救方法;如果 J 他們沒動作,之後自己也來創些新的營救方法把它救出,就姑且讓牠留在被駭錢包裡一段時間好了… 結果…

被留在錢包裡的最後一隻貓 「TFF 台北經容發展基金會 Sunny 一號」(現在顯示主人已是駭客錢包)

就這樣,一念之間

一隻貓的命運就此改變!

2018/12/16 凌晨 0 點 58 分,原先沉靜的錢包突然動了起來

我因為還在研究駭客的收款錢包,想要試著找出駭客的來源線索,另外也還沉浸在救貓成功的喜悅裡,所以還沒睡,突然看到手機又 叮.叮.叮 的連續跳出好幾則通知,顯示有幾筆款項轉進了受駭錢包,接著幾則交易被接連產生;我心生好奇但不疑有它,想說被駭錢包裡面也幾乎沒錢了,貓也算是都救走了,猜測大概是 J 他們可能在玩些什麼把戲,我也就沒注意。

沒想到,過了一小時, J 說他的營救記錄寫好在 Medium 上了,要我過去看看,一看發現,竟然不是 J!

J 並沒有在營救完成後去動那個錢包,而是駭客動了!

駭客暴怒💥🤯偷走了最後一隻貓🤬!

根據記錄,被駭錢包在我們營救完四隻貓的半個小時後,不知名駭客作了一連串任誰都難以想像到的事 — 他先後轉入了兩筆 0.003 ETH 以及 0.002 ETH 一共 0.005 以太幣,然後把最後一隻貓,加上剩餘在錢包裡的最後一點錢,全部捲走了!

最後的這幾筆操作記錄已原原本本、永永遠遠的紀錄在以太坊區塊鏈上頭,永遠不會消失。上圖中的最下方一筆,就是 2018/12/16 凌晨 0 點 58 分 13 秒 錢包突然動起來的第一筆 — 駭客先只是發現「錢包裡怎麼還有錢?」後,轉了一小筆手續費(0.003 ETH)進來,把最後一滴以太幣榨乾…

接著,駭客顯然又再看見我們的前面幾筆轉帳記錄,發現了神妙無比的救貓大作戰,除了心想我們可能是難得一見的(以太)貓藏家,懷疑貓可能很有價值外,還見我們花費如此神力(神祕的 0.000333 部隊)把貓救走,同時也可能一氣之下經查發現,我們轉走的每一隻貓的市場價格都是他偷走的以太幣數量(0.0968 ETH)的數十倍 XDD!駭客在暴怒之餘,大概心想最後一隻貓就算沒有價值賣不出去,也要把牠給搶走洩憤!

最後一隻小貓被劫走的轉帳記錄… 😭😭😭

駭客畫像

以下整理上述一連串的動作以及時間距離,並試圖描繪駭客的行為樣貌:

  1. 2018/12/15 深夜 10 點 49 分,駭客吸了寶夫人的錢包共 0.0968 ETH,轉移至偷盜物資集中錢包
  2. 2018/12/15 深夜 11 點 47 分 43 秒,小貓拯救行動開始,第一批 0.000333 ETH 抵達被駭錢包!
  3. 2018/12/16 凌晨 0 點 18 分 57 秒,小貓營救行動結束,第四隻小貓離開被駭錢包!轉移至寶博士安全錢包 — D Furball 貓藍
  4. 在大約這段時間,駭客發現被駭錢包裡還有零錢(估計是有寫一個重新掃描程式,會回傳還有錢但吸金大法沒有吸走的帳號是哪些)以及一隻貓!
  5. 2018/12/16 凌晨 0 點 33 分,駭客疑似嘗試轉移第五隻(最後一隻即將被盜小貓),但最後因不明原因放棄
  6. 2018/12/16 凌晨 0 點 58 分 駭客轉進了 0.003 ETH
  7. 56 秒後,錢包裡最後剩餘的錢被榨乾 轉出— 駭客的吸金程式控制被駭錢包當下轉走了僅存的 0.00153736726 ETH(大約新台幣 3.9 元)
  8. 過了 4 分鐘 28 秒,估計此時駭客似乎發現了我們此前的拯救行動,他怒而轉進了 0.002 ETH(大約新台幣 5 元 — 竟然比他前次榨乾轉走的錢要多!)要進行最後的邪惡舉動!
  9. 2 分鐘 17 秒後,估計駭客利用這段時間以被駭錢包登入 CryptoKitties 網站 ,手動操作以太貓的轉移功能,把貓偷走了! (*請先記住這裡有個疑點「為何上一筆 0.002 ETH 過了 2 分 17 秒卻沒有被吸金程式轉走?」)
  10. 2018/12/16 凌晨 1 點 17 分整距離駭客的上一個行動足足又過了 8 分鐘又 46 秒)被駭錢包裡的最後一個動作出現了:0.00098 ETH(相當於新台幣 2.7 元)被轉移至駭客集資錢包,整個攻擊偷盜行動正式結束。
駭客手動登入的證據:
駭客使用被駭錢包在謎戀貓網站上操作留下的痕跡(最上方最後兩筆,00:33 這筆是失敗的*,所以 01:06 又再轉一次)

如果是用呼叫合約的方式轉移貓咪,在以太貓的介面上就不會留下歷史紀錄;而謎戀貓網站上,若用被駭錢包登入確實可以看到最後兩筆資料(轉移被盜小貓)均有留下記錄,那麼就駭客就一定是手動轉移而非使用智能合約程式盜走小貓;幾乎可以百分之百確定 — 駭客確實曾經手動登入謎戀貓網站

*請注意上圖倒數第二個 00:33 分的轉移記錄,這筆記錄至今是個謎,估計是駭客可能更早的時間(凌晨 0 點 33 分 — 這筆沒有顯示在被駭錢包記錄上)就曾試圖偷走貓,但發現錢包裡的錢不夠,得手動停掉吸金程式碼,因而放棄轉移,並且有了 凌晨 0 點 58 分 後續一連串的動作。

好!在進入結語之前,先讓我們替這隻傳奇被盜小貓默哀兩行。


結語

好!總結這次精采萬分(其實是狠蝦想哭)的事件,我們學到了:

  1. 千萬不要在公開的網路平台上露出錢包私鑰 — 就算需要帳號密碼登入的也一樣!許多平台只要單一組帳號密碼登入,就能看到許多公開文件,諸如 Pastebin, Gist, 或這次的 GitHub
  2. 平時多燒香,多認識朋友,這次靠 0x1 Friend 總算在夠短的時間之內把貓轉走,雖然犧牲了最後一隻貓(我的錯 QQ)但至少總損失控制在 0.1 以太幣(現價約新台幣 250 元)以內,不致於讓整個週末心情毀於一旦。
  3. 大家都知道私鑰被盜會損失錢財,但這次經驗告訴我們,整個「被盜」是有「一定過程」而且「有一定機率和駭客搶物資、搶錢財」的!基於以太坊的操作、轉帳、轉貓均需要手續費的特性,使得被盜錢包的所有權雖然被盜走了,但裡頭的幣和物資將不會「立刻」被轉走!雖就此次案例而言,尚未知這個搶救空檔究竟是程式造成還是人為因素,但總之會有一定的時間差!這就是黃金搶救時間
補充:後續觀察發現,在 11 月中該名駭客便曾利用類似手法慘絕人寰的劫走了尾號「Cb4B1」的帳號至少 1,200 枚 TrueUSD 穩定幣(價值至少台幣 3 萬 6 千元)。該被盜錢包擁有者似乎進行了類似本文一開始進行的拯救行動,轉了兩次 0.01 ETH 試圖把 TUSD 轉出,但均告失敗,最後落入被駭客手動榨乾的悲慘結局。

此外,由於以太貓咪的特性是,無論歷史如何演變,貓咪如何移轉;單隻貓咪的移轉歷史紀錄永遠獨立於其他貓咪(這點和一般區塊鏈代幣資產不同);因此,雖然我們失去了這隻小貓,但我們原則上可以永永遠遠的追查牠去了何方,究竟轉移給了誰,認養費被掛了多少,通通可以在區塊鏈上看得到 ,直到千秋萬世 — 以太坊區塊鏈崩毀的那一天!

被盜小貓目前為止的身世

編號第 716382 號的以太坊區塊鏈小貓的認養記錄

可以看到,被盜小貓在 232 天前誕生之後,一共經歷了四次轉移,第三次來到了朵拉貓的家,第四次就是駭客偷盜的紀錄了。

讓我們再次緬懷牠 🤮🤧😭

傳說中的「被盜小貓」!

雖說小貓是被盜走了,但其實駭客也相應地付出了0.000815 ETH 的轉移手續費,總計轉入了 0.03+0.02 一共 0.05 ETH 的總成本;所以也不算是被免錢認養啦(笑)!而且,我們將永遠能透過檢查鏈上交易記錄,知道這隻被盜小貓到底最後流落何方。

而在戰火之下被救走的小貓們呢?

早就被寶教授暴氣派遣網路部隊營救受駭迷戀貓後,勒令乖乖繼續寫論文啦!

貓咪們努力寫論文,以報答寶博士的營救之恩!


如果你覺得這篇文章有趣或有用,請幫忙按本頁最下方的 Medium .拍.手.按.鈕(最多50下)拍得越多,寶博士就能多喝幾杯咖啡唷。

也歡迎註冊後追蹤 我的 Medium 還有 我的臉書。寶博士感謝您 🙇‍


本文章已透過 Matters Lab 發佈上鏈( IPFS):https://matters.news/forum/?post=995db9de-ac23-452c-8ee4-29c2a3b536d8
最後更新日期 2018/12/17 PM 10:24