大多数木马清理失败的原因不是工具不行,而是清理流程不完整。你只删除了木马文件,但忽略了它的启动项、定时任务、隐藏进程和网络连接。真正的清理需要系统性的排查和根除。
在开始任何清理操作前,必须先创建系统快照。如果你使用云服务器,在控制台创建整机快照。如果是物理服务器,使用以下命令创建关键目录备份:
创建备份目录:
``` mkdir /root/backup_$(date +%Y%m%d) ```备份关键配置文件:
``` cp -r /etc/init.d/ /root/backup_$(date +%Y%m%d)/ cp -r /etc/systemd/system/ /root/backup_$(date +%Y%m%d)/ cp -r /var/spool/cron/ /root/backup_$(date +%Y%m%d)/ cp /etc/rc.local /root/backup_$(date +%Y%m%d)/ ```不要使用可能已被感染的服务器上的工具。从干净的系统下载以下工具到U盘或只读介质:
使用busybox的ps命令,避免使用可能被篡改的系统命令:
下载并运行busybox:
``` wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64 -O /tmp/busybox chmod +x /tmp/busybox /tmp/busybox ps aux ```检查隐藏进程:直接读取proc目录:
``` ls -la /proc/[0-9]/exe 2>/dev/null | grep deleted ```这条命令会显示所有已删除但仍在运行的进程(这是木马的常见隐藏手段)。
木马会通过多个渠道实现开机自启,必须检查所有位置:
检查systemd服务:
``` systemctl list-unit-files --type=service | grep enabled find /etc/systemd/system -type f -name ".service" -exec ls -la {} \; ```检查init.d脚本:
``` ls -la /etc/init.d/ ```检查rc.local:
``` cat /etc/rc.local ```检查profile和bashrc:
``` grep -r "sh\|bash\|perl\|python\|wget\|curl" /etc/profile.d/ 2>/dev/null grep -r "sh\|bash\|perl\|python\|wget\|curl" /etc/bash 2>/dev/null ```木马经常通过cron实现持久化:
检查系统cron:
``` ls -la /etc/cron cat /etc/crontab ```检查所有用户的cron:
``` for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null; done ```检查cron.d目录:
``` ls -la /etc/cron.d/ cat /etc/cron.d/ 2>/dev/null ```使用busybox netstat检查异常连接:
查看所有连接:
``` /tmp/busybox netstat -tunap ```检查隐藏端口:直接读取proc信息:
``` for pid in $(ls /proc | grep '^[0-9]\+$'); do if [ -d /proc/$pid ]; then echo "PID: $pid" cat /proc/$pid/cmdline 2>/dev/null echo "" ls -la /proc/$pid/fd 2>/dev/null | grep socket fi done ```根据上一步找到的PID,使用kill命令终止:
先发送SIGTERM信号:
``` kill -15 [PID] ```如果进程还在,发送SIGKILL:
``` kill -9 [PID] ```对于顽固进程:直接删除进程文件句柄:
``` grep -l "deleted" /proc/[PID]/fd/ 2>/dev/null | xargs -I {} sh -c 'echo > {}' ```找到进程对应的可执行文件并删除:
查看进程执行文件:
``` ls -la /proc/[PID]/exe readlink /proc/[PID]/exe ```彻底删除文件:使用shred覆盖后删除:
``` shred -zu /path/to/malware ```如果系统没有shred,使用dd覆盖:
``` dd if=/dev/zero of=/path/to/malware bs=1M count=3 rm -f /path/to/malware ```根据检测结果,删除所有恶意启动项:

删除systemd服务:
``` systemctl disable [malware-service] rm -f /etc/systemd/system/[malware-service].service ```删除init.d脚本:
``` rm -f /etc/init.d/[malware-script] update-rc.d [malware-script] remove ```清理rc.local:编辑/etc/rc.local,删除恶意行。
清理profile文件:编辑/etc/profile、/etc/bash.bashrc等,删除恶意命令。
删除所有恶意cron任务:
删除系统cron:
``` rm -f /etc/cron.d/[malware-cron] ```清理用户cron:
``` crontab -u [username] -l | grep -v "malware-command" | crontab -u [username] - ```解压和编译:
``` tar zxvf chkrootkit.tar.gz cd chkrootkit- make sense ```运行检测:
``` ./chkrootkit -x | grep INFECTED ```注意:chkrootkit可能会有误报,重点关注"INFECTED"字样的结果。
解压和安装:
``` tar zxvf rkhunter-.tar.gz cd rkhunter- ./installer.sh --layout default --install ```更新特征库:
``` rkhunter --update ```运行完整检测:
``` rkhunter --check --sk ```检查报告中的警告信息,重点关注文件权限异常和隐藏进程。
关键目录权限设置:
``` chmod 750 /etc/init.d chmod 600 /etc/crontab chmod 700 /var/spool/cron chmod 644 /etc/passwd chmod 000 /etc/shadow ```检查SUID文件:
``` find / -perm -4000 -type f 2>/dev/null ```删除不必要的SUID权限:
``` chmod u-s /path/to/file ```安装aide:
``` apt-get install aide Debian/Ubuntu yum install aide CentOS/RHEL ```初始化数据库:
``` aideinit mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz ```创建每日检查任务:编辑/etc/cron.daily/aide:
``` !/bin/bash /usr/bin/aide --check ```设置执行权限:
``` chmod +x /etc/cron.daily/aide ```只开放必要端口:
``` iptables -F iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT SSH iptables -A INPUT -p tcp --dport 80 -j ACCEPT HTTP(如果需要) iptables -A INPUT -p tcp --dport 443 -j ACCEPT HTTPS(如果需要) iptables -A INPUT -j DROP iptables -P INPUT DROP ```保存规则:
``` iptables-save > /etc/iptables.rules ```设置开机加载:编辑/etc/rc.local,在exit 0前添加:
``` iptables-restore < /etc/iptables.rules ```安装logwatch:
``` apt-get install logwatch Debian/Ubuntu yum install logwatch CentOS/RHEL ```配置每日报告:编辑/etc/cron.daily/00logwatch:
``` !/bin/bash /usr/sbin/logwatch --output mail --mailto admin@yourdomain.com --detail high ```创建监控脚本/root/monitor_process.sh:
``` !/bin/bash LOG_FILE="/var/log/process_monitor.log" PS_OUTPUT=$(ps aux) if ! diff <(echo "$PS_OUTPUT") /tmp/last_ps_output 2>/dev/null; then echo "$(date): Process list changed" >> $LOG_FILE echo "$PS_OUTPUT" >> $LOG_FILE echo "$PS_OUTPUT" > /tmp/last_ps_output fi ```添加到cron:
``` crontab -e ```添加一行:
``` /5 /root/monitor_process.sh ```完成以上所有步骤后,你的服务器木马清理工作才算真正完成。记住,清理只是开始,持续的监控和加固才是防止再次感染的关键。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图