蓝队应急响应实战:从C2后门排查到系统加固的完整流程
1. 项目概述:从“救火”到“狩猎”的蓝队核心能力
在网络安全这个没有硝烟的战场上,红蓝对抗是永恒的主题。如果说红队是技艺高超的渗透者,那么蓝队就是守护阵地的防御者与应急响应专家。今天要聊的这个话题,正是蓝队工作中最硬核、最考验实战能力的一环——应急响应。这绝不仅仅是接到告警后去“关个进程、删个文件”那么简单,而是一场与攻击者斗智斗勇的“狩猎”行动。你需要从海量的噪音中,精准识别出那个微弱的恶意信号,理解攻击者的每一步操作(C2后门、权限维持),并在一台可能已经千疮百孔的机器(无论是Windows还是Linux)上,完成从“排查-分析-清理-加固”的全流程闭环。这背后,是对操作系统底层原理的深刻理解,是对攻击者手法的了如指掌,更是对一套标准化、可复用的“基线检查”与“排查封锁清理”流程的熟练掌握。我经历过太多从凌晨被叫醒,到面对一片狼藉的系统,最终抽丝剥茧找到根源的案例。这篇文章,就是把我这些年踩过的坑、总结的套路,掰开揉碎了讲给你听,目标是让你看完后,能建立起一套属于自己的应急响应“肌肉记忆”。
2. 应急响应核心流程与心法拆解
应急响应不是乱拳打死老师傅,它必须遵循一套科学、高效的流程。很多新手一上来就直奔可疑文件,往往容易陷入细节的泥潭,或者被攻击者留下的“烟幕弹”误导。我总结的流程可以概括为“定范围、保现场、细分析、狠清理、固根本”五个阶段,但这五个阶段并非完全线性,而是充满了交叉与回溯。
2.1 响应启动与现场保护:第一反应决定成败
接到告警(可能是IDS/IPS、EDR、AV,甚至是业务部门报告异常)的那一刻,你的第一反应至关重要。首先,立即启动应急响应流程并通知相关干系人。这不是小题大做,而是为了获取必要的资源支持和法律授权。紧接着,最关键的一步是:尽可能保护现场。对于Windows服务器,我的习惯是立即通过带外管理(如iDRAC、iLO)或控制台截取当前屏幕(如果有可疑进程在运行),并立即创建一份系统内存转储。在Linux上,如果条件允许,可以使用LiME或AVML等工具获取内存镜像。如果无法获取完整内存,至少要用ps auxfww、netstat -tulpan等命令快速抓取进程和网络连接的快照。
注意:绝对不要第一时间重启服务器!这是最致命的错误。重启会丢失内存中的进程、网络连接、未落地的恶意代码等宝贵证据,相当于亲手抹掉了攻击者的犯罪现场。我们的目标是“活体取证”,在系统运行状态下进行调查。
在保护现场的同时,需要快速界定事件的影响范围(Isolation Scope)。是一台服务器,还是一个网段?初步判断攻击类型是Web入侵、恶意软件还是内部威胁?这个初步判断会指导你后续的调查侧重点。
2.2 信息收集与初步研判:构建调查基线
在确保现场数据不会丢失后,开始系统性地收集信息。这里的目标是建立系统在“异常时间点”的完整快照,并与已知的“健康基线”进行对比。我通常会按照以下清单进行收集,并强烈建议使用自动化脚本(如KAPEfor Windows,F响应或自编脚本 for Linux)来提升效率和一致性。
Windows 信息收集清单:
- 系统信息:
systeminfo,whoami /all(特权信息)。 - 进程列表:
tasklist /v /fo csv或Get-Process | Select-Object *(PowerShell),关注父进程ID、命令行、启动时间异常的进程。 - 网络连接:
netstat -ano,重点关注ESTABLISHED状态的远程IP、监听在非知名端口的进程。 - 自启动项:检查多个位置:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run*,HKCU下的相同路径,计划任务(schtasks),服务(Get-Service和sc qc),Startup文件夹,WMI事件订阅等。 - 近期文件活动:使用
Get-ChildItem递归搜索特定目录(如Temp,Users\*\AppData)下近期创建或修改的文件,结合LastWriteTime属性。 - 用户与登录:查看事件日志(
Event Viewer)中的安全日志(事件ID 4624登录、4625失败登录、4672特权登录)、net user、net localgroup administrators。 - 其他:已安装程序列表(
Get-WmiObject Win32_Product或检查注册表),DNS缓存(ipconfig /displaydns)。
Linux 信息收集清单:
- 系统信息:
uname -a,hostname,uptime(看是否异常重启过)。 - 进程列表:
ps auxef或ps -ef --forest(显示进程树至关重要),top/htop(实时)。 - 网络连接:
netstat -tulpan,ss -tulpan,lsof -i。特别注意netstat看不到的RAW socket(可用cat /proc/net/snmp等间接观察)。 - 自启动项:检查
/etc/rc.local,/etc/init.d/,/etc/systemd/system/,crontab -l(所有用户),用户级~/.config/autostart/。 - 近期文件活动:使用
find命令,例如find / -type f -mtime -2 2>/dev/null查找近2天修改的文件,结合/tmp,/dev/shm等易失性目录。ls -altr /etc/ /bin/ /usr/bin/查看关键目录文件时间戳。 - 用户与登录:检查
/etc/passwd,/etc/shadow权限和内容,last,lastb,who,w,查看/var/log/auth.log,/var/log/secure。 - 历史命令:检查
~/.bash_history,但注意高手会清空或篡改此文件。 - 内核模块:
lsmod,检查是否有异常内核模块。
收集完这些信息后,不要急于深入分析单个可疑点。先将收集到的数据(尤其是进程、网络、启动项)与你或团队维护的“系统健康基线”进行比对。基线可以是之前某次安全检查的存档,也可以是同类服务器的标准配置。任何偏离基线的地方,都是需要重点关注的“异常信号”。
3. 深度狩猎:C2后门与权限维持手法剖析
攻击者一旦入侵,其核心目标就是建立持久化控制(权限维持)和建立命令控制通道(C2)。我们的排查,必须针对这些手法的特点进行。
3.1 C2后门的识别与追踪
C2(Command & Control)是攻击者远程操控受害主机的通道。识别C2活动,主要看网络连接和进程行为。
异常网络连接:这是最直接的迹象。排查时,我不仅看当前连接,更会关注那些尝试连接外部可疑IP或域名的进程。对于Windows,可以用
netstat -ano | findstr ESTABLISHED并结合tasklist | findstr <PID>定位进程。在Linux上,netstat -tulpan | grep ESTABLISHED同样有效。需要特别警惕:- 服务器主动向外连接,尤其是到非常用国家、已知恶意IP(可通过威胁情报平台如VirusTotal, AlienVault OTX快速查询)。
- 连接使用非标准端口(如80、443除外的高位端口)。
- 存在大量到同一域名下不同IP的短连接(可能是域名生成算法DGA)。
进程行为异常:
- 进程伪装:恶意进程常伪装成系统进程名,如
svchost.exe(但注意,多个svchost是正常的)、lsass.exe、dllhost.exe。关键看其路径(是否在system32下)、数字签名(右键属性查看)和父进程。一个由word.exe启动的svchost就极其可疑。 - 无文件落地或进程注入:高级后门可能不创建新文件,而是将代码注入到合法进程(如
explorer.exe,svchost.exe)内存中。排查时需关注进程的内存消耗、句柄数是否异常,并借助专业工具(如Process Explorer,Process Hacker查看线程和加载的DLL;在Linux上可用/proc/<pid>/maps和/proc/<pid>/exe检查内存映射和可执行文件链接)。 - 命令行参数:进程的命令行中可能包含编码的C2地址或指令。仔细审查
ps或tasklist输出的完整命令行。
- 进程伪装:恶意进程常伪装成系统进程名,如
利用EDR/终端检测工具:如果系统部署了EDR,其告警通常是识别C2活动的强信号。重点关注“横向移动”、“可疑进程创建”、“对外网络连接”等类型的告警,并追溯源头进程。
3.2 权限维持手法的排查要点
攻击者为了在重启、注销后仍能保持控制,会使用各种权限维持(Persistence)技术。排查必须覆盖所有可能的“落脚点”。
Windows 权限维持热点排查:
| 维持位置 | 检查方法 | 关键点与常见恶意利用 |
|---|---|---|
| 注册表 Run 键 | reg query相关路径 | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run(所有用户)HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run(当前用户)注意 RunOnce,RunServices等变种。 |
| 计划任务 | schtasks /query /fo LIST /vGet-ScheduledTask(PowerShell) | 查看任务触发器、操作(执行的程序/命令)。恶意任务常被隐藏(/TN任务名可能包含特殊字符)。 |
| Windows 服务 | sc query state= allGet-WmiObject Win32_Service | 检查非微软签名的服务,特别是“自动”启动、二进制路径指向Temp或用户目录的服务。服务名可能仿冒系统服务。 |
| 启动文件夹 | shell:startup(当前用户)shell:common startup(所有用户) | 快捷方式(.lnk)或可执行文件。 |
| WMI 事件订阅 | Get-WMIObject -Namespace root\Subscription -Class __EventFilterGet-WMIObject -Namespace root\Subscription -Class __EventConsumerGet-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding | 非常隐蔽的持久化方式。检查是否有可疑的永久事件消费者,例如在特定事件(如登录、进程创建)发生时执行恶意命令。 |
| COM 劫持 | 比较复杂,需检查注册表HKCU\Software\Classes\CLSID和HKLM\SOFTWARE\Classes\CLSID下相关键值 | 通过劫持系统或应用调用的COM对象来加载恶意DLL。需要对比基线或使用专用工具(如Autoruns)扫描。 |
| 映像劫持(IFEO) | HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<target> | 在调试器字段指定恶意程序,当目标程序(如svchost.exe)启动时,先启动恶意程序。 |
Linux 权限维持热点排查:
| 维持位置 | 检查方法 | 关键点与常见恶意利用 |
|---|---|---|
| Cron 计划任务 | crontab -l(当前用户)cat /etc/crontabls -la /etc/cron.*/ | 检查所有用户的cron,特别是root的。注意/etc/cron.d/目录下的自定义文件。恶意任务可能每分钟执行一次反弹shell。 |
| Systemd 服务 | systemctl list-unit-files --type=servicels -la /etc/systemd/system/ls -la /usr/lib/systemd/system/ | 检查.service文件,特别是用户目录(~/.config/systemd/user/)下的服务。查看ExecStart指向的命令。 |
| 启动脚本 | /etc/rc.local(如果存在且可执行)/etc/init.d/目录下的脚本 | 检查文件内容是否被添加了恶意命令。 |
| 用户配置文件 | ~/.bashrc,~/.bash_profile,~/.profile,~/.zshrc等 | 攻击者可能在用户登录时自动执行恶意命令。检查这些文件末尾是否有可疑添加。 |
| SSH 后门 | 检查~/.ssh/authorized_keys文件 | 是否被添加了攻击者的公钥。检查文件权限(应为600)。检查/etc/ssh/sshd_config是否被修改(如允许空密码、修改端口)。 |
| 动态链接库劫持 | 检查LD_PRELOAD环境变量(echo $LD_PRELOAD)检查 /etc/ld.so.preload文件内容 | 通过预加载恶意so库来劫持函数调用。非常隐蔽。 |
| 内核模块 | lsmod检查 /lib/modules/$(uname -r)/下是否有可疑.ko文件 | 恶意内核模块(Rootkit)可以隐藏文件、进程、网络连接。需要对比基线或使用modprobe --show-depends等分析。 |
实操心得:排查权限维持时,不要只依赖系统自带命令。攻击者可能替换了
ps、netstat、ls等命令来隐藏自己。务必使用静态编译的、来自干净环境的工具(如busybox静态二进制文件)进行复查,或者将磁盘挂载到另一台干净的分析机上进行检查。这是揪出Rootkit的关键。
4. Windows与Linux系统基线检查实战
基线检查(Baseline Checking)是应急响应的“预防针”和“对照尺”。它是指在系统处于已知安全状态时,记录下其关键安全配置和文件状态。当发生安全事件时,可以快速对比找出异常。没有基线,应急响应就像在黑暗中摸索。
4.1 Windows系统安全基线检查要点
Windows基线应覆盖身份、访问、审计、配置等多个层面。以下是我在实战中会重点采集和比对的基线信息:
账户与口令策略基线:
- 本地管理员账户:记录默认
Administrator账户的SID、是否已重命名。检查是否有其他非预期的本地管理员账户(net localgroup administrators)。 - 口令策略:使用
secpol.msc或net accounts记录密码复杂度、最小长度、最长使用期限、锁定阈值等策略。弱口令是内网沦陷的起点。 - 远程访问账户:检查
Remote Desktop Users组成员。
- 本地管理员账户:记录默认
服务与启动项基线:
- 使用
sc query type= service state= all或Get-Service导出所有服务的名称、显示名、状态、启动类型和二进制路径。重点关注“自动”启动的非微软服务。 - 使用
autoruns(Sysinternals工具)或Get-CimInstance命令全面导出所有自启动项(注册表、服务、计划任务、WMI等),并保存为基准文件。
- 使用
网络与防火墙基线:
- 记录开放的端口(
netstat -ano监听状态)及其对应进程。 - 导出防火墙入站/出站规则(
netsh advfirewall firewall show rule name=all)。 - 记录主机
hosts文件(C:\Windows\System32\drivers\etc\hosts)的内容。
- 记录开放的端口(
关键文件与目录完整性基线:
- 对系统关键目录(如
%SystemRoot%\system32\*.exe,%SystemRoot%\SysWOW64\*.exe, 以及%ProgramFiles%下的主要应用)计算哈希值(如SHA256)并记录。可以使用系统自带的Get-FileHash(PowerShell)或第三方工具。 - 记录系统关键DLL的版本和数字签名信息。
- 对系统关键目录(如
审计策略基线:
- 通过
secpol.msc或auditpol /get /category:*导出详细的审计策略设置,确保关键事件(登录、对象访问、进程创建等)被记录。
- 通过
4.2 Linux系统安全基线检查要点
Linux基线同样需要系统化,以下是我常用的检查清单:
账户与权限基线:
- 特权账户:记录
/etc/passwd中UID为0的用户(root)。检查/etc/sudoers文件内容,记录拥有sudo权限的用户和命令。 - 空口令账户:检查
/etc/shadow中密码字段为空的账户。 - 登录限制:检查
/etc/securetty(控制root登录的终端),/etc/hosts.deny和/etc/hosts.allow。
- 特权账户:记录
服务与进程基线:
- 记录所有运行级别下默认启动的服务(
systemctl list-unit-files --type=service --state=enabled)。 - 记录监听端口的服务及其对应进程(
ss -tulpn)。 - 记录
/etc/init.d/和/etc/rc.local的原始内容。
- 记录所有运行级别下默认启动的服务(
关键文件与目录完整性基线:
- 使用
rpm -Va(RHEL/CentOS)或debsums(Debian/Ubuntu)等包管理器验证系统文件完整性,但注意排除配置文件变更的告警。 - 对
/bin,/sbin,/usr/bin,/usr/sbin,/lib,/lib64等关键目录下的二进制文件计算哈希值(sha256sum)并保存。 - 记录
/etc/passwd,/etc/shadow,/etc/group等关键文件的权限(应为-rw-r--r--,-r--------,-rw-r--r--)。
- 使用
SSH服务安全基线:
- 备份并记录
/etc/ssh/sshd_config的原始安全配置,如:PermitRootLogin no,PasswordAuthentication no(如果使用密钥),AllowUsers/AllowGroups限制等。
- 备份并记录
内核参数安全基线:
- 记录
/etc/sysctl.conf中与安全相关的内核参数,如禁止IP转发、禁止ICMP重定向、启用SYN Cookie等。
- 记录
基线建立与管理工具建议:手动建立基线效率低且易出错。建议使用自动化工具或脚本。例如,在Windows上可以使用PowerShell脚本调用WMI和CIM收集信息;在Linux上可以使用Shell脚本结合awk,sed。更专业的做法是使用配置管理工具(如Ansible)的“事实收集”功能,或使用安全合规工具(如OpenSCAP)来生成符合特定标准(如CIS Benchmark)的基线报告,并定期进行对比扫描。
5. 排查、封锁与清理的标准化操作流程
当通过上述分析定位到恶意进程、文件、持久化位置后,就进入了关键的处置阶段。这个阶段需要胆大心细,顺序错误可能导致攻击反弹或系统崩溃。
5.1 标准化排查与确认流程
在动手清理前,必须进行“无损”排查,充分理解攻击链条。
- 关联分析:将可疑进程、网络连接、文件、启动项关联起来。例如,一个可疑的
svchost.exe进程(PID 1234)正在连接外部IP,那么就去检查是哪个服务启动了它,它的命令行是什么,在磁盘上哪个位置,同时检查计划任务、服务、注册表Run键里有没有指向这个文件路径的项。 - 样本提取与分析:如果发现恶意文件,不要直接删除。先将其复制到隔离环境(使用
cp命令或复制到U盘)。计算其哈希值(MD5, SHA1, SHA256),提交到VirusTotal等在线沙箱或多引擎扫描平台,获取更多情报(如家族名称、C2地址、行为特征)。如果条件允许,可以在沙箱中运行,观察其完整行为。 - 影响评估:这个后门运行了多久?可能窃取了哪些数据(检查数据库日志、应用日志)?是否已经进行了横向移动(检查同一网段其他主器的异常连接、本机的ARP表、近期连接记录)?评估事件等级,决定是否需要扩大响应范围或立即断网。
5.2 精准封锁与清理操作
清理的原则是:先阻断通信,再清除持久化,最后删除文件。避免在清理过程中触发攻击者的“复活”机制。
网络隔离(阻断C2):
- 立即措施:在防火墙上封锁该服务器对外的可疑IP和端口(尤其是出站规则),或者直接断开该服务器的外部网络(拔网线或禁用网卡)。
- 主机层面:使用本地防火墙(Windows防火墙或
iptables)添加规则,阻断恶意进程的进出站连接。例如,在Linux上:iptables -A OUTPUT -p tcp --dport 6666 -j DROP。
清除持久化(斩断后路):
- Windows:根据之前排查的结果,逆向操作。
- 注册表:使用
reg delete命令删除恶意Run键值。 - 计划任务:使用
schtasks /delete删除恶意任务。 - 服务:先
sc stop [servicename]停止服务,再sc delete [servicename]删除服务。 - WMI事件订阅:使用WMI命令或PowerShell的
Remove-WmiObject删除相关过滤器、消费者和绑定。
- 注册表:使用
- Linux:
- Cron:使用
crontab -e编辑或直接删除/etc/cron.d/下的恶意文件。 - Systemd服务:
systemctl stop [service]然后systemctl disable [service],最后删除.service文件。 - 启动脚本:编辑
/etc/rc.local等文件,删除恶意行。 - SSH公钥:编辑
~/.ssh/authorized_keys,删除攻击者的公钥。
- Cron:使用
重要提示:在删除或修改任何项目前,务必先备份(如复制到另一个文件,或截图)。这是为了留存证据,也是为了防止误操作导致系统无法启动。
- Windows:根据之前排查的结果,逆向操作。
终止进程与删除文件(清除驻留):
- 终止进程:在清除持久化后,再终止恶意进程。Windows使用
taskkill /f /pid [PID],Linux使用kill -9 [PID]。如果进程有守护或互相监控,可能需要同时终止多个相关进程。 - 删除文件:最后,删除磁盘上的恶意程序文件、生成的临时文件、日志文件等。使用
del(Windows)或rm(Linux)命令。对于特别顽固的文件,可能需要进入安全模式或使用PE盘启动后删除。在Linux上,如果文件正在被占用,可以先kill进程再删,或者使用lsof | grep deleted查找已删除但句柄未释放的文件,然后重启相关进程。
- 终止进程:在清除持久化后,再终止恶意进程。Windows使用
5.3 清理后加固与复盘
清理完成并不意味着结束。
系统加固:根据基线检查发现的问题,立即进行加固。
- 更改所有受影响账户的密码,尤其是特权账户。
- 修补导致入侵的安全漏洞(如未打补丁、弱口令、配置错误)。
- 按照安全基线重新配置系统,关闭不必要的服务、端口。
- 更新病毒库/EDR规则,进行全盘扫描。
监控与观察:清理后的一段时间内(如24-72小时),需要对该主机进行重点监控,查看是否有新的可疑进程、连接或文件出现,防止清理不彻底或有残留的“复活”机制。
事件复盘与报告:整理整个应急响应过程的时间线、攻击链条(Kill Chain)、使用的工具、采取的措施、发现的IOC(入侵指标,如恶意文件哈希、C2 IP、域名等),并形成正式的应急响应报告。这不仅是为了合规,更是为了团队知识沉淀,优化未来的响应流程和检测规则。
6. 常见问题与排查技巧实录
在实际应急响应中,总会遇到一些棘手的“坑”。这里分享几个我印象深刻的案例和技巧。
问题1:进程隐藏,普通ps/tasklist看不到怎么办?
- 场景:在Linux上,怀疑有Rootkit,
ps aux看到的进程列表似乎正常,但CPU或内存占用异常。 - 排查技巧:
- 使用静态编译的工具:从另一台干净的同系统机器上拷贝静态编译的
busybox到受害机器,使用./busybox ps或./busybox top查看。Rootkit通常只劫持了系统的动态链接库,对静态编译的程序无效。 - 检查
/proc文件系统:Rootkit很难完全隐藏/proc下的信息。可以写一个简单脚本遍历/proc/[0-9]*/cmdline,与ps输出对比。隐藏的进程会在/proc中有目录,但ps里没有。 - 查看网络连接:隐藏的进程如果建立了网络连接,在
/proc/net/tcp和/proc/net/udp中仍然会有记录(虽然进程号可能被篡改)。结合ss或netstat的输出来找矛盾点。 - 使用专业工具:如
rkhunter,chkrootkit进行扫描,或使用strace跟踪系统调用。
- 使用静态编译的工具:从另一台干净的同系统机器上拷贝静态编译的
问题2:恶意文件被删除,但进程依然存在,连接不断?
- 场景:在Linux上,你
rm -f删除了一个恶意二进制文件,但ps发现该进程还在,lsof也看不到它打开的文件。 - 原因与技巧:这是因为在Linux中,当一个进程正在运行一个可执行文件时,如果你删除磁盘上的这个文件,进程实际上还在内存中执行,并且内核仍通过一个已删除的inode引用它。
lsof可能因为权限或缓存问题不显示。- 查找:可以检查
/proc/[pid]/exe。如果它显示/path/to/malware (deleted),就找到了。也可以使用ls -la /proc/[pid]/fd/查看文件描述符,有时会有线索。 - 处理:直接
kill -9掉这个进程即可。删除操作已经保证了磁盘上的文件无法再次被执行,但内存中的副本需要杀死进程来清除。
- 查找:可以检查
问题3:Windows系统文件被替换,数字签名验证失败,但系统似乎还在运行?
- 场景:使用
sigcheck或右键属性发现svchost.exe或lsass.exe等核心系统文件的数字签名无效或已被篡改。 - 处理技巧:
- 不要直接在原系统替换:从另一台相同版本(版本号、补丁级别必须一致)的干净Windows系统中,拷贝对应的系统文件(注意
system32和SysWOW64)。 - 使用PE环境操作:重启进入WinPE或使用其他系统盘启动,将干净的文件覆盖到目标位置。因为正在运行的系统文件是被锁定的,无法直接覆盖。
- 使用系统自带工具:可以尝试在命令提示符(管理员)下使用
DISM或SFC命令修复。例如sfc /scannow,但此命令有时无法修复所有问题,特别是复杂的篡改。 - 终极方案:如果系统关键文件被大面积篡改,最稳妥的方法是备份数据后,重装系统。因为即使替换了文件,也无法保证内核、注册表等其他地方没有被做手脚。
- 不要直接在原系统替换:从另一台相同版本(版本号、补丁级别必须一致)的干净Windows系统中,拷贝对应的系统文件(注意
问题4:如何高效地分析大量日志,找到攻击入口点?
- 技巧:不要像看小说一样逐行阅读。采用“由近及远,聚焦异常”的方法。
- 确定时间范围:根据事件发现时间,向前推可能的时间窗口(如24小时、3天)。
- 筛选关键事件ID或关键字:
- Windows安全日志:重点关注4624(成功登录)、4625(失败登录)、4688(进程创建)、4104(PowerShell脚本执行)等。
- Linux认证日志(
/var/log/auth.log,secure):搜索Failed password,Accepted password,session opened等。 - Web日志(Apache/Nginx):搜索
POST请求到可疑路径、响应状态码为200但返回长度异常(可能是Webshell)、SQL注入特征等。
- 使用命令行工具快速分析:
grep,awk,sed是Linux下的神器。在Windows上,可以使用findstr,或者将日志导出后用PowerShell的Select-String。例如,查找短时间内大量失败登录:grep "Failed password" /var/log/auth.log | awk '{print $1,$2,$3}' | uniq -c | sort -nr。 - 关联分析:将不同日志源的信息关联。例如,从Web日志中发现一个可疑的POST请求,其时间点和源IP,去安全日志中查找该IP是否有成功的登录记录,再去进程创建日志中查找该时间点之后是否有异常进程启动。
应急响应是一项综合能力,需要知识、工具、流程和经验的结合。每一次应急响应都是一次学习的机会。我个人的习惯是,每次事件结束后,都会更新我的检查清单和自动化脚本,并把新的IOC加入到监控系统中。防守方的技术就是在与攻击者不断的博弈中迭代进步的。保持警惕,持续学习,你的“蓝队技能”才会越来越扎实。