作者ZMTL (夜风/潇湘 VR板已经开板!)
看板DigiCurrency
标题[闲聊] 以太猫抢救大作战—北科大教授钱包救援
时间Mon Dec 17 18:33:58 2018
因为老师没在用批踢踢,但又想分享这曲折离奇的抢救过程,
内文包含了私钥意外流出的经过及提醒、
被盗取後钱包的状态,以及如何抢救可转移的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://webptt.com/cn.aspx?n=bbs/DigiCurrency/M.1545042847.A.050.html
※ 编辑: ZMTL (118.171.220.168), 12/17/2018 18:37:20
1F:推 camellala: 精采给推 12/17 18:40
2F:推 jansan: 好文推 12/17 18:47
3F:→ justben: 反正你钱包也废了 就send 1000笔废交易 gas 都调超低 12/17 19:01
4F:→ justben: 这样他就有1000笔 pending了 要玩大家一起来 XD 12/17 19:01
5F:→ JoyRex: 厉害 12/17 19:14
6F:推 chkuya: 精彩 12/17 19:43
7F:推 DarkerDuck: 猛猛的 12/17 19:51
8F:推 camellala: 萌萌的 12/17 19:56
9F:推 ketao: 今天刚好也有看到这篇 超精彩的 12/17 20:01
10F:推 itsdelovely: 推 12/17 20:26
※ 编辑: ZMTL (118.171.220.168), 12/17/2018 20:36:03
11F:推 poorviv: 精彩,网路神人多 12/17 20:58
12F:推 darkdixen: 拯救猫咪大作战 12/17 21:26
13F:推 fjuma: 推 12/17 21:30
14F:推 stiabogeu: 推推 12/17 22:02
15F:推 CTW8877: 推学校教授 12/17 23:50
16F:推 taihsin: 推 12/17 23:52
17F:推 historians: 推推 12/18 00:22
18F:推 qxxrbull: 如果赶紧把智能合约写上去那个地址避免猫被转走到其他地 12/18 00:33
19F:→ qxxrbull: 址(除了自己设立的另一个)是否更有用啊 12/18 00:33
20F:→ ZMTL: 发布智能合约也要gas啊,还是我误会楼上意思了 12/18 00:34
21F:推 qxxrbull: 也对... 到头来都是gas问题 12/18 00:39
22F:推 freezals: 推 12/18 03:04
23F:推 uzumaki: 好文推 12/18 11:43
24F:推 st1009: 推推 12/18 15:29
25F:推 k24932359: 有趣推 12/18 22:35
26F:推 escrowdis: 有趣XD 12/18 23:16
27F:推 elle0001tw: 写得很有趣 XD 12/19 02:29
28F:推 EthereumPTT: 真滴精彩 12/19 09:46
29F:推 mahjong: 救救我的猫(快把他买走呀XDD) 12/19 15:00
30F:推 OAOy: 推学校老师赞赞 12/19 23:14
31F:嘘 s94516: 所以为何发0.003不会被转走 12/20 16:47
32F:推 s94516: 不小心按掉嘘补推回来 12/20 16:49
33F:→ da21510: 我猜大概是 12/24 06:45
34F:→ da21510: 骇客为了高速取走赃款 12/24 06:45
35F:→ da21510: 用略高一点的gas触发交易 12/24 06:45
36F:→ da21510: 然後那笔营救的费用足够触发救猫交易 12/24 06:45
37F:→ da21510: 但不够骇客设定的Gas 12/24 06:45