收集 Tanium Threat Response 日志
支持的平台:
Google SecOps
SIEM
本文档介绍了如何使用 Tanium Connect 的原生 AWS S3 导出功能将 Tanium Threat Response 日志注入到 Google Security Operations。Tanium Threat Response 会以 JSON 格式生成威胁检测提醒、调查结果和事件响应数据,这些数据可使用 Tanium Connect 直接导出到 S3,而无需自定义 Lambda 函数。解析器会将来自 Tanium Threat Response 的原始 JSON 数据转换为统一数据模型 (UDM)。它首先尝试将传入的消息解析为 JSON,处理潜在的错误,然后提取相关字段并将其映射到 UDM 结构,包括有关受影响的主机、用户、进程、网络活动和安全发现的详细信息。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Tanium Core Platform 7.0 或更高版本
- 已安装并配置 Tanium Threat Response 模块
- 已安装 Tanium Connect 模块并拥有有效许可
- Tanium Direct Connect 1.9.30 或更高版本,用于调查功能
- 以管理员权限对 Tanium 控制台进行特权访问
- 对 AWS(S3、IAM)的特权访问权限
配置 Tanium Threat Response 服务账号
- 登录 Tanium 控制台。
- 依次前往模块 > 威胁响应。
- 点击右上角的设置。
- 在服务账号部分,配置以下内容:
- 服务账号用户:选择具有相应威胁响应权限的用户。
- 验证账号是否具有“连接用户”角色权限。
- 确认对“威胁响应”提醒和调查数据的访问权限。
- 点击保存,以应用服务账号配置。
收集 Tanium Threat Response 前提条件
- 以管理员身份登录 Tanium Console。
- 依次前往管理 > 权限 > 用户。
- 创建或确定具有以下角色的服务账号用户:
- 威胁响应管理员或威胁响应只读用户角色。
- 连接用户角色权限。
- 对受监控的计算机群组的访问权限(建议:所有计算机群组)。
- 针对“威胁响应”内容集添加了读取已保存问题权限。
为 Google SecOps 配置 AWS S3 存储桶和 IAM
- 按照以下用户指南创建 Amazon S3 存储桶:创建存储桶
- 保存存储桶名称和区域以供日后参考(例如
tanium-threat-response-logs
)。 - 按照以下用户指南创建用户:创建 IAM 用户。
- 选择创建的用户。
- 选择安全凭据标签页。
- 在访问密钥部分中,点击创建访问密钥。
- 选择第三方服务作为使用情形。
- 点击下一步。
- 可选:添加说明标记。
- 点击创建访问密钥。
- 点击 Download CSV file(下载 CSV 文件),保存访问密钥和不公开的访问密钥以供日后使用。
- 点击完成。
- 选择权限标签页。
- 在权限政策部分中,点击添加权限。
- 选择添加权限。
- 选择直接附加政策
- 搜索并选择 AmazonS3FullAccess 政策。
- 点击下一步。
- 点击添加权限。
配置 Tanium Connect AWS S3 目标
- 登录 Tanium 控制台。
- 依次前往模块 > 连接。
- 点击 Create Connection。
- 提供以下配置详细信息:
- 名称:输入一个描述性名称(例如
Threat Response Alerts to S3 for SecOps
)。 - 说明:可选说明(例如
Export threat detection alerts and investigation findings to AWS S3 for Google SecOps ingestion
)。 - 启用:选择此选项可启用连接,以便按计划运行。
- 名称:输入一个描述性名称(例如
- 点击下一步。
配置连接来源
- 在来源部分,提供以下配置详细信息:
- 来源类型:选择已保存的问题。
- 已保存的问题:选择以下与威胁响应相关的已保存问题之一:
- 威胁响应 - 提醒,用于接收威胁检测提醒。
- 威胁响应 - 调查结果,用于显示调查结果。
- 威胁响应 - 情报匹配,用于显示威胁情报匹配项。
- 威胁响应 - 端点活动,用于可疑的端点活动。
- 威胁响应 - 网络连接,用于检测基于网络的威胁。
- 计算机组:选择所有计算机或要监控的特定计算机组。
- 刷新间隔:为数据收集设置适当的间隔(例如,对于威胁提醒,设置为 10 分钟)。
- 点击下一步。
配置 AWS S3 目标位置
- 在目标部分,提供以下配置详细信息:
- 目标类型:选择 AWS S3。
- 目标名称:输入一个唯一名称(例如
Google SecOps ThreatResponse S3 Destination
)。 - AWS 访问密钥:输入在 AWS S3 配置步骤中下载的 CSV 文件中的 AWS 访问密钥。
- AWS 私有访问密钥:输入在 AWS S3 配置步骤中下载的 CSV 文件中的 AWS 私有访问密钥。
- 存储桶名称:输入您的 S3 存储桶名称(例如
tanium-threat-response-logs
)。 - 区域:选择您的 S3 存储桶所在的 AWS 区域。
- 键前缀:输入 S3 对象的前缀(例如
tanium/threat-response/
)。
- 点击下一步。
配置过滤条件
- 在过滤条件部分,配置数据过滤选项:
- 仅发送新项目:选择此选项可仅发送自上次导出以来的新威胁提醒。
- 列过滤条件:如果需要,可根据特定提醒属性添加过滤条件(例如,按提醒严重程度、威胁类型或调查状态过滤)。
- 点击下一步。
为 AWS S3 设置数据格式
- 在格式部分,配置数据格式:
- 格式:选择 JSON。
- 选项:
- 包含标题:取消选择可避免在 JSON 输出中包含标题。
- 包含空单元格:根据您的偏好设置进行选择。
- 高级选项:
- 文件命名:使用基于时间戳的默认命名方式。
- 压缩:选择 Gzip 可降低存储费用和缩短传输时间。
- 点击下一步。
安排连接
- 在时间表部分,配置导出时间表:
- 启用时间表:选择此选项可启用自动定时导出。
- 安排类型:选择周期性。
- 频次:选择每 10 分钟,以便及时收到威胁响应提醒。
- 开始时间:为首次导出设置合适的开始时间。
- 点击下一步。
保存并验证连接
- 在摘要界面中查看连接配置。
- 点击保存以创建连接。
- 点击测试连接以验证配置。
- 如果测试成功,请点击立即运行以执行初始导出。
- 在论坛概览页面中监控连接状态。
在 Google SecOps 中配置 Feed 以注入 Tanium Threat Response 日志
- 依次前往 SIEM 设置> Feed。
- 点击 + 添加新 Feed。
- 在Feed 名称字段中,输入 Feed 的名称(例如
Tanium Threat Response logs
)。 - 选择 Amazon S3 V2 作为来源类型。
- 选择 Tanium Threat Response 作为日志类型。
- 点击下一步。
- 为以下输入参数指定值:
- S3 URI:
s3://tanium-threat-response-logs/tanium/threat-response/
- 源删除选项:根据您的偏好选择删除选项。
- 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
- 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥。
- 私有访问密钥:具有 S3 存储桶访问权限的用户私有密钥。
- 资产命名空间:资产命名空间。
- 注入标签:应用于此 Feed 中事件的标签。
- S3 URI:
- 点击下一步。
- 在最终确定界面中查看新的 Feed 配置,然后点击提交。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
提醒 ID | security_result.rule_instance | 此字段的值取自原始日志中的“Alert Id”字段。 |
计算机 IP | principal.ip | 此字段的值取自原始日志中的“计算机 IP”字段。 |
计算机 IP | target.ip | 此字段的值取自原始日志中的“计算机 IP”字段。 |
计算机名称 | principal.hostname | 此字段的值取自原始日志中的“计算机名称”字段。 |
计算机名称 | target.hostname | 此字段的值取自原始日志中的“计算机名称”字段。 |
id | target.resource.attribute.labels | 此字段的值取自原始日志中的“id”字段。键已硬编码为“id”。 |
Intel ID | security_result.rule_id | 此字段的值取自原始日志中的“Intel Id”字段。 |
Intel 标签 | security_result.description | 此字段的值取自原始日志中的“Intel Labels”字段。 |
Intel 名称 | security_result.summary | 此字段的值取自原始日志中的“Intel Name”字段。 |
Intel 名称 | security_result.threat_name | 此字段的值取自原始日志中的“Intel Name”字段。 |
情报类型 | security_result.rule_type | 此字段的值取自原始日志中的“Intel Type”字段。 |
MatchDetails.finding.system_info.bits | principal.asset.platform_software.bits | 此字段的值取自原始日志中的“MatchDetails.finding.system_info.bits”字段。 |
MatchDetails.finding.system_info.os | principal.asset.platform_software.platform_version | 此字段的值取自原始日志中的“MatchDetails.finding.system_info.os”字段。 |
MatchDetails.finding.system_info.patch_level | principal.asset.platform_software.platform_patch_level | 此字段的值取自原始日志中的“MatchDetails.finding.system_info.patch_level”字段。 |
MatchDetails.finding.system_info.platform | principal.asset.platform_software.platform | 此字段的值取自原始日志中的“MatchDetails.finding.system_info.platform”字段。 |
MatchDetails.match.contexts.0.event.registrySet.keyPath | target.registry.registry_key | 此字段的值取自原始日志中的“MatchDetails.match.contexts.0.event.registrySet.keyPath”字段。 |
MatchDetails.match.contexts.0.event.registrySet.valueName | target.registry.registry_value_name | 此字段的值取自原始日志中的“MatchDetails.match.contexts.0.event.registrySet.valueName”字段。 |
MatchDetails.match.properties.args | security_result.about.process.command_line | 此字段的值取自原始日志中的“MatchDetails.match.properties.args”字段。 |
MatchDetails.match.properties.file.fullpath | target.process.file.full_path | 此字段的值取自原始日志中的“MatchDetails.match.properties.file.fullpath”字段。 |
MatchDetails.match.properties.file.md5 | target.process.file.md5 | 此字段的值取自原始日志中的“MatchDetails.match.properties.file.md5”字段。 |
MatchDetails.match.properties.file.sha1 | target.process.file.sha1 | 此字段的值取自原始日志中的“MatchDetails.match.properties.file.sha1”字段。 |
MatchDetails.match.properties.file.sha256 | target.process.file.sha256 | 此字段的值取自原始日志中的“MatchDetails.match.properties.file.sha256”字段。 |
MatchDetails.match.properties.fullpath | target.process.file.full_path | 此字段的值取自原始日志中的“MatchDetails.match.properties.fullpath”字段。 |
MatchDetails.match.properties.local_port | principal.port | 此字段的值取自原始日志中的“MatchDetails.match.properties.local_port”字段。 |
MatchDetails.match.properties.md5 | target.process.file.md5 | 此字段的值取自原始日志中的“MatchDetails.match.properties.md5”字段。 |
MatchDetails.match.properties.parent.args | security_result.about.process.command_line | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.args”字段。 |
MatchDetails.match.properties.parent.file.fullpath | target.process.parent_process.file.full_path | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.file.fullpath”字段。 |
MatchDetails.match.properties.parent.file.md5 | target.process.parent_process.file.md5 | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.file.md5”字段。 |
MatchDetails.match.properties.parent.parent.file.fullpath | target.process.parent_process.parent_process.file.full_path | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.file.fullpath”字段。 |
MatchDetails.match.properties.parent.parent.file.md5 | target.process.parent_process.parent_process.file.md5 | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.file.md5”字段。 |
MatchDetails.match.properties.parent.parent.parent.file.fullpath | target.process.parent_process.parent_process.parent_process.file.full_path | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.parent.file.fullpath”字段。 |
MatchDetails.match.properties.parent.parent.parent.file.md5 | target.process.parent_process.parent_process.parent_process.file.md5 | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.parent.file.md5”字段。 |
MatchDetails.match.properties.parent.parent.parent.parent.file.fullpath | target.process.parent_process.parent_process.parent_process.parent_process.file.full_path | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.parent.parent.file.fullpath”字段。 |
MatchDetails.match.properties.parent.parent.parent.parent.file.md5 | target.process.parent_process.parent_process.parent_process.parent_process.file.md5 | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.parent.parent.file.md5”字段。 |
MatchDetails.match.properties.parent.parent.parent.parent.parent.file.fullpath | target.process.parent_process.parent_process.parent_process.parent_process.parent_process.file.full_path | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.parent.parent.parent.file.fullpath”字段。 |
MatchDetails.match.properties.parent.parent.parent.parent.parent.file.md5 | target.process.parent_process.parent_process.parent_process.parent_process.parent_process.file.md5 | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.parent.parent.parent.file.md5”字段。 |
MatchDetails.match.properties.parent.pid | target.process.parent_process.pid | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.pid”字段。 |
MatchDetails.match.properties.parent.parent.pid | target.process.parent_process.parent_process.pid | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.pid”字段。 |
MatchDetails.match.properties.parent.parent.parent.pid | target.process.parent_process.parent_process.parent_process.pid | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.parent.pid”字段。 |
MatchDetails.match.properties.parent.parent.parent.parent.pid | target.process.parent_process.parent_process.parent_process.parent_process.pid | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.parent.parent.pid”字段。 |
MatchDetails.match.properties.parent.parent.parent.parent.parent.pid | target.process.parent_process.parent_process.parent_process.parent_process.parent_process.pid | 此字段的值取自原始日志中的“MatchDetails.match.properties.parent.parent.parent.parent.parent.pid”字段。 |
MatchDetails.match.properties.pid | target.process.pid | 此字段的值取自原始日志中的“MatchDetails.match.properties.pid”字段。 |
MatchDetails.match.properties.protocol | network.ip_protocol | 此字段的值取自原始日志中的“MatchDetails.match.properties.protocol”字段。 |
MatchDetails.match.properties.remote_ip | target.ip | 此字段的值取自原始日志中的“MatchDetails.match.properties.remote_ip”字段。 |
MatchDetails.match.properties.remote_port | target.port | 此字段的值取自原始日志中的“MatchDetails.match.properties.remote_port”字段。 |
MatchDetails.match.properties.sha1 | target.process.file.sha1 | 此字段的值取自原始日志中的“MatchDetails.match.properties.sha1”字段。 |
MatchDetails.match.properties.sha256 | target.process.file.sha256 | 此字段的值取自原始日志中的“MatchDetails.match.properties.sha256”字段。 |
MatchDetails.match.properties.user | target.administrative_domain | 系统会通过在原始日志中查找反斜杠字符 (),从“MatchDetails.match.properties.user”字段中提取域名。反斜杠之前的字符会被视为域名。 |
MatchDetails.match.properties.user | target.user.userid | 系统会通过在原始日志中查找反斜杠字符 (""),从“MatchDetails.match.properties.user”字段中提取用户名。反斜杠后面的字符会被视为用户名。 |
MITRE 技术 | security_result.threat_id | 此字段的值取自原始日志中的“MITRE Techniques”字段。 |
params | security_result.detection_fields | 此字段的值取自原始日志中的“params”字段。该键硬编码为“params_”与参数的索引的串联。 |
时间戳 | metadata.event_timestamp | 此字段的值取自原始日志中的“时间戳”字段。 |
不适用 | is_alert | 如果原始日志中的“计算机 IP”字段不为空,则此字段硬编码为“true”。 |
不适用 | metadata.log_type | 此字段已硬编码为“TANIUM_THREAT_RESPONSE”。 |
不适用 | metadata.product_event_type | 此字段已硬编码为“Tanium Signal”。 |
不适用 | metadata.product_name | 此字段已硬编码为“威胁响应”。 |
不适用 | metadata.vendor_name | 此字段已硬编码为“Tanium”。 |
不适用 | network.http.method | 如果原始日志中“method”字段的值为“submit”,则此字段会硬编码为“POST”。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。