CentOS服务器被入侵?手把手教你排查暴力破解、后门植入与命令替换(附靶场复现)
CentOS服务器入侵排查实战指南:从暴力破解到后门清除
最近在帮朋友处理一台被入侵的CentOS服务器时,发现黑客不仅留下了后门账户,还替换了关键系统命令。这种经历让我意识到,很多管理员在服务器被入侵后往往手足无措。本文将分享一套完整的排查流程,帮助你像专业安全人员一样应对服务器入侵事件。
1. 入侵迹象初步识别
当服务器出现以下症状时,就该警惕可能已被入侵:
- 异常资源占用:CPU或内存突然飙升,而业务量并无相应增长
- 陌生进程:
top或htop命令显示未知进程持续运行 - 可疑网络连接:服务器与未知IP地址建立异常连接
- 命令行为异常:常见命令如
ps、netstat输出结果与预期不符
提示:建议定期对服务器建立性能基准,这样更容易发现异常变化
快速检查网络连接的实用命令:
# 查看所有活跃的网络连接 netstat -antp | grep ESTABLISHED # 检查异常出站连接(按连接数排序) netstat -antp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n2. 暴力破解攻击痕迹分析
暴力破解通常是入侵的第一步。CentOS系统的登录尝试记录主要保存在:
/var/log/secure分析暴力破解的关键命令:
# 统计失败登录尝试TOP IP grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr # 提取被暴力破解的用户名 grep "Failed password" /var/log/secure | perl -n -e '/for (.+?) from/ && print "$1\n"' | sort | uniq -c | sort -nr典型暴力破解日志特征:
Jan 14 03:14:22 localhost sshd[12345]: Failed password for root from 192.168.1.100 port 54321 ssh2 Jan 14 03:14:25 localhost sshd[12345]: Failed password for root from 192.168.1.100 port 54321 ssh2防护建议:
立即措施:
- 封禁攻击IP:
iptables -A INPUT -s 192.168.1.100 -j DROP - 更改所有可能被猜中的密码
- 封禁攻击IP:
长期防护:
- 启用SSH密钥认证,禁用密码登录
- 安装fail2ban自动封禁暴力破解IP
- 限制SSH访问IP范围
3. 后门账户深度排查
黑客常会创建隐蔽账户维持访问权限。完整排查流程:
3.1 特权账户检查
# 列出所有UID为0的账户(超级用户) awk -F: '$3==0 {print $1}' /etc/passwd # 检查可远程登录的账户 awk '/\$1|\$6/{print $1}' /etc/shadow3.2 隐藏账户检测
黑客可能使用特殊字符创建"隐形"账户:
# 检查用户名包含异常字符的账户 cat /etc/passwd | grep -E '[^a-zA-Z0-9_-]'3.3 登录历史分析
# 最近成功登录记录 last -n 20 # 检查/var/log/wtmp是否被清空(正常应有大量记录) ls -lh /var/log/wtmp发现可疑账户后的处理步骤:
- 记录账户信息(UID、GID、家目录等)
- 检查该用户的
.bash_history文件 - 检查用户crontab:
crontab -u 用户名 -l - 确认后删除账户:
userdel -r 用户名
4. 系统命令篡改检测
黑客常替换常用命令如ps、netstat来隐藏恶意进程。检测方法:
4.1 RPM包验证
# 验证系统关键命令是否被修改 rpm -Va | grep -E '^..5' # 检查特定命令(如ps) rpm -Vf /usr/bin/ps输出解读:
S.5....T. /usr/bin/ps- S:文件大小改变
- 5:MD5校验值改变
- T:修改时间改变
4.2 命令文件分析
对可疑命令进行深入检查:
# 查看命令真实路径 which ps # 检查文件属性 ls -l /usr/bin/ps # 查看文件内容(警惕脚本类命令) file /usr/bin/ps cat /usr/bin/ps典型后门ps脚本示例:
#!/bin/bash # 隐藏恶意进程的后门脚本 /hidden/.malware &> /dev/null & /bin/ps.orig $@ | grep -v "malware"4.3 恢复被篡改命令
从官方源重新安装:
yum reinstall procps-ng手动恢复:
# 查找备份文件(黑客可能保留原始命令) find / -name "ps.orig" -type f # 恢复命令 mv /usr/bin/ps.malware /usr/bin/ps
5. 恶意进程与定时任务排查
5.1 进程深度分析
# 完整进程树查看 pstree -apnh # 检查异常CPU占用 ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 205.2 定时任务检查
常见后门位置:
/var/spool/cron/* /etc/cron.*/* /etc/crontab检查命令:
# 查看系统所有定时任务 ls -la /etc/cron* /var/spool/cron # 检查root用户的crontab crontab -l5.3 启动项排查
# 检查系统启动项 ls -la /etc/rc.d/rc.local ls -la /etc/init.d/ # 检查当前运行级别服务 chkconfig --list | grep '3:on'6. 入侵后的系统加固建议
完成入侵处理后,应立即进行系统加固:
SSH安全增强:
# 修改SSH默认端口 sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config # 禁止root远程登录 sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config # 仅允许密钥认证 sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config防火墙配置:
# 仅开放必要端口 iptables -A INPUT -p tcp --dport 2222 -j ACCEPT iptables -A INPUT -j DROP系统更新与审计:
# 更新所有软件包 yum update -y # 安装审计工具 yum install audit -y systemctl start auditd systemctl enable auditd定期安全检查脚本:
#!/bin/bash # 每日安全检查脚本示例 echo "===== 安全检查报告 $(date) =====" echo "1. 特权账户检查:" awk -F: '$3==0 {print $1}' /etc/passwd echo "2. 最近登录:" last -n 10 echo "3. 网络连接:" netstat -antp | grep ESTAB
在处理完几十台被入侵的服务器后,我发现大部分入侵都始于弱密码或未修复的漏洞。建立日常安全检查机制,比事后应急响应重要得多。建议至少每周检查一次关键日志,并保持系统更新。
