第三章:数据源与日志采集

聊到威胁狩猎,有个事儿我得先说明白——没有好的数据,你啥也干不了。就像做饭,菜都没洗,你谈什么米其林三星?

这一章,咱们就聊聊那些“食材”。Windows Event Log、Sysmon、ETW、网络流量日志、EDR遥测数据。这五个东西,是我日常工作中打交道最多的数据源。我一个个说,你一个个记。

3.1 Windows Event Log:老牌选手,但别小看它

Windows Event Log,说白了就是Windows自带的日志系统。从Windows NT时代就有了,一直用到现在。很多人觉得它太基础,没啥好看的。嗯,我以前也这么想,直到有一次...

我在一个客户现场,发现攻击者通过RDP暴力破解进来了。当时EDR没报警,Sysmon也没装。但Windows Event Log里的4625(登录失败)和4624(登录成功)记录,清清楚楚地告诉我:这个IP在凌晨3点,试了2000多次密码,最后成功了。你想想看,如果没有这些日志,我连攻击者从哪进来的都不知道。

常用的几个Event ID,我列个表,你记一下:

Event ID 描述 狩猎价值
4624 登录成功 高
4625 登录失败 高
4688 进程创建 极高
4104 PowerShell脚本块记录 极高
7045 服务安装 中
我的习惯:我会把4688和4104这两个Event ID的日志,单独拉出来做实时监控。因为攻击者最喜欢在这两个地方搞事情。

3.2 Sysmon:日志采集的“瑞士军刀”

Sysmon是微软Sysinternals工具集里的一个组件。它是个驱动级别的日志采集工具。说白了,它比Windows Event Log看得更深、更细。

举个例子:Windows Event Log能告诉你“进程A创建了进程B”。但Sysmon能告诉你“进程A创建了进程B,而且进程A是从网络上下载的,进程B的哈希值是xxx,进程B的父进程是yyy”。你看,信息量完全不是一个级别。

我个人习惯,在每台Windows服务器上都装Sysmon。配置文件的写法,我分享一个我常用的模板:

<Sysmon>
    <EventFiltering>
        <!-- 记录所有进程创建 -->
        <ProcessCreate onmatch="include">
            <!-- 不排除任何进程 -->
        </ProcessCreate>
        <!-- 记录网络连接 -->
        <NetworkConnect onmatch="include">
            <!-- 只记录出站连接 -->
            <DestinationPort condition="is">443</DestinationPort>
            <DestinationPort condition="is">80</DestinationPort>
        </NetworkConnect>
        <!-- 记录文件创建 -->
        <FileCreateTime onmatch="include">
            <!-- 监控临时目录 -->
            <TargetFilename condition="contains">C:\Windows\Temp</TargetFilename>
        </FileCreateTime>
    </EventFiltering>
</Sysmon>
避坑指南:我曾经因为Sysmon配置太宽松,导致日志量暴增,直接把日志服务器磁盘写满了。所以,配置时一定要想清楚:你到底需要什么数据?不需要的,果断排除。

3.3 ETW:Windows的“内窥镜”

ETW(Event Tracing for Windows)是Windows内核提供的一套事件追踪机制。它比Sysmon更底层,能捕获到内核级别的行为。比如,你可以用ETW监控到某个进程在调用什么API、读写什么注册表、加载了什么DLL。

说实话,ETW的学习曲线有点陡。我第一次接触时,看了三天文档,还是云里雾里的。但一旦你掌握了它,你会发现它是个宝藏。

举个例子:攻击者常用的“反射式DLL注入”,Sysmon可能抓不到,因为它在用户态。但ETW可以,因为它在内核态。你想想看,这差距有多大?

常用的ETW Provider,我列几个:

  • Microsoft-Windows-Kernel-Process:进程创建、终止、线程创建
  • Microsoft-Windows-Kernel-Network:网络连接、DNS查询
  • Microsoft-Windows-Kernel-File:文件读写、删除
  • Microsoft-Windows-DotNETRuntime:.NET程序的行为,比如JIT编译、异常抛出
我的经验:ETW的数据量非常大。如果你不加过滤,直接全量采集,那你的日志系统会“爆炸”。我建议你只采集你关心的Provider,并且设置好关键词过滤。

3.4 网络流量日志:看清“线”上的事

网络流量日志,说白了就是抓包。但抓包也分很多种:全流量抓包、NetFlow、DNS日志、HTTP日志等等。

我个人最看重的是DNS日志。为什么?因为攻击者几乎一定会用DNS。不管是C2通信、数据外传,还是域名生成算法(DGA),都离不开DNS。你想想看,如果一个内网IP,突然频繁解析一个从未见过的域名,而且这个域名的TTL很短,那大概率是有问题了。

我常用的网络流量采集工具:

  • Zeek(原名Bro):一个强大的网络分析框架,能生成连接日志、HTTP日志、DNS日志等
  • Suricata:一个入侵检测系统,也能做流量采集
  • tcpdump:老牌抓包工具,适合临时排查

举个例子,用Zeek采集DNS日志:

# 启动Zeek,监听eth0网卡
zeek -i eth0

# 生成的dns.log文件内容示例
# 时间戳 | 源IP | 目的IP | 查询域名 | 查询类型 | 响应码
2025-03-15 10:30:00 | 192.168.1.100 | 8.8.8.8 | evil.com | A | 0
我的习惯:我会把DNS日志和进程创建日志做关联。比如,发现一个进程在解析恶意域名,那这个进程大概率就是恶意软件。

3.5 EDR遥测数据:最后的“王牌”

EDR(Endpoint Detection and Response)遥测数据,是现在威胁狩猎的“王牌”。它把上面提到的所有数据源,都整合到了一个平台上。而且,它还能提供一些额外的信息,比如进程树、文件血缘关系、注册表变更等。

市面上的EDR产品很多,比如CrowdStrike、SentinelOne、Microsoft Defender for Endpoint等。它们采集的数据大同小异,但各有侧重。

我举个例子,用EDR遥测数据做威胁狩猎:

// 假设你在EDR平台上查询:最近24小时内,有哪些进程创建了计划任务?
// 查询语句(伪代码):
search ProcessCreate | where CommandLine contains "schtasks" | project Timestamp, ProcessName, ParentProcessName, CommandLine

你看,这个查询很简单,但能帮你发现很多问题。比如,一个正常的办公软件,突然创建了一个计划任务,那肯定有问题。

避坑指南:EDR遥测数据虽然强大,但它也有盲区。比如,它可能抓不到内核级别的攻击。所以,我建议你把它和ETW、网络流量日志结合起来用。别指望一个工具解决所有问题。

3.6 数据源的整合与取舍

说了这么多,你可能会问:我到底该用哪个?我的建议是:

  • 预算有限:Windows Event Log + Sysmon,这是最低配置
  • 预算中等:加上ETW和网络流量日志(Zeek或Suricata)
  • 预算充足:直接上EDR,但别忘了把ETW和网络流量日志作为补充

我在项目中遇到过很多次,客户只买了EDR,但没开ETW。结果攻击者用了一个内核级别的rootkit,EDR完全没发现。后来我帮他们补上了ETW,才把问题揪出来。所以,数据源的整合,真的很重要。

最后,送你一句话:数据是威胁狩猎的“弹药”。没有弹药,你枪法再好也没用。所以,花点时间,把数据源搞明白,把日志采集做好。这是你成为威胁狩猎专家的第一步。