关于 脚本(CryptoJS.lib.ByteArray) 被挂马

有网站调用我在 2014 年编写并托管在 GreasyFork 的一个简单脚本,但近期被发现暗藏 "木马"。

通过查看更改记录得知,该脚本在 2019.05.13 被非法访问并修改,并在 2019.07.08 之前持续被更改:

ImgurImgur

相关修改后的版本我也复制一份出来 (我加了一行 throw 防止不小心被执行;此为最后修改的版本):

脚本里面可以找到一个类似 DASH 虚拟货币的钱包地址,但简单查询未能获得任何交易信息:XgwGxaHAeQwVYcQAgZeTa6TPVjZhicEJki

该问题由受害者通过邮件联系通知。目前管理员已将该脚本移除。

该问题也在 GitHub 上发表,希望能通过强制锁定版本号、更频繁的邮件通知来避免这种问题再次发生或及时止损。

此外,GreasyFork 不是 CDN。希望前端开发者能锁定版本,使用 CDN 的副本或自己打包,而不是引用可随意更新内容的来源来防止投毒。


以下为邮件交流过程。

注:邮件来自z[隐私删除]@163.com,我的回应来自 j[隐私删除]@gmail.com

[隐私删除]:   5.13号起 到7.12 号结束,mydashwallet.org 一直被你维护的脚本https://greasyfork.org/scripts/6696-cryptojs-lib-bytearray/code/CryptoJSlibByteArray.js 6.18-6.19号那天我的930个DASH 被这里盗窃洗劫一空, 我一直在MDW抓包,终于抓到了https://api.dashcoinanalytics.com/stats.php 一直在窃取私钥。   如果是你本人做的,可以归还么? 如果不是,麻烦提供些线索。 现在DASH CORE 的人员和警方 已经介入,查到了币安和bitfinex的一些线索,正在继续。   期待你的回复,同为中国人,望帮助,希望你在英国一切顺利。

回应1:

至[隐私删除]:

对于你的遭遇,我表示深感遗憾。

看了一下链接,的确是我的账号下的一个脚本。这个脚本在 2014 年建立之后没有被我“主动”更新过,我也不清楚为什么会在 2019 年(5月到7月)连续发生更改。翻了下我其他的脚本,未发现可疑的修改。我在网站的代码仓库报告了这个信息 https://github.com/JasonBarnabe/greasyfork/issues/621 ,以及如何避免这类依赖攻击(虽然我看了下我的那个脚本,并没有设定全域执行?)。

如果你能查到是哪个插件引入的这个脚本,建议调查。如果对方是无意引入,请提醒其清理;如果是主谋,你可以报告给警方。

至于线索,建议等待警方调查。不过因为被盗的是不容易监管的虚拟货币,我认为追回的可能性不大。

安全上的建议,则是开启 2FA 或使用硬件辅助,并设定每一笔交易(支出)都要求手动确认。

以上。

回应2:

至[隐私删除]:

观察其网站旧版本的代码(https://github.com/DeltaEngine/MyDashWallet/blob/c7b2eb3147cdc4e5960e442110123cab609bad65/Views/Home/Index.cshtml#L13),可以看到他们直接引用了我的脚本(且这个脚本在网站上线后被纂改)。

结论更新,应该不是第三方插件的问题。

以上。

来自对方的回应(17日):

[隐私删除]:

  麻烦回想一下你的帐户是什么时候被盗的, 这次涉及的金额已经有几百万刀,盗取你帐户的人已经财务自由.请帮忙查查细节.

我的回应:

至[隐私删除]:

与网站所有者的对话可以参见 GitHub 上的讨论: https://github.com/JasonBarnabe/greasyfork/issues/621#issuecomment-512061491

详细细节我也没有,因为网站不是我的。从我与网站所有者的对话可得知我的这个帐号,至少从(今年)一月的时候账号被非法访问过,并设定了一个密码。因为我都是通过第三方网站登入,所以不可能是我主动设定的密码,也未注意到登入密码被篡改。此外,非法访问者是通过 tor 匿名网络访问,追查难度大。

在这段时间内,我没有发现任何异常,也没有注意到密码被重置(站内更改密码不会产生新邮件)。相信以后会更新这个策略。

对于你的案子,我只能祝你好运了。

以上。

来自对方的回应(26日):

[隐私删除]:

  你好,可以麻烦你提供下https://greasyfork.org/en/scripts/6696-cryptojs-lib-bytearray/versions 的history 版本吗? 这里已经删除了 需要提供一些资料给相关机构 麻烦你帮忙下.

  另外上次你说到你的帐户19年1月份已经被破解,请问能顺便提供下那时候的登陆IP么? 黑客的IP 十分感谢.

我的回应:

至[隐私删除]:

  因为邮箱不允许上传带有脚本的文件,因此历史版本我打包放到Yandex网盘了(https://yadi.sk/d/CfbF5KEy5r33dg)。

  登录 IP 恕我无法提供,请直接问站长(参见之前邮件的 GitHub 链接)。不过站长有提到这些登入是通过 Tor代理(https://www.torproject.org/) 访问的,我认为追踪 IP 信息没有用处。

以上。

来自对方的回应(26日):

可以再发下0618版本的那份脚本么 再次感谢 那个时间节点很重要

我的回应:

至[隐私删除]:

06.18 的当日更新(UTC 时间 2019-06-18 23:20:26)被还原到了原始版本,没有添加恶意代码。不过之前的一个版本(UTC 时间 2019-06-07 14:57:27)有被替换,浏览器可能因为缓存策略而没有更新。

我目前有点事情要忙,等我过几个小时(大约2到3个小时)后把每个版本都一起打包一份后发给你。

以上。

来自对方的回应(26日):

谢谢

我的回应:

至[隐私删除]:

我把所有的版本都打包放到 Yandex 了:https://yadi.sk/d/kJ_3ukxYdvgqKQ

一共有 12 个文件,其中有 4 次修改是还原到原始代码(不含窃取私钥部分),原因不明,可能当时只是为了测试效果?

原始上传时间请参考文件名,如 “20141127223259” 表示这个版本是在 UTC 时间的 2014 年 11 月 27 日,22 时 32 分 59 秒提交。

2014 年的这个版本是我提交的,其它版本均为未授权访问者提交,直到被删除的时候。

以上。


我的看法:

该事件体现了 MDW 内部对安全审计的忽视(引用了第三方非完全可信内容),以及对第三方(小)网站服务的滥用(我发表的初版代码没有任何问题,MDW 没有复制到代码里用也没有锁定引用的版本)导致被黑客找到弱点并利用。任何一环的缺失都会导致此次黑客行为失败。

以前还觉得一些网站只要有新 IP 登入或什么操作都会发邮件简直就是骚扰用户,但现在却觉得这是能让用户止损的最快的方法了。

目前已经在 GitHub 上打开了 2FA 的选项,也订购了个硬件 2FA 准备绑定到账号上。

Jixun

Jixun

学习与游戏的旅途,各类杂谈。