ECS 安全加固与入侵排查实战:一次「凭据窃取」告警的完整处理
ECS 安全加固与入侵排查实战记录
记录一次阿里云「异常登录 / 凭据窃取」告警的完整排查与加固过程
记录时间:2026-10-31
服务器:阿里云 ECS(Ubuntu 22.04)
一、告警来了
阿里云云安全中心推送了两条告警:
ECS 在非常用地登录
异常登录:凭据窃取
看到这种告警,第一反应应该是先排查有没有被攻破,而不是急着改配置。
二、入侵排查(6 项检查)
检查 1:当前登录会话
who
ps aux | grep '[s]shd.*@'
判断标准:有没有你不认识的 IP 正在连接。
检查 2:最近登录成功记录
last -n 30 -F
看两个关键点:
登录 IP 是否都是自己的
认证方式是否为
publickey(公钥)而非password
本次结果:
root pts/1 115.230.32.76 10-29 14:00 - 21:13
root pts/1 211.90.235.252 10-29 11:18 - 12:02 ← 异地,但确认是自己的网络
检查 3:登录失败记录(暴力破解痕迹)
lastb -n 20 -F
# 或从 auth.log 统计失败次数最多的 IP
grep 'Failed password' /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head
本次发现了 6 个 IP 在尝试爆破:
218.28.78.67 尝试 admin / debian
154.18.197.29 尝试 root
221.194.148.34 尝试 root
139.19.117.130 尝试 admin
64.62.197.68 尝试空用户名
检查 4:SSH 授权密钥是否被篡改
cat /root/.ssh/authorized_keys
find /home /root -name 'authorized_keys' 2>/dev/null
关键:只应该有你自己的密钥。如果出现陌生密钥 = 已被入侵。
本次结果:只有 1 把 my-aliyun 密钥,正常。
检查 5:可疑进程(挖矿/后门特征)
# 按 CPU 排序看异常高占用
ps aux --sort=-%cpu | head -10
# 检查常见挖矿木马进程名
ps aux | grep -iE 'kdevtmpfsi|kinsing|minerd|xmrig|masscan|zmap' | grep -v grep
本次结果:无典型挖矿进程。
检查 6:对外网络连接
ss -tunp
看有没有连接到陌生 IP(尤其是矿池、C2 服务器)。
本次结果:
100.100.30.26:80 → AliYunDun(阿里云监控,正常)
100.100.45.182:443 → hbrclient(阿里云备份,正常)
115.230.32.76:22 → 自己的 SSH 会话
检查 7:定时任务(后门常用藏身处)
crontab -l
ls -la /etc/cron.d/
systemctl list-timers --all
本次结果:只有自己的备份脚本,干净。
三、排查结论
✅ 无入侵痕迹
· 所有登录都是自己的 IP + 公钥
· 无陌生密钥
· 无挖矿/后门进程
· 无异常外联
· 定时任务干净
⚠️ 但发现真实高危配置
· PermitRootLogin yes
· PasswordAuthentication yes
· 且正在被暴力破解(6 个 IP 尝试)
"非常用地登录"的真相:自己从手机热点/公司网络登录过,触发了异地告警。
"凭据窃取"的真相:大量暴力破解尝试,触发了凭据窃取检测规则。
四、SSH 加固
备份配置(重要!)
cp /etc/ssh/sshd_config /root/sshd_config.bak.$(date +%Y%m%d-%H%M%S)
修改配置
# 1) 禁用密码登录,只允许公钥
sed -i 's/^PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
# 2) root 仅允许公钥登录(禁止密码)
sed -i 's/^PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
# 3) 确保公钥认证开启
sed -i 's/^PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
# 4) 限制认证尝试次数
sed -i 's/^MaxAuthTries.*/MaxAuthTries 3/' /etc/ssh/sshd_config
# 5) 禁用空密码
echo 'PermitEmptyPasswords no' >> /etc/ssh/sshd_config
# 6) 关闭 X11 转发(减少攻击面)
echo 'X11Forwarding no' >> /etc/ssh/sshd_config
语法检查(关键步骤!)
sshd -t
这一步不能省。配置写错会导致 SSH 起不来,直接把自己锁在服务器外面。
重载服务
systemctl reload sshd
用 reload 而不是 restart,当前会话不会断开。
验证
# 尝试密码登录(应该被拒绝)
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@127.0.0.1
# 预期输出
root@127.0.0.1: Permission denied (publickey).
五、安装 fail2ban 自动封禁
安装
apt-get install -y fail2ban
配置 /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
banaction = iptables-multiport
backend = systemd
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
maxretry = 3
bantime = 7200
findtime = 600
启动
systemctl enable fail2ban
systemctl restart fail2ban
查看状态
fail2ban-client status sshd
输出:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
|- Actions
|- Currently banned: 0
|- Banned IP list:
六、内存优化(顺手做的)
排查时发现两个"无用但吃内存"的服务:
1. fwupd(固件更新守护进程)—— 占 140MB
云服务器完全不需要(那是给物理机更新 BIOS 用的)。
systemctl stop fwupd
systemctl disable fwupd
systemctl mask fwupd
省 140MB,零风险。
2. 阿里云 aegis(云盾)—— 占 37MB
尝试关闭失败:
systemctl disable aegis → Access denied
pkill -9 → 进程被内核模块重启
原因:AliSecGuard 是内核模块(lsmod | grep AliSecGuard 可见),由内核层守护,用户态无法关闭。
结论:37MB 不到总内存 2%,且是安全防护,建议保留。真要关需去阿里云控制台卸载客户端。
优化效果
七、经验总结
1. 看到安全告警先排查,别慌
异地登录很可能是自己换了网络(手机热点、公司 WiFi、VPN)。先看 last 和 auth.log,确认 IP 和认证方式。
2. 密码登录是最大的风险
云服务器暴露在公网,24 小时被爆破是常态。只用公钥登录能彻底消除这个风险——攻击者没有你的私钥文件,爆破再多次也没用。
3. 改 SSH 配置必须三步走
备份 → 改配置 → sshd -t 语法检查 → reload
跳过语法检查 = 可能把自己锁在门外,只能去阿里云控制台用 VNC 救场。
4. fail2ban 是低成本高收益
3 行配置就能自动封禁爆破 IP,减少日志噪音,还能降低被爆破成功的概率。
5. 云服务器上的"无用服务"
fwupd:固件更新,云服务器不需要snapd:如果不用 snap 包,可以关multipathd:如果不是多路径存储,可以关
6. 内存百分比要看清楚是"占什么"的比例
Docker/1Panel 显示的 MEM% 是占容器上限的比例,不是占物理内存。看到 22% 别慌,换算一下可能只有 3%。
八、最终状态
SSH 安全:
PasswordAuthentication no (仅公钥)
PermitRootLogin prohibit-password
MaxAuthTries 3
fail2ban: active(失败3次封禁2小时)
系统优化:
fwupd: inactive / masked(省 140MB)
内存: 629MB 已用 / 911MB 可用(35%)
入侵排查结论:
✅ 无入侵痕迹
✅ 所有登录可追溯
✅ 无后门/挖矿进程
附:常用排查命令速查
# 登录相关
last -n 20 -F # 成功登录
lastb -n 20 -F # 失败登录
who # 当前会话
grep 'Accepted' /var/log/auth.log # 认证成功日志
grep 'Failed' /var/log/auth.log # 认证失败日志
# 进程相关
ps aux --sort=-%cpu | head # CPU TOP
ps aux --sort=-rss | head # 内存 TOP
lsmod | grep -iE 'aegis|ali' # 内核模块
# 网络相关
ss -tunp # 所有连接
netstat -tunp # 同上
# 后门排查
crontab -l # root 定时任务
ls -la /etc/cron.d/ # 系统定时任务
systemctl list-timers --all # systemd 定时器
cat /root/.ssh/authorized_keys # 授权密钥
find / -name 'authorized_keys' 2>/dev/null # 所有用户的密钥
# fail2ban 管理
fail2ban-client status # 总览
fail2ban-client status sshd # SSH 详情
fail2ban-client set sshd unbanip x.x.x.x # 解封