1 攻击背景

2019年11月19日,门罗币官方github上出现对门罗币release版与官网上出现不一致问题的issues,其中提及出现问题的门罗币版本为最新版0.15.0.0。且门罗币官方承认其官网受到黑客入侵,使得其提供的门罗币客户端存在窃取用户关键信息的事实,这也是首次被发现的直接针对加密货币客户端的供应链攻击。

门罗币官方声明,恶意攻击发生在11月18日,11月19日攻击被发现并进行了修复。通过对已经确认的感染版本的hash 进行比对,发现客户端组件monero-wallet-cli被黑客篡改,其中hash为:5decc690a63aab004bae261630980e631b9d37a0271bbe0c5b477feffcd3f8c2的文件被替换为:7ab9afbc5f9a1df687558d570192fbfe9e085712657d2cfa5524f2c8caccca31。当天,reddit上也出现了使用者因为安装了官方网站的最新release版本而丢失了价值7000美元门罗币的实际案例。

事件披露的同时,我们也开始对其进行一定的关注,并对涉及该次攻击的恶意代码进行了分析和追踪。从分析的结果来看,本次攻击的黑客将门罗币源码中cryptonote::simple_wallet()类进行篡改,涉及的文件有:

  • monero/src/simplewallet/simplewallet.h

  • monero/src/simplewallet/simplewallet.cpp

黑客利用以上文件实现了窃取门罗币seed的功能。黑客不会直接窃取门罗币的钱包文件,而是窃取门罗币seed以及盗取门罗币货币的所有权,因此盗取之后需要使用seed来恢复钱包,以提取其中的门罗币。此外,恶意代码内置有三个C&C,分别为node.hashmonero.com、node.xmrsupport.co和45.9.148.65。其中,node.hashmonero.com为默认的CC服务器,而node.xmrsupport.co和45.9.148.65作为后备CC使用。从当前的域名解析情况来看,node.xmrsupport.co和45.9.148.65指向同一台服务器,主CC node.hashmonero.com所指向的IP为91.210.104.245。所有CC都采用端口18081作为seed回传的服务端口。

本文首先对被篡改恶意monero-wallet-cli文件做细致的分析,接着试图对黑客的基础设置进行追踪分析,发现了黑客所使用过的其他基础设施。由于门罗币官方对于该事件仍在调查之中,所以对于黑客是如何攻击进入门罗币官方网站的具体细节外界并不知晓,我们将持续关注该事件的进展。

2 样本分析

该样本主要窃取门罗币的seed数据,门罗币seed由25个单词组成,用来证明拥有者对一个门罗币地址里面的货币所有权,也可用于恢复钱包。seed类似于如下字符串:

juicy sorry lukewarm lively fitting pulp irony nobody ought pelican sanity fudge vibrate ozone nearby upright addicted foxes arises alerts sorry lobster inmate karate ozone

该样本以源码为基础,在函数cryptonote::simple_wallet::print_seed函数中加入了恶意函数cryptonote::simple_wallet::send_seed。

该函数将获取的seed信息发送给node.hashmonero.com,端口为18081,其中seed信息存储在”memo=”参数中。该函数主要通过调用cryptonote::simple_wallet::send_to_cc函数来实现seed的发送。发送的方式是通过https POST方式实现。

在send_to_cc函数中,其将CC服务器的端口硬编码在代码中,通过SSL协议将窃取的门罗币seed发送给指定的CC服务器(node.hashmonero.com)。

如果该CC无法使用,恶意代码则会首先采用后备C&C node.xmrsupport.co进行连接并将窃取的seed回传至CC服务器上。

如果后备C&C还是无法使用,则采用后备服务器"45.9.148.65"作为窃取seed的回传CC。

同时,被篡改的函数send_seed还被额外添加到了monero-wallet-cli文件的其他三个地方以确保在各种使用操作中能够更有效地获取seed。这三个地方分别为钱包创建函数cryptonote::simple_wallet::new_wallet(),钱包打开函数cryptonote::simple_wallet::open_wallet,以及同名重载函数。

(1)在new_wallet()函数中,补丁函数主要用于截获钱包创建过程,一旦钱包创建成功,其钱包相关的seed就会立即发送给C&C。

(2)open_wallet函数主要用于打开一个门罗币钱包文件(包括由硬件钱包提供的设备打开),该恶意代码同样对该函数进行篡改,以便钱包被加载之后,将其发送到C&C服务器上。

(3)第三处是加入到了同名的重载函数cryptonote::simple_wallet::print_seed(bool encrypted)中 ,在该函数中,其窃取由函数tools::wallet2::get_multisig_seed和tools::wallet2::get_seed所得到的seed。该同名重载函数主要由cryptonote::simple_wallet::encrypted_seed和cryptonote::simple_wallet::seed两个函数调用。encrypted_seed用于显示加密后的门罗币seed,而seed函数用于查看未加密的门罗币seed。这意味着,任何外部钱包文件的查看行为都会被劫持,从而导致与钱包相关的seed遭到黑客窃取。

3 黑客追踪与溯源

我们在受感染的门罗币客户端中发现硬编码的CC服务器地址,其中有2个域名和个1IP地址,硬编码的CC信息如下图所示:

其中,后两个硬编码CC目前指向同一个服务器。

为了对黑客使用的设施有进一步的掌握,我们随后对这几个硬编码的CC进行了详细的分析。

首先,我们来看C&C node.hashmonero.com,这个C&C是恶意代码的默认C&C地址。该C&C当前被解析到IP:91.210.104.245。从whois信息中我们发现该域名是2019年11月14日注册的,且域名申请的公司字段被保护。域名查询结果如下图所示:

此外还可以看出该域名做了隐私保护,很难对黑客的信息再进行进一步的追踪,但是我们从该域名的注册时间可以看出黑客计划实施攻击时间也应该不会太长久。而从域名node.xmrsupport.co的whois信息中得知其创建于2019年11月15日。因此可以推断黑客生成攻击样本时,应该已经掌握了门罗币官方网站的漏洞及攻击方法。因而黑客的攻击计划也应该在2019年11月14日之前的就已经开始了,真正实施攻击就在随后几天(11月15日-18日之间)。

通过IP地址45.9.148.65解析的历史,还发现2019年11月16日域名hashmonero.com被解析到此IP地址上,在攻击被发现当天2019年11月19日域名node.xmrsupport.co才被解析到该IP。

此前在github上有人利用浏览器访问https://91.210.104.245:18081页面会被重定向到https://monerohash.com/?r=from_node,不过在11月20日21时左右,由于被大量用户举报,CC服务器91.210.104.245已经被主机提供商停止服务。经查询,我们发现91.210.104.245为俄罗斯主机服务商www.hostkey.ru所有,IP地址的whois信息如下图所示:

通过VT对IP :91.210.104.245的历史记录进行分析,发现该服务器曾于2017年7月24日指向一个域名bitcoinbotreview.com,在两年以后才被解析到当前的IP :91.210.104.245。

该域名虽然只有卡巴斯基一款杀毒软件报毒,但从域名关联出的样本可以看出该服务器曾被作为另外一款恶意代码的CC服务器。从域名本身的含义上看,似乎应该与比特币相关恶意攻击有关。此处我们也对这个关联的样本进行了简要分析。

VT上的关联样本原始名称为“documentation.doc.exe” 。

在对样本“documentation.doc.exe”进行分析后,我们发现其是一个使用Autoit3编写的恶意代码加载器(加载器内置有两个C&C:bitcoinbotreview.com和bitcoinautobot.com),其从链接http://bitcoinbotreview.com/mailpv.exe下载后续文件并加载执行。但是在我们分析时,该链接已经失效,但通一些特征我们找到这个链接的原始文件。该文件是一款窃密型的木马,其伪装成NirSoft公司开发的邮箱密码恢复软件mailpv.exe:

由于目前门罗币官方尚未有调查信息披露,所以我们这里仅仅做了一些初步追踪,但仍可以看出这是一起通过精心准备网络攻击,从黑客急于注册新域名并在注册后的2-3天内就开始进行攻击的情况来看,黑客应该是不久前发现了门罗币网站的漏洞,从而特意定制恶意程序以期能够及时兑现。

4 总结

通过该事件的分析我们可以看出,黑客并没有直接窃取数据量较大的门罗币钱包文件,取而代之的是窃取用户门罗币的seed,并使用SSL协议进行通信,使得攻击更加隐秘。由于窃取seed对用户账户的影响具有滞后性,因而,虽然目前仅有少数人报告了金钱损失的案例,但是不排除黑客已经窃取了相当数量的门罗币seed,只不过黑客目前还未进行兑现。

本次攻击事件再次给予我们安全警示,目前越来越多的黑客通过供应链攻击,利用用户对官方的信任,渗透进提供可信工具的网站并替换掉原始文件,以可信官网作为恶意代码的传播途径,提高攻击的成功率。因此我们提醒相关企业用户,加强自身的网络安全,定期进行网站的安全排查和加固,及时更新系统的安全补丁。

参考链接:

1.https://github.com/monero-project/monero/issues/6151

2.https://www.reddit.com/user/moneromanz/

3.https://bartblaze.blogspot.com/2019/11/monero-project-compromised.html

声明:本文来自ADLab,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。