【安全研究】SkidMap挖矿木马研究

2022-12-08 20,504

↑ 点击上方 关注我们

近日,安全狗威胁情报中心监测到多起“Skidmap”挖矿木马事件。经研判,这些病毒感染事件是攻击者经Redis未授权访问漏洞攻击的方式植入挖矿木马SkidMap”导致的。虽然“SkidMap”并非新型的病毒家族,但鉴于该病毒家族一直保持着较高的流行热度,且隐蔽性较高,海青实验室的研究人员对该挖矿木马进行研究与分析,并给出相应的应对方法与建议,以期减少用户受此类事件的影响。





一、概述



01
SkidMap介绍


Skidmap 是于2019年发现的一种 Linux 恶意软件,主要针对 CentOS、RedHat 和 Ubuntu等操作系统。它的出现证明了加密货币挖掘威胁的复杂性不断增加。该恶意软件之所以引人注目,是因为它通过加载恶意内核模块的方式,让用户丝毫没有察觉到其加密货币挖掘操作。同时,鉴于Skidmap 的许多程序需要 root 访问权限,Skidmap 通常使用一些高权限的攻击媒介,比如通过漏洞利用、错误网络服务配置等。


其中比较突出的特点有:

  • Skidmap 会使用各种技术来访问和控制受害系统,包括滥用 Unix shell 命令和脚本、从外部系统传输工具和文件以及枚举正在运行的进程。此信息可用于确定目标系统以及如何更好地感染它们。


  • Skidmap 恶意软件会尝试收集有关目标系统操作系统和硬件的详细信息,以便更好地规避防御并执行特定操作。此外,Skidmap 会修改身份验证模块以获得对用户凭据或其他帐户的访问权限。


  • Skidmap使用rootkit来隐藏程序、文件、网络连接、服务、驱动程序和其他系统组件的存在。 Rootkit 是通过拦截/挂钩和修改提供系统信息的操作系统 API 调用来隐藏恶意软件存在的程序。Skidmap 会修改内核以便在系统启动时自动执行程序。


  • Skidmap会修改 SSH authorized_keys 文件保留在受害主机上,并可能使用混淆文件或信息来隐藏其踪迹。通过滥用 cron 实用程序安排恶意代码的执行。


  • Skidmap 的恶意软件会禁用安全工具并试图使文件难以发现或分析。出于特定目的使用增选系统的资源,影响这些系统上服务的可用性。


02
Linux挖矿木马现状

“挖矿”实际上是指通过计算机运算获取数字货币的一个过程,早期的挖矿木马更多采用了捆绑的方式进行传播。一般通过下载站、网盘、网吧论坛等方式传播捆绑了挖矿木马的外挂程序、加速器、影音播放器等,传播范围广泛但由于代理渠道容易被追溯,黑产团伙也面临着较大的风险。


随着攻防手法的不断变化,黑产团伙开始在挖矿木马上组合多种传播模块,除暴力破解外,还大量利用了影响广泛的0day漏洞对比Windows环境上层出不穷的恶意软件,Linux环境上的安全问题似乎更少受到普通用户的关注。


然而,挖矿木马早已成为巨大的黑产链条,各类挖矿病毒的团伙也将目光转向了Linux,使得Linux服务器也成为了挖矿的重灾区。常见的Skidmap、PyCryptoMiner、Panchan、Lemon Duck、Sysrv 和 HolesWarm。


同时,由于各种Linux构建和发行版本处于云基础设施、移动和物联网的核心,为威胁行为者提供了巨大的机会。对于威胁行为者来说,运行Linux的物联网设备都是唾手可得的攻击目标,无论是利用硬编码凭证、开放端口还是未修补的漏洞,都为攻击团伙提供了大规模入侵的可能性。预计到2025年底,将有超过300亿台物联网设备连接到互联网,这无疑是为网络犯罪分子创造了一个潜在的巨大攻击面。





二、技术分析



下面将通过虚拟机调试以及对逆向分析对“SkidMap”样本进行详细的技术分析。

01
宿主机异常现象

植入病毒样本后,分析宿主机异常行为定位关键文件。




  • 查看磁盘挂载信息时,发现pid为1的systemd进程文件被挂载到其他进程文件,并且这些进程目录被隐藏了。



  • 直接使用ps、top等命令无法发现这些进程,ls、dir等命令无法发现这些进程目录文件。


  • 但是通过访问完整路径,可查看到进程文件。


  • 查看网络连接,发现有外联情况(45.147.200.76),经分析为矿池地址,判断被植入挖矿木马。


  • 对于所有被挂载的进程目录,做取消挂载动作后,可以发现所有的文件被删除了。


  • 查看审计日志,无相关信息。使用audit对指定路径文件做监控,也无异常。

  • 审计自启动路径,在用户登录执行路径下发现异常文件more.sh。





02
样本详细分析

通过自启动文件开始分析逐步延伸其他恶意文件



Plymouthed分析
  • 服务配置文件检查:

作为用户登入时自启动程序,该文件主要用于检查其他模块是否正常运行下面对其进行详细分析。


首先检查文件systemd-cgroup.service是否完好,若不存在或者被修改,则重新生成。


5


检查文件systmd-deltaed.service文件是否完整,若被修改则重新生成。


6


  • 服务自启动设置:

将服务配置文件加入服务组multi-user.target.wants和graphical.target.wants,实现服务自启动。


7


  • systemd-deltaed文件检查:

检查systemd-deltaed以及备份systemd-deltaed.org文件是否存在,并通过md5检查文件完整性。


8


systemd-deltaed分析

经过上面文件分析,又获取到两个恶意文件,分别是systemd-deltaed和systemd-cgroup。下面对systemd-deltaed进行详细分析。


  • 释放文件:

首先判断文件/usr/bin/systemd-cgroup是否存在。


9


若文件不存在,则从/usr/bin/systemd-cgroup.org文件读取数据,复制到/usr/bin/systemd-cgroup文件。


10


接着创建服务配置文件/lib/systemd/system/systemd-cgroup.service。


11



systemd-cgroup分析
  • 关闭SElinux:

判断/usr/sbin/sestatus是否可访问执行,并通过PIPE命名管道读取结果,查询SElinux是否关闭。


12


若SElinux处于启用状态,则尝试调用setenforce 0命令或配置文件/etc/selinux/config关闭SE。


 

13


14


  • 检测systemd-cgroup服务配置:

调用md5sum命令,检测服务配置文件是否改变,若hash不一致,则重新写入服务配置。


15


  • 恶意驱动加载:

获取系统内核版本,根据内核版本释放相对应的驱动模块。

16


若驱动文件不存在,则根据传入参数并结合不同内核版本,将自身指定位置的数据保存为对应驱动文件。


17


使用ELF文件MAGIC值搜索可以看这里有两百余个针对不同版本的驱动文件。


18


驱动文件生成后,首先会安装网络驱动,并卸载linux监控调试驱动sysdig。


 

19


接着安装恶意驱动。


20


当驱动文件生成失败或者加载驱动失败时,会根据当前的时间获取随机字符串后缀,拼接出完整路径,与排查时发现的恶意文件名称格式一致。


 

21


在驱动文件释放阶段就失败的话,会清理日志,然后执行程序biosdecoded、blockdeved,删除这两个文件后重启系统。


22


执行biosdecoded、blockdeved程序时,通过修改文件ns_last_pid来预定PID。


23


在驱动加载阶段失败时,同样会清理日志文件,执行程序biosdecoded、blockdeved后,删除释放的驱动文件以及这两个用户层恶意程序文件。


24


  • 其余恶意程序释放:

查询文件

/etc/collectd/certs/rctl_ca.crt、/etc/collectd/rctlcli.cfg是否存在若不存在,则创建文件,将数据写入文件rctl_ca.crt内容如下图)。经后续分析,这两个文件为远控程序配置文件以及公钥证书。


25


将证书解析可以获取下面信息。

26


以释放驱动文件一致的方式,释放下图所示的文件。


27


通过在用户登入自启动目录下写入shell文件,实现恶意程序自启动。


28


最后通过ns_last_pid指定PID号执行程序,并在执行后删除文件清空日志文件消除痕迹。


29


biosdecoded分析

此文件为驱动加载失败后首先执行的两个程序之一。下面进行详细分析。


程序执行后,判断是否存在以下两个文件,该文件为linux动态验证模块组件,若不存在则退出。


30


使用文件hash检查文件pam_auth.so是否正确,hash不一致则读取自身数据,重新生成pam_auth.so文件,并使用touch命令修改文件时间与正常pam文件一致。


31


修改pam重要配置文件common-auth或者password-auth-ac(不同linux发行版的配置文件有所不同)以及systen-auth-ac配置文件,将正常pam库模块pam_unix.so替换为恶意后门模块pam_auth.so。


32


修改配置后,当程序需要进行相对应的安全验证时,调用的就是恶意后模块pam_auth.so。修改前后对比图如下。


33


  • 恶意pam_auth.so分析:

该文件是一个动态共享库文件,通过与原始文件pam_unix.so导出表对比可以发现,恶意pam_auth.so的导出表函数与原始文件的一致。


34


在函数pam_sm_authenticate中,实现以指定密码字符串登录任意账户,并将登入验证时所传入的用户以及登录密码使用凯撒密码加密后,存储在文件/usr/include/ilog.h中。


该任意账户密码为PMGS**56$wx*%*St。


35



blockdeved分析

此文件同样是驱动加载失败后首先执行的两个程序之一。下面进行详细分析。

程序执行后,首先会删除原始文件ssh、scp,并释放恶意文件替换。


36


  • 恶意ssh、scp分析:

经过分析发现,当使用ssh程序对远程主机进行连接时,恶意ssh程序会将用户输入的用户名、远程主机地址、用户密码记录到文件中,并使用凯撒密码对远程主机密码进行加密,文件目录为/usr/include/olog.h。


37


文件内容示例如下图。由于scp是基于ssh连接后实现的文件传输,所以会在调用ssh实现远程主机、密码的窃取。


 

38


telinited分析

下面对其余恶意组件进行详细分析,首先是telinited程序,该文件作为远程控制客户端,接收执行远程命令。


首先检查是否多开,通过标志文件/var/run/telinited.pid判断。


39


执行mount命令,将pid为1的系统守护进程目录挂载到恶意程序的proc目录,以此达到偷梁换柱隐藏进程的效果。


40


下面就进入到远程控制(rctl)客户端的逻辑代码该恶意团伙所使用的程序是基于github开源rctl工具实现的一个远程控制程序,流程大致一致,这里就不详细分析,感兴趣可以访问[rctl](https://github.com/ycsunjane/rctl)。


41



postcated分析

检查标志文件防止多开,使用挂载目录方式实现进程隐藏。


42


整理记录的本机账号密码以及远程中断的账号密码进行去重排序后,发送至目标地址log.softgoldinformation.com。


43


postmaped分析

检查运行标志文件,通过挂载隐藏进程文件。


44


清理dmesg内核日志,且当系统日志中存在下图字符串时,便清空日志文件,借此隐藏恶意文件痕迹。


45


develinked分析

该模块主要用于释放xmrig挖矿程序。在执行后检查是否多开,并隐藏自身进程文件。


46


需要判断挖矿程序是否运行。因为当挖矿程序运行一段时间后,就会关闭挖矿进程,重新生成随机进程名再次执行。


47


若程序第一次执行,则释放文件名为gettexted+随机字符串,设置预定pid并执行。


48


并在执行期间,每隔一段时间就清理一次日志文件。

49


  • 挖矿程序gettexted分析:

挖矿程序首先创建running标志文件。


50


根据系统内存情况,连接不同矿池。


51

03
分析总结

本次捕获的样本为内核级rookit,从最底层隐藏文件、流量等信息,并清理与自身模块组件相关的日志记录。若非系统资源占用率高导致系统卡死,还不一定能发现踪迹。希望广大用户提高安全防范意识,拒绝弱口令,保持系统、应用、服务处于最新版本,并做好安全配置,以此加强主机安全防护,免受业务停止、资源占用等损坏





三、防护建议



01
强化:密码管理

建议用户在设定密码的过程中,尽量使用非字典中出现的组合字符,并且采用数字与字符相结合、大小写相结合的密码设置方式,增加密码被黑客破解的难度。而且,也可以使用定期修改密码、使密码定期作废的方式,来保护自己的登录密码。


02
限制:root用户权限管理

Root一直是Linux保护的重点,由于它权力无限,最好不要轻易进行超级用户的授权因为一旦进行授权攻击者可以利用其他工具比如sudo让这类用户有部分超级用户的权限。


sudo不但限制了用户的权限,而且还将每次使用sudo所执行的指令记录下来,不管该指令的执行是成功还是失败。


03
设定:用户账号安全等级管理

除密码之外,用户账号也有安全等级,这是因为在Linux上每个账号可以被赋予不同的权限,因此在建立一个新用户ID时,系统管理员应该根据需要赋予该账号不同的权限,并且归并到不同的用户组中。


04
设定:开放端口管理

在各种web服务中,需要服务器开放不同端口进行正常通信。对于暴露在互联网中的服务器,更是需要关闭无关的网络端口,防止应用漏洞攻击。


05
横向扩展:综合防御管理

防火墙、IDS等防护技术已经成功地应用到网络安全的各个领域,而且都有对应的成熟产品。


对于Linux系统,有一个自带的Netfilter/Iptables防火墙框架,配置合理的话也能起到主机防火墙的功效。在Linux系统中也有相应的轻量级的网络入侵检测系统Snort以及主机入侵检测系统LIDS(Linux Intrusion Detection System),能快速、高效地进行防护。


06
保持更新:补丁管理

Linux作为一种优秀的开源软件,其稳定性、安全性和可用性极高。毫无夸张地说,因为有全球的Linux高手共同维护这个优秀产品,所以流通渠道很多。除此之外,也经常更新并发布程序和系统补丁。因此,为了加强系统安全,用户一定要经常更新系统内核。





四、参考资料



1.https://www.trendmicro.com/en_us/research/19/i/skidmap-linux-malware-uses-rootkit-capabilities-to-hide-cryptocurrency-mining-payload.html

2.https://exchange.xforce.ibmcloud.com/malware-analysis/guid:7d840fd69dee144f6b02f7b8428a20e9

3.https://www.blocktempo.com/new-linux-malware-mines-crypto-while-remaining-undetectable/

4.https://www.archcloudlabs.com/projects/tracking_cryptominer_domains/


本文作者:安全狗

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/193234.html

Tags:
评论  (0)
快来写下你的想法吧!

安全狗

文章数:32 积分: 180

基于智能驱动的新一代云安全公司

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号