看板 DigiCurrency 關於我們 聯絡資訊
因為老師沒在用批踢踢,但又想分享這曲折離奇的搶救過程, 內文包含了私鑰意外流出的經過及提醒、 被盜取後錢包的狀態,以及如何搶救可轉移的DAPP資產。 以下為代PO。 -- 原文標題: 以太貓搶救大作戰-北科大教授暗夜暴氣深入區塊鏈救出受駭小貓實錄 原文(完整圖文版): https://medium.com/@daaab/528a1095ff71 作者: 寶博士(dAb)葛如鈞 https://medium.com/@daaab/ -- 楔子 — 深夜的熱錢包通知 事情是這樣開始的 — 2018 年 12 月 15 日晚上 10 點 49 分,正在電腦前工作的我, 收到一則手機通知,內容顯示有大約 0.096 ETH(大約 美金 8.44 元的以太幣) 從尾號 99a80 的以太幣錢包被轉出。 https://cdn-images-1.medium.com/max/800/1*mdCGZLxLpIyROlO7xZaYJw.png
想想不對,這錢包帳號看來是明明是太太的(同步匯入到我的手機錢 包App 幫老婆代管 )但我什麼都沒做,怎會無端有錢轉出?啊!突然想起週末前拜託學生將某個 Unity VR 挖礦遊戲程式碼(內有錢包私鑰!)上傳到實驗室 GitHub 帳號,方便後續管理更新 … 再一想,實驗室 GitHub 帳號才剛創好還沒付費,學生上傳程式碼,肯定只能上傳 成 Public Repo(公開專案)…印象中區塊鏈高手 — 圖靈鍊公司創辦人 Je Hu & 李婷 婷 Lee Ting Ting 上回才跟說,有駭客專門寫程式掃描 GitHub 公開專案裡的錢包私鑰 ,一旦掃到,就會瞬間把錢提走。看來,事有蹊蹺!不妙! 私鑰洩漏,錢被偷了! 馬上私訊學生詹閔翔「你是不是在上傳 Unity VR 挖礦專案到 GitHub? 」學生回說對, 正在整理… 「私鑰被偷了!快停止作業!XD」 檢查一下錢包記錄,裡頭的錢確實在內含私鑰字串的程式碼上傳到 GitHub 平台的公開專 案後,被瞬間領走!戶頭裡只剩下小小乾乾的 0.001 ETH 左右 — 一共 0.0968 顆以太 幣(折合台幣約 250 元)被偷; 這不打緊,要緊的是,這是太太的錢包,裡頭不只有錢 ,還有兩隻超 級珍貴的以太加密貓!一隻是 Tabby 一隻是 DocPurr,都屬於限量的 「 奇異貓咪系列」當中稀有的,各僅限量 250 隻!外加另外三隻普 通貓,一共五隻,竟然 就這樣通通落難到了駭客的手中! https://cdn-images-1.medium.com/max/600/1*wRx2cmJr4becdY4B5n2cbw.png
兩隻比較貴的限量奇異貓都個別取過名字,一隻叫做「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 元! 太太的禮物 談錢傷感情,先不講這兩隻貓一隻在今年 3 月入手時花費 0.28 ETH, 以當時 一枚以太 幣是 $864 美金,那隻貓的認養價格折合台幣就要大 約 7,000 元;另一隻今年 8 月時 花費 0.4 ETH 認養 以當時 1 ETH 是 USD$321 來說,認養費要近新台幣 3,800 元!重 要的是,這兩隻 貓都是送太太的禮物!而且送出去後,每每想要回來放入自己的私人 貓 藍拿來炫耀、晒貓,都被太太嚴詞拒絕(笑),沒想到現在竟然雙 雙落入駭客手中,隨 時有可能被搶走、變賣!這怎麼可以!?一定要 救回來!一喵都不能少! 救貓行動開始! 一開始我很天真,想說私鑰被盜,等於我跟駭客兩人都可以控制這個 錢包(和裡面的貓 ),所以理論上只要我能比駭客早用這個錢包登入以太貓官網:CryptoKitties.co 謎戀 貓,利用平台內建的「贈送」功能,迅雷不及掩耳地趕緊把貓轉移到安全的錢包裡就沒 事了,沒想到… ALERT! Insucient Fund! (資金不足)! https://cdn-images-1.medium.com/max/800/1*MOXlrADFNvoRmw20sV339w.png
沒錯!妳應該也想到了,以太坊區塊鏈上的每筆操作,包括以太貓平 台上的認養貓、出 售貓、生小貓等等,都需要所謂的「燃料費(Gas Fee)」,也就是需將以太坊區塊鏈網 路運算/執行合約所必要的「算 力費用」支付給礦工,所以如果錢包裡沒有錢(以太幣) ,就勢必無法做任何操作!且是連送出交易的機會都沒有 — 轉移貓咪需要的交易 確認 按鈕「CONFIRM」,根本按不下去! 救貓行動 Part 2! 好,這時我開始進行第二步計畫:試著用另外一個錢包,轉一點錢 (以太幣)進這個被 駭錢包,然後用快的速度登入這個被駭錢包所 屬的以太貓帳號,點選「贈貓」按鈕,把 貓迅速送出去。 果不其然,這個計策還是失敗了!每一次轉進被駭錢包的以太幣,都 以迅雷不及掩耳的 速度被轉出,轉到駭客的錢包裡(目前駭客所得超 過 12 個以太幣)。從下圖可以看到 從下方的「OUT (被盜/轉出) 0.0968 ETH 」事件發生後,我就多次試著轉帳 0.02, 0.01, 0.01, 0.01 其中光 0.01 ETH 我就轉了三次,每次都是想要比速度,希望能搶在 駭 客程式作動前,用手速把貓轉出。但是都輸了… 而且那些錢又通通再 被駭客的吸金 大法給吸走!(跪) https://cdn-images-1.medium.com/max/1000/1*3pLRWO0_Lf-N_vnKgVcbqw.png
我開始感到萬念俱恢 看來駭客應該是取得私鑰以後,便透過電腦程式不斷自動偵測該錢包 餘額及動作,只要 有新的錢進到錢包,立刻就會啟動吸金轉移大法,把錢吸走。 怎麼辦呢? 只好向近區塊鏈圈傳說中的神祕的組織,如同光明會、共濟會一 般的存在 — 0x1 學院 (0x1 Academy)成員求救。 https://www.0x1.academy/-LRGqRpaO05clgxM6SQN/ 進入 0x1 組織的核心群組 為了向 0x1 區塊鏈高手求援,我進入了 0x1 組織的核心群組「0x1 Core」,在那裡, 我對群組說道: 發生了慘劇,我想要救貓。 — 寶博士 其中強的某兩個成員(他們經常被認為是同一人),在瞭解情況 後,回覆說「我們試試 看」然後就消失了。 幾分鐘過去,J 回覆了。 “打0.000333進去” — J說 我原先還有點懷疑,但想說既然 J 說得肯定,我也沒有不去試試的道理。 成功了!!竟然沒有被轉走! 神祕的 0.000333 ETH 就這樣巧巧地作為先遣部隊,深入了敵營,進入了被駭的錢包而沒 有被駭客發現。 錢包裡多了錢,燃料費應該就足夠了,便趕緊去轉貓!轉幾隻呢?先轉一隻,而且得先 轉一隻貴的! 第二個神祕數字出現了: “永遠不要打超過0.00168” — J說 如同神諭一般,不知為何,J 就是知道能夠怎樣避開敵方駭客的火線… 其實有原因,但 總之那時先無法理解思考這麼多啦,最最要緊的,是要救貓!搶回寶李一家的重大資產, 而且要救就要先救最貴的— 寶博喵! 緊張時刻 要知道,現下我們所有動作都在駭客的眼皮底下,不只在區塊鏈上可以查看我們的所有交 易記錄(包括剛剛摸進去的 0.000333 ETH)駭客更可以隨時把我們所有錢跟貓瞬間領光 轉走,甚至透過智能合約封鎖外部的所有行動! 第一隻貓救援成功!博士貓順利出脫! 我們順利的在駭客眼皮底下救走一隻價值台幣 7,000 元的以太貓!! 時間就是金錢,接下來的動作要快,下一隻要救的貓也是不便宜。駭客非常可能針對駭入 的錢包隨時有在進行「異常行為偵測」,並在發現受害者的行動後,做出防護或反擊。雖 然我在聊天室裡和 J 的對談口氣依舊輕鬆,但按下另外一筆 0.000333 ETH 轉出按鈕時 ,手指卻是顫抖的。 成功了!第二批援救部隊又進去了! https://cdn-images-1.medium.com/max/2000/1*UwlrTO1ysHFjIqhjdQRzyw.png
從上圖的區塊鏈記錄來看(依據時間由下至上),可以很清楚的看到,「0.000333 ETH」 救援部隊一共進去了三次,第一次帶回了寶博喵,第二次帶回了朵拉喵以及另外一隻貓, 第三次則帶回了第四隻普通喵。 自此,寶博士喵和朵拉喵都被營救回了寶博士名為「D Furball」的貓藍;看起來都鬆了 一口氣呢(咦 XD),開心地和其他的奇異貓咪們簇擁在一起~ https://cdn-images-1.medium.com/max/1000/1*q3G75YtyD4C2IZp6-BeoSg.png
總之就這樣,從 2018/12/15 晚間 11:47 至 2018/12/16 凌晨 0:18 一共將耗費近半小 時的時間,轉了三筆營救用的以太幣,一共 0.000999 ETH,把四隻貓給順利救了回來! 最後兩隻被救回的貓,看起來果然還是有點驚魂未定。 ONE MORE THING… 故事還沒結束(!) 我原先刻意留下了最後一隻貓在受駭錢包裡(如下圖—是在 TFF 台北金融發展基金會 帶 FinTech eMBA 區塊課時所生),想說也許 J 會想玩玩別種營救方法; 如果 J 他們沒動作,也許之後自己也來創些新的營救方法把它救出,就姑且讓牠留在被 駭錢包裡一段時間好了… 結果… https://cdn-images-1.medium.com/max/800/1*jpyBI4zDQn8UVhJxKCoI6g.png
就這樣,一念之間一隻貓的命運就此改變! 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!駭客在暴怒 之餘,也許心想後一隻貓就算沒有價值賣不出去,也要把貓給搶走洩憤! https://cdn-images-1.medium.com/max/2000/1*wUxeWGySE4NTeCeHXbhSpA.png
最後一隻小貓被劫走的轉帳記錄… 駭客畫像 以下整理上述一連串的動作以及時間距離,並試圖描繪駭客的行為樣貌: 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 元)被轉移至駭 客集資錢包,整個攻擊偷盜行動正式結束。 駭客手動登入的證據: https://cdn-images-1.medium.com/max/1000/1*6M8cpytnjagUCxem-nvLOg.png
如果是用呼叫合約的方式轉移貓咪,在以太貓的介面上就不會留下歷史紀錄,而謎戀貓網 站上,若用被駭錢包登入確實可以看到最後兩筆資料(轉移被盜小貓)均有留下記錄,那 麼就駭客就一定是手動轉移而非使用智能合約程式盜走小貓;幾乎可以百分之百確定— 駭客確實曾經手動登入謎戀貓網站。 *請注意上圖倒數第二個 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 轉出,但均告失敗,最後落入被駭客手動榨乾的悲慘結局。 此外,由於以太貓咪的特性是,無論歷史如何演變,貓咪如何移轉;單隻貓咪的移轉歷 史紀錄永遠獨立於其他貓咪(這點和一般區塊鏈代 幣資產不同);因此,雖然我們失去 了這隻小貓,但我們原則上可以永永遠遠的追查牠去了何方,究竟轉移給了誰,認養費 被掛了多少,通通可以在區塊鏈上看得到 ,直到千秋萬世 — 以太坊區塊鏈崩毀的那 一天! 被盜小貓目前為止的身世 https://cdn-images-1.medium.com/max/1000/1*EKZRSpDXuCYNJyOiLzvsCg.png
可以看到,被盜小貓在 232 天前誕生之後,一共經歷了四次轉移,第 三次來到了朵拉貓 的家,第四次就是駭客偷盜的紀錄了。 讓我們再次緬懷牠 雖說小貓是被盜走了,但其實駭客也相應地付出了0.000815 ETH 的轉 移手續費,總計轉 入了 0.03+0.02 一共 0.05 ETH 的總成本;所以也不算是被免錢認養啦(笑)!而且, 我們將永遠能透過檢查鏈上交易記錄,知道這隻被盜小貓到底後流落何方。 而在戰火之下被救走的小貓們呢? 早就被寶教授暴氣派遣網路部隊營救受駭迷戀貓後,勒令乖乖繼續寫論文啦! 如果想閱讀事件的英文版記錄,歡迎查看 J 的 Medium 文章: https://medium.com/coinmonks/c465e65ebbf5 如果你覺得這篇文章有趣或有用,請幫忙按下方的 Medium 拍掌按鈕鈕(最多50下) 拍得越多,寶博士就能多喝幾杯咖啡唷。 也歡迎註冊後追蹤 我的 Medium 還有 我的臉書。寶博士感謝您 https://medium.com/@daaab https://www.facebook.com/dAAAb -- 文章這麼長我知道一定有人END XD,閱讀方便的話就點選Medium連結當小說看吧! 之前也上過老師在北科開設的免費的18小時0x1區塊微學分班 https://medium.com/@daaab/c5a61f5ee625 才算是真正開始入門區塊鏈的技術,雖然不知道下次再開設是什麼時候了, 但我覺得算是蠻扎實的課程可以持續關注。 (雖然之前來板上找鏈圈資訊時,大部分的講座好像板友普遍認為都... XDDD) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.171.220.168 ※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1545042847.A.050.html ※ 編輯: ZMTL (118.171.220.168), 12/17/2018 18:37:20
camellala: 精采給推 12/17 18:40
jansan: 好文推 12/17 18:47
justben: 反正你錢包也廢了 就send 1000筆廢交易 gas 都調超低 12/17 19:01
justben: 這樣他就有1000筆 pending了 要玩大家一起來 XD 12/17 19:01
JoyRex: 厲害 12/17 19:14
chkuya: 精彩 12/17 19:43
DarkerDuck: 猛猛的 12/17 19:51
camellala: 萌萌的 12/17 19:56
ketao: 今天剛好也有看到這篇 超精彩的 12/17 20:01
itsdelovely: 推 12/17 20:26
※ 編輯: ZMTL (118.171.220.168), 12/17/2018 20:36:03
poorviv: 精彩,網路神人多 12/17 20:58
darkdixen: 拯救貓咪大作戰 12/17 21:26
fjuma: 推 12/17 21:30
stiabogeu: 推推 12/17 22:02
CTW8877: 推學校教授 12/17 23:50
taihsin: 推 12/17 23:52
historians: 推推 12/18 00:22
qxxrbull: 如果趕緊把智能合約寫上去那個地址避免貓被轉走到其他地 12/18 00:33
qxxrbull: 址(除了自己設立的另一個)是否更有用啊 12/18 00:33
ZMTL: 發布智能合約也要gas啊,還是我誤會樓上意思了 12/18 00:34
qxxrbull: 也對... 到頭來都是gas問題 12/18 00:39
freezals: 推 12/18 03:04
uzumaki: 好文推 12/18 11:43
st1009: 推推 12/18 15:29
k24932359: 有趣推 12/18 22:35
escrowdis: 有趣XD 12/18 23:16
elle0001tw: 寫得很有趣 XD 12/19 02:29
EthereumPTT: 真滴精彩 12/19 09:46
mahjong: 救救我的貓(快把他買走呀XDD) 12/19 15:00
OAOy: 推學校老師讚讚 12/19 23:14
s94516: 所以為何發0.003不會被轉走 12/20 16:47
s94516: 不小心按掉噓補推回來 12/20 16:49
da21510: 我猜大概是 12/24 06:45
da21510: 駭客為了高速取走贓款 12/24 06:45
da21510: 用略高一點的gas觸發交易 12/24 06:45
da21510: 然後那筆營救的費用足夠觸發救貓交易 12/24 06:45
da21510: 但不夠駭客設定的Gas 12/24 06:45