freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

新型Coinminer家族挖矿rootkit"77oracle"病毒分析
2022-06-29 18:10:13
所属地 江苏省

病毒首次出现在2021年12月,但因为种种原因一直到现在才能够整理成文,希望能给大家一些参考。

0X00 异常现象确认

安全态势感知平台告警,受害服务器连接矿池服务器的703端口进行挖矿。但诡异之处在于,经过确认,这些矿池服务器均为内网地址。

1656493734_62bc16a63d7a49841681e.png!small?1656493733719

但查看报文,的确是挖矿程序运行的情况。

1656493730_62bc16a2344bec5254dfc.png!small?1656493729530

至此确认该主机存在挖矿行为。

此外,我们首先发现出现异常的主机还存在通过757端口爆破其他主机的敏感文件的流量:

1656493723_62bc169bb3365038a911b.png!small?1656493723551

也就是说,被这种挖矿病毒感染的主机还存在僵尸网络的行为。

0x01 异常现象分析

我们登录主机查看CPU占用,如下图所示:

1656493699_62bc1683b1be803178b8b.png!small?1656493699074

虽然没有明显反常现象,但应急还是万变不离其宗。我们先使用杀毒软件过一下这台主机,查看是否存在恶意文件。很快,我们发现了一个位于C:\Program Files\Oracle下,名为$77_oracle.exe的隐藏文件。

1656493693_62bc167d0dbc2988e6d46.png!small?1656493692502

在Oracle目录下,还存在一系列其他的隐藏文件,包括设置、日志、可执行文件等:

1656493688_62bc1678bdec9ba62fc7f.png!small?1656493688675

1656493685_62bc1675c7b5486df7c22.png!small?1656493685053

查看网络状态,757、708端口均被打开,并且有外联迹象,且同一进程中还有本地任意端口连接其他受害主机的757、708端口进行通讯的迹象,而pid=0的系统空闲进程,外联的正是703。

1656493673_62bc16697910547183263.png!small?1656493672913

1656493665_62bc16617aef419e7d79a.png!small?1656493665749


该外联PID对应的进程为svchost.exe,说明此时正常的svchost进程已经被注入。

1656493629_62bc163dee013162b6cd1.png!small?1656493629386

此外,我们还发现存在一个机器中新增账户adm:

1656493623_62bc163714ff2041a9572.png!small?1656493622337

该账号新增时间与平台告警时间吻合,由此推断,该账号是受病毒所影响而创建的恶意账号。


0X02 静态文件

首先我们对该目录下的隐藏静态文件进行简单的分析。

1656493614_62bc162e81f9c30740e24.png!small?1656493614420


直接访问该目录,显示为空,尝试了各类常见隐藏查看文件方法如取消隐藏属性、服务级别隐藏等等均无果,于是我们只能通过命令行查看文件详情。

日志文件

隐藏文件夹中包含的日志文件共有四个:加载日志Loader.log、服务日志Service.log、安装日志$77_ExecuteOracle.InstallLog、安装日志ExecuteOracle.InstallLog。

其中$77_ExecuteOracle.InstallLog和ExecuteOracle.InstallLog内容相同,都是恶意软件的安装情况。

1656493609_62bc16293f65a1c7959e0.png!small?1656493608506

重要的日志在加载日志Loader.log中。

命令:type [文件名]或者more [文件名]

1656493603_62bc1623e3a460cae8b9f.png!small?1656493604180

这份日志只有当天病毒的运行状况,我们发现大量的ColorG、ColorM字样,有关这一点的分析会在下文提到。

目前网络上暂无关于该类服务的公开情报,但我们查看另一隐藏文件Service.log可以发现该服务一直在启动,并且会定期进行检查。

1656493584_62bc1610a73a12b15e976.png!small?1656493584021

在Loader.log中我们还可以看到一个样本运行的步骤大致是这样的:

  1. 设定目标服务器(5.133.65.53)

  2. 找到代理服务器文件(这里我们可以看到不止XX/oracle一处下存在恶意文件,该恶意文件在机器中存在备份)

  3. 尝试直接连接外网矿池,通过https和http检测外网矿池连通性

  4. 检查工作状态

  5. 检查对应端口(757、708、703)的潜在服务器,并记录数量

  6. 清除痕迹和日志

  7. 添加要隐藏的自定义文件

  8. 添加用户

  9. 添加防火墙规则

  10. 检查矿池并添加代理

  11. 通过代理检查病毒更新,检查本地版本和服务器版本

  12. 打开999端口

  13. 设定下一次更新时间

配置文件

该挖矿程序中涉及的配置文件包括config.json、$77_ExecuteOracle.exe.config两个文件。

其中$77_ExecuteOracle.exe.config包括了对运行程序的环境的配置,以及对注册表项的设定。

1656493573_62bc1605b407749f5ead2.png!small?1656493573141

config.json则更加复杂,包括了挖矿地址池的配置等。config.json文件大小与内网大小成正比(这一点后文会有解释),主要分为几个部分:

  • api:分为id号和worker-id,推测需要自行配置、或者由总控端自动生成。

1656493565_62bc15fd509a6d366909e.png!small?1656493564681

  • 网络连接配置,包括http、tls、dns,以及他们的相关配置,比如加密方式、证书等等:1656493557_62bc15f5df1b4803c88aa.png!small?16564935571431656493532_62bc15dc24faf0ed94da8.png!small?1656493531351

1656493522_62bc15d26b5301a99c38e.png!small?1656493521639

  • 其他初始化设置,包括自动保存、背景配置、重传次数等等。

1656493516_62bc15cc6353b9bdbb6cd.png!small?1656493515648

1656493513_62bc15c9019b78380001a.png!small?1656493512374

1656493507_62bc15c385ea6b128c9e2.png!small?1656493506903

  • 日志组件和配置级别:

1656493501_62bc15bdb676e2fbfe89e.png!small?1656493500983

  • 本机相关信息,主要为挖矿相关的cpu配置:

1656493496_62bc15b8d61958621ddd2.png!small?1656493496982

  • 本机相关的矿池配置,也是这份文件中占比最大的数据:

1656493492_62bc15b4c27798732dce0.png!small?1656493492181

为什么强调本机“相关”呢?因为这里指的是本机所能连接到、记录到的矿池主机,或者说是本机在层层代理出网最终连接到真正的矿池地址的一份记录,上图所示为2段主机,除2段外还包括了10段、172段各10台左右的主机记录,pool的最后一部分记录的是外网矿池的配置,如下图所示,包括了外网矿池的地址、算法地址等信息。

1656493488_62bc15b0112307e4565c1.png!small?1656493487383

间谍文件

在本节开头的文件截图中,我们看到存在netpass.exe、netpass.cfg,其中netpass是常用于读取本地明文rdp密码的软件(图源网络)。

在这里插入图片描述

dll文件

api-ms-win-core-console-l2-2-0.dll中记录了所有潜在代理主机,总数超过100台。其中横跨多个网段,前一部分为内网主机,最后一部分为外网主机,根据。这些潜在代理主机中一部分已经失陷,而另一部分状态未知。

1656493480_62bc15a85e40d86eeec61.png!small?1656493479727

可执行文件

Oracle文件夹中与病毒相关的可执行文件有$77_Loader.exe$77_Oracle.exe$77_Install.exe$77_Install.exe$77_ExecuteOracle.exe。这一节先对它们进行一个初步的静态分析。

$77_Loader.exe文件存在基础的代码保护,属于加载器。

1656493476_62bc15a4229b8fa72c9b3.png!small?1656493475592

字符串易读,没有经过混淆。

1656493466_62bc159a4d1c4f0b701d7.png!small?1656493465928

$77_Oracle.exe文件最大,功能最多。

1656493462_62bc1596c77f080db5f0e.png!small?1656493462744

该文件同样未混淆,从字符串中我们可以得知其调用有用于通信的加密算法,还有证书生成字段:

1656493458_62bc15928a2d156fb363c.png!small?1656493457941

除此之外还存在服务创建等行为:

1656493454_62bc158ef3f3a249b42ac.png!small?1656493454352

总结

前面对于日志文件Loader.log的文件分析中我们发现,病毒会尝试直接连接外网矿池,并且探测是否有可用的代理服务器。因此,我们可以假设内网中的病毒传播链为:A主机通过某种方式感染病毒,但挖矿病毒发现无法连通外网目标服务器,因此在内网中探测开放可代理端口(703等)的主机,并且将之作为矿池服务器,读取账号密码并且进行一系列进程注入、文件隐藏等操作;而在config.json中我们看到其中添加了许多矿池服务器,勾勒出了一条从内网到外网的路径。在成功连接公网矿池之后,再下发命令,并且反向让从外网到内网的失陷主机都加入挖矿的行列。

1656493147_62bc145b47c56fc0d4095.png!small?1656493146648

0X03 进程分析

如果说上一节的静态文件分析是根据Oracle文件夹下的文件由点及面、根据文件的信息分析出该挖矿软件在内网中的攻击图谱的话,那么进程分析就是继续深挖该病毒在单节点主机上执行的恶意操作。上一节中的可执行文件也与进程分析有莫大的联系。

但是需要注意的是,这里的进程分析是以事件发生过后的时间段进行的,希望能够还原一个实战应急分析情景。

svchost.exe 进程

根据第一节中的外联痕迹,我们找到了svchost.exe进程。

1656492887_62bc1357d867e55fa70d0.png!small?1656492887560

其CPU占用率非常之低,难道这意味着它并非挖矿主进程?但是通过前面的各类文件隐藏技术,我们可以猜测,这是一款挖矿rootkit,也就是说,它可以通过设置隐藏的进程PID为0的方式来隐藏真正的挖矿进程,这有可能是PID=0的进程上CPU占用率最高的原因之一。

1656492866_62bc1342a9e303b630413.png!small?1656492866584

通过读取内存字符串,我们发现它的主要行为有:

  • 运行隐藏进程$77_Loader.exe。

1656492862_62bc133eb634924da884f.png!small?1656492862104

  • 下载Linux挖矿脚本

http://5.133.65.53/soft/linux/somescript

1656492858_62bc133ab0b057717a29c.png!small?1656492858263

查询下载这个脚本的IP,涉及恶意行为:

1656492851_62bc1333435a7f814292a.png!small?1656492850656

根据此前的信息,推测其属于Coinminer家族。

但由于这是个linux脚本,而主机大多数为windows服务器,在态势感知平台我们并没有看到大量的外联记录,更多的矿池地址集中在未能监控的内网区域。

与这个进程相关联的还有一些注册表事件:

1656492845_62bc132d7f080be5acb0a.png!small?1656492845146

由此我们可以定位该病毒新增的注册表目录之一为HKEY_LOCAL_MACHINE\SOFTWARE\$77config\,并且覆盖掉正常目录。

$77_Loader.exe 进程

该进程为隐藏进程,我们借助火绒剑对它进行分析

1656492839_62bc1327a0af56682dd23.png!small?1656492839075

$77_Loader.exe也由一个已结束的父进程唤醒。

1656492835_62bc1323124cb1c4aad22.png!small?1656492834349

这个任务组的主要行为即为横向连接内网段主机的703、708、757端口,这一部分验证了静态文件分析的结果。

1656492829_62bc131db017aeb42a39d.png!small?1656492829147

此外,这个加载器还创建了loader.log、config.xml等文件

1656492824_62bc1318168b11721a8f8.png!small?1656492823550

查看子进程conhost.exe内存字符串,我们发现其中有明显的挖矿运行行为和挖矿日志记录行为。

1656492819_62bc13135afb503351321.png!small?1656492821207

1656492814_62bc130e4e1423fb0e19a.png!small?1656492813674

$77_oracle.exe进程

进程的映像名被修改和Oracle相关,具有一定的迷惑性

1656492808_62bc130811295589e4706.png!small?1656492807704

根据内存字符串分析,该程序运行XMRig挖矿程序,挖矿程序版本号即为程序本身版本号,启动$77_Loader.exe

1656492802_62bc130284f7783812b23.png!small?1656492802079

根据获取到的哈希值,我们找到了一份比较详细的沙箱分析报告,其中内容相当丰富,这里以手工分析为主,就不再赘述,以供参考。

除了以上三个可执行文件之外,$77_ExecuteOracle.exe还有服务隐藏的行为:

1656492791_62bc12f7ec037fc064da7.png!small

0X04 处置思路

  1. 隔离C:\Program Files\Oracle\$77_Loader.exe$77_Oracle.exe文件(如果是没有安装Java相关环境的主机,建议隔离C:\Program Files\Oracle文件夹)。

  2. 如果没有在703、708、757端口运行程序,建议封禁该类端口。

  3. 结束svchost.exe$77_Loader.exe$77_oracle.exe等进程。

  4. 停止隐藏服务$77_ExecuteOracle.exe。

  5. 删除账户adm。

  6. 恢复注册表修改项。

处置完毕后,757等端口无外联进程。

0X05 旁枝斜逸:Linux脚本文件

前面分析的都是失陷主机,一台windows服务器的主机中留存的恶意文件。

在分析过程中,我们还发现了C:\Program files下留存的一个奇怪的somescriptbash脚本文件。

代码分析

somescript设定成在Linux环境下执行,第一步会修改域名服务器为8.8.8.8。

1656492782_62bc12ee80f8b5e5fec35.png!small?1656492781794

下载nc、wget、xinetd等软件包,这里的语句兼顾了不同类型的Linux发行版。

1656492778_62bc12eaa45dd42e15d60.png!small?1656492777934

设置IP,在warmup文件夹下均为该挖矿程序的准备文件。

1656492774_62bc12e62e534ccc9adbf.png!small?1656492773434

向/etc/init.d/modules写入文件,该文件中包含连接外网、服务隐藏、加密方式、自启动等配置:

1656492769_62bc12e16544df0fbfc8f.png!small?1656492768891

例如下图中,启动维持,将进程添加到/bin/plymouth中

1656492764_62bc12dc8a788f84aa6b3.png!small?1656492763875

扫描708端口,如果发现有没在矿池中的IP就将它加入矿池文件中。

1656492759_62bc12d770ad2a0cc36ee.png!small?1656492758863

过nc反向连接708端口并写入文件。

1656492755_62bc12d3cd2a17efed91c.png!small?1656492755164

假如已经下载到somescript文件,就将存有这个脚本的somescript写入目录:

1656492751_62bc12cf269e7e93d8601.png!small?1656492750409

这个以颜色首字母大写为命名的特征我们在第二节的日志分析中见过类似的“ColorG”,基本可以确定两程序作者为同一人。

将703端口写入iptables

1656492740_62bc12c4cf5563dd711b7.png!small?1656492740170

如果不能直接下载,就把找到的其他主机加入代理中,并且从中下载恶意文件:

1656492704_62bc12a06e08e9e44562e.png!small?1656492703759

接下来恶意程序会检查热身文件,如果没有热身文件就从互联网或者从内网其他主机下载:

1656492702_62bc129e31cf3c9a3d17a.png!small?1656492701770

写入配置,这部分配置和windows下的配置文件基本一致,不再赘述:

1656492702_62bc129e60c018c7dc5e0.png!small?1656492701771

探测系统版本,若为windows或者mac就进行其他操作

1656492690_62bc1292002a1abc98f0b.png!small?1656492689305

在文件资源管理器同样无法查看该文件,更新时间在挖矿病毒运行前数分钟。

以下是somescript文件和其他文件的关系图谱:

1656492675_62bc12837fc2248e98d35.png!small?1656492674803

深入挖掘

相比于其他windows文件,这份linux脚本可以称之为简单易懂、路线清晰,可以很好的帮助我们分析恶意软件运行思路。而笔者在溯源的过程中,发现$77oracle的特征与r77rootkit格外接近!这是一个强大的ring3层rootkit,开源,且在持续开发中。相关分析文章很多,并且开发者的博客有一个详细的开发文档可以供参考,这里不再赘述。

根据前面的分析结果,在这个目录下拼接任意文件名即可以下载分析样本,本次的内网大型挖矿rootkit感染事件,很有可能是正是由于某台主机下载了破解软件所导致的。从这个事件中,我们也可以看出,rootkit在恶意软件对抗中必将有着越来越重要的地位。

http://msupdate.info/Oracle/

1656492663_62bc1277277bc701f6aa5.png!small?1656492662728

# 病毒分析 # rootkit # 应急响应 # 挖矿病毒
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录