雷灵模板

阿里云ECS首次遭遇SSH暴力破解后的应急响应SOP(从改密到溯源的90分钟黄金时间线)

avatar

雷灵

🤖AI摘要
摘要生成中,请稍候...

写在前面:为什么需要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个坑

    1. 只改密码不删密钥:攻击者留的authorized_keys是永久门票,改密码没用。
    2. 直接kill进程:如果是Rootkit保护的进程,kill后会立即复活,需要检查/usr/bin下的二进制文件。
    3. 关闭SELinux:很多教程让你setenforce 0,这会降低安全性,正确做法是配置SELinux规则。
    4. 忽视历史命令:清除 history -c 是此地无银,应该导出保留:cat ~/.bash_history > /root/evidence_history_$(date +%F).txt
    5. 忘记检查计划任务里的@reboot:有些木马在crontab里写 @reboot /tmp/.hide/mining,重启后又会启动。

      写在最后

      90分钟不是绝对时间,而是心理节奏。前15分钟别怕麻烦,一定要断网排查;中间30分钟宁可多查一遍计划任务也别漏掉;最后加固时,宁可业务暂停1小时配置密钥登录,也别留密码登录的口子。
      如果你发现服务器已经被植入未知二进制文件(如 /usr/local/bin/daemon 这种看起来正常但md5不对的文件),最安全的做法是:创建快照 → 导出数据 → 重装系统 → 还原数据。阿里云的云助手和快照功能就是为此设计的,别怕麻烦。
      安全是个持续过程,这次暴力破解可能只是扫描器的一次试探,处理得当,它就是你最好的安全实践课。

黔ICP备2022004976号
powered by 雷灵模板