錢包私鑰在實驗過程無心洩露!北科大教授深夜暴氣,成功搶救被駭以太貓

0 15

楔子 — 深夜的熱錢包通知

事情是這樣開始的 — 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 是 USD$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」的貓藍;看起來都鬆了一口氣呢(咦 XD),開心地和其他的奇異貓咪們簇擁在一起~

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

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

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

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

ONE MORE THING…

故事還沒結束(!)

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

– 被留在錢包裡的最後一隻貓(現在顯示的主人已是駭客所擁有集中被盜物資的錢包) –

就這樣,一念之間

一隻貓的命運就此改變!

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!駭客在暴怒之餘,也許心想最後一隻貓就算沒有價值賣不出去,也要把貓給搶走洩憤!

– 最後一隻小貓被劫走的轉帳記錄…  –
– 駭客使用被駭錢包在謎戀貓網站上操作留下的痕跡(最上方最後兩筆,00:33 這筆是失敗的*,所以 01:06 又再轉一次) –

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

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

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

 

文章引用來源

留言
Loading...