1. 应急响应实战:服务器被入侵后的处置步骤
最近帮朋友处理了一台被入侵的生产服务器,整个过程堪称教科书级别的应急响应案例。作为刚转行安全运维的新人,这种实战经验比看十本教材都管用。下面我就把这次处置的完整流程和关键要点整理出来,特别适合想入行安全运维的朋友参考。
2. 入侵迹象识别与初步响应
2.1 常见入侵迹象排查
当服务器出现以下症状时,就要高度警惕是否被入侵:
- CPU/内存异常占用(特别是非业务进程)
- 出现陌生用户账号或异常登录记录
- 关键系统文件被修改(如/etc/passwd、/etc/shadow)
- 异常网络连接(特别是对外发起的连接)
- 计划任务被篡改
这次案例中最明显的迹象是:
- 服务器负载突然飙升到15+(正常值应<3)
- 发现名为"backdoor"的陌生用户
- 出现大量到境外IP的异常外联
2.2 黄金响应时间窗
发现入侵后的前30分钟是处置的黄金时间:
- 立即断开外网(但保留内网访问以便排查)
- 保存当前所有登录会话信息(who、w、last等命令输出)
- 记录所有正在运行的进程(ps auxf)
- 抓取当前网络连接状态(netstat -antp)
重要提示:不要立即重启服务器!这会导致内存中的攻击痕迹丢失。
3. 入侵取证与影响评估
3.1 系统快照保存
取证的第一步是保存系统当前状态:
bash复制# 保存进程树
ps auxf > /tmp/process_snapshot.txt
# 保存网络连接
netstat -tulnp > /tmp/network_snapshot.txt
# 保存登录历史
last > /tmp/login_history.txt
# 保存所有打开的文件
lsof > /tmp/open_files.txt
3.2 恶意文件分析
通过以下方法定位可疑文件:
- 查找最近修改的系统文件:
bash复制find / -mtime -3 -type f -exec ls -la {} \; | grep -v "/proc/"
- 检查隐藏目录:
bash复制ls -la / | grep "^\."
- 查找可疑的ELF文件:
bash复制find / -type f -exec file {} \; | grep "ELF"
3.3 入侵路径分析
常见入侵途径排查:
- 检查SSH日志:
bash复制grep "Failed password" /var/log/auth.log
grep "Accepted password" /var/log/auth.log
- 检查Web访问日志:
bash复制tail -n 100 /var/log/nginx/access.log | grep -E "union|select|eval\(|base64"
- 检查计划任务:
bash复制crontab -l
ls -la /etc/cron*
4. 入侵处置与系统恢复
4.1 立即止损措施
- 隔离受影响系统:
bash复制iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
- 重置所有用户密码:
bash复制for user in $(cut -d: -f1 /etc/passwd); do
if [ -x "$(which chpasswd)" ]; then
echo "$user:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)" | chpasswd
fi
done
- 撤销可疑SSH密钥:
bash复制rm -f /root/.ssh/authorized_keys
rm -f /home/*/.ssh/authorized_keys
4.2 后门清除步骤
- 检查动态链接库劫持:
bash复制ldd $(which sshd)
- 检查内核模块:
bash复制lsmod
- 检查sudoers文件:
bash复制visudo -c
- 检查环境变量:
bash复制env | grep -i "ld_preload\|ld_library"
4.3 系统重建建议
对于已被入侵的服务器,建议:
- 备份必要业务数据(确保数据未被污染)
- 全盘格式化后重装系统
- 恢复数据前进行安全扫描
- 更新所有软件到最新版本
5. 安全加固与防护措施
5.1 基础安全配置
- SSH加固:
bash复制sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
echo "AllowUsers admin" >> /etc/ssh/sshd_config
systemctl restart sshd
- 防火墙配置:
bash复制iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j DROP
5.2 入侵检测系统部署
- 安装OSSEC:
bash复制wget -q -O - https://updates.atomicorp.com/installers/atomic | sudo bash
sudo apt-get install ossec-hids-server
- 配置关键目录监控:
bash复制<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/var/www</directories>
5.3 定期安全检查清单
建议每周执行的安全检查:
- 用户账号审计:
bash复制awk -F: '($3 == 0) {print}' /etc/passwd
- SUID文件检查:
bash复制find / -perm -4000 -type f -exec ls -la {} \; 2>/dev/null
- 计划任务审计:
bash复制ls -la /etc/cron* /var/spool/cron/crontabs/
6. 常见问题与排查技巧
6.1 如何判断是否彻底清除后门?
验证步骤:
- 对比关键系统文件哈希值:
bash复制rpm -Va # 对于RPM系统
debsums -a # 对于Debian系统
- 检查网络异常:
bash复制ss -tulnp | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}"
- 监控系统调用:
bash复制strace -f -p <pid>
6.2 入侵溯源技巧
- 通过时间线分析:
bash复制find / -type f -mtime -1 -exec ls -la {} \; | sort -k6,7
- 分析已删除文件:
bash复制lsof | grep deleted
- 恢复bash历史:
bash复制cat /home/*/.bash_history
6.3 应急响应工具包准备
建议常备的应急响应工具:
- 静态编译的busybox
- chkrootkit/rkhunter
- LiME(内存取证工具)
- 干净的ps、netstat等工具
把这些工具提前放在只读介质中,避免依赖被入侵系统的命令。