阿里云ECS首次遭遇SSH暴力破解后的应急响应SOP(从改密到溯源的90分钟黄金时间线)
写在前面:为什么需要90分钟黄金法则
第一次遭遇SSH暴力破解得手时,大多数人的反应是:立刻改密码、重启服务器、祈祷没事。这很可能留下后门,让攻击者几天后卷土重来。
雷灵在2023年踩过这个坑——当时只是改了密码,没检查authorized_keys,结果一周后服务器成了矿机。真正的应急响应需要分阶段:前15分钟止血,中间30分钟清创,最后45分钟加固+溯源。以下是经过实战打磨的Checklist。
第一阶段:0-15分钟 紧急隔离与现状评估
核心原则:先断网分析,别急着改密码
攻击者可能正在通过你的服务器横向扫描,或者下载 payload。立即执行:
1.1 控制台层面断网(不要ssh登录后操作)
登录阿里云控制台 → ECS实例 → 本实例安全组 → 入方向规则 → 临时拒绝所有22端口入流量(或直接将实例从公网IP解绑)。这能防止攻击者在你操作时反删除痕迹。
1.2 单用户模式登录(避免打草惊蛇)
通过阿里云VNC远程连接(控制台提供,不经过SSH),用root登录。
检查当前在线用户:
who
w
如果看到陌生IP的 pts/0,立即踢掉:
pkill -9 -t pts/0
1.3 快速判断入侵程度
查看最近成功登录:
last | head -20
重点看:是否有非工作时间登录、陌生IP、异常用户名(如test、www、postgres)。
检查是否有异常进程占满CPU(挖矿特征):
top -c -n 1
ps aux --sort=-%cpu | head -10
决策点:如果发现未知用户(如hack、user123)或挖矿进程,进入第二阶段;如果只是暴力破解未遂但密码已泄露,跳到第三阶段。
第二阶段:15-45分钟 深度排查与痕迹固定
目标:找到后门,留存证据
2.1 审计SSH暴力破解痕迹
查看认证失败记录(CentOS/RHEL):
lastb | head -50
Ubuntu/Debian查看:
cat /var/log/auth.log | grep "Failed password" | tail -50
统计攻击源IP TOP 10:
lastb | awk '{print $3}' | sort | uniq -c | sort -nr | head -10
2.2 检查系统账号后门
查看是否有新增用户:
cat /etc/passwd | grep "/bin/bash"
awk -F: '$3>=1000{print $1}' /etc/passwd # 查看UID>=1000的用户
重点检查是否有 UID=0 的隐藏用户:
awk -F: '$3==0{print $1}' /etc/passwd
2.3 SSH密钥后门检查(最容易被忽略)
攻击者通常不会改密码,而是写入公钥:
cat ~/.ssh/authorized_keys
cat /home/*/.ssh/authorized_keys 2>/dev/null
排查是否有 unkonw_key,如果有,记录指纹后删除:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2.4 计划任务与启动项清剿
查看系统级定时任务:
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
用户级定时任务(每个用户都要查):
for user in $(cat /etc/passwd | cut -f1 -d:); do echo $user; crontab -u $user -l 2>/dev/null; done
检查systemd后门:
systemctl list-units --type=service --state=running | grep -v "running"
ls -la /etc/systemd/system/
2.5 网络连接与异常文件
查看当前建立连接的IP:
netstat -antup | grep ESTABLISHED
ss -tulnp
查找最近24小时修改的关键目录文件:
find /etc /usr/bin /usr/sbin /root -mtime -1 -type f 2>/dev/null
检查环境变量篡改(常见后门):
echo $PATH
cat /etc/profile | grep export
cat ~/.bashrc | grep -v "^#" | grep -v "^$"
第三阶段:45-75分钟 加固与密钥重塑
目标:让原有攻击路径失效
3.1 密码重置(现在才做)
如果确认系统二进制文件未被替换(可对比md5sum),修改root密码:
passwd root
注意:如果系统已被植入rootkit,此时改密码会被记录,建议先完成3.3的防火墙配置。
3.2 SSH服务加固 checklist
编辑 /etc/ssh/sshd_config:
# 禁用root密码登录(只用密钥)
PermitRootLogin prohibit-password
# 禁用密码认证,仅允许密钥(如果业务允许)
PasswordAuthentication no
# 或者限制为仅特定用户
AllowUsers yourname@1.2.3.4
# 修改默认端口(掩人耳目)
Port 51234
# 禁止空密码
PermitEmptyPasswords no
# 限制最大尝试次数(配合fail2ban前临时方案)
MaxAuthTries 3
重启SSHD:
systemctl restart sshd
3.3 阿里云安全组与白名单
在阿里云控制台配置安全组:
- 删除0.0.0.0/0对22的允许
- 添加公司IP/家的IP段(如 123.45.67.89/32)
- 上线后临时方案:如果需要开放公网访问,配置仅允许密钥且开启登录失败通知
3.4 安装Fail2ban(自动封禁)
安装并配置(CentOS示例):
yum install epel-release -y yum install fail2ban -y配置
/etc/fail2ban/jail.local:[sshd] enabled = true port = 51234 # 你修改后的端口 filter = sshd logpath = /var/log/secure maxretry = 3 findtime = 600 bantime = 3600 action = iptables[name=SSH, port=51234, protocol=tcp]启动:
systemctl enable fail2ban systemctl start fail2ban查看封禁状态:
fail2ban-client status sshd
第四阶段:75-90分钟 溯源分析与监控部署
目标:搞清楚怎么进来的,防止二次伤害
4.1 攻击路径还原
如果找到了攻击IP(如lastb中的高频IP),查一下归属:
curl ipinfo.io/攻击者IP检查/var/log/secure中该IP首次出现时间,对比你的密码修改记录,判断是撞库还是弱口令。
常见突破口溯源: - 检查是否有WordPress/Jenkins等Web应用漏洞(如果是通过Web漏洞提权)
- 检查Redis/MongoDB等未授权访问(Internal Server Error日志)
4.2 部署持久化监控
在
/etc/profile底部添加登录通知(发送到你的邮箱或钉钉):echo "ALERT: Root Shell Access ($(whoami)) on $(date) from $(who | awk '{print $5}' | cut -d'(' -f2 | cut -d')' -f1)" | mail -s "ECS Login Alert" your-email@domain.com或者使用脚本监控 authorized_keys 变更:
#!/bin/bash FILE="/root/.ssh/authorized_keys" CHECKSUM=$(md5sum $FILE | awk '{print $1}') LAST_CHECK="/var/log/ssh_key_checksum" if [ -f $LAST_CHECK ]; then if [ "$CHECKSUM" != "$(cat $LAST_CHECK)" ]; then echo "SSH Key changed!" | mail -s "CRITICAL: ECS Key Modified" admin@domain.com fi fi echo $CHECKSUM > $LAST_CHECK加入crontab每5分钟执行一次。
4.3 快照与备份策略
立即创建快照:阿里云控制台 → 云盘 → 创建快照(保留现场证据)。
检查自动快照策略是否覆盖系统盘,如果没有,设置每日自动快照,保留7天。附录:新手最容易踩的5个坑
- 只改密码不删密钥:攻击者留的authorized_keys是永久门票,改密码没用。
- 直接kill进程:如果是Rootkit保护的进程,kill后会立即复活,需要检查/usr/bin下的二进制文件。
- 关闭SELinux:很多教程让你setenforce 0,这会降低安全性,正确做法是配置SELinux规则。
- 忽视历史命令:清除
history -c是此地无银,应该导出保留:cat ~/.bash_history > /root/evidence_history_$(date +%F).txt。 -
忘记检查计划任务里的@reboot:有些木马在crontab里写
@reboot /tmp/.hide/mining,重启后又会启动。写在最后
90分钟不是绝对时间,而是心理节奏。前15分钟别怕麻烦,一定要断网排查;中间30分钟宁可多查一遍计划任务也别漏掉;最后加固时,宁可业务暂停1小时配置密钥登录,也别留密码登录的口子。
如果你发现服务器已经被植入未知二进制文件(如/usr/local/bin/daemon这种看起来正常但md5不对的文件),最安全的做法是:创建快照 → 导出数据 → 重装系统 → 还原数据。阿里云的云助手和快照功能就是为此设计的,别怕麻烦。
安全是个持续过程,这次暴力破解可能只是扫描器的一次试探,处理得当,它就是你最好的安全实践课。
