跳到主要内容

安全入侵应急响应

问题

安全团队检测到服务器疑似被入侵(异常进程、异常网络连接、文件被篡改),如何应急响应?

答案

应急响应流程

第一原则:先隔离,不要关机

关机会丢失内存中的取证信息(进程、网络连接)。先隔离网络,保留现场。

Step 1:遏制与隔离

# 1. 网络隔离(不要关机!)
# 方法 A:安全组/防火墙切断外部连接(保留内部管理网络)
# 方法 B:iptables 临时阻断
iptables -I OUTPUT -j DROP # 阻断所有出站
iptables -I OUTPUT -d 10.0.0.0/8 -j ACCEPT # 仅允许内网
iptables -I INPUT -s 10.0.1.100 -j ACCEPT # 允许管理机访问

# 2. 如果是 K8s Pod 被入侵
kubectl cordon <node> # 阻止新 Pod 调度
kubectl scale deployment <app> --replicas=0 # 停止受影响应用

Step 2:取证分析

# 1. 查看异常进程
ps auxf # 进程树
ls -la /proc/<pid>/exe # 查看进程可执行文件路径
cat /proc/<pid>/cmdline | tr '\0' ' ' # 查看完整命令行

# 2. 查看异常网络连接
ss -tlnp # 监听端口
ss -tnp # 已建立连接
netstat -anp | grep ESTABLISHED # 外部连接

# 3. 查看可疑文件
# 最近被修改的文件
find / -mtime -1 -type f -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null

# 查看 crontab(攻击者常用持久化手段)
crontab -l
ls -la /etc/cron*
cat /var/spool/cron/*

# 查看 SSH 授权密钥(攻击者可能添加自己的公钥)
cat ~/.ssh/authorized_keys
find / -name "authorized_keys" 2>/dev/null

# 4. 查看登录记录
last -20 # 最近登录
lastb -20 # 失败登录
grep "Accepted" /var/log/secure # SSH 成功登录
grep "Failed" /var/log/secure | tail -20 # SSH 失败登录

# 5. 查看系统日志
dmesg -T | tail -50
journalctl --since "24 hours ago" | grep -i "error\|fail\|denied"

# 6. 保存取证快照
# 导出内存(如果条件允许)
# 复制关键日志
tar czf /tmp/evidence-$(date +%Y%m%d).tar.gz \
/var/log/secure \
/var/log/messages \
/var/log/audit/audit.log \
/root/.bash_history

Step 3:判断入侵路径

入侵方式排查方法
SSH 暴力破解grep "Failed password" /var/log/secure
Web 漏洞利用查看 Web 日志中的异常请求
已知 CVE 漏洞检查软件版本是否有已知漏洞
供应链攻击检查最近安装/更新的软件包
内部泄露审计 VPN/跳板机日志

Step 4:清除与恢复

# 1. 杀死恶意进程
kill -9 <malicious_pid>

# 2. 删除恶意文件
rm -f /tmp/.hidden_miner
rm -f /var/spool/cron/root # 清除恶意定时任务

# 3. 清除后门
# 检查并清理 authorized_keys
# 检查并清理 .bashrc / .profile 中的可疑内容
# 检查 /etc/ld.so.preload(动态库劫持)

# 4. 更改所有密码
passwd root
# 更改数据库密码
# 更改 API Key / Token
# 撤销并重新发放 SSH 密钥

# 5. 严重情况:从干净备份重建服务器

Step 5:加固

# 1. 禁止 root SSH 登录
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd

# 2. 强制密钥登录
# PasswordAuthentication no

# 3. 安装入侵检测
# fail2ban 防暴力破解
yum install -y fail2ban
systemctl enable fail2ban

# 4. 启用审计
# auditd 记录关键文件变更
auditctl -w /etc/passwd -p wa -k password_change
auditctl -w /etc/shadow -p wa -k shadow_change

常见面试问题

Q1: 如何判断服务器是否被挖矿?

答案

  1. CPU 持续高负载top 看到未知进程占用大量 CPU
  2. 异常进程名:如 kdevtmpfsikinsingxmrig 或伪装成系统进程(名字相似但路径不对)
  3. 异常网络连接ss -tnp 看到连接到矿池 IP(通常是 stratum+tcp 协议,端口 3333/4444)
  4. 定时任务crontab -l 中有从远程下载执行脚本的条目
  5. 隐藏文件find /tmp /var/tmp -name ".*" -type f 查找隐藏的恶意文件

相关链接