记一次CPU占用过半,进程被隐藏的木马
由于缺少服务器维护经验,我们找了很久,请教了一些同行朋友,才找到了木马,现在让我慢慢道来。
问题
我们服务器买的阿里云,双核CPU,4G内存,运行一些业务系统。 但发现内存占用高,mysql时常会挂掉的情况,发现是内存不足,优化了mysql的配置,内存有一定改善,但是重启后cpu就占用50%,进程列表中没看到啊,什么都没有运行,这就很奇怪了。用top命令 1 ,发现其中一个核一直是100%状态,是什么程序只占用一个核呢,而且进程列表中完全看不到。
猜想他可能修改了top命令,所以安装了htop进行查看,以为会看到进程,结果太天真。
着手解决
这肯定不正常,于是开始想办法怎么找出占用cpu资源的进程,各种方法都试了。
netstat -anp 可以查看到有进程在使用,发现有进程在往外通信,而且隐藏了进程名称和id,经查是美国IP和aws的,这时可以肯定是中马了。

我阻止他们通信开始禁用IP,在iptables里面禁用出和进的IP,但是发现会轮换IP,一会就出现新的IP了(后面知道怎么回事),重启后iptables被清空,有人说是挖矿的,但是不确定是不是,查登录日志,太混乱了无法看。 而且一般黑客这些足迹都会被擦除,重启就自动加载,明显是启动项加入了什么东西。可是 /etc/init.d 下面又看不出什么,最后在这篇文章中https://paper.seebug.org/629/ 下面这段引起注意:
在 Linux 操作系统的动态链接库加载过程中,动态链接器会读取 LD_PRELOAD 环境变量的值>和默认配置文件 /etc/ld.so.preload 的文件内容,并将读取到的动态链接库进行预加载,即使>程序不依赖这些动态链接库,LD_PRELOAD 环境变量和 /etc/ld.so.preload 配置文件中指定的动>态链接库依然会被装载,它们的优先级比 LD_LIBRARY_PATH 环境变量所定义的链接库查找路>径的文件优先级要高,所以能够提前于用户调用的动态库载入。
——段落引自《警惕利用 Linux 预加载型恶意动态链接库的后门》

看到全是问号,肯定这个文件是动了手脚,打开看看,cat ld.so.preload,

噗。 看不了,被损坏了。 新建覆盖,删除,都不行。 后面用 busybox 给打开了,

看到配置可以猜测到就是这个干了坏事。找到这个目录下,确实有这么一个文件。 我想看看他究竟干了些什么,于是反编译了这个void.so文件,发现了些情况,他反向执行了一个脚本。



到这里基本上可以确定问题了,他通过修改ld.so.preload -> /usr/lib/void.so -> 脚本 -> 其他脚本。 脚本默认先卸载了阿里云盾,现在知道阿里云后台为什么显示云盾是离线的原因了。
解决
1、用busybox 修改ld.so.preload 文件,(搜一下busybox ,加强工具),修改后就看到这个文件正常了,可以用cat 命令查看了。
2、删掉/usr/lib/void.so
3、删掉脚本/etc/voidonce.sh
4、删掉恶意用户, userdel -r gvhtuzdl 把恶意用户的数据彻底删掉。 竟然提示用户在使用。。。 于是马上重启 reboot
5、 此时已经看到 cpu 占用恢复正常了。再次删掉上面的恶意用户。
6、把云盾安装回去。
7、修改了相关账号密码。

终于清静了。
只是目前还不确定是怎么被黑的。。。 但是从ld.so.preload文件来看,是dev 用户创建的,是这个用户漏了么。。。
特别感谢朋友的帮助和网上的经验分享:
https://paper.seebug.org/629/
https://my.oschina.net/9199771/blog/1813276