记录一次服务器被挖矿
发现问题
早上到工位还没喝水呢, 同事就说服务器挂了, 我输入top 一看

我的乖乖 196% , cpu在飘香味
吓的我有点神志不清了看到 findshell的左边

对同事说, 不得了了 磁盘都满了
输入 df -h

看清除 可用后才明白是自己 看错了 , 把 可用 看成 已用 了
确认问题
根据上面 top 的输出
可以看到一个名为 ubizC98 的进程占用了极高的CPU 资源(195.7%),并且属于 postgres 用户。
这可能是挖矿程序或其他恶意软件的迹象。
使用 ps 命令查看该进程的详细信息:
ps -p 3923183 -o pid,ppid,cmd,%mem,%cpu

检查该进程的启动命令行参数:
cat /proc/3923183/cmdline

可以发现这个确认 ubizC98进程确实非常可疑,因为它占用了极高的 CPU 资源,并且其命令行参数和启动方式不常见
尝试解决
安装lsof工具
lsof 是一个非常有用的工具,可以列出进程打开的文件和网络连接。首先需要安装它:
yum install lsof -y

查找与该进程相关的文件和目录
安装完 lsof 后,使用它来查看该进程打开的文件和网络连接:
lsof -p 3923183

根据lsof 的输出,
- 可执行文件已被删除:/var/tmp/.5da3f56ffe94f55c8eee (deleted) 表明该进程的可执行文件已经被删除,这通常是恶意软件为了隐藏自身而采取的措施。
- 与外部服务器建立连接:TCP iZ2zed9dcw589aurnexkp7Z:54040->m1563.contaboserver.net:websm (ESTABLISHED) 表明该进程正在与外部服务器通信,可能是为了挖矿或传输数据。
立刻行动杀死可疑进程
kill -9 3923183

查找并删除相关文件
查找 /var/tmp 和 /tmp 目录中的可疑文件:
find /var/tmp /tmp -type f -mtime -1 -exec ls -l {} \; 2>/dev/null

删除相关文件
- 从 lsof 输出中可以看到,ubizC98 的可执行文件已经被删除,但仍然有一些临时文件可能与该进程有关。你可以考虑删除这些文件,特别是那些看起来不正常的文件。
- 特别注意 /var/tmp 和 /tmp 目录中的文件:
rm -f /var/tmp/.5da3f56ffe94f55c8eee
查找隐藏文件
find /var/tmp /tmp -type f -name ".*" -exec ls -l {} \; 2>/dev/null

- .gpgkeyschecked.yum 文件与 DNF 包管理器相关,通常用于检查 GPG 密钥。
- .s.PGSQL.5432.lock 是 PostgreSQL 的锁文件,确保只有一个 PostgreSQL 实例在运行。
检查启动项和服务
systemctl list-unit-files --type=service | grep enabled

根据上图:
aegis.service 和 aliyun.service:这些是阿里云的安全和监控服务。如果你不使用阿里云的安全服务,可以考虑禁用它们以减少潜在的风险。
ecs_mq.service:这是阿里云 ECS 的消息队列服务。如果你不需要该服务,也可以考虑禁用。
禁用不必要的服务:
systemctl disable aegis.service systemctl disable aliyun.service systemctl disable ecs_mq.service

成功禁用了 aliyun.service 和 ecs_mq.service,但禁用 aegis.service 时遇到权限问题。这可能是由于阿里云的安全策略限制。
检查定时任务
for user in $(cut -f1 -d: /etc/passwd); do echo "Checking crontab for $user"; crontab -u $user -l; done

哈哈 被我找到了, , postgres用户有一个定时任务
检查该脚本内容
cat /home/postgres/.config/systemd/user/systemd-tmpfiles-cleanup/systemd-tmpfiles-cleanup-szCEGz.sh

竟然使用了base64编码命令 还通过bash解码执行,
这种行为通常是恶意软件或攻击者用来隐藏其真实意图的一种手段。
可恶啊
停止并删除脚本
rm -f /home/postgres/.config/systemd/user/systemd-tmpfiles-cleanup/systemd-tmpfiles-cleanup-szCEGz.sh

删除对应的定时任务
crontab -u postgres -e
找到并删除以下行
30 * * * * /home/postgres/.config/systemd/user/systemd-tmpfiles-cleanup/systemd-tmpfiles-cleanup-szCEGz.sh > /dev/null 2>&1 &
i 编辑
:wq 保存并退出
检查网络连接
查看所有当前的网络连接,确认是否有其他异常连接:
ss -tnp | grep ESTABLISHED

