摘要: 本文系统梳理服务器被入侵后的应急响应排查思路,按 PDCERF 六阶段给出标准流程,并围绕账户、计划任务、进程三大持久化与活跃后门载体,分别给出 Linux 与 Windows 下的具体排查命令、危险信号识别方法及处置建议,帮助安全人员按"先易失后持久化、从外到内"的顺序快速定位并清除威胁。
个人认知有限,文中难免存在疏漏与冗余,如有不妥之处,欢迎大家交流指正,还望海涵。
一、应急响应基本流程
应急响应不是"上来就杀进程",而是按固定套路走,避免破坏现场、漏掉关键证据。业界通用 PDCERF 六阶段:
| 阶段 | 英文 | 核心动作 |
|---|---|---|
| 准备 | Preparation | 工具、预案、人员分工 |
| 检测 | Detection | 确认是否被入侵(告警、异常现象) |
| 遏制 | Containment | 隔离主机、断网,防止扩散,但先取证 |
| 根除 | Eradication | 清除后门、恶意文件、恶意账户 |
| 恢复 | Recovery | 恢复业务、修复漏洞、改密码 |
| 跟踪 | Follow-up | 复盘、写报告、加固 |
实战口诀(顺序很重要):
-
先看后动:取证/快照 → 记录时间 → 收集易失数据(进程、网络连接)→ 再动磁盘文件。
-
易失优先:内存/进程/网络连接会随重启消失,所以先采集这些,再查持久化的东西(账户、计划任务、服务、文件)。
-
从外到内:网络连接 → 进程 → 服务/计划任务 → 账户 → 文件/日志。
-
保存现场 :
ps、netstat等输出要导成文件并计算哈希,防止事后"我没动过"说不清。
补充:易失数据 指一关机/重启就没了的数据(进程、内存、网络连接);持久化指写进磁盘、重启后仍生效的后门手段(账户、计划任务、服务、自启动项),攻击者靠这些"稳住"权限。
二、账户排查
攻击者拿到权限后,第一件事常是创建/克隆账户留后门。排查目标:找可疑账户、异常高权限、隐藏账户。
2.1 Linux 排查
# 查看当前登录用户
who
# 查看所有用户的登录历史(从 /var/log/wtmp 读)
last
# 查看登录失败记录,可发现爆破(从 /var/log/btmp 读)
lastb
# 查看所有用户(重点关注 uid=0 的,正常只有 root 是 0)
cat /etc/passwd
# 说明:每行格式 = 用户名:x:uid:gid:描述:家目录:shell
# 攻击者常用 uid=0 伪造一个"看起来普通"的高权限账户
# 查看密码/账户锁定状态(只有 root 能看 /etc/shadow)
cat /etc/shadow
# 说明:每行第二个字段是加密密码,!! 或 * 表示该账户被锁定/无法登录
# 列出所有 uid=0 的账户(正常应只有 root)
awk -F: '($3==0){print $1}' /etc/passwd
# 查看哪些账户能免密 sudo(/etc/sudoers 或 /etc/sudoers.d/)
cat /etc/sudoers | grep -v '^#' | grep -v '^$'
# 检查 SSH 免密登录后门:有没有被塞入公钥
cat ~/.ssh/authorized_keys
cat /root/.ssh/authorized_keys
find / -name "authorized_keys" -type f 2>/dev/null
# 查看最近添加/修改的账户相关文件
ls -lt /etc/passwd /etc/shadow /etc/sudoers
2.2 Windows 排查
# 查看本地所有用户
net user
# 查看某个用户的详细信息(重点看"账户启用/禁用"、"本地组成员")
net user 用户名
# 查看管理员组成员(看有没有混进去的账户)
net localgroup administrators
# 列出所有用户及其状态(命令行,Win7+)
wmic useraccount get name,sid,status,disabled
# 查看当前登录会话(找可疑远程登录)
query user
为什么要这样做 :攻击者拿下服务器后的第一目标是"留后门"以便日后还能再进来,而账户是最稳的持久化手段------漏洞会被修复、进程会被杀掉,但**一个高权限账户或一条 SSH 公钥能一直保留访问权。**因此:
-
查
uid=0/ 管理员组:Linux 权限看 uid、Windows 看本地组,攻击者造"高权限马甲账户"等于给自己配了把万能钥匙,普通名字 + root 权限最隐蔽。 -
查
authorized_keys:SSH 公钥登录免密码,攻击者塞入自己公钥后能随时无感登录,且不改原密码、用户难察觉。 -
查 sudoers:sudo 免密项等于留了一条"普通用户 → root"的提权通道。
-
查
last/lastb/query user:还原攻击者何时、从哪个 IP 登录,判断是爆破还是正常访问。
2.3 关键要点
-
危险信号 :出现 uid=0 的陌生账户、
authorized_keys里有陌生公钥、管理员组里多出陌生用户、某个正常账户突然"最近登录"异常。 -
克隆/隐藏账户 (进阶):Windows 上攻击者会在注册表
SAM里把账户的F键值克隆,让net user看不到。遇到"删了又回来"的账户要怀疑注册表层面后门。 -
兜底动作 :确认被入侵后,改掉所有账户密码 、删除陌生账户、检查
authorized_keys和 sudoers。
三、计划任务排查
攻击者常用计划任务/定时任务做持久化,让恶意程序定时运行、或定时"复活"后门。
3.1 Linux 排查
# 查看 root 的 crontab(最常见后门位置)
crontab -l
# 查看所有用户的 crontab 文件
cat /var/spool/cron/* 2>/dev/null
cat /var/spool/cron/crontabs/* 2>/dev/null
# 系统级定时任务
cat /etc/crontab
ls -l /etc/cron.d/
ls -l /etc/cron.daily/
ls -l /etc/cron.hourly/
ls -l /etc/cron.weekly/
ls -l /etc/cron.monthly/
# 一次性定时任务 at(有的攻击者用 at 定时执行)
atq
# systemd 定时器(systemctl 计划的"定时版")
systemctl list-timers --all
# 查看 cron 日志,找执行痕迹
grep -i cron /var/log/cron 2>/dev/null
grep -i cron /var/log/syslog 2>/dev/null
补充:crontab 每行格式
分 时 日 月 周 命令。重点看命令指向的路径 是否可疑,如/tmp/xxx、/dev/shm/xxx、/var/tmp/xxx或随机字符串文件名。
3.2 Windows 排查
:: 列出所有计划任务(可加 /v 看详细)
schtasks /query /fo LIST /v
:: 只查指定任务
schtasks /query /tn "任务名" /v
图形界面:taskschd.msc 打开任务计划程序,逐条看"操作"里指向的程序路径。
为什么要这样做:计划任务的价值在于"定时 + 自动"。攻击者用它做两件事:
① 持久化------恶意进程被杀、服务被停后,下个周期任务会自动把它重新拉起来;
② 维持控制------定时反弹 shell、定时下载并执行新命令。所以排查核心是看任务执行的程序路径是否可疑(临时目录、随机名、异常时间)。
3.3 关键要点
-
危险信号 :计划任务执行的程序在临时目录(
/tmp、%TEMP%)、名字随机、执行时间异常(如凌晨)、或被反复修改。 -
排查重点 :先看最近修改时间
ls -lt,新出现的任务优先排查。 -
处置:删除可疑任务,并找到它执行的恶意文件一并删除,否则任务会"重建"。
四、进程排查
进程是"当前正在跑的东西",排查它能直接定位正在作恶的木马/挖矿/后门。
4.1 Linux 排查
# 查看所有进程(含 CPU/内存占用,排序看最占资源的)
ps aux
# 树状展示进程父子关系(后门常挂在合法进程下"装孙子")
pstree -p
# 实时动态查看
top
# 按名字找进程
ps -ef | grep 关键字
# 查看进程对应的可执行文件路径(关键!看它从哪来的)
ls -l /proc/<PID>/exe
ls -l /proc/<PID>/cwd # 进程当前工作目录
# 查看进程打开的文件/网络连接(后门常监听端口)
lsof -p <PID>
lsof -i # 所有网络相关进程
# 查看监听端口及对应进程
netstat -antlp
# 查看可疑进程的启动命令完整信息
cat /proc/<PID>/cmdline | tr '\0' ' '
4.2 Windows 排查
:: 列出所有进程
tasklist
:: 列出进程及其可执行文件路径(看是不是从临时目录启动)
wmic process get name,processid,executablepath,commandline
:: 查看监听端口对应的进程 PID
netstat -ano
:: 再用 PID 找进程
tasklist | findstr <PID>
图形界面:任务管理器(Ctrl+Shift+Esc);更推荐 Process Explorer(微软 Sysinternals),能看到进程的父进程、签名、加载的 DLL。
为什么要这样做:进程是"正在进行的犯罪现场",查它能直接让恶意程序现形并锁定它的真实文件:
-
看
/proc/<PID>/exe、cwd:进程名可以随意伪装(甚至叫sshd),但exe指向的真实可执行文件路径骗不了人,能确定恶意文件到底放哪、好去删除。 -
看
pstree父子关系:后门常挂在合法进程(Web 服务、系统进程)下面"装孙子",看父进程能发现"这个孩子不该有"。 -
看
lsof -i/netstat -antlp:把端口和进程一一对应,找到正在监听或外连的后门本体。
4.3 关键要点
-
危险信号 :进程从
/tmp、/dev/shm、%TEMP%等临时目录启动;进程名是随机字符串或伪装成系统进程(如sshd多一个空格);CPU 占用异常高(挖矿);父进程异常(如bash的父进程是nginx)。 -
挖矿特征 :进程名常为
kdevtmpfsi、kinsing、xmrig,或高 CPU 占用 + 大量外连。 -
处置 :记录 PID、可执行路径 → 先
kill或结束进程 → 找到并删除文件 → 再排查它是怎么被拉起来的(计划任务/服务/自启动),否则重启又回来。
本篇小结
排查顺序建议:先看网络连接/进程(易失)→ 再查计划任务/服务(持久化)→ 再查账户 → 最后翻文件与日志。