配置衍生
衍生使用以下方法向统一数据模型 (UDM) 指标或事件添加上下文:
- 标识描述指标的别名实体,通常是 UDM 字段。
- 使用已标识的别名或实体中的其他详细信息填充 UDM 消息。
- 向 UDM 事件添加全局衍生数据,例如 GeoIP 和 VirusTotal。
查看事件
在事件查看器的事件字段标签页中查看事件。此标签页以分层树形结构显示 UDM 事件字段,并标记为已选择 。每个 UDM 字段都标有一个图标,用于指示该字段是否包含衍生数据。图标标签如下:
- U:未衍生的字段在标准化过程中直接从原始原始日志中提取值。
- E:衍生的字段包含 Google SecOps 生成的值,用于提供有关您环境中的制品的其他上下文。
衍生的字段会显示所有关联的来源,以帮助您进行验证、问题排查、审核和合规性检查。您还可以按字段的衍生来源过滤字段,以优化视图。
了解衍生逻辑模式
Google SecOps 会根据衍生类型对数据应用不同的逻辑模式。使用下表了解这些模式,以便进行问题排查,并解释为什么某些字段会被填充、合并或覆盖。
| 逻辑模式 | 说明 | 适用的衍生 |
|---|---|---|
| 首次匹配 | 遵循严格的优先级列表。流水线仅查询序列中找到的第一个可用值。 | 制品(文件哈希) |
| 已合并 | 同时收集和合并来自多个字段的数据,以构建单个“黄金”实体记录。 | 资产、用户 |
| 条件回退 | 仅当缺少优先级较高的标识符时,特定字段才用于衍生。 | 资产(ip 地址) |
| 映射和覆盖 | 使用唯一 ID (PSPI) 解析实体。来自衍生来源的别名数据会替换现有的解析数据。 |
进程 |
资产衍生
对于资产衍生,流水线会通过评估多个 UDM 字段来标识唯一资产。与 制品衍生(选择一个)不同,资产衍生会合并来自多个 ID 的上下文,以构建完整的资产个人资料。
Google SecOps 会衍生使用相同 命名空间 分类的资产事件。
对于资产,逻辑是累积的,而不是排他的,但特定回退场景除外。使用以下详细信息进行说明:
- 逻辑类型:已合并或回退。流水线会从所有可用字段中收集数据,以创建单个“实体”视图,除非满足回退条件(例如
asset_id检查)。 - 字段映射:
- 主机名、MAC 和
asset_id:被视为主要 ID。所有这些字段的别名结果会合并在一起,以生成最终的衍生资产个人资料。 - IP 地址:仅当
asset_id不可用时,才包含在衍生查询中。
- 主机名、MAC 和
对于每个资产事件,流水线会从 principal、src 和 target 实体中提取以下 UDM 字段:
| UDM 字段 | 指标类型 | 逻辑 / 优先级 |
|---|---|---|
hostname |
主机名 | 已合并:这些字段的别名结果会合并在一起,以生成最终的衍生资产记录。 |
asset_id |
PRODUCT_SPECIFIC_ID | 已合并:用于整合资产上下文的主要标识符。 |
mac |
MAC | 已合并:与其他标识符结合使用,以解析资产。 |
ip |
IP | 回退:仅当 asset_id 不可用时,才包含在衍生查询中。 |
用户衍生
用户衍生通过查找特定标识符来解析身份数据。与 制品衍生类似,此流水线使用优先级顺序来确定哪个标识符用作查找的主键。
对于每个用户事件,流水线会从 principal、src 和 target 中提取以下 UDM 字段:
| UDM 字段 | 指标类型 | 逻辑或优先级 |
|---|---|---|
user.email_addresses |
电子邮件 | 最高优先级 :流水线首先尝试根据用户的主要或辅助电子邮件地址进行衍生。 |
user.windows_sid |
WINDOWS_SID | 第二优先级 :如果没有电子邮件地址,流水线会使用 Windows 安全标识符 (SID)。 |
user.userid |
USER_ID | 第三优先级 :仅在缺少电子邮件地址和 SID 时使用;通常映射到本地或应用专用 ID。 |
user.employee_id |
EMPLOYEE_ID | 最低优先级 :用于解析用户身份的最终回退。 |
对于每个指标,流水线都会执行以下操作:
- 检索用户实体列表。例如,
principal.email_address和principal.userid的实体可能相同,也可能不同。 - 从优先级最高的指标类型中选择别名,使用以下优先级顺序:
WINDOWS_SID、EMAIL、USERNAME、EMPLOYEE_ID和PRODUCT_OBJECT_ID。 - 使用有效间隔与事件时间相交的实体填充
noun.user。
进程衍生
进程衍生侧重于提供对执行事件的可见性。 流水线会提取进程详细信息,并通过交叉引用文件信誉和父子关系来衍生这些详细信息。
使用进程衍生将产品专用进程 ID (product_specific_process_id)(或 PSPI)映射到实际进程,并检索有关父进程的详细信息。此过程依赖于 EDR 事件批处理类型。
| UDM 实体 | 字段来源 | 逻辑或优先级 |
|---|---|---|
| 主要实体 |
principal、src、 target
|
提取 :流水线会从这些顶级实体中提取 PSPI,以启动查找。 |
| 父进程 |
principal.process.parent_process、、 src.process.parent_process、、 target.process.parent_process
|
映射 :PSPI 通过进程别名检索有关父进程的详细信息。 |
| 数据合并 |
noun.process (例如,principal.process)
|
覆盖规则 :别名字段具有绝对优先级。如果同一字段同时存在解析数据和别名数据,流水线会将解析数据替换为别名数据。 |
流水线使用进程别名从 PSPI 中标识实际进程,并检索有关父进程的信息。然后,它会将此数据合并到衍生消息中的相应 noun.process 字段中。
用于进程别名的 EDR 索引字段
当进程启动时,系统会收集元数据(例如,命令行、文件哈希和父进程详细信息)。在机器上运行的 EDR 软件会分配一个供应商特定的进程 UUID。
下表列出了在进程启动事件期间编入索引的字段:
| UDM 字段 | 指标类型 |
|---|---|
| target.product_specific_process_id | PROCESS_ID |
| target.process | 整个进程;不仅仅是指标 |
除了标准化事件中的 target.process 字段之外,Google SecOps 还会收集父进程信息并将其编入索引。
制品衍生
制品衍生会添加来自 VirusTotal 的文件哈希元数据和 IP 地址的地理定位数据。对于文件哈希,流水线会在优先级列表中找到第一个值时停止;但是,对于 IP 地址,它会并行处理所有条目。对于每个 UDM 事件,流水线会从 principal、src 和 target 实体中提取并查询以下制品指标的上下文数据,其中衍生行为因指标类型而异:
| 指标类型 | 提取逻辑 | 优先级 / 操作顺序 |
|---|---|---|
| 文件哈希 | 首次匹配 |
流水线会按以下顺序搜索哈希,并且仅选择第一个可用哈希来查询 VirusTotal:
|
| IP 地址 | 并行(重复) | 每个公共或可路由的 IP 地址都被视为一个独立的条目。没有优先级顺序;每个 IP 都会收到自己的衍生结果。 |
流水线使用 UNIX 纪元和事件小时来定义文件制品查询的时间范围。如果有地理定位数据,流水线会根据地理定位数据的来源覆盖 principal、src 和 target 实体的以下 UDM 字段:
artifact.ipartifact.locationartifact.network(仅当数据包含 IP 网络上下文时)location(仅当原始数据不包含此字段时)
如果流水线找到文件哈希元数据,它会根据指标的来源将该元数据添加到文件或 process.file 字段。流水线会保留与新数据不重叠的任何现有值。
IP 地理定位衍生
地理别名提供外部 IP 地址的地理定位数据。对于 UDM 事件的 principal、target 或 src 字段中的每个未别名的 IP 地址,系统都会创建一个 ip_geo_artifact 子协议缓冲区,其中包含关联的位置和 ASN 信息。
地理别名不使用回溯或缓存。由于事件数量众多,Google SecOps 会在内存中维护一个索引。
使用 VirusTotal 文件元数据衍生事件
Google SecOps 会将文件哈希衍生为 UDM 事件,并在调查期间提供其他上下文。哈希别名通过组合所有类型的文件哈希并在搜索期间提供有关文件哈希的信息来衍生 UDM 事件。
Google SecOps 集成了 VirusTotal 文件元数据和关系衍生,以识别恶意活动模式并跟踪恶意软件在网络中的移动。
原始日志提供有关文件的有限信息。VirusTotal 使用文件元数据衍生事件,包括有关恶意哈希和文件的详细信息。 元数据包括文件名、类型、导入的函数和标签等信息。您可以在 UDM 搜索和检测引擎中使用此信息以及 YARA-L,以了解恶意文件事件并在威胁搜寻期间使用。例如,您可以检测对原始文件的修改,这些修改使用文件元数据进行威胁检测。
以下信息与记录一起存储。 如需查看所有 UDM 字段的列表,请参阅统一数据模型字段列表。
| 数据类型 | UDM 字段 |
|---|---|
| sha-256 | ( principal | target | src | observer ).file.sha256 |
| md5 | ( principal | target | src | observer ).file.md5 |
| sha-1 | ( principal | target | src | observer ).file.sha1 |
| 大小 | ( principal | target | src | observer ).file.size |
| ssdeep | ( principal | target | src | observer ).file.ssdeep |
| vhash | ( principal | target | src | observer ).file.vhash |
| authentihash | ( principal | target | src | observer ).file.authentihash |
| PE 文件元数据 Imphash | ( principal | target | src | observer ).file.pe_file.imphash |
| security_result.threat_verdict | ( principal | target | src | observer ).(process | file).security_result.threat_verdict |
| security_result.severity | ( principal | target | src | observer ).(process | file).security_result.severity |
| last_modification_time | ( principal | target | src | observer ).file.last_modification_time |
| first_seen_time | ( principal | target | src | observer ).file.first_seen_time |
| last_seen_time | ( principal | target | src | observer ).file.last_seen_time |
| last_analysis_time | ( principal | target | src | observer ).file.last_analysis_time |
| exif_info.original_file | ( principal | target | src | observer ).file.exif_info.original_file |
| exif_info.product | ( principal | target | src | observer ).file.exif_info.product |
| exif_info.company | ( principal | target | src | observer ).file.exif_info.company |
| exif_info.file_description | ( principal | target | src | observer ).file.exif_info.file_description |
| signature_info.codesign.id | ( principal | target | src | observer ).file.signature_info.codesign.id |
| signature_info.sigcheck.verfied | ( principal | target | src | observer ).file.signature_info.sigcheck.verified |
| signature_info.sigcheck.verification_message | ( principal | target | src | observer ).file.signature_info.sigcheck.verification_message |
| signature_info.sigcheck.signers.name | ( principal | target | src | observer ).file.signature_info.sigcheck.signers.name |
| signature_info.sigcheck.status | ( principal | target | src | observer ).file.signature_info.sigcheck.signers.status |
| signature_info.sigcheck.valid_usage | ( principal | target | src | observer ).file.signature_info.sigcheck.signers.valid_usage |
| signature_info.sigcheck.cert_issuer | ( principal | target | src | observer ).file.signature_info.sigcheck.signers.cert_issuer |
| file_type | ( principal | target | src | observer ).file.file_type |
排查衍生问题
如果您发现 UDM 事件缺少预期的衍生数据,请使用以下建议来帮助解决问题。
一般衍生
如果您的某些事件根本没有被衍生,很可能是因为 Google SecOps 优先考虑传送速度。一小部分事件(<1%)可能会在首次传递时跳过衍生。如需解决此问题,请过几分钟再来查看。系统会自动重新处理这些事件。如果一小时后仍然缺少衍生,请确认日志源已正确解析为 UDM。
制品衍生(首次匹配逻辑)
如果您的事件具有 MD5 和 SHA256 哈希,但您只能看到 SHA256 的 VirusTotal 元数据,这就是 首次匹配逻辑。流水线会在找到优先级最高的哈希 (sha256) 后立即停止。如果存在 SHA256,它不会查询 MD5 的 VirusTotal。
如果您看到 principal.ip 的地理定位,但没有看到 target.ip 的地理定位,则并行逻辑会单独处理每个 IP。如果一个 IP 是内部或专用 IP(不可路由),另一个是公共 IP,则只有公共 IP 会收到地理定位衍生。
资产衍生(合并和回退逻辑)
如果 IP 地址字段未在您的资产上显示衍生数据,则表示它是条件回退逻辑。仅当缺少 asset_id (PSID) 时,IP 才用于衍生查询。如果存在 asset_id,系统会依赖它并忽略该特定查询的 IP,以防止冗余或冲突的数据。
用户衍生(优先级顺序)
如果我的本地日志显示 "Security",但 Department 字段显示 "IT",则表示用户衍生优先使用解析字段,而不是别名字段。如果您的原始日志使用 "IT" 进行解析,则衍生流水线不会使用来自身份来源(例如 Okta 或 AD)的 "Security" 值覆盖它。
进程衍生(映射和覆盖)
如果您在原始日志中看到一个进程名称,但在 UDM 搜索中,它被替换为另一个名称,则表示它是覆盖逻辑。进程衍生优先使用别名字段。如果 PSPI 查找从 EDR 上下文中返回更准确的进程名称,它会完全替换原始解析值。
后续步骤
如需了解如何将衍生数据与其他 Google SecOps 功能搭配使用,请参阅以下内容:
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。