一、发现入侵时的第一反应

当你发现服务器CPU突然飙高或者收到异常登录提醒时,千万别急着重启。我有次遇到个案例,某电商平台凌晨3点报警,运维直接重启服务器,结果把犯罪现场破坏得一干二净。正确的做法是立即执行:

# 记录当前系统状态(技术栈:Linux命令)
$ top -b -n 1 > /tmp/system_status.log  # 保存进程快照
$ netstat -tulnp > /tmp/network_connections.log  # 记录网络连接
$ last -a > /tmp/login_history.log  # 查看登录历史

这时候要像保护案发现场一样保持现状。曾经有家金融公司被入侵后,管理员第一反应是查日志,结果入侵者设置的定时任务把日志全清空了,导致后续溯源异常困难。

二、关键证据保全技巧

取证就像刑事侦查,必须保证证据链完整。我推荐使用dd命令做内存快照:

# 创建内存转储(技术栈:Linux系统管理)
$ dd if=/dev/mem of=/tmp/mem.dump bs=1M count=1024  # 转储前1GB内存
$ cp /var/log/{secure,messages} /evidence/  # 复制关键日志
$ tar czvf /tmp/forensics_$(date +%Y%m%d).tar.gz /etc/passwd /etc/shadow  # 打包账户文件

特别注意:一定要把证据存到外部存储!有次某游戏公司取证时,入侵者远程删除了所有取证文件,就是因为管理员把证据存在了被入侵的服务器上。

三、入侵痕迹分析方法

分析日志就像侦探破案,要关注这些关键点:

# 分析示例(技术栈:Shell脚本)
$ awk '/Failed password/{print $11}' /var/log/secure | sort | uniq -c | sort -nr  # 统计暴力破解来源
$ grep -E 'Accepted password|Accepted publickey' /var/log/secure | awk '{print $11}' | sort -u  # 列出成功登录IP
$ find / -type f -mtime -3 -exec ls -la {} \; 2>/dev/null | grep -vE "/proc|/sys"  # 查找三天内修改的文件

去年有个典型案例,攻击者通过某CMS漏洞上传了web shell,我们就是通过查找最近修改的.php文件定位到了恶意脚本:

$ find /var/www/html -name "*.php" -mtime -1  # 查找24小时内修改的PHP文件

四、常见入侵场景应对

  1. 挖矿病毒处理
# 清理挖矿进程(技术栈:进程管理)
$ ps aux | grep -E 'xmr|minerd' | awk '{print $2}' | xargs kill -9  # 终止挖矿进程
$ crontab -l | grep -vE "monero|minexmr" | crontab -  # 清理恶意定时任务
  1. 后门账户检测
# 检测异常账户(技术栈:账户审计)
$ awk -F: '($3 == 0) {print $1}' /etc/passwd  # 查找特权账户
$ grep -E ':0|/bin/bash' /etc/passwd  # 查找可登录账户
  1. Web Shell查找
# 查找可疑Web文件(技术栈:文件分析)
$ find /var/www -name "*.php" -exec grep -l "eval(base64_decode" {} \;  # 查找编码后门

五、系统恢复与加固

清理完恶意程序后,重建系统就像给房子换锁:

# 系统加固示例(技术栈:安全配置)
$ passwd -l root  # 禁止root直接登录
$ iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT  # 限制SSH访问
$ chattr +i /etc/passwd /etc/shadow  # 防止账户文件被修改

记得去年有家公司被入侵七次,就是因为每次只清除病毒不修补漏洞。后来我们帮他们做了以下加固:

$ yum update --security  # 只安装安全更新
$ setenforce 1  # 启用SELinux
$ systemctl disable postfix  # 关闭不必要服务

六、溯源分析的进阶技巧

真正的溯源就像拼图游戏,需要多维度证据:

# 网络层溯源(技术栈:网络取证)
$ tcpdump -i eth0 -w /tmp/packet.pcap  # 抓取网络流量
$ journalctl -u sshd --since "2023-01-01" --until "2023-01-02"  # 查询特定时间段日志

有个经典案例是通过分析.bash_history找到了攻击路径:

$ cat ~/.bash_history | grep -E 'wget|curl|chmod'  # 查找可疑命令

七、预防胜于治疗

最后分享几个实用监控脚本:

# 文件完整性监控(技术栈:Shell监控)
#!/bin/bash
MD5_STORE="/var/.file_md5"
find /etc -type f -exec md5sum {} \; > $MD5_STORE
while true; do
    if ! md5sum -c $MD5_STORE &>/dev/null; then
        echo "系统文件被修改!" | mail -s "安全警报" admin@example.com
    fi
    sleep 3600
done

还有这个异常登录监控:

# 登录监控脚本(技术栈:日志分析)
tail -f /var/log/secure | awk '/Invalid user/{print $10}' | while read ip; do
    iptables -A INPUT -s $ip -j DROP
    echo "已封锁恶意IP: $ip" >> /var/log/security.log
done