此次SkidMap Rootkit挖矿窃密活动,关键样本为mldconfig和review,初始启动程序反复内存加载这两个恶意文件释放后续窃密木马、挖矿木马、Rootkit木马。
初始启动程序,通过篡改自启动服务的执行程序,使用多种持久化方式,比如,替换系统umount命令、替换agetty/ssh程序、劫持PAM认证等,在系统不同阶段,尝试内存加载mldconfig和review以及Rootkit,长期隐蔽驻留在主机中,难以完全清除。
2 样本分析
此次事件整体攻击流程,如下图:
此次事件涉及20多个恶意样本,按照攻击链路顺序,进行功能描述,如下表:
样本名称 |
样本功能简述 |
md5 |
b |
判断系统是否存在gif,若不存在,则下载并执行gif |
000916c60b2ab828ba8cea914c308999 |
gif |
根据系统版本下载对应的gold*.tar.gz,密码解压后执行install.sh |
daca61c12ad98f581d476906ab577c83 |
gold*.tar.gz |
包含wtmp、bot、install.sh、clear.sh、last.sh、rctl.sh各类脚本 |
/ |
wtmp |
wtmp日志清理工具 |
6cb32495ffe0a7cb891abdf79718db65 |
install.sh |
执行bot程序,关闭SELinux、删除监控相关服务 |
014f2c6170fe63c0ed98977dcf932fb4 |
bot |
释放tty/infocmped/mldconfig/review/infocmped,infocmped被gif最先执行 |
b95c53001c2f640cb32ece98b12df22e |
tty/infocmped |
系统启动后,init进程第一个执行的子进程tty被替换,tty内存加载 mldconfig 或 review |
342782b0e89998e0002212447940eecb |
mldconfig/review |
释放执行8个恶意文件与2个Rootkit,替换ssh、scp命令,删除释放的恶意文件,清理痕迹 |
e4eb088d4f59b8ab20bdd1fe81425b3f |
scp |
发送已窃取的用户密码文件olog.h |
2d19d9b9d3d29b7c53b13e908a802f64 |
ssh |
窃取用户登录密码写入olog.h文件 |
a5887df19da4811536907278e0392a46 |
umount |
执行umount命令时,替换agetty程序 |
9e4ac36f270c3f88bcfc4aac331cb927 |
agetty |
用户ssh登录时,getty系统服务自动加载执行agetty,agetty启动mldconfig/review |
99c9efd23139bb90f57e88cfbf5bec46 |
biosdecoded |
释放恶意pam_echo.so、pam_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发行版为:Alibaba、Anolis、openEuler、EulerOS、Steam、CentOS、RedHat 和 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
2.13 matchpathcond
2.14 kmeminfo.ko
2.15 mcpuinfo.ko
内核模块mcpuinfo.ko由mldconfig/review释放并加载,其主要功能为隐藏自身模块,隐藏进程、文件、网络连接;阻止特定进程执行;阻止新的内核模块加载;过滤内核调试信息等。
具体劫持点和功能,如下图:
Rootkit禁止运行一系列监控或取证工具,如下deny_bin_file表:
表deny_bin_file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rootkit过滤隐藏的一些文件,如下file_name表:
表file_name
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mldconfig |
|
|
|
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,内存加载恶意文件、删除落地文件等手段,阻碍事件响应,响应过程中疏忽任意细节,都会导致无法完全清除。
6 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 |
原文始发于微信公众号(TahirSec):Linux | 揭秘SkidMap Rootkit复杂挖矿活动(二)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论