搜索原始日志
当您执行搜索时,Google Security Operations 会先检查已提取、解析和归一化的安全数据。如果在归一化数据中找不到相应信息,您可以使用原始日志搜索来检查未经解析的原始日志。您还可以使用正则表达式更详细地检查原始日志。
您可以使用原始日志搜索来调查日志中显示(但未编入索引)的制品,包括:
- 用户名
- 文件名
- 注册表项
- 命令行参数
- 原始 HTTP 请求相关数据
- 基于正则表达式的域名
- 资源命名空间和地址
原始日志搜索的主要应用场景
原始日志搜索是一种专门的调查工具,适用于以下使用情形:
- 验证归一化并排查解析器问题:将原始日志条目与生成的 UDM 事件进行比较,以确定归一化差距、验证字段映射或查明未解析的日志。
- 深入的取证调查和威胁搜寻:搜索未映射到结构化 UDM 字段的非常见或未编入索引的入侵迹象 (IOC)、命令行实参、注册表键、文件路径或特定字符串。
- 调查非结构化数据和自定义数据:立即查询新纳入的或专有的日志源,无需等待开发 UDM 解析器。
原始日志搜索
您可以使用着陆页或菜单栏中的搜索栏执行原始日志搜索。选择以下方法之一:
使用 raw= 格式
您可以使用 raw= 格式查询原始日志。建议使用这个方法。
- 如需搜索子字符串,请将搜索字词用英文引号括起来。例如,
raw = "ABC"。 - 如需使用正则表达式进行搜索,请使用正斜杠 (/) 将表达式括起来。例如,
raw = /AB*C/。 - 可选:使用
parsed关键字按解析状态进行过滤:parsed = false:显示未生成 UDM 事件的未解析日志。parsed = true:显示已成功解析为 UDM 事件的日志。
旧版方法:使用“原始日志搜索”提示
- 在搜索栏中,输入包含通配符的搜索字符串,该字符串至少包含 4 个字符(例如 MD5 哈希)。
- 如果搜索未返回任何结果,系统会显示原始日志搜索选项。
- 可选:指定开始时间和结束时间。默认范围为过去 7 天。
- 可选:在日志来源列表中,选择一个或多个日志来源。默认设置为全部。
- 点击搜索。
与搜索字符串关联的事件会显示在时间轴中。点击某个事件(或原始日志图标),打开相应的原始日志。 搜索查询以及应用的过滤条件也会显示在原始日志搜索页面上。
优化原始日志查询
原始日志搜索会扫描未编入索引的日志载荷,因此通常比 UDM 搜索慢。如需改善搜索效果,请更改搜索设置,以限制查询的数据量:
- 时间范围选择器:限制您运行查询的数据的时间范围。
- “日志来源”选择器:将原始日志搜索范围限定为仅搜索特定来源的日志,而不是所有日志来源的日志。从日志来源菜单中,选择一个或多个日志来源(默认值为全部),或直接将
log_source过滤条件附加到查询中 (log_source = IN["<var>LOG_SOURCE_NAME</var>"])。 - 正则表达式:使用特定的正则表达式。例如,
raw = /goo\w{3}\.com/可与google.com、goodle.com和goog1e.com搭配使用,以进一步缩小原始日志搜索范围。
有针对性的原始日志搜索示例
将 raw = 前缀与 log_source 和 parsed 过滤器结合使用,可将搜索范围限定为相关 Feed,并防止大量日志源截断搜索结果:
在单个日志源中搜索确切的字符串:
raw = "<var>SEARCH_TERM</var>" and log_source = IN["<var>LOG_SOURCE_NAME</var>"]搜索部分日志源:
raw = "<var>SEARCH_TERM</var>" and log_source = IN["<var>LOG_SOURCE_1</var>", "<var>LOG_SOURCE_2</var>"]使用正则表达式搜索未解析的日志:
raw = /<var>REGULAR_EXPRESSION</var>/ and parsed = false and log_source = IN["<var>LOG_SOURCE_NAME</var>"]
随时间变化的趋势
使用随时间变化的趋势图表了解原始日志在搜索时间范围内的分布情况。您可以在图表上应用过滤条件,以查找已解析的日志和原始日志。点击 展开更多(或 展开更少)即可展开或收起图表。
原始日志结果
运行原始日志搜索时,结果是 UDM 事件和实体(由与搜索匹配的原始日志生成)以及原始日志的组合。您可以点击任意搜索结果,进一步探索:
UDM 事件或实体:如果您点击某个 UDM 事件或实体,Google SecOps 会显示所有相关事件和实体,以及与该项关联的原始日志。
原始日志:如果您点击原始日志,Google SecOps 会显示整个原始日志行以及相应日志的来源。
结果限制和抽样
原始日志搜索会强制执行以下结果和查询限制:
- 大批量结果限制:对于最近提取的日志(在导出到长期列式存储空间之前存储在批量存储空间中),如果大型日志批次包含 1,000 个或更多事件,则返回的结果数量上限为 1,000 个。将日志导出到长期列式存储空间后,1,000 条结果的批次限制不再适用。
- 界面和 CSV 导出总数上限:在 Google SecOps 控制台中进行单次原始日志搜索或 CSV 导出时,所有查询的日志源返回的结果总数上限为 10,000。如果查询匹配的条目超过 10,000 个,Google SecOps 会返回 10,000 个结果的代表性样本。
- API 结果限制:原始日志搜索 API (
SearchRawLogs) 对每个查询请求 (page_size) 强制执行 10,000 条条目的上限。 - 搜索查询长度:原始日志搜索输入字段的长度上限为 150 个字符。
当您同时搜索多个日志源时(将日志源菜单设置为全部),Google SecOps 会在分布式存储分片中并行执行查询,并在内存中过滤之前应用保护性查询限制,以保持快速的响应时间。由于这种分布式架构,广泛的多来源查询和单来源查询返回的结果总数可能会因以下因素而有所不同:
- 不同的提取量:高提取量日志源生成的大批次结果比低提取量源更快达到 1,000 个结果的批次限制。
- 分布式批量抽样:包含 1,000 个或更多事件的大型批次在应用总体 10,000 个结果的查询抽样限制之前,最多只能返回 1,000 个结果,这会改变查询返回的抽样日志的比例。
- 近期和历史存储层:最近提取的日志会从低延迟的批量存储中查询,以便立即进行搜索,但大型批次的结果数量上限为 1,000 个。将日志导出到长期列式存储空间后,查询可以直接扫描各个日志条目,而不会受到 1,000 条结果的批次限制(最多可达到 10,000 条结果的总查询限制),从而为历史搜索提供更一致的结果数量。
下载原始日志结果
如需将原始日志结果下载到 CSV 文件,请在原始日志结果表格中,依次点击 更多 > 下载为 CSV。
默认情况下,CSV 文件始终包含“原始日志”列。您可以使用列按钮打开列管理器,然后移除或添加时间戳和类型列。如果您添加任何其他列,这些列将显示在表格中,但不会下载到 CSV 文件中。
如需下载 UDM 字段,请运行 UDM 搜索,选择所需的列,然后以 CSV 文件格式下载。
如果 Google Chrome 中显示 Failed to execute 'showSaveFilePicker' 错误,请执行以下步骤:
依次前往设备 > Chrome > 设置。
选择用户和浏览器。
找到文件系统写入权限设置。
将
prefix.backstory.chronicle.security添加到许可网站列表中。
正则表达式
您可以在 Google SecOps 中使用正则表达式来搜索和匹配安全数据中的字符串集。正则表达式可帮助您使用信息片段缩小搜索范围,而无需完全匹配。
如需使用正则表达式语法执行搜索,请执行以下操作:
- 在 SIEM 搜索中,在搜索字段中输入
raw = /YOUR_REGEX/,然后点击运行搜索。 - 在旧版搜索栏中:
- 在搜索字段中输入正则表达式(长度介于 4 到 66 个字符之间)。
- 选中以正则表达式形式运行查询复选框,然后点击搜索(或原始日志搜索结果页面上的更新搜索)。
Google SecOps 正则表达式基础架构基于 Google RE2(一种开源正则表达式引擎)。Google SecOps 使用相同的正则表达式语法。
下表突出显示了可用于搜索的一些常见正则表达式语法。
| 任意字符 | . |
| x 个任意字符 | {x} |
| 字符类 | [xyz] |
| 否定字符类 | [^xyz] |
| 字母数字 (0-9A-Za-z) | [[:alnum:]] |
| 字母 (A-Za-z) | [[:alpha:]] |
| 数字 (0-9) | [[:digit:]] |
| 小写 (a-z) | [[:lower:]] |
| 大写 (A-Z) | [[:upper:]] |
| 字词字符 (0-9A-Za-z_) | [[:word:]] |
| 十六进制数 (0-9A-Fa-f) | [[:xdigit:]] |
| 问号符号 (?) | 匹配零次或一次前面的元素。 |
| 星号 (*) | 匹配前一个字符或群组出现零次或多次的情况。 |
| 加号 (+) | 匹配一次或多次出现的前一个字符或组。 |
以下示例说明了如何使用正则表达式搜索数据:
goo.le\.com- 匹配以goo开头、后跟任意单个字符、再后跟le.com的任何字符串,例如google.com或goo0le.com。goo\w{3}\.com- 匹配以goo开头、后跟三个字词字符 (\w) 并以.com结尾的字符串。例如google.com、goojle.com或goodle.com。[[:digit:]]\.[[:alpha:]]- 匹配包含一位数、一个英文句点 (.) 和一个字母字符的字符串,例如34323.system、23458.office或897.net。
用于搜索 Windows 日志的正则表达式示例
本部分提供了一些正则表达式查询字符串,您可将其与 Google SecOps 原始日志搜索功能搭配使用,以查找经常监控的 Windows 事件。这些示例假设 Windows 日志消息采用 JSON 格式。
如需详细了解常用的受监控 Windows 事件 ID,请参阅要监控的事件。提供的示例遵循这些使用场景中所述的类似模式。
| 用例:返回 EventID 1150 的事件 | |
| 正则表达式字符串: | \"EventID\"\:\s*1150 |
| 匹配的值: | "EventID":1150 |
| 用例:返回事件 ID 为 1150 或 1151 的事件 | |
| 正则表达式字符串 | (?:\"EventID\"\:\s*)(?:1150|1151) |
| 匹配的值 | "EventID":1150和"EventID":1151之间 |
| 使用情形:返回事件 ID 为 1150 或 1151 且 ThreadID 为 9092 的事件 | |
| 正则表达式字符串 | (?:\"EventID\"\:\s*)(?:1150|1151).*(?:\"ThreadID\"\:\s*9092) |
| 匹配的值 | "EventID":1150 <...any number of characters...> "ThreadID":9092
和 "EventID":1151 <...any number of characters...> "ThreadID":9092 |
查找账号管理事件
这些正则表达式查询字符串通过 EventID 特性标识常见的账号管理事件。
| 事件类型 | 正则表达式 |
| 创建了用户账号 | "EventID\"\:\s*4720 |
| 已启用用户账号 | "EventID\"\:\s*4722 |
| 已停用用户账号 | "EventID\"\:\s*4725 |
| 已删除用户账号 | "EventID\"\:\s*4726 |
| 用户权限修改 | "EventID\"\:\s*4703 |
| 向已启用安全性的全局群组添加了成员 | "EventID\"\:\s*4728 |
| 从已启用安全性的全局群组中移除了成员 | "EventID\"\:\s*4729 |
| 已删除已启用安全性的全局群组 | "EventID\"\:\s*4730 |
查找登录成功事件
这些正则表达式查询字符串使用 EventID 和 LogonType 特性标识成功登录事件的类型。
| 事件类型 | 正则表达式 |
| 登录成功 | "EventID\"\:\s*4624 |
| 登录成功 - 互动 (LogonType=2) | "EventID\"\:\s*4624.*?LogonType\"\:\s*\"2\" |
| 登录成功 - 批量登录 (LogonType=4) | "EventID\"\:\s*4624.*?LogonType\"\:\s*\"4\" |
| 登录成功 - 服务登录 (LogonType=5) | "EventID\"\:\s*4624.*?LogonType\"\:\s*\"5\" |
| 登录成功 - 远程互动登录 (LogonType=10) | "EventID\"\:\s*4624.*?LogonType\"\:\s*\"10\" |
| 登录成功 - 互动、批量、服务或远程互动 | (?:"EventID\"\:\s*4624.*?LogonType\"\:\s*\")(?:2|4|5|10)\" |
查找登录失败事件
这些正则表达式查询字符串通过 EventID 和 LogonType 特性标识成功登录事件的类型。
| 事件类型 | 正则表达式 |
| 登录失败 | "EventID\"\:\s*4625 |
| 登录失败 - 互动 (LogonType=2) | "EventID\"\:\s*4625.*?LogonType\"\:\s*\"2\" |
| 登录失败 - 批量登录 (LogonType=4) | "EventID\"\:\s*4625.*?LogonType\"\:\s*\"4\" |
| 登录失败 - 服务登录 (LogonType=5) | "EventID\"\:\s*4625.*?LogonType\"\:\s*\"5\" |
| 登录失败 - 远程互动登录 (LogonType=10) | "EventID\"\:\s*4625.*?LogonType\"\:\s*\"10\" |
| 登录失败 - 交互、批量、服务或远程交互式 | (?:"EventID\"\:\s*4625.*LogonType\"\:\s*\")(?:2|4|5|10)\" |
查找进程、服务和任务事件
这些正则表达式查询字符串通过 EventID 特性标识某些进程和服务事件。
| 事件类型 | 正则表达式 |
| 进程启动 | "EventID\"\:\s*4688 |
| 进程退出 | "EventID\"\:\s*4689 |
| 已安装服务 | "EventID\"\:\s*4697 |
| 已创建新服务 | "EventID\"\:\s*7045 |
| 已创建安排任务 | "EventID\"\:\s*4698 |
查找与对象访问权限相关的事件
这些正则表达式查询字符串通过 EventID 特性标识不同类型的进程和服务相关事件。
| 事件类型 | 正则表达式 |
| 已清除审核日志 | "EventID\"\:\s*1102 |
| 尝试访问对象 | "EventID\"\:\s*4663 |
| 已访问共享 | "EventID\"\:\s*5140 |
问题排查
请使用下表解决常见的原始日志搜索问题:
| 问题 | 说明 | 修复 |
|---|---|---|
| 不同搜索中的结果数量不一致 | 与单来源查询相比,跨多个日志来源 (All) 进行查询时,最近提取的日志返回的总结果数会有所不同,这是因为在批处理存储和分布式抽样中,大型批次(包含 1,000 个或更多事件的批次)的结果数上限为 1,000。 | 从日志来源菜单中选择特定日志来源,或使用 log_source = IN["LOG_SOURCE_NAME"] 进行过滤,并缩小搜索时间范围。 |
| 结果被截断或抽样(已达到 1 万条结果的上限) | 搜索查询在界面、CSV 导出或 SearchRawLogs API (page_size) 中匹配的总日志数超过 10,000,因此仅返回 10,000 个结果样本。 |
缩短查询时间窗口(例如,缩短为 1 小时),并添加特定的 RE2 正则表达式或 parsed = false 过滤条件。 |
| 批量提取审核差异 | 原始日志搜索结果计数与总提取日志量不匹配,因为在内存中过滤之前,系统会应用保护性批次和分片限制。 | 使用 UDM 搜索、UDM 搜索中的统计信息和汇总或提取健康状况指标来验证提取的完整性和容量对等性。 |
| 查询超出字符数限制 | 搜索字符串超出了原始日志查询的 150 个字符数限制。 | 简化正则表达式,或将调查拆分为针对各个日志源的较小查询。 |