【服务器】服务器被攻击植入了挖矿病毒,CPU一直占用100%,@monthly /root/.cfg/./dealer病毒清除
文章目录
- 问题分析
- 解决
- 1、检查crontab任务
- 2、检查并清除恶意文件
- 3、查看系统服务
- 4、检查可疑服务
- 5、立即处理恶意服务
- 5.1 检查恶意服务详情
- 5.2 停止并禁用恶意服务
- 5.3 删除恶意服务文件
- 5.4、杀死恶意进程
- 6、后续
- 6.1 服务器安全组配置指定来源IP进行登录对应端口(如果长期固定某几个IP可以拒绝该IP访问服务器),远程登录端口也可以修改为非22端口(这种办法通常效果一般)
- 修改SSH端口
- 腾讯云安全组配置
- 6.2 建议禁用密码登录,改为密钥登录
- 6.3 如一定要使用密码登录避免弱密码(复杂密码能大大降低被爆破出登录密码的概率)
- 7、补充知识
问题分析
登录服务器时,ssh提示密码不对,就去控制台检查,服务器提示CPU使用告警,占用过高。远程无法登录。
原因分析:所有中毒的均为linux服务器,密码设置过于简单,防火墙关闭的。
解决
1、检查crontab任务
crontab -l //计划任务列表
crontab -e //编辑新增
crontab -r //删除(谨慎使用,会删除所有定时任务)
大概率你会发现典型的恶意后门定时任务
@monthly /root/dealer & disown > /dev/null 2>&1
@monthly /root/.cfg/dealer & disown > /dev/null 2>&1
这是一个高度专业化的持久化后门:
-
✅ 每月自动激活
-
✅ 完全隐藏运行痕迹
-
✅ 进程脱离监控
-
✅ 双重备份机制
-
✅ root权限执行
这些是明显的后门程序!请使用crontab -e
立即删除恶意定时任务
2、检查并清除恶意文件
# 检查恶意文件
ls -la /root/dealer
ls -la /root/.cfg/dealer# 检查文件属性
file /root/dealer
file /root/.cfg/dealer# 清除恶意文件
rm -f /root/dealer
rm -rf /root/.cfg/# 检查是否有其他隐藏文件
find /root -name "dealer" -o -name ".cfg" 2>/dev/null
3、查看系统服务
经过上面的步骤,你会发现CPU占用还是100%
我们进入系统目录
cd /lib/systemd/system
再调用命令,以从旧到新排序
ll -rt
4、检查可疑服务
# 查看所有运行中的服务
systemctl list-units --type=service --state=running# 查看所有已启用的服务
systemctl list-unit-files --type=service | grep enabled# 查看最近启动的服务
systemctl list-units --type=service --state=running --all | head -20
结果示例
bash-4.2# systemctl list-units --type=service --state=runningUNIT LOAD ACTIVE SUB DESCRIPTION
acpid.service loaded active running ACPI Event Daemon
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
getty@tty1.service loaded active running Getty on tty1
libstoragemgmt.service loaded active running libstoragemgmt plug-in server daemon
lvm2-lvmetad.service loaded active running LVM2 metadata daemon
mysqld.service loaded active running MySQL Server
network.service loaded active running LSB: Bring up/down networking
ntpd.service loaded active running Network Time Service
php-fpm.service loaded active running The PHP FastCGI Process Manager
polkit.service loaded active running Authorization Manager
rabbitmq-server.service loaded active running RabbitMQ broker
rc-local.service loaded active running /etc/rc.d/rc.local Compatibility
rsyslog.service loaded active running System Logging Service
serial-getty@ttyS0.service loaded active running Serial Getty on ttyS0
sshd.service loaded active running OpenSSH server daemon
supervisord.service loaded active running Process Monitoring and Control Daemon
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running Login Service
systemd-sclide.service loaded active running Example systemd service.
systemd-udevd.service loaded active running udev Kernel Device Manager
tuned.service loaded active running Dynamic System Tuning DaemonLOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.24 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
systemd-sclide.service
是一个明显的恶意服务,正常的系统不会有这个服务。
5、立即处理恶意服务
5.1 检查恶意服务详情
# 查看恶意服务的详细信息
systemctl status systemd-sclide.service
systemctl cat systemd-sclide.service# 查看服务文件路径
ls -la /lib/systemd/system/systemd-sclide.service
cat /lib/systemd/system/systemd-sclide.service
结果示例
bash-4.2# systemctl status systemd-sclide.service
● systemd-sclide.service - Example systemd service.Loaded: loaded (/etc/systemd/system/systemd-sclide.service; enabled; vendor preset: disabled)Active: active (running) since 四 2025-10-09 09:57:14 CST; 1 day 7h agoProcess: 697 ExecStart=/usr/bin/udeb (code=exited, status=0/SUCCESS)Main PID: 758 (loghandlerx)CGroup: /system.slice/systemd-sclide.service└─758 /tmp/loghandlerx10月 09 09:57:08 VM-64-49-centos systemd[1]: Starting Example systemd service....
10月 09 09:57:14 VM-64-49-centos systemd[1]: Started Example systemd service..
bash-4.2# systemctl cat systemd-sclide.service
# /etc/systemd/system/systemd-sclide.service
[Unit]
Description=Example systemd service.
[Service]
Type=forking
ExecStart=/usr/bin/udeb
Restart=always
RestartSec=5s
SuccessExitStatus=SIGHUP
TimeoutStartSec=6000
KillMode=control-group
StandardOutput=null
StandardError=null
[Install]
WantedBy=multi-user.target
bash-4.2#
这是一个典型的恶意挖矿服务。发现了恶意文件和进程。
从服务配置可以看出:
-
/usr/bin/udeb - 启动器(伪装成系统文件)
-
/tmp/loghandlerx - 实际的挖矿程序(在/tmp目录)
-
Restart=always - 总是自动重启(持久化)
-
RestartSec=5s - 5秒后自动重启
-
标准输出/错误重定向到null - 隐藏输出
5.2 停止并禁用恶意服务
# 立即停止服务
systemctl stop systemd-sclide.service# 禁用服务(防止重启后自动运行)
systemctl disable systemd-sclide.service# 确认服务已停止
systemctl status systemd-sclide.service
5.3 删除恶意服务文件
# 删除恶意二进制文件
rm -f /usr/bin/udeb
rm -f /tmp/loghandlerx# 删除恶意服务文件
rm -f /etc/systemd/system/systemd-sclide.service# 重新加载systemd
systemctl daemon-reload
5.4、杀死恶意进程
# 杀死运行的恶意进程
pkill -f loghandlerx
pkill -f udeb# 确认进程已终止
ps aux | grep -E "(loghandlerx|udeb)"
6、后续
一般你的服务器被破解,对方已经掌握了你的服务器ssh登录密码,为了防止重复被攻击,建议:
6.1 服务器安全组配置指定来源IP进行登录对应端口(如果长期固定某几个IP可以拒绝该IP访问服务器),远程登录端口也可以修改为非22端口(这种办法通常效果一般)
修改SSH端口
# 备份SSH配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup# 编辑SSH配置
vim /etc/ssh/sshd_config
修改或添加以下行:
# 将端口改为非标准端口,比如 2222
Port 22
Port 2222# 或者完全禁用22端口,只使用新端口
# Port 2222
重启SSH服务
# 检查配置语法
sshd -t# 重启SSH服务
systemctl restart sshd# 确认新端口监听
netstat -tunlp | grep sshd
腾讯云安全组配置
-
登录腾讯云控制台 → 云服务器 → 安全组
-
修改现有规则:
-
找到SSH(22)端口的入站规则
-
修改源IP为您的固定IP,格式:1.2.3.4/32(单个IP)
-
-
添加入站规则:
-
协议:TCP
-
端口:2222(您修改的SSH端口)
-
源:您的固定IP,如 1.2.3.4/32
-
策略:允许
-
6.2 建议禁用密码登录,改为密钥登录
生成SSH密钥对(如果还没有)
# 在您的本地电脑生成密钥(不是在服务器上)
ssh-keygen -t ed25519 -C "your_email@example.com"# 或者使用RSA
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
将公钥上传到服务器
# 方法1:使用ssh-copy-id(推荐)
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 username@server_ip# 方法2:手动复制
cat ~/.ssh/id_ed25519.pub
# 然后登录服务器,将公钥内容添加到 ~/.ssh/authorized_keys
在服务器上配置SSH
# 编辑SSH配置
vim /etc/ssh/sshd_config
修改以下参数:
# 禁用密码登录
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no# 启用密钥登录
PubkeyAuthentication yes# 可选:禁用root登录
PermitRootLogin no# 可选:只允许特定用户
AllowUsers username# 指定新端口
Port 2222
重启SSH服务并测试
# 重启服务
systemctl restart sshd# 在新窗口测试密钥登录
ssh -i ~/.ssh/id_ed25519 -p 2222 username@server_ip
6.3 如一定要使用密码登录避免弱密码(复杂密码能大大降低被爆破出登录密码的概率)
推荐一个密码生成器:强大安全的密码生成器
为现有用户修改密码
# 修改当前用户密码
passwd# 修改其他用户密码(需要root权限)
passwd username
7、补充知识
laravel框架使用env(‘xxx’)获取不到.env文件里的信息了?
清除配置缓存
# 清除配置缓存
php artisan config:clear
php artisan cache:clear