Linux | 揭秘SkidMap Rootkit复杂挖矿活动(二)

此次SkidMap Rootkit挖矿窃密活动,关键样本为mldconfig和review,初始启动程序反复内存加载这两个恶意文件释放后续窃密木马、挖矿木马、Rootkit木马。

初始启动程序,通过篡改自启动服务的执行程序,使用多种持久化方式,比如,替换系统umount命令、替换agetty/ssh程序、劫持PAM认证等,在系统不同阶段,尝试内存加载mldconfig和review以及Rootkit,长期隐蔽驻留在主机中,难以完全清除。

样本分析

此次事件整体攻击流程,如下图:

此次事件涉及20多个恶意样本,按照攻击链路顺序,进行功能描述,如下表:

样本名称

样本功能简述

md5

b

判断系统是否存在gif,若不存在,则下载并执行gif

000916c60b2ab828ba8cea914c308999

gif

根据系统版本下载对应的gold*.tar.gz,密码解压后执行install.sh

daca61c12ad98f581d476906ab577c83

gold*.tar.gz

包含wtmpbotinstall.shclear.shlast.shrctl.sh各类脚本

/

wtmp

wtmp日志清理工具

6cb32495ffe0a7cb891abdf79718db65

install.sh

执行bot程序,关闭SELinux、删除监控相关服务

014f2c6170fe63c0ed98977dcf932fb4

bot

释放tty/infocmped/mldconfig/review/infocmped,infocmpedgif最先执行

b95c53001c2f640cb32ece98b12df22e

tty/infocmped

系统启动后,init进程第一个执行的子进程tty被替换,tty内存加载 mldconfig 或 review

342782b0e89998e0002212447940eecb

mldconfig/review

释放执行8个恶意文件与2Rootkit,替换sshscp命令,删除释放的恶意文件,清理痕迹

e4eb088d4f59b8ab20bdd1fe81425b3f

scp

发送已窃取的用户密码文件olog.h

2d19d9b9d3d29b7c53b13e908a802f64

ssh

窃取用户登录密码写入olog.h文件

a5887df19da4811536907278e0392a46

umount

执行umount命令时,替换agetty程序

9e4ac36f270c3f88bcfc4aac331cb927

agetty

用户ssh登录时,getty系统服务自动加载执行agettyagetty启动mldconfig/review

99c9efd23139bb90f57e88cfbf5bec46

biosdecoded

释放恶意pam_echo.sopam_sftp.so并设置共享库劫持

c332caa2debcc5c3348e3d6e17d9eadf

devlinked

释放gettexted挖矿程序

c4dc02c86672c35dd601c0dcba6110b9

matchpathcond

ssh后门木马

b7f9297eb94a1aa8ed17a4c928f93811

postcated

清理攻击痕迹

2ec0c3d8053737fff9469938ea9ebdb0

postmaped

发送已窃取的用户密码文件olog.h

080790043d14cba553714cef59771188

telinited

rctl远控木马

7898db004d056fe6ba5aeda3b2298275

gettexted

xmrig挖矿程序

a3ffb12011c9d0abb758037f2d8d82b1

kmeminfo.ko

kmeminfo.ko使用netfillter hook,过滤特定数据包

fe439c69aefe4913c02b046f5da722e9

mcpuinfo.ko

mcpuinfo.ko实现端口、文件、进程、内核模块等隐藏

452a30d5228325afe5fde87e8476f68e

rctl_ca.crt

rctl远控配置文件

f2c1edff2587e192a7462299db685704

pam_sftp.so

窃取用户登录密码写入ilog.h,设置后门密码FLVX**56$ab*%*Wx

4816fa970e66427d725a4d44727f9526

2.1 b

攻击开始通过Redis未授权漏洞,从z.shavsl[.]com下载b脚本并执行。b脚本检测系统中是否已经存在gif程序,若不存在,则从y.shavsl[.]com下载到/var/lib/gif并执行。

2.2 gif

SkidMap目前存在两种主要的变体,目标分别为Debian/Ubuntu 和 RedHat/CentOS。

gif恶意文件根据不同的版本下发不同的攻击套件实施挖矿攻击。支持Linux发行版为:AlibabaAnolisopenEulerEulerOSSteamCentOSRedHat Rock

首先创建ssh 密钥文件/root/.ssh/authoried_keys和/root/.ssh/authoried_keys2。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtNw4sDrVPO1dELkT5ag+Wa5ewywgEGC6oQJ7ugP01cUJR+6UVnx6DipvZuqWFAkA9Zm7sJUrY6K430wFv82ZNWkbJOjcf1lhl4++njRt1vxwmTheSecwlDvk5fRf6086rm2HmmdvvsUsvSaowbDD23WNXfI3rAibluVhjNmqcFfLvB5DWO8E42zkq8jk1CWdM95D/mtDzCIrxbg/azBdfsXCU1hP8JvjAgDCkelc7NIesmT6ibG4uqeNg2IWiX/M0YG8T9hWoOHJasTl+Ub+gU34Imz21l9JJ66yQtD0GtgszFJBS4AelNSrVOjHEouR9Bx6AToB515nKJ7NEvGSz root@vps1

接下来检查 SELinux 的状态,禁用SELinux。

下一步,若不是EulerOS,则删除旧版本的挖矿程序和持久化项。

若是EulerOS系统则下载euler*.tar.gz攻击套件。下载对应版本的gold*.tar.gz (gold7或gold8或euler7或euler8),压缩包密码为openssl des3 -d -k Xo@2089@md。解压后执行install.sh,删除gold*落地文件,等install.sh执行完毕后,执行bot释放的infocmped恶意文件。


验证已下载的*.tar.gz文件的md5值。 (gold7或gold8或euler7或euler8)

2.3 gold*.tar.gz

解压gold7.tar.gz。bin目录下包含bot和wtmp恶意文件,通过install.sh执行。

2.4 bot

bot程序释放mldconf/review(本次攻击的核心恶意文件)、tty、umount、infocmped恶意文件,修改落地时间为2012-02-23 09:26:37。

2.5 tty/infocmped

tty与infocmped的md5一致,该样本主要功能为,当系统启动后,init进程执行的被替换tty,tty程序内存加载mldconfig 或 review。

tty程序,在正常的tty功能结束后,多执行一个恶意函数。

load_mldconfig_review函数执行流程:

首先,通过/var/run/postmaped信号,判断mldconfig 或 review是否正在运行,若 mldconfig 或 review 没有正在运行,利用 memfd_create 方式内存加载恶意文件,若失败,则利用 /dev/shm 共享内存的方式加载 mldconfig 或 review。

2.6 mldconfig/review

mldconfig和review的md5一致,是此次攻击事件的核心恶意文件,mldconfig和review内存加载执行后,释放并加载其他恶意文件和Rootkit。

mldconfig和review执行流程,如下:

首先,设置程序版本为0.0.8.3以及环境变量。

获取当前系统内核版本,为了加载对应版本的Rootkit,解除ssh、scp以及pam.d相关配置文件的不可修改属性,为了之后替换和修改这些文件。

根据获取的内核版本对比后,生成不同版本的Rootkit的内核模块文件。

不同的Rootkit,读取自身不同的数据段后写入/lib/udev/collectd/mcpuinfo.ko、

/lib/udev/collectd/kmeminfo.ko。

判断当前系统中ssh和scp的md5值是否为a5887df19da4811536907278e0392a46和2d19d9b9d3d29b7c53b13e908a802f64。

若不是,读取自身数据段,替换系统中的ssh和scp程序,修改其时间戳为系统中sshd的创建时间,修改落地文件权限为775。

根据当前的时间获取随机字符串后缀,拼接出完整路径,文件名称格式为固定名称.五位随机字符,与取证时发现的恶意进程格式一致。

修改落地文件权限为775。

恶意文件落地时间为2012-02-23 09:26:37。

/lib/udev/collectd/mcpuinfo.ko与/lib/udev/collectd/kmeminfo.ko内核模块生成后,首先会加载网络相关驱动,并卸载Linux监控调试驱动sysdig,最后加载Rootkit。

若Rootkit加载阶段成功,则释放执行一系列恶意文件后删除(释放的恶意文件分析,详见2.3至2.11节),生成ns_last_pid、pid_max文件,记录上一次执行恶意文件的进程号,为了指定PID执行各类恶意文件进程。

若Rootkit加载阶段失败,则清理痕迹,执行 /usr/bin/biosdecoded,删除落地的内核模块文件,设置 module.sig_enforce=0,关闭内核模块验证,当重启后再次尝试加载Rootkit。

若Rootkit释放阶段失败,则清理痕迹,执行 /usr/bin/biosdecoded,直接重启。

2.7 ssh/scp

ssh与scp由mldconfig/review释放,除了完成正常ssh功能,以外会使用凯撒密码,偏移为4的方式,将用户输入的用户名、远程主机地址、用户密码,加密后记录到/usr/include/olog.h文件中。

scp用于传输窃取的密码文件/usr/include/olog.h。

2.8 biosdecoded

biosdecoded由mldconfig/review最先释放,此文件为不管Rootkit加载成功与否,最先执行的恶意文件。

biosdecoded执行后,首先判断是否存在pam_unix.so文件,该文件为Pam认证模块共享库文件,若两个路径下都不存在此文件,则退出。

接着判断系统中是否存在md5为4816fa970e66427d725a4d44727f9526的pam_sftp.so,若不存在,则读取自身数据段,生成参考pam_userdb.so创建时间的恶意pam_sftp.so文件。

修改/etc/pam.d/sshd、/etc/pam.d/su、/etc/pam.d/sudo配置文件。

添加“auth sufficient   pam_sftp.so”配置,完成pam认证共享库劫持。

修改/etc/pam.d的访问时间,参考/etc/pam.d/login,伪装为未修改前的时间。

2.8.1 pam_sftp.so

pam_sftp.so由biosdecoded释放,完成pam认证模块共享库劫持。

其中pam_sm_authenticate导出函数被篡改。

恶意的pam_sm_authenticate函数会在系统发生认证时触发,首先判断认证密码是否为后门密码FLVX**56$ab*%*Wx,若不是,则记录由凯撒密码加密的用户密码到 /usr/include/ilog.h文件中,并修改ilog.h文件的落地时间为2016-01-14 21:00:22。

ilog.h文件内容为用户名和加密后的密码。

ilog.h文件落地时间为2016-01-14 21:00:22。

2.9 devlinked

devlinked由mldconfig/review释放后执行,其主要功能为释放gettexted恶意文件,进行挖矿,判断gettexted挖矿进程是否运行。

定期清理各类审计日志。

2.9.1 gettexted

gettexted由devlinked释放后定期执行,gettexted为XMRig 6.18.0 built on Feb 12 2023 版本的挖矿程序。

根据系统当前的状态,选择连接不同的矿池。

   

2.10 postcated

postcated由mldconfig/review释放并执行,其主要功能为,对通过pam认证和ssh登录窃取密码写入的ilog.h文件内容,进行排序去重后生成olog.h。

通过socket将排序去重后生成的olog.h文件发送到远程log.softgoldinformation.com服务器。

2.11 postmaped

postmaped由mldconfig/review释放并执行,其主要功能为清理dmesg日志信息。

sub_400410函数读取/var/log/messages,与agetty字符串及以后的一系列字符串,进行对比,若存在,则清理/var/log/messages文件内容。

agetty偏移24字节为umount字符串。

故存在以下字符串,则清理messages文件内容,如下表strings,这些字符串都与SkidMap挖矿活动使用恶意文件名称相关。

表strings

agetty

rctl_cert.pem

systemd-udeved

pam_auth.so

umount

rctl_priv.pem

systemd-udeved.service

systemd-runlevel

mount

rctl_ca.crt

logrotated

systemd-cgroup

mcpuinfo.ko

rctlcli.cfg

ldattached

systemd-deltaed

mzoneinfo.ko

infocmp

hardlinked

gettexted

kmeminfo.ko

selinuxdefconed

biosdecoded

dpkgsplit

systemd-firstload

selinuxexecconed

dhclientd

lsloginsd

postcated

postaliasd

systemd-reboot

plymouthed

devlinked

blockdeved

systemd-logined

partprobed

matchpathcond

lgroupdeleted

collectd

discovered

mountinfo

postmaped

ilog.h

mldconfig

telinited

getsebooled

olog.h

review

rctlconf

mkdir



2.12 telinited

telinited由mldconfig/review释放并执行,其主要功能为修改的rctl远控程序,默认使用/etc/collectd/rctlcli.cfg配置文件启动,使用/etc/collectd/certs/目录下的证书文件,进行通信认证。(https://github.com/ycsunjane/rctl)

2.12.1 rctl_ca.crt

rctl_ca.crt为rctl使用的ca证书,证书信息,如下:

2.13 matchpathcond

matchpathcond由mldconfig/review释放并执行,其主要功能为ssh后门木马。

默认使用/etc/ssh/ssh_config.d/04-redhat.conf作为配置文件,允许root登录开启密码认证。

2.14 kmeminfo.ko

内核模块kmeminfo.ko由mldconfig/review释放并加载,其主要功能为隐藏自身模块,并使用netfillter hook,过滤特定数据包。

2.15 mcpuinfo.ko

内核模块mcpuinfo.ko由mldconfig/review释放并加载,其主要功能为隐藏自身模块,隐藏进程、文件、网络连接;阻止特定进程执行;阻止新的内核模块加载;过滤内核调试信息等。

具体劫持点和功能,如下图:

Rootkit禁止运行一系列监控或取证工具,如下deny_bin_file表:

表deny_bin_file

hostguard

tat_agent

AliHips

JCSAgentCore

hostwatch

bcm-agent

argusagent

ifrit-supervise

AliSecGuard

bcm-ii

AliYunDunUpdate

ifrit-agent

AliYunDun

bcm-si

AliNet

MonitorPlugin

aliyun-service

jdog-watchdog

assist_daemon

jdog-monitor

CmsGoAgent

jdog-monitor

YDService

jdog-kunlunmirror

YDLive

busybox

sgagent

unhide

sysdig_probe

csysdig

telescope


Rootkit过滤隐藏的一些文件,如下file_name表:

表file_name

mcpuinfo.ko

rctl_cert.pem

logrotated

getsebooled

mzoneinfo.ko

rctl_priv.pem

ldattached

systemd-runlevel

kmeminfo.ko

rctl_ca.crt

hardlinked

systemd-cgroup

systemd-firstload

rctlcli.cfg

biosdecoded

systemd-deltaed

postcated

infocmp

dhclientd

gettexted

devlinked

selinuxdefconed

systemd-reboot

dpkgsplit

matchpathcond

selinuxexecconed

systemd-logined

lsloginsd

mountinfo

postaliasd

collectd

plymouthed

telinited

blockdeved

ilog.h

partprobed

systemd-udeved

lgroupdeleted

olog.h

discovered

mldconfig
postmaped

rctlconf

systemd-udeved.service

2.16 umount

umount除了正常的umount命令功能以外,多执行一个恶意函数,用于释放agetty恶意文件,实现系统持久化控制。

读取自身数据段,释放/sbin/agetty恶意文件,设置权限775

修改agetty恶意文件落地时间为2012-02-23 09:26:37。

2.17 agetty

agetty由umount释放并替换系统正常的agetty文件,其主要功能为在用户ssh登录时执行,agetty除了正常的ssh登录认证以外,多执行一个恶意函数。

读取 /var/run/postmaped 判断是否已经执行 mldconfig 或 review,若未执行,则利用memfd或shm的方式,内存加载mldconfig 或 review。

4 SkidMap挖矿处置

SkidMap_Clear_ver3.sh替换tty、agetty、ssh、scp为正常的程序文件,删除恶意文件,修改auditd服务配置文件,启动kdump服务、auditd审计服务后重启。

重启后,系统没有Rootkit植入情况,挖矿和窃密木马没有再次启动。

5 总结

SkidMap挖矿家族演变至今,攻击方式越来越复杂,对抗程度越来越激烈。

启动程序互相调用,篡改大量系统程序,加载Rootkit,内存加载恶意文件、删除落地文件等手段,阻碍事件响应,响应过程中疏忽任意细节,都会导致无法完全清除。

IOC

mail.shenjinai.top

domain

y.shavsl.com

domain

z.shavsl.com

domain

45.140.169.127

ip

45.89.230.225

ip

tty

342782b0e89998e0002212447940eecb

infocmped

342782b0e89998e0002212447940eecb

mldconfig

e4eb088d4f59b8ab20bdd1fe81425b3f

review

e4eb088d4f59b8ab20bdd1fe81425b3f

scp

2d19d9b9d3d29b7c53b13e908a802f64

ssh

a5887df19da4811536907278e0392a46

umount

9e4ac36f270c3f88bcfc4aac331cb927

agetty

99c9efd23139bb90f57e88cfbf5bec46

biosdecoded.sivxz

c332caa2debcc5c3348e3d6e17d9eadf

devlinked.lnnoj

c4dc02c86672c35dd601c0dcba6110b9

matchpathcond.kzsqk

b7f9297eb94a1aa8ed17a4c928f93811

postcated.mhcpw

2ec0c3d8053737fff9469938ea9ebdb0

postmaped.yjpef

080790043d14cba553714cef59771188

telinited.fyajh

7898db004d056fe6ba5aeda3b2298275

gettexted

a3ffb12011c9d0abb758037f2d8d82b1

kmeminfo.ko

fe439c69aefe4913c02b046f5da722e9

mcpuinfo.ko

452a30d5228325afe5fde87e8476f68e

rctl_ca.crt

f2c1edff2587e192a7462299db685704

pam_sftp.so

4816fa970e66427d725a4d44727f9526

gif

daca61c12ad98f581d476906ab577c83

bot

b95c53001c2f640cb32ece98b12df22e

wtmp

6cb32495ffe0a7cb891abdf79718db65

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtNw4sDrVPO1dELkT5ag+Wa5ewywgEGC6oQJ7ugP01cUJR+6UVnx6DipvZuqWFAkA9Zm7sJUrY6K430wFv82ZNWkbJOjcf1lhl4++njRt1vxwmTheSecwlDvk5fRf6086rm2HmmdvvsUsvSaowbDD23WNXfI3rAibluVhjNmqcFfLvB5DWO8E42zkq8jk1CWdM95D/mtDzCIrxbg/azBdfsXCU1hP8JvjAgDCkelc7NIesmT6ibG4uqeNg2IWiX/M0YG8T9hWoOHJasTl+Ub+gU34Imz21l9JJ66yQtD0GtgszFJBS4AelNSrVOjHEouR9Bx6AToB515nKJ7NEvGSz root@vps1

ssh key


请使用浏览器的分享功能分享到微信等