教程
🛡️

网络安全

Web 安全、渗透测试、密码学与安全合规的系统化教程。

Linux 主机应急响应:账户、进程、网络与后门排查

拿到一台"疑似被黑"的 Linux,按什么顺序查?这篇给出可照做的实战清单:账户异常、可疑进程、异常网络连接、后门与持久化(cron/systemd/ssh 后门)、恶意文件定位,以及内存与磁盘取证要点。

· 更新于 2026-07-19 阅读量 --

前面讲了应急的总流程,这一篇落到具体的 Linux 主机。Linux 是服务器主力,也是攻击者最常落脚的地方。当你接到”这台机器可能中了挖矿/被控”的告警,按下面顺序查,基本能摸清”谁进来的、留下了什么、怎么持续控制的”。

所有排查命令仅用于你自有或已授权的主机。排查前先对磁盘/内存做快照或备份,保护现场再动手。

第一步:确认与保护现场

  • uptimewlast 看当前谁在线、最近谁登录过。
  • 对云主机先打快照;物理机用 dd 或取证工具做磁盘镜像。
  • 不要急着 kill 进程或删文件,先把可疑对象记下来、备份下来。

第二步:查账户异常(最常见入口)

弱口令/漏洞进来后,攻击者常新建账户或改 root

# 当前登录与会话
w
# 最近登录记录(看有无陌生 IP/时间)
last -a | head -20
lastb            # 失败登录(爆破痕迹)
# 检查可疑账户
awk -F: '($3==0){print $1}' /etc/passwd     # UID=0 的非 root 账户
awk -F: '($2==""){print $1}' /etc/shadow     # 空密码账户
# 看 sudoers 是否被加后门
cat /etc/sudoers /etc/sudoers.d/*

发现陌生 UID=0 账户、空密码、sudoers 被加 NOPASSWD,基本就是被留了后门账户。

第三步:查进程与资源异常

挖矿、木马通常吃 CPU/内存,从进程入手:

# 按 CPU 排序看异常进程
top -c -o %CPU
# 看进程对应的可执行文件路径(确认是不是伪装的)
ls -l /proc/<PID>/exe
# 看进程启动命令、环境变量
cat /proc/<PID>/cmdline | tr '\0' ' '
# 看进程打开的文件/网络
lsof -p <PID>

注意:攻击者常把恶意程序命名为 kworkersystemd-daemon 等系统进程名伪装。判断标准不是”名字像不像”,而是路径对不对——系统进程一般在 /usr/lib/lib/sbin,落在 /tmp/dev/shm/var/tmp 的大概率是恶意。

第四步:查网络连接

# 看所有 ESTABLISHED 连接与监听端口
ss -antup
netstat -antup      # 老系统
# 看哪个进程连了外网 C2
ss -antup | grep ESTAB
# 抓包看可疑外联(短暂)
tcpdump -i any -nn host <可疑IP> -w cap.pcap

重点看:有没有连向境外陌生 IP 的持久连接(C2 心跳)、有没有异常的监听端口(后门监听)。ss -antupup 能带出进程名,直接定位是哪个程序在连。

第五步:查持久化后门(最该清干净的地方)

攻击者要”下次还能进来”,会留持久化。Linux 常见位置逐个查:

# 计划任务(最常见)
crontab -l
ls -la /var/spool/cron/ /etc/cron* 
cat /etc/crontab
# systemd 服务后门
systemctl list-unit-files --type=service | grep enabled
ls -la /etc/systemd/system/ /lib/systemd/system/ | grep -iE "rand|sys|net|ssh"
# 开机启动脚本
ls -la /etc/rc.local /etc/init.d/
# SSH 后门:authorized_keys 被加公钥
cat /root/.ssh/authorized_keys ~/.ssh/authorized_keys
# 用户 profile 后门
cat /etc/profile /etc/bashrc ~/.bashrc ~/.profile
# 动态链接库预加载后门
cat /etc/ld.so.preload

cronsystemd 服务是最高频的持久化手法;ld.so.preload 是更隐蔽的”全局钩子”,一旦被写,所有程序启动都会加载恶意库,必须检查。

第六步:定位恶意文件

# 近期被修改的文件(排查窗口期)
find / -xdev -mtime -7 -type f 2>/dev/null
# 常见藏匿目录
ls -la /tmp /var/tmp /dev/shm
# 带 suid 的异常文件(提权后门)
find / -perm -4000 -type f 2>/dev/null
# 对可疑文件算哈希、查病毒库
sha256sum <>

把可疑文件哈希丢到 VirusTotal 等平台比对,能快速定性。注意别在受害机上直接运行可疑文件。

第七步:内存与磁盘取证(进阶)

  • 内存取证:用 avmlLiME 抓取内存镜像,再用 Volatility 分析进程、网络连接、注入的恶意代码——内存里的证据重启就没了,优先抓。
  • 磁盘镜像dd if=/dev/sda of=/evidence/sda.img 或云快照,后续在副本上慢慢分析。
  • 时间线:用 fls/mactime(The Sleuth Kit)重建文件访问/修改时间线,还原攻击顺序。

常见误区

  • 只看 top 不查路径:名字像 kworker 就放心,结果是 /tmp/kworker 的挖矿。
  • 只 kill 进程不删持久化:进程杀了,cron 每分钟又拉起来,永远清不掉。
  • 忘了查网络外联:光看本地进程,没发现它正连着 C2 持续接收指令。
  • 在受害机直接运行可疑样本:可能触发自毁或进一步感染,应在隔离沙箱分析。

进阶:一键信息收集脚本

应急时时间紧,可预先准备收集脚本,一次性导出账户、进程、网络、计划任务、启动项:

#!/bin/bash
mkdir -p /evidence/$(hostname)-$(date +%s)
D=/evidence/$(hostname)-*
{ w; last; lastb; } > $D/login.txt
ss -antup > $D/net.txt
ps auxf > $D/ps.txt
{ crontab -l; cat /etc/crontab; ls /etc/cron.*; } > $D/cron.txt
systemctl list-unit-files --type=service > $D/svc.txt

这套”证据包”既用于现场分析,也作为报告附件。

自测题

  1. 为什么排查时强调”先看路径、别只看进程名”?
  2. Linux 上攻击者最常用的两种持久化方式是什么?怎么查?
  3. ld.so.preload 为什么是高危后门?怎么发现?
  4. 内存取证为什么要在磁盘分析之前做?

实战要点与深度解析

Linux 应急里最考验功力的,是区分”真后门”和”误报”。新手看到 /tmp 里有个名字像系统的进程就慌着删,结果删的是某合法缓存程序,业务报错。判断标准永远回到”路径 + 行为 + 来源”三件套:路径是否在异常目录、行为是否在做网络连接/提权/读密、来源是否能对应到某次漏洞利用或弱口令爆破。三者吻合才动手,切忌”看着像就杀”。

再讲一个真实高频链:Redis 未授权访问 → 写 crontab 后门 → 挖矿。很多内网 Redis 绑了 0.0.0.0 且无密码,攻击者连上后直接用 CONFIG SET dir /var/spool/cron 把恶意 cron 写进去。排查时如果你只盯 top 看不到(因为进程名伪装),但去翻 /var/spool/cron~/.ssh/authorized_keys 就会发现痕迹。这说明:持久化文件的检查优先级,有时高于进程检查,因为进程可以瞬起瞬灭,落盘的文件却长期在。

关于 容器环境的特殊排查:现在大量业务跑在 Docker/K8s 里,攻击者可能突破容器拿到宿主机。排查时要分清”在容器里看”还是”在宿主机看”:容器内的 ps 只看到容器内进程,真正的恶意可能藏在宿主机的某个容器进程里。对应动作是到宿主机用 docker psdocker exec 进可疑容器,或直接查宿主机的进程树与挂载。容器让”主机边界”变模糊,应急时要先定位”我现在看的是哪一层”。

还有一个进阶但极有价值的动作:建立”正常基线”对照。平时就把”正常有哪些 systemd 服务、cron 有哪些、监听哪些端口”记下来,出事时一比对,异常项立刻浮现。这比”凭记忆判断”可靠得多,也是把应急从”救火”升级为”有参照的研判”的关键。

最后提醒一个时间纪律:不要在受害机上直接编译/运行取证工具。很多应急人员图快,在受害机上 gcc 编译个工具,结果把编译产物、临时文件留在了现场,污染了证据,甚至触发了攻击者埋的自毁逻辑。取证工具应提前准备好、从干净介质挂载使用,或直接在内存/磁盘镜像的副本上分析。

进阶速记与误区辨析

Linux 应急里有几组特别容易让人误判的情况,专门辨析一下,帮你关键时刻不慌。

第一组,进程名可信与路径可信。很多人看到进程名是系统常见的名字就放心,却不去看它实际跑在哪个路径。真正的判断标准是路径对不对,而不是名字像不像。落在临时目录里的同名进程,十有八九是伪装的恶意程序。

第二组,杀进程与清后门。只把看到的恶意进程杀掉,却没去清掉拉起它的计划任务或者服务,结果每分钟又被重新拉起来,永远清不干净。处置一定要顺着进程找到它的持久化源头,把源头一起处理掉才算完。

第三组,本机排查与镜像取证。在受害机器上直接运行各种工具,可能污染现场,也可能触发攻击者埋下的自毁逻辑。正确的顺序是先对磁盘或者内存做镜像或者快照,再在副本上慢慢分析,本机尽量少动。

第四组,单点处置与全网排查。只盯着这一台失陷的主机,却忘了攻击者大概率已经横向移动到了别的机器。单台清完,过两天又从别的地方打回来。所以处置要顺带用提取到的线索在全网搜一遍同类失陷。

最后送一句速记:先看路径别看名、杀进程要清源头、取证优先做镜像、单台清完查全网。四句话对应四个最容易翻车的地方,应急时默念一遍能少走很多弯路。

现场速查清单

把 Linux 主机应急的高频动作浓缩成一份上机就能用的清单,事件发生时不慌:先看谁在线、最近谁登录;再查异常账户与空口令;接着按资源排序看进程并核对真实路径;然后看网络连接找外联;再逐一审计划任务、系统服务、启动项、公钥与预加载;最后定位近期修改的异常文件并优先做内存与磁盘镜像。每一步都记住先保护现场再动手,不急着杀进程删文件,把证据留足再清理。这份清单配合前面各节,足以覆盖绝大多数 Linux 主机被控的排查场景。

这一篇你该记住的

  • 先保护现场(快照/备份),再排查,不急着 kill/删。
  • 账户:查 UID=0 非 root、空密码、sudoers 后门。
  • 进程:按资源排序 + 看真实路径,伪装名常落 /tmp/dev/shm
  • 网络:ss -antup 找外联 C2 与异常监听。
  • 持久化必查:cron、systemd 服务、rc.local、authorized_keys、profile、ld.so.preload
  • 文件:近期修改、/tmp 等藏匿目录、suid 异常;内存取证优先于磁盘。

下一篇我们看 Windows 主机应急响应,思路相通但手法不同。