若linux服务器出现异常cpu占用、不明外连、日志清空或命令被替换,则极可能已被入侵;需按六步标准化流程排查:隔离取证、账户审计、进程网络分析、定时任务检查、文件扫描及日志溯源。

如果您的Linux服务器出现异常CPU占用、不明外连、日志被清空或关键命令被替换等现象,则极可能是已被黑客入侵。以下是系统中毒后的标准化排查与修复流程:
一、立即隔离与基础信息采集
在不中断业务前提下,优先切断攻击链路并固化现场证据。避免直接重启导致内存痕迹丢失,也避免联网更新工具引入污染。
1、执行ifconfig与ip route show确认当前网络接口及默认路由。
2、运行cat /etc/os-release和uname -r记录操作系统发行版与内核版本。
3、使用md5sum /bin/ps /bin/ls /usr/bin/netstat /usr/bin/top比对关键命令哈希值,若多个命令哈希与同版本官方镜像不一致,则高度疑似rootkit已替换二进制文件。
4、执行ls -la /proc/1/exe验证init进程是否被劫持,若输出非指向/lib/systemd/systemd或/sbin/init,说明系统引导层已被篡改。
二、账户与登录行为审计
攻击者常创建隐藏用户、提权账户或复用弱口令账户维持持久访问。需逐层核查身份凭证有效性与权限边界。
1、运行awk -F: '$3==0 {print $1}' /etc/passwd列出所有UID为0的特权用户,除root外出现任何账户即为高危项。
2、执行last -n 50与lastb -n 50分别查看最近成功与失败的登录记录,重点关注非工作时段、非常用地域IP、高频重试条目。
3、运行grep 'Accepted' /var/log/secure 2>/dev/null | tail -30提取SSH成功登录日志,若发现大量来自同一IP但不同用户名的Accept记录,表明存在暴力破解行为。
4、检查/etc/shadow中各账户密码字段,若存在空密码(第二个字段为'')或仅含'!'、'*',需立即禁用对应账户。
三、进程与网络连接深度分析
恶意程序常以伪装进程名驻留内存,并通过短连接、DNS隧道或加密协议外联C2服务器。需绕过被篡改命令获取真实状态。
1、使用lsof -i -P -n替代netstat,列出所有网络连接及对应PID,过滤出非标准端口(如8080、8443、3128)且目标IP不在白名单内的连接。
2、对可疑PID执行ls -la /proc/PID/exe定位可执行文件路径,若显示“(deleted)”或路径位于/tmp、/dev/shm等临时目录,基本确认为内存马或落地木马。
3、运行cat /proc/PID/cmdline | tr '\0' '\n'查看进程启动参数,若参数中包含base64字符串、curl/wget远程脚本地址或明显混淆载荷,可直接判定为恶意进程。
4、使用iftop -P tcp实时监控流量TOP会话,锁定持续向境外IP(如104.31.225.6)发送HTTP POST请求的进程。
四、定时任务与启动项排查
攻击者惯用crontab、systemd timer、at job或rc.local植入持久化后门。这些机制可在系统重启后自动拉起恶意程序,必须彻底清理。
1、依次执行cat /etc/crontab、ls /etc/cron.*、cat /var/spool/cron/* 2>/dev/null,查找含curl、wget、base64、sh -c等关键字的行,尤其注意以点开头的隐藏文件(如/etc/cron.d/.vuhcwazfbpmgakhhoc)。
2、运行systemctl list-timers --all与systemctl list-unit-files --type=service | grep enabled,识别非系统默认启用且服务名含随机字符串(如hzqzqdmatu.service)的unit。
3、检查/etc/rc.local与/etc/init.d/下脚本,若发现末尾追加了不可读二进制块或调用/tmp下的可执行文件,应立即删除整行。
4、执行find /etc/systemd/system/ -name "*.service" -exec grep -l "ExecStart=.*sh\|curl\|wget" {} \;,定位所有可能执行远程载荷的systemd服务定义。
五、文件系统与可疑文件扫描
恶意软件常驻留于临时目录、隐藏路径或伪装成系统文件。需结合时间戳、权限、签名与行为多维识别。
1、运行find /tmp /var/tmp /dev/shm -type f -mtime -7 -ls 2>/dev/null,重点检查7天内创建、权限为777、文件名含随机字符或无扩展名的可执行文件。
2、执行find / -type f -name ".*" -size +10k -ls 2>/dev/null | head -20,筛选出大于10KB的隐藏文件,此类文件极大概率是rootkit核心模块。
3、使用find / -type f -perm -4000 -ls 2>/dev/null列出所有SUID文件,除/usr/bin/sudo、/usr/bin/passwd等标准路径外,其余均需人工确认合法性。
4、运行clamscan -r --bell -i /(需预装ClamAV),对全盘进行病毒特征扫描,忽略/var/log等日志目录以节省时间。
六、日志完整性与审计追踪
入侵者常清除/var/log/下的关键日志,但部分操作仍会残留于内核环缓冲区或审计子系统。需从多源交叉验证。
1、执行dmesg -T | tail -50查看内核日志,搜索"out of memory"、"segfault"、"module verification failed"等异常提示,可能暴露驱动级rootkit加载痕迹。
2、运行ausearch -m avc -ts recent(需auditd启用),提取SELinux拒绝事件,异常的execmod、mmap_zero行为常指向恶意代码注入。
3、检查/var/log/auth.log与/var/log/secure文件大小,若文件尺寸远小于常规(如不足1MB且创建时间在入侵窗口期内),说明日志已被主动截断或覆盖。
4、执行stat /var/log/{auth.log,secure,messages},对比文件修改时间(Modify)与变更时间(Change),若Change早于Modify,表明文件元数据曾被人为篡改。











