Linux安全事件应急响应:一小时内的排查与处置实战指南
1. 应急响应的整体思路先做什么、为什么是这些事1.1 什么是Linux安全事件应急响应先说个真实场景。某年某月某日凌晨两点某公司的运维同事发现一台运行着核心业务的Linux服务器CPU占用率飙到100%登录上去看到PID列表里躺着一个名字看起来完全无害的进程但它的父进程早就没了命令行的路径指向/tmp目录。这种时候绝大多数人的第一反应是“kill掉它”。但等你kill完过五分钟它又原地复活甚至换了个名字。第二天才发现数据库被加密了备份也没了。这种场景就是典型的安全事件应急响应。它不是渗透测试不是漏洞扫描而是“系统已经被入侵了我要进去把入侵者找出来把影响控制住把痕迹清理干净把漏洞补上最后让业务恢复正常”。Linux应急响应是整个安全事件响应体系里最核心的一块因为大量服务器跑在Linux上而Linux又天生开放、灵活、日志丰富只要你会看系统里其实到处都是痕迹。这篇文章要讲的就是Linux应急响应的基础必备技能——也就是你接到一台被入侵的Linux服务器之后第一小时之内应该做什么、怎么做、为什么这么做。适合刚入门的安全工程师、运维同学也适合想转行做安全的人当作第一本“实操手册”来读。1.2 响应前的三个关键原则做应急响应最重要的不是你掌握了多少命令而是你有没有一套清晰的思路。我见过太多人拿着工具一顿乱扫最后什么都没查出来。先记住三个原则第一个原则先保护证据再动手操作。很多响应的第一步就是把进程kill掉、把文件删掉这恰恰是最糟糕的做法。你杀掉一个进程进程的命令行参数、打开的文件、网络连接信息就全没了你删掉一个脚本脚本里可能写着攻击者的C2地址、加密算法、持久化方式。正确的做法是先取证再处置。“取证”不一定要用多高级的工具最基本的办法就是把现场信息原样记录下来比如用ps aux输出重定向到一个文件里。记住能截图的截图能记录的命令输出全都留底。第二个原则先看事实再看结论。不要因为某个进程名字看着可疑就直接断定它是恶意进程。我见过一个真实的案例某台服务器上有一个进程叫kswapd0名字和内核线程完全一样新手一看就紧张实际上那个进程是被替换过的恶意程序但它伪装得太像了。反过来也有因为CPU高就误杀正常进程的例子。一定要收集足够多的信息——进程的启动时间、启动方式、命令行参数、对应的可执行文件、网络连接——再做判断。第三个原则边处置边恢复但恢复必须在可控范围内。业务不能一直停着但恢复业务之前必须先把后门堵住。最典型的例子你发现服务器上有恶意文件删了之后发现业务起不来因为攻击者篡改过的文件可能正好是业务依赖的组件。所以恢复操作要谨慎可以先备份原始文件再恢复干净版本。个人建议的恢复顺序是先断网隔离再取证然后清理恶意程序修复漏洞最后恢复业务持续监控。1.3 工具准备与现场保护应急响应依赖的工具不需要多高级但要趁手。我自己常年准备一个U盘里面放着静态编译的busybox因为被入侵的系统里常用的ls、ps、netstat可能已经被替换成木马版本了一份常用命令的替代品比如lsof、ss、stat都准备静态编译的版本一个轻量级的rootkit查杀工具这里不展开讲具体名字属于常见开源工具可以自行搜索一个取证脚本通常是从网上收集整理的把十来个常用命令的输出一次性打包收集出来现场保护这块有一点必须强调不要在受信任度不确定的系统里执行太多不可信的命令。如果系统已经被入侵很久ps、ls、top这些命令可能都被替换过了你执行它们看到的结果本身就是攻击者想让你看到的。所以有条件的话优先使用静态编译的外部工具并且把输出保存到外部存储设备或远程日志服务器上。另一个保护现场的手段是不要改动文件的时间戳、不要修改文件内容、不要随意重启系统。重启可能会让内存里的恶意进程消失但也可能触发攻击者设置的持久化机制而且内存里的证据比如键盘记录数据就全丢了。2. 信息收集五个最容易暴露攻击者的地方2.1 系统信息与运行时长应急响应第一步先把系统基本信息捞出来。这里不是简单地执行几条命令而是要建立对这台机器的“全局观”。先看系统版本和架构uname -a cat /etc/os-release cat /etc/issue注意看uname -a里的内核版本如果攻击者用了内核漏洞提权你往往能看到内核版本和系统发行版不匹配或者系统运行了很长时间但内核很新。另一个关键信息是系统运行时长uptimeuptime显示的是从启动到现在的时间。如果系统运行时长很短可能意味着系统刚刚被重启过。重启的原因可能是攻击者为了加载修改过的内核模块也可能是攻击者做了一些操作导致系统崩溃。这里有一个小细节Linux里有一个文件/proc/uptime读取它也能看到运行时长但如果攻击者替换了uptime命令你读/proc/uptime更可靠。接着看系统时间设置和是否开启了自动时间同步时间信息对后续做时间线重建非常关键。系统时间和真实时间偏差很大会影响你判断恶意行为的发生时间。还有date -u看一下UTC时间记录下当前时间戳后面所有时间线都用这个作为基准。最后看加载的内核模块cat /proc/modules lsmod这个信息的重要性在于很多rootkit是通过内核模块实现隐藏进程、隐藏文件的功能。如果发现异常的内核模块提取出来做特征比对。但注意一下有些rootkit有能力隐藏模块自身lsmod看不到很正常所以这条命令看不到异常不代表没有。2.2 账号与权限审计攻击者入侵之后做的第一件事往往是建一个后门账号或者偷一个现有账号的密码。所以账号审计要放在信息收集的优先级最高档。查看所有本地账号和UIDcat /etc/passwd重点关注UID为0的账号root权限看看除了root本身之外有没有别的高权限账号最近修改过的账号按时间排序看哪些账号的密码字段异常登录shell不正常的账号比如一个数据库账号的shell是/bin/bash这就很可疑查看组信息和用户所属组cat /etc/group查看sudo权限配置cat /etc/sudoers ls -la /etc/sudoers.d/这里有个坑攻击者经常在/etc/sudoers.d/目录里加一个配置文件内容是把某个普通账号设置为免密码sudo而不去改主配置文件因为这样更隐蔽。所以要专门看这个目录。再查看系统中的隐藏账号文件比如/etc/shadow最近修改时间ls -la /etc/shadow stat /etc/shadow重点关注/etc/shadow的修改时间如果它被改过说明有人动过密码。最后检查SSH信任关系看看有没有异常的密钥文件被加入到了某账号的authorized_keys中find / -name authorized_keys -type f -newer /etc/passwd2.3 登录记录与爆破痕迹登录记录能告诉你两件事攻击者从哪里进来的以及进来之后干了什么。Linux的认证日志文件通常位于/var/log/auth.logDebian系或/var/log/secureRedHat系。查看最近的登录成功记录last -a lastlog last -f /var/log/wtmp查看登录失败记录grep Failed password /var/log/auth.log | tail -50 grep Accepted password /var/log/auth.log | tail -50注意last命令读取的是/var/log/wtmp文件这个文件可能被攻击者清理过。清空了看不到记录但清空行为本身就是一个重大线索。如果攻击者把/var/log/wtmp和/var/log/btmp全部清空甚至把整个日志目录都做了清理你仍然可以通过/var/log/auth.log中的历史遗留信息交叉验证前提是auth.log没有被一并删除。看爆破痕迹时重点看有没有大量来自同一IP的连接记录、有没有在短时间内出现大量Failed password条目。我遇到过一种情况爆破日志被攻击者清理干净了但系统的/var/log/auth.log.*.gz压缩旧日志还在里面能找到攻击发生当天的完整记录。所以平时就要养成习惯把日志上传到远程日志服务器或者做日志压缩归档发生事件时多翻一层目录经常会有惊喜。2.4 Shell命令历史每个用户在自己的home目录下都有shell历史文件。root用户的是/root/.bash_history普通用户的是/home/用户名/.bash_history。如果用户用的是zsh则是.zsh_history。直接查看root历史命令cat /root/.bash_history注意几个细节历史文件里如果存在大量wget、curl、scp之类的命令说明攻击者可能下载了恶意文件或者外传了数据历史里如果有cd /tmp wget ... chmod x ... ./...这种连贯命令几乎可以确定是下载执行了恶意程序历史里如果出现大量export HISTFILE/dev/null或者unset HISTORY说明攻击者刻意关闭了history记录这个行为本身就是强烈信号攻击者有可能已经删除了历史文件或者用history -c清空了当前会话的缓存。所以看历史文件只能作为参考不能当作唯一的依据还有一个很多人会忽略的点bash历史文件默认会记录当前终端的所有操作但如果你通过SSH执行命令而SSH会话不是交互式shell命令不会记录到历史文件里。因此查不到历史记录时不要立刻断定“攻击者没操作过”他只是没用交互shell或者清过历史了。2.5 计划任务与开机自启动计划任务是攻击者最常用的持久化手段之一。因为计划任务配置在文件系统里重启之后依然有效而且运行时会以root权限执行如果是root的计划任务。查看cron相关配置crontab -l crontab -l -u root cat /etc/crontab ls -la /etc/cron.d/ cat /etc/cron.d/* ls -la /var/spool/cron/crontabs/一个典型恶意计划任务的例子是这样的*/5 * * * * /bin/sh /tmp/.x/upd.sh /dev/null 21每隔五分钟执行一次/tmp/.x/upd.sh这是一个下载执行木马或挖矿程序的脚本。攻击者为了隐蔽往往把脚本放在/tmp目录目录名字以“.”开头文件名尽量普通。脚本内容通常包含wget或curl从外部下载payload再执行。查看systemd定时器和开机服务systemctl list-timers --all systemctl list-unit-files --stateenabled ls -la /etc/systemd/system/重点看这三个地方/etc/systemd/system/目录下的service文件攻击者喜欢把自己写的service文件放在这里而不是/lib/systemd/system/因为前者优先级更高带Restartalways且ExecStart路径指向/tmp或/var/tmp的service这基本就是恶意程序了服务文件的时间戳和内容是否与系统安装的软件包一致如果服务文件创建时间在入侵时间窗口内就要详细排查还有开机脚本/etc/rc.local、/etc/init.d/下的文件。攻击者会把启动命令塞进这些地方。检查的时候重点看每个文件的修改时间凡是修改时间异常的文件都要打开看一眼内容。3. 进程、网络与文件系统的排查实操3.1 进程排查找出来历不明的进程做完基础信息收集下一步是看现在正在运行什么。进程排查是应急响应中最核心的环节因为恶意程序要发挥作用必须以进程的形式活在内存里至少在某段时间内是这样。首先获取进程快照ps -ef ps aux ps -efww对比这三个命令的输出你会发现ps -efww的参数字段会显示得更完整。恶意程序的命令行参数往往是恶意行为的直接证据比如一个进程的参数里带着钱包地址、矿池地址、C2服务器IP。我总结了几个需要重点关注的进程特征进程名极短、随机字符串、看起来像系统进程但名字不标准进程路径位于/tmp、/var/tmp、/dev/shm等目录进程的父进程是1init/systemd但本身不像正常守护进程进程CPU占用率极高同时连着一个外网IP进程被删除但还在运行查看/proc/PID/exe无法读取说明可执行文件已被删除查看指定进程的详细信息ls -la /proc/PID/ cat /proc/PID/cmdline cat /proc/PID/environ ls -la /proc/PID/cwd ls -la /proc/PID/exe readlink /proc/PID/exe/proc/PID/exe指向进程对应的可执行文件。如果它显示(deleted)说明进程的可执行文件已经被删除这是一个很危险的信号。/proc/PID/cwd是进程的工作目录如果恶意进程是在/tmp下启动的工作目录大概率也是/tmp。/proc/PID/environ里可能会有一些环境变量比如代理配置、特殊路径有时候能在这里看到攻击者留下的线索。额外提一个技巧/proc/PID/fd目录下列出了进程打开的所有文件描述符。如果进程正在向某个文件写入数据你可以通过ls -la /proc/PID/fd看到正在写的文件名这个文件很可能就是恶意脚本正在下载的payload或者日志。有一个案例里我就是通过/proc/PID/fd看到进程正在写/tmp/.ICE-X11目录下的一个文件顺藤摸瓜找到了攻击者部署的完整工具包。3.2 网络连接排查找到外联地址恶意程序运行之后通常要和外部的C2服务器通信或者下载更多payload或者在持续扫描内网。排查网络连接能帮你找到这些通信行为。传统方法是netstat在Linux上我推荐用ssss -antp ss -anup查看所有TCP和UDP连接重点看ESTABLISHED状态的连接尤其是连接到外部IP的连接。这里说一个细节ss -antp里的-p参数可以显示进程PID和进程名。如果某个外联连接的进程名是[bash]或者[curl]基本可以确定有人在用shell进行不当操作。查看监听端口ss -lntp重点关注在非标准端口上监听的进程。常见的误区是“防火墙只允许80端口那恶意软件就不能连外网了”。实际上恶意软件一样可以主动发起外联连接出站连接通常不受限制也可以伪装成正常流量走80端口。所以不光要看监听端口更要看出站连接。如果进程与外网通信还需要获取远程地址的详细信息。这一步可以记录下IP和端口后续用威胁情报平台查这个IP是否被标记为恶意。不过要提醒一句不一定要在一个受信任度未知的系统上直接运行在线查询可以先把IP记下来在另一台受信任的机器上查询避免被污染的系统影响你的判断。查看进程的实时网络行为strace -p PID -e tracenetwork -f -o /tmp/net-trace.logstrace会跟踪进程的系统调用能看到进程尝试连接哪些地址。这个命令需要root权限而且附加到进程上之后需要小心操作。另外strace本身也可能被rootkit干扰所以在有条件的情况下倾向使用外部工具。3.3 文件系统排查定位恶意文件文件系统的排查是应急响应的大头因为攻击者的工具、脚本、扫描器、挖矿程序都会以文件形式存在。但Linux的文件那么多不可能一个个全看需要有优先级地排查。我通常按下面的优先级来排查先看临时目录ls -la /tmp/ ls -la /var/tmp/ ls -la /dev/shm/这三个目录是攻击者的“快乐老家”可写、可执行、重启不一定清空。尤其是/dev/shm默认大小是内存的一半攻击者喜欢把挖矿程序放在这里因为它写入的是内存而不是磁盘不占用磁盘空间看起来更隐蔽。再看home目录和root目录ls -la /root/ ls -la /home/*/ find /home -name .* -type f接着按照修改时间倒序查找最近修改的文件find / -xdev -mtime -3 -type f -newer /etc/crontab -size -10M -exec ls -la {} \; 2/dev/null这个命令查找最近3天内被修改过的普通文件排掉大于10MB的。这里的思路是攻击者在入侵过程中下载的工具和脚本通常不会太大而且创建/修改时间一定在入侵时间窗口附近。用这个命令能快速缩小排查范围。文件属性审计find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \;查找设置了SUID或SGID位的文件。攻击者可能利用SUID文件进行提权或者隐藏执行权限。最后检查可疑文件的哈希值sha256sum /可疑文件的路径 /tmp/hashes.txt拿到哈希之后可以参考公开的恶意软件情报库比对或者直接把哈希在搜索引擎里搜一下往往能看到匹配结果。这一步要放在文件分析阶段做应急现场先把哈希记录下来。还有一个非常实用的命令是strings它对恶意文件执行字符串提取可以快速判断文件的类型和功能strings /tmp/.x/upd.sh | head -50对于脚本类恶意文件直接cat看内容最实在对于二进制恶意文件strings能帮你看出它关联的C2地址、矿池地址、加密算法特征等。4. 日志分析与时间线重建4.1 常见日志位置与字段说明日志分析是应急响应的核心环节。没有日志分析你对入侵事件的判断就只能停留在“看到什么可疑就处理什么”的层面永远无法还原攻击者的渗透路径。Linux常见日志文件的位置和作用日志文件Debian系位置RedHat系位置记录内容认证日志/var/log/auth.log/var/log/secure登录、sudo、用户切换系统日志/var/log/syslog/var/log/messages内核及系统服务日志cron日志/var/log/cron/var/log/cron计划任务执行记录内核日志/var/log/kern.log/var/log/messages内核模块、驱动加载错误日志/var/log/faillog/var/log/faillog登录失败记录启动日志/var/log/boot.log/var/log/boot.log系统启动过程查看认证日志中sudo和su的记录grep -E sudo|su /var/log/auth.log | tail -100重点关注什么时候有用户切换成了root之前是什么账号在什么终端、来自哪个IP这三样信息叠加起来基本能还原攻击者的提权路径。查看日志中是否有异常的服务启动记录grep -E start|restart|stop /var/log/syslog | tail -50有一个容易被忽视的点systemd的日志在/var/log/journal/目录下是二进制格式直接用grep搜不到。需要用journalctl来查journalctl --since 2025-01-01 --until 2025-01-03 -u 服务名 journalctl -p err -b -0在应急现场如果攻击时间明确优先用--since和--until限定范围不要全量输出否则你会在几万行日志里迷失方向。4.2 用时间线还原攻击路径日志分析的高级阶段是时间线重建。时间线不是简单地把日志按时间顺序排列而是把不同来源的时间戳串联起来形成一个完整的故事线。收集以下时间戳全部记录到一张表格里系统开机时间uptime认证日志中首次异常登录的时间/etc/passwd、/etc/shadow、/etc/crontab、关键配置文件的修改时间异常进程的启动时间/proc/PID/stat中的第22个字段是启动时间单位是jiffies恶意文件在文件系统里的创建/修改时间计划任务首次执行的时间把这些时间戳按时间序排列你就能看到一个基本的攻击时间线。举个例子/etc/passwd的修改时间比认证日志中首次爆破成功的时间早了3天这就说明攻击者可能在爆破成功之前就已经拿到了权限或者存在另一条尚未发现的入侵路径。这里分享一个命令行计算进程启动时间的办法。/proc/PID/stat第22个字段是从系统启动到进程启动的jiffies数系统通常每秒有100个jiffies常见内核配置。用下面这段脚本把进程启动时间换算成可读格式awk {print PID:$1 启动时间(jiffies):$22} /proc/PID/stat a$(awk {print $22} /proc/PID/stat) b$(awk {print int($22/100)} /proc/uptime) date -d $(date -d expr $(date %s) - $b) - expr $a / 100 seconds %Y-%m-%d %H:%M:%S这个脚本不是万能的不同版本的/proc/stat输出字段位置可能有差异但大方向是对的。实际排查时我都是直接记录PID和/proc/PID/stat原文回到办公室再慢慢计算现场时间宝贵先记录原始数据永远是第一位。5. 常用工具链与自动化脚本5.1 一次性收集现场信息应急现场分秒必争手动一条一条敲命令太慢。我习惯用一段脚本把核心信息一次性采集出来输出到文件后存档。下面这个脚本提供给新手参考收集的是基础信息生产环境使用前需要自己改造成符合实际环境的版本#!/bin/bash OUT/tmp/evidence-$(date %Y%m%d%H%M%S) mkdir -p $OUT { echo 系统基本信息 uname -a cat /etc/os-release echo echo 运行时长 uptime echo echo 进程列表 ps -efww echo echo 用户列表 cat /etc/passwd echo echo 计划任务 crontab -l cat /etc/crontab cat /etc/cron.d/* echo echo 网络连接 ss -antp echo echo 监听端口 ss -lntp echo echo 最近修改文件 find / -xdev -mtime -3 -type f -exec ls -la {} \; 2/dev/null echo echo 认证日志-最近成功登录 grep Accepted password /var/log/auth.log | tail -50 echo echo 认证日志-最近失败登录 grep Failed password /var/log/auth.log | tail -50 } $OUT/evidence.txt 21 echo 证据保存到 $OUT/evidence.txt这段脚本会一次性收集十个方面的关键信息输出到/tmp/evidence-时间戳/evidence.txt。注意脚本是应急现场用的前提是系统已经被入侵了所以收集到的信息可信度要保留怀疑态度尤其是ps、ss、ls这些命令本身可能被动过手脚。更好的做法是把脚本复制到U盘里用静态编译的busybox来执行核心命令。5.2 日志关键词提取日志分析里面关键词提取是最频繁的操作。分享几个我工作中高频使用的grep模式。找爆破行为grep -c Failed password /var/log/auth.log grep Failed password /var/log/auth.log | awk {print $(NF-3)} | sort | uniq -c | sort -nr | head -20第二行命令统计了登录失败次数排名前十的源IP。这是快速判断是否存在爆破行为的手段。找下载执行行为grep -iE wget|curl|scp|nc /var/log/auth.log /var/log/syslog /var/log/cron 2/dev/null找异常计划任务执行grep -iE cron|crond /var/log/syslog | grep -vE session|CMD|reload|usermod | tail -50找修改用户或权限的行为grep -iE useradd|usermod|passwd|chmod|chown|sudo /var/log/auth.log日志可能非常多一次grep出来几千行很正常。我的习惯是先把所有关键信息grep到一个单独文件里然后一边看一边筛选。如果现场有足够时间建议把原始日志比如auth.log复制一份出来做备份后续可以做深度比对分析。6. 常见问题与排查技巧实录6.1 高负载但排查不到异常进程实际应急中最常见的一种情况是系统负载飙高CPU跑满但用ps aux看了一圈所有进程看起来都正常没有一个可疑目标。这种时候不要慌按下面的顺序逐步排查。第一步用top按CPU排序看整体情况再用top -H看看有没有哪个线程占用CPU特别高。有些恶意程序会在进程名上伪装但线程级别的日志往往暴露真实名称或者某些上下文字段。第二步查看/proc/loadavg和/proc/stat结合CPU使用率判断是“真忙”还是“假忙”。攻击者可能通过修改ps或top命令的输出来隐藏进程但系统底层的统计数据是改不了的。第三步排查隐藏进程。rootkit常见手段是通过hook系统调用让ps看不到特定进程。可以在真实环境非被入侵系统上执行以下操作来比对ls -la /proc/ | awk {print $NF} | grep -E ^[0-9]$ | sort -n /tmp/proc-list.txt ps aux | awk {print $2} | sort -n /tmp/ps-list.txt diff /tmp/proc-list.txt /tmp/ps-list.txt如果/proc目录下存在进程目录但ps aux里看不到对应的PID那很可能存在隐藏进程。注意/proc下不一定所有数字目录都是进程也有可能是其他内核对象所以匹配条件要做好。这个方法不是万无一失rootkit能隐藏/proc下的条目但在普通场景下足够用了。6.2 日志被删除了怎么办攻击者有时会直接把日志清空比如echo /var/log/auth.log或者删除整个/var/log/目录。这个时候不要直接放弃有几个地方能找到残留信息。系统日志轮转包/var/log/auth.log.1、/var/log/auth.log.2.gz、/var/log/syslog.1等里面可能有被删除日志的上一段内容bash历史文件攻击者不一定会记得清理所有用户的历史文件系统message日志有些发行版的/var/log/messages记录了比auth更详细的系统事件shell进程残留信息/proc/PID/cmdline如果进程还活着临时目录文件攻击者的工具和日志有时放在/tmp、/var/tmp下可能包含攻击者自己的操作日志realistically被完全清洗干净的现场也不是就毫无办法了。你还可以从其他机器上找线索比如防火墙日志、负载均衡日志、数据库日志、DNS日志。很多时候攻击者不是只打一台机器而是横向移动过来的之前被入侵的那台机器上的日志可能会记录这台的IP和操作。所以应急响应绝对不能只盯着单台机器要建立全局视角。6.3 常见误判与避坑建议做应急响应三年多我统计过自己犯过的错误也和同行交流过共性的踩坑。这里把最典型的几个列出来误把内核线程当成恶意进程。Linux内核有大量内核线程名字通常是[ksoftirqd/0]、[kworker/0:1]、[kthreadd]它们没有可执行文件路径父进程是2kthreadd。新手看到/proc/PID/exe为空或者ps aux里看不到它们误以为被rootkit了。鉴别方法很简单内核线程的进程名在ps aux里显示时通常带中括号且comm字段不会变。如果是恶意进程其exe路径一般能定位到一个文件。只看命令行不看完整上下文。举个例子某进程看起来是nmap 10.0.0.1但如果你多看一眼环境变量可能发现它是在一个被别人注入LD_PRELOAD的环境中运行的。只看命令行容易漏掉深层的恶意行为。重启之前没有保存memdump。这不仅发生在新手身上老手也一样。遇到内存里正在跑的恶意程序优先考虑做内存转储而不是kill掉进程或者重启系统。内存里可能有解密后的数据、密钥、明文配置这些都是磁盘上找不到的证据。如果来不及做完整的memdump至少把关键进程的/proc/PID/maps和/proc/PID/mem复制一份。在受感染的系统上使用原始密码登录其他服务器。这一点必须强调已经确认被入侵的机器上所有密码都应该视为已泄露。如果应急期间你需要登录其他服务器务必先在一台干净的机器上修改管理员密码再执行操作避免攻击者通过键盘记录或者内存读取拿到密码横向扩散。6.4 形成自己的应急响应清单我把应急响应的整个流程压缩成了一张简化版清单贴在这里供参考确认事件是误报还是真实入侵根据现象和日志初步判断隔离网络断开外网或限制出口流量阻断C2通信现场取证收集进程、网络、文件、账号、计划任务、日志、时间戳分析排查把收集到的信息逐条分析定位入侵路径和影响范围清除威胁删除恶意文件、终止恶意进程、清理持久化设置修复漏洞修补被利用的漏洞、修改密码、加强访问控制恢复业务在确认无威胁后恢复业务持续监控一段时间复盘总结输出应急报告更新安全防护策略这份清单不是标准答案每个团队都可以根据自己的基础设施做调整。但核心思想是一致的证据优先、控制影响、修复漏洞、恢复业务。我个人在实际操作中最深的体会是应急响应不是“找到并杀掉病毒”那么简单它是一场信息对抗。攻击者留下的每一条痕迹都是他思维方式的痕迹你的工作就是把这些痕迹串起来还原他做了什么、怎么做的、为什么能做成。只有把这三个“什么”回答清楚了这次应急才算真正结束。最后再分享一个小技巧应急响应完成之后一定要把从现场收集到的所有证据文件打包保存好至少留一年。我见过不少案例一个月后追踪溯源时又从当时的证据文件里找到了关键情报。当时觉得没用的信息回头一看可能就是整个事件的核心线索。这个习惯建议你从第一次做应急响应就开始养成。