第一章:事件溯源基础
什么是事件溯源
事件溯源,说白了就是「把发生过的事一件件记下来」。
我刚开始接触这个概念时,觉得它挺玄乎的。后来做多了应急响应才明白——你想想看,如果一台服务器被黑了,你总得知道黑客进来后干了什么吧?事件溯源就是干这个的。
它记录的不是某个时间点的快照,而是连续的事件流。比如:
- 谁在什么时间登录了系统
- 执行了什么命令
- 访问了哪些文件
- 创建了哪些进程
这些事件串起来,就是一条完整的攻击链。我个人习惯把事件溯源比作「数字世界的监控录像」——不是拍一张照片,而是全程录像。
核心要点:事件溯源 = 记录 + 关联 + 还原。没有记录,就谈不上溯源。
Windows 事件日志基础
Windows 的日志系统,我用了十几年了。说实话,它虽然有时候日志量太大让人头疼,但确实是事故鉴定的金矿。
Security 日志
这是我最常看的日志。安全日志记录了登录、注销、权限变更等操作。嗯,这里要注意:默认情况下,Windows 不会记录所有安全事件,你需要通过组策略或安全模板来开启审计策略。
常见的 Security 事件 ID:
| 事件 ID | 描述 | 我在项目中遇到过 |
|---|---|---|
| 4624 | 登录成功 | 有一次发现凌晨3点有4624,结果真的是入侵 |
| 4625 | 登录失败 | 爆破攻击时这个事件会大量出现 |
| 4672 | 特殊权限登录 | 管理员权限被滥用时必查 |
| 4688 | 进程创建 | 挖矿木马启动时就看这个 |
| 4648 | 使用显式凭据登录 | 横向移动的典型特征 |
我的小技巧:在 Security 日志里,我习惯先按时间排序,然后筛选 4624 和 4688。这两个事件能帮你快速定位「谁进来了」和「他干了什么」。
System 日志
System 日志记录的是系统组件和驱动程序的行为。比如服务启动失败、磁盘错误、驱动程序加载等。
为什么事故鉴定要看 System 日志?
- 恶意软件常通过服务或驱动加载
- 系统崩溃前往往有异常日志
- 某些攻击会禁用系统服务
我曾经遇到过一个案例:黑客通过注册表创建了一个伪装的系统服务,每次开机自动启动。System 日志里清清楚楚地记录了服务安装的时间点——这就是铁证。
Application 日志
应用程序日志记录的是软件层面的错误和事件。比如:
- 应用程序崩溃
- 权限不足
- 数据库连接失败
说实话,Application 日志在事故鉴定中往往被忽视。但我建议你多看一眼——有时候攻击者会利用合法软件做坏事,比如用 PowerShell 执行恶意脚本,Application 日志里就会有 PowerShell 的操作记录。
避坑指南:我曾经遇到过日志被清空的情况。攻击者用 wevtutil cl System 命令把 System 日志清空了。所以,一定要配置日志转发,把日志实时发送到远程日志服务器。
Linux 系统日志
Linux 的日志体系跟 Windows 不太一样。它更分散,但也更灵活。我刚开始用 Linux 做取证时,经常在 /var/log 目录下翻半天。后来摸清了门道,就顺手多了。
syslog
syslog 是 Linux 最基础的日志系统。它收集来自内核、服务、应用程序的日志消息。常见的日志文件有:
| 日志文件 | 用途 |
|---|---|
| /var/log/messages | 通用系统日志 |
| /var/log/secure | 安全相关日志(登录、认证) |
| /var/log/maillog | 邮件服务日志 |
| /var/log/cron | 计划任务日志 |
| /var/log/boot.log | 系统启动日志 |
syslog 的日志格式一般是这样的:
Mar 15 10:30:45 webserver sshd[12345]: Failed password for root from 192.168.1.100 port 22 ssh2
你看,时间、主机名、进程、事件内容,一目了然。我个人习惯在排查 SSH 爆破时,直接 grep 这个文件:
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
这条命令能快速统计出哪些 IP 在尝试爆破。
auditd
auditd 是 Linux 的审计系统,比 syslog 更强大。它由内核直接支持,能记录系统调用、文件访问、网络连接等底层事件。
为什么需要 auditd?
- syslog 只记录应用层事件
- auditd 能记录内核层事件
- 攻击者很难绕过 auditd
配置 auditd 的规则,举个例子:
# 监控 /etc/passwd 文件的写操作
-w /etc/passwd -p wa -k passwd_changes
# 监控所有 setuid 系统调用
-a always,exit -S setuid -k setuid_calls
# 监控网络连接
-a always,exit -S connect -k network_connect
查看 auditd 日志用 ausearch 命令:
ausearch -k passwd_changes --start today
实战经验:有一次我排查一个 rootkit 感染事件,syslog 里干干净净,但 auditd 记录到了异常的内核模块加载。没有 auditd,那次取证基本就废了。
知识体系结构图
下面这张图是我梳理的事件溯源知识体系,你可以对照着看:
总结一下:事件溯源的核心就三件事——知道记什么、知道去哪查、知道怎么串。Windows 看 Security/System/Application,Linux 看 syslog 和 auditd。把这些日志管好了,事故鉴定就成功了一半。