服务器入侵的常见信号与初判
服务器被入侵后,攻击者通常会在系统上留下可观测的痕迹。运维人员在日常巡检中需要关注以下信号:异常网络连接、未授权用户、可疑定时任务、资源占用突增。任何一项出现异常,都应启动排查流程,而不是简单重启了事。
排查的优先级顺序:网络连接 → 进程树 → 用户与权限 → 定时任务与启动项 → 文件系统变更。这个顺序的逻辑是:先确认攻击者是否在线,再确认持久化手段,最后确认影响范围。
网络连接排查:揪出异常外连
第一步是检查当前所有网络连接,重点关注ESTABLISHED状态的外连:
# 查看所有TCP连接,按状态分组
ss -tunap | grep ESTAB
# 查看监听端口(可能是后门)
ss -tlnp
# 统计每个远程IP的连接数,发现异常外连目标
ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
# 用lsof查看进程打开的网络文件
lsof -i -n -P | grep TCP
发现异常IP后,先查归属地。如果连接到已知的C2服务器IP段(可通过威胁情报平台验证),基本可以确认入侵。此时不要立即断开连接,而是记录连接信息后用iptables阻断,同时保留攻击者的会话用于取证。
进程树分析:找到恶意进程链
攻击者常用的手法是将恶意进程伪装成系统服务,或从Web进程派生子进程:
# 查看完整进程树,关注异常父子关系
ps auxfww
# 查找无终端的进程(守护进程类的可疑项)
ps -eo pid,ppid,tty,cmd | grep '?'
# 检查进程的可执行文件是否被替换
rpm -Va --noconfig 2>/dev/null | grep '^..5'
dpkg --verify 2>/dev/null | grep '??5'
# 查看进程打开的可疑文件
ls -la /proc/[PID]/exe
ls -la /proc/[PID]/cwd
cat /proc/[PID]/cmdline | tr '\0' ' '
重点排查:从www-data或nobody用户派生的bash/sh进程、名为[kworker]但不在正常路径的进程、CPU或内存占用异常但命令行参数为空的进程。挖矿木马最典型的表现就是CPU满载,进程名伪装成系统内核线程。
用户与权限检查:后门账户识别
攻击者通常会创建后门账户或提权现有账户:
# 检查UID为0的账户(root权限账户)
awk -F: '$3 == 0 {print $1}' /etc/passwd
# 检查有shell登录权限的账户
grep -v '/sbin/nologin\|/bin/false' /etc/passwd | grep -v '^#'
# 检查sudo权限用户
grep -v '^#' /etc/sudoers /etc/sudoers.d/* 2>/dev/null
# 检查SSH授权密钥
find / -name authorized_keys -exec ls -la {} \; -exec cat {} \; 2>/dev/null
# 查看最近登录记录
last -20
lastb -20 # 失败的登录尝试
# 检查当前登录用户
w
who
排查重点:非运维人员UID为0的账户、陌生SSH公钥、空密码账户。SSH密钥是最隐蔽的后门形式,攻击者添加后即使修改密码也无法阻止其登录。
定时任务与启动项:清除持久化后门
持久化是攻击者保持据点的核心手段,排查时不能只看crontab:
# 系统级定时任务
cat /etc/crontab
ls -la /etc/cron.*
cat /etc/cron.d/*
# 用户级定时任务(遍历所有用户)
for user in $(cut -f1 -d: /etc/passwd); do
echo "=== $user ==="
crontab -u $user -l 2>/dev/null
sudo crontab -u $user -l 2>/dev/null
done
# Systemd定时器
systemctl list-timers --all
# Systemd服务(恶意服务常在此注册)
systemctl list-unit-files --state=enabled
find /etc/systemd /usr/lib/systemd -name '*.service' -newer /etc/hostname
# 启动脚本
ls -la /etc/rc.local /etc/init.d/
cat /etc/profile.d/*.sh 2>/dev/null
文件系统变更检测与证据保全
入侵排查的收尾工作是确认被篡改的文件和保存证据:
# 查找最近24小时内被修改的文件(排除/proc和/sys)
find / -mtime -1 -type f ! -path '/proc/*' ! -path '/sys/*' ! -path '/dev/*' \
2>/dev/null | head -50
# 查找隐藏文件
find / -name '.*' -type f 2>/dev/null | grep -v '/proc\|/sys\|/dev'
# 使用AIDE检查文件完整性(如果已部署)
aide --check
# 证据保全:打包关键日志和系统信息
tar czf /root/incident_evidence_$(date +%Y%m%d_%H%M%S).tar.gz \
/var/log/ \
/etc/passwd /etc/shadow /etc/sudoers \
/etc/ssh/ \
/etc/cron* \
/root/.bash_history /home/*/.bash_history \
/tmp/ /var/tmp/ /dev/shm/
入侵后的恢复与加固措施
完成排查并清除后门后,还需执行以下加固步骤:
1. 修改所有账户密码,轮换SSH密钥对
2. 修复入侵途径(补丁升级、关闭暴露端口、修复Web漏洞)
3. 配置自动安全更新:unattended-upgrades(Debian/Ubuntu)或yum-cron(CentOS/RHEL)
4. 部署文件完整性监控工具(AIDE或OSSEC)
5. 启用SSH强制密钥认证,禁用密码登录
6. 配置iptables默认DROP策略,仅放行必要端口
7. 部署fail2ban防止暴力破解
整个应急响应的核心原则:先隔离止损,再取证分析,最后修复加固。切忌未排查清楚就重装系统,那会丢失所有取证信息,也无法确认入侵途径,大概率会被再次入侵。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-ru-qin-jian-ce-yu-ying-ji-xiang-ying-cong-ke/