第一章:事件溯源基础

什么是事件溯源

事件溯源,说白了就是「把发生过的事一件件记下来」。

我刚开始接触这个概念时,觉得它挺玄乎的。后来做多了应急响应才明白——你想想看,如果一台服务器被黑了,你总得知道黑客进来后干了什么吧?事件溯源就是干这个的。

它记录的不是某个时间点的快照,而是连续的事件流。比如:

  • 谁在什么时间登录了系统
  • 执行了什么命令
  • 访问了哪些文件
  • 创建了哪些进程

这些事件串起来,就是一条完整的攻击链。我个人习惯把事件溯源比作「数字世界的监控录像」——不是拍一张照片,而是全程录像。

核心要点:事件溯源 = 记录 + 关联 + 还原。没有记录,就谈不上溯源。

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 事件日志 Linux 系统日志 Security 日志 System 日志 Application 日志 syslog auditd 4624/4625/4688 服务/驱动事件 应用崩溃/异常 secure/messages 系统调用审计 记录 → 关联 → 还原攻击链 没有记录,就谈不上溯源 日志是事故鉴定的第一手证据

总结一下:事件溯源的核心就三件事——知道记什么、知道去哪查、知道怎么串。Windows 看 Security/System/Application,Linux 看 syslog 和 auditd。把这些日志管好了,事故鉴定就成功了一半。

专注资料整理