记一次Linux挖矿应急处置案例

文章的内容是对Linux服务器CPU进程过载,发现挖矿的解决处置
Linux应急响应的操作

1. 事件排查过程

1.1 异常事件确认

  客户提出服务器卡顿,影响正常的业务运行,需要进行排查处理。

通过 top 命令,可以看到显示的 CPU 使用率较低,并没有什么大的应用进程占用服务器的资源,但是用专门的Linux显示CPU的工具是发现了CPU的占用率高达1606%。(初次判断可能是进程隐藏的问题)

image-20230214100732504

关于进程隐藏的说明:

1
2
3
4
5
在 Linux 操作系统的动态链接库加载过程中,动态链接器会读取 LD_PRELOAD 环境变量的值和默认配置文件
/etc/ld.so.preload 的文件内容,并将读取到的动态链接库进行预加载,即使程序不依赖这些动态链接库,LD_PRELOAD
环境变量和 /etc/ld.so.preload 配置文件中指定的动态链接库依然会被装载,它们的优先级比 LD_LIBRARY_PATH
环境变量所定义的链接库查找路径的文件优先级要高,所以能够提前于用户调用的动态库载入。
——段落引自《警惕利用 Linux 预加载型恶意动态链接库的后门》

所以我们如有备份的/etc/ld.so.preload就将其原本的覆盖,或者将其备份后删除,解决完了进程隐藏的问题后进行修改,解决完了隐藏问题之后,就可以在服务器上面运行top命令查看服务器的进行之后,发现了服务器进程内占用了大量的CPU资源。

image-20230214094752590

  确定了是.sh后台的脚本文件占用了大量的服务器资源导致的服务器卡顿问题。

  随后去查看/etc/ld.so.preload文件,发现预加载加载了libprocesshider.so文件,可以清空/etc/ld.so.preload文件,并且删除/usr/local/lib/libprocesshider.so文件。

image-20230214101916291

1.2 处置过程

  查看服务器进程,发现“.sh”进程占用大量CPU资源,经过分析这是一个矿机,可以手动关闭该进程。

image-20230214100216266

  通过top界面给出的PID号,我们通过根路径下的/proc路径可以找到对应的PID号对应的文件夹,随后发现了/usr/lib/mysql底下的.sh在不断的重生运行。

image-20230214100848965

  随后,通过命令Crontab -l查看计划任务,发现计划任务会定时调用/usr/lib/mysql/mysql

image-20230214101217124

  查看/usr/lib/mysql/目录下发现存在mysql、sh两个文件,这两个文件都是病毒。可以清除这两个文件,并且清空计划任务。

image-20230214101402003

  ps -ef | grep sh 过滤进程发现存在大量的病毒进程。其中”./.sh -c”、“/bin/sh ./.sh”这两个都是病毒进程, 可以手动关闭。

image-20230214102150585

  处理完成发现的病毒之后,由于在考虑黑客需要通过控制登录进这台服务器才能更好地植入脚本和操作服务器配置,所以可能已经留有登录的后门。所以我们需要查看/root/.ssh/authorized_keys文件,发现存在免密登录密钥,可以清空该文件。

image-20230214102353541

  在解决完了这些事件之后,客户反应了过了三四天服务器又出现了如此状况,换了一个用户也存在此现象。

1.3 二次处置

  再次判断可能黑客在每个用户下都做了如上的操作,导致切换用户时触发了脚本的运行,导致挖矿的脚本又进行启动了。紧接着就再次进行排查工作。

  进入/var/spool/cron目录,依次编辑该目录下的文件(root、git、scuser三个文件存在恶意计划任务),如果发现存在计划任务/usr/bin/mysql/mysql,则可以清除这个计划任务。

image-20230214102556736

  查看/etc/.sftp/目录下发现存在.php、.sh.、.sphp三个隐藏文件,可以将这些文件删除。

image-20230214102715645

  进入/etc/cron.d目录,发现存在ntpdate、phps、phpx、syszh三个恶意的计划任务,可以清除掉。

image-20230214102743440

  查看/etc/httpss文件,发现文件内容如下,可以清除该文件。

image-20230214102810339

  诸如此类,发现都是恶意的指向文件脚本,接着编辑文件,发现存在指向.sh的恶意计划文件都将其进行删除处置。


2. 过程问题

  这次挖矿病毒处置中发现了黑客更改了 top、chattr、lsattr选项,接下来对此进行介绍和分析过程。

  在这些命令被替换了,并且我们想还原又还原不了的场景,我们可以拷贝同版本的机器相同的命令放在其它目录,用这些命令来解除入侵者将它已经替换并锁定了文件。注意有些入侵者不仅会在文件层面加锁,还会在当前的文件的目录这一层加锁。

chattr、lsattr

  在处理挖矿的过程中,发现了病毒文件不能及时删除的问题,发现无法删除,查找资料后得知Linux系统还有一个叫文件锁定保护的命令chattr具体参数如下:

chattr命令的用法:

1
chattr [ -RV ] [ -v version ] [ mode ] files…

最关键的是在[mode]部分,[mode]部分是由+-=和[ASacDdIijsTtu]这些字符组合的,这部分是用来控制文件的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
+ :在原有参数设定基础上,追加参数。

- :在原有参数设定基础上,移除参数。

= :更新为指定参数设定。

A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。

S:硬盘I/O同步选项,功能类似sync。

a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文 件安全,只有root才能设定这个属性。

c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。

d:即no dump,设定文件不能成为dump程序的备份目标。

i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。

j:即journal,设定此参数使得当通过 mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。

s:保密性地删除文件或目录,即硬盘空间被全部收回。

u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion.

锁定文件:chattr +i 文件名

解除锁定:chattr -i 文件名

属性查看:lsattr 文件名

需要对其进行解锁命令后才能进行删除操作。

top

top为进程隐藏,黑客通过修改 /etc/ld.so.preload 文件使我们正常在使用Linux运维时使用Top或者PS无法查看使用率高的进程应用信息。

1
在 Linux 操作系统的动态链接库加载过程中,动态链接器会读取 LD_PRELOAD 环境变量的值和默认配置文件 /etc/ld.so.preload 的文件内容,并将读取到的动态链接库进行预加载,即使程序不依赖这些动态链接库,LD_PRELOAD 环境变量和 /etc/ld.so.preload 配置文件中指定的动态链接库依然会被装载,它们的优先级比 LD_LIBRARY_PATH 环境变量所定义的链接库查找路径的文件优先级要高,所以能够提前于用户调用的动态库载入。——段落引自《警惕利用 Linux 预加载型恶意动态链接库的后门》

谢谢大家观赏文章!
------ 本文结束感谢您的阅读 ------