收集 Tanium 审核日志
支持的平台:
Google SecOps
SIEM
本文档介绍了如何使用 Tanium Connect 的原生 S3 导出功能,通过 Amazon S3 将 Tanium 审核日志注入到 Google Security Operations。解析器会提取日志,最初会清除许多默认字段。然后,它使用 grok 和 json 过滤器解析日志消息,提取时间戳、设备 IP 和审核详细信息等字段。解析器会将这些提取的字段映射到 UDM,并处理各种数据类型和条件逻辑,以根据特定 Tanium 审核日志属性的存在情况和值填充相应的 UDM 字段。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 对 Tanium Connect 和 Tanium Console 的特权访问权限
- 对 AWS(S3、IAM)的特权访问权限
创建 Amazon S3 存储桶
- 打开 Amazon S3 控制台。
- 如有需要,您可以更改地区。
- 在导航栏中,选择您希望 Tanium 审核日志所在的区域。
- 点击创建存储分区。
- 存储桶名称:为存储桶输入一个有意义的名称(例如
tanium-audit-logs
)。 - 地区:选择您的首选地区(例如
us-east-1
)。 - 点击创建。
- 存储桶名称:为存储桶输入一个有意义的名称(例如
创建对 Amazon S3 具有完全访问权限的 IAM 用户
- 打开 IAM 控制台。
- 依次点击“用户”图标 >“添加用户”。
- 输入用户名(例如
tanium-connect-s3-user
)。 - 根据需要选择以程序化方式访问和/或 AWS 管理控制台访问权限。
- 选择自动生成的密码或自定义密码。
- 点击 Next: Permissions。
- 选择 Attach existing policies directly。
- 搜索并选择要向用户授予的 AmazonS3FullAccess 政策。
- 点击 Next: Tags。
- 点击下一步:检查。
- 点击创建用户。
- 复制并保存访问密钥 ID 和私有访问密钥,以供日后参考。
配置 Amazon S3 存储桶的权限
- 在 Amazon S3 控制台中,选择您之前创建的存储桶。
- 依次点击权限 > 存储分区政策。
在存储分区政策编辑器中,添加以下政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/tanium-connect-s3-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::tanium-audit-logs", "arn:aws:s3:::tanium-audit-logs/*" ] } ] }
执行以下变量替换操作:
- 将
YOUR_ACCOUNT_ID
更改为您的 AWS 账号 ID。 - 如果不同,请将
tanium-audit-logs
更改为您的实际存储桶名称。 - 如果不同,请将
tanium-connect-s3-user
更改为您的实际 IAM 用户名。
- 将
点击保存。
配置 Tanium Connect 以导出到 S3
在 Tanium Connect 中创建 AWS S3 连接
- 以管理员身份登录 Tanium Console。
- 依次前往 Tanium Connect > Connections。
- 点击 Create Connection。
- 在常规信息部分,提供以下配置详细信息:
- 名称:输入一个描述性名称(例如
Tanium Audit to S3
)。 - 说明:输入有意义的说明(例如
Export Tanium audit logs to S3 for Google SecOps ingestion
)。 - 启用:选择以启用连接。
- Log Level:选择 Information(默认),或根据需要进行调整。
- 名称:输入一个描述性名称(例如
配置连接来源
- 在配置部分中,针对来源选择 Tanium Audit。
- 配置审核来源设置:
- 检索的历史记录天数:输入要检索的历史审核数据的天数(例如,
7
表示一周)。 - 审核类型:选择要导出的审核类型。您可以选择以下任一选项:
- 操作历史记录:控制台操作员发布的操作。
- 身份验证:用户身份验证事件。
- 内容:内容变更和修改。
- 群组:计算机群组变更。
- 软件包:与软件包相关的活动。
- 传感器:传感器修改。
- 系统设置:系统配置更改。
- 用户:用户管理活动。
- 检索的历史记录天数:输入要检索的历史审核数据的天数(例如,
配置 AWS S3 目标位置
- 对于目标平台,请选择 AWS S3。
- 提供以下配置详细信息:
- 目标名称:输入一个名称(例如
Google SecOps S3 Bucket
)。 - AWS 访问密钥:输入之前创建的 IAM 用户的访问密钥 ID。
- AWS 密钥:输入之前创建的 IAM 用户的私有访问密钥。
- 存储桶名称:输入您的 S3 存储桶名称(例如
tanium-audit-logs
)。 - 存储分区路径:可选。输入路径前缀(例如
tanium/audit/
)。 - 区域:选择存储桶所在的 AWS 区域(例如
us-east-1
)。
- 目标名称:输入一个名称(例如
配置格式和时间表
- 在格式部分,配置输出格式:
- 格式类型:选择 JSON。
- 包含列标题:选择是否要包含列标题。
- 生成文档:取消选中此选项可发送原始 JSON 数据。
- 在时间表部分,配置连接的运行时间:
- 调度类型:选择 Cron。
- Cron 表达式:输入用于定期导出的 cron 表达式(例如,
0 */1 * * *
表示每小时导出一次)。 - 开始日期:设置安排的开始日期。
- 点击保存更改。
测试并运行连接
- 在 Connect 概览页面中,前往连接。
- 点击您创建的连接 (Tanium Audit to S3)。
- 点击立即运行以测试连接。
- 确认您要运行连接。
- 监控连接状态,并验证审核日志是否正在导出到您的 S3 存储桶。
可选:为 Google SecOps 创建只读 IAM 用户和密钥
- 依次前往 AWS 控制台 > IAM > 用户 > 添加用户。
- 点击 Add users(添加用户)。
- 提供以下配置详细信息:
- 用户:输入
secops-reader
。 - 访问类型:选择访问密钥 - 以程序化方式访问。
- 用户:输入
- 点击创建用户。
- 附加最低限度的读取政策(自定义):依次选择用户 > secops-reader > 权限 > 添加权限 > 直接附加政策 > 创建政策。
在 JSON 编辑器中,输入以下政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::tanium-audit-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::tanium-audit-logs" } ] }
将名称设置为
secops-reader-policy
。依次前往创建政策 > 搜索/选择 > 下一步 > 添加权限。
依次前往安全凭据 > 访问密钥 > 创建访问密钥。
下载 CSV(这些值会输入到 Feed 中)。
在 Google SecOps 中配置 Feed 以注入 Tanium 审核日志
- 依次前往 SIEM 设置> Feed。
- 点击 + 添加新 Feed。
- 在Feed 名称字段中,输入 Feed 的名称(例如
Tanium Audit logs
)。 - 选择 Amazon S3 V2 作为来源类型。
- 选择 Tanium Audit 作为日志类型。
- 点击下一步。
- 为以下输入参数指定值:
- S3 URI:
s3://tanium-audit-logs/tanium/audit/
(如果您使用了其他存储桶名称或路径,请调整路径)。 - 源删除选项:根据您的偏好选择删除选项。
- 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
- 访问密钥 ID:具有 S3 存储桶访问权限的用户访问密钥(来自上面创建的只读用户)。
- Secret Access Key:具有 S3 存储桶访问权限的用户密钥(来自上面创建的只读用户)。
- 资产命名空间:资产命名空间。
- 注入标签:要应用于此 Feed 中事件的标签。
- S3 URI:
- 点击下一步。
- 在最终确定界面中查看新的 Feed 配置,然后点击提交。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
ActionId |
metadata.product_log_id |
直接从 ActionId 字段映射。 |
ActionName |
security_result.action_details |
直接从 ActionName 字段映射。 |
Approver |
additional.fields[Approver].value.string_value |
直接从 Approver 字段映射。 |
Approver |
principal.user.userid |
如果不存在 Issuer ,则从 Approver 字段映射。 |
audit_name |
metadata.description |
直接从 audit_name 字段映射。 |
audit_row_id |
additional.fields[audit_row_id].value.string_value |
直接从 audit_row_id 字段映射。 |
audit_type |
additional.fields[audit_type].value.string_value |
直接从 audit_type 字段映射。 |
authentication_type |
principal.user.attribute.labels[authentication_type].value |
直接从从 details 字段中提取的 authentication_type 字段映射。 |
Command |
principal.process.command_line |
在网址解码后直接从 Command 字段映射。 |
creation_time |
target.resource.attribute.creation_time |
直接从 creation_time 字段映射。 |
details |
network.session_id |
使用键值解析从 details 字段中提取。 |
details |
principal.user.attribute.labels[authentication_type].value |
使用键值解析从 details 字段中提取。 |
details |
principal.asset.ip ,principal.ip |
系统会使用键值对解析从 details 字段中提取 IP 地址,并将其同时映射到 principal.asset.ip 和 principal.ip 。 |
DistributeOver |
additional.fields[DistributeOver].value.string_value |
直接从 DistributeOver 字段映射。 |
dvc_ip |
intermediary.hostname |
直接从 syslog 消息中提取的 dvc_ip 字段映射而来。 |
dvc_ip |
observer.ip |
如果不存在 logstash.collect.host ,则直接从 dvc_ip 字段映射。 |
Expiration |
additional.fields[Expiration].value.string_value |
直接从 Expiration 字段映射。 |
host.architecture |
target.asset.hardware.cpu_platform |
直接从 host.architecture 字段映射。 |
host.id |
target.asset.asset_id |
直接从 host.id 字段映射,并以“Host ID:”为前缀。 |
host.ip |
target.ip |
直接从 host.ip 字段映射。 |
host.mac |
target.mac |
直接从 host.mac 字段映射。 |
host.name |
target.hostname |
如果不存在 host.hostname ,则直接从 host.name 字段映射。 |
host.os.kernel |
target.platform_patch_level |
直接从 host.os.kernel 字段映射。 |
host.os.name |
additional.fields[os_name].value.string_value |
直接从 host.os.name 字段映射。 |
host.os.version |
target.platform_version |
直接从 host.os.version 字段映射。 |
InsertTime |
additional.fields[InsertTime].value.string_value |
直接从 InsertTime 字段映射。 |
Issuer |
additional.fields[Issuer].value.string_value |
直接从 Issuer 字段映射。 |
Issuer |
principal.user.userid |
如果存在,则直接从 Issuer 字段映射。 |
last_modified_by |
principal.resource.attribute.labels[last_modified_by].value |
直接从 last_modified_by 字段映射。 |
log.source.address |
principal.ip |
IP 地址从 log.source.address 字段中提取,并映射到 principal.ip 。 |
log.source.address |
principal.port |
端口是从 log.source.address 字段中提取的。 |
logstash.collect.host |
observer.ip |
如果存在,则直接从 logstash.collect.host 字段映射。 |
logstash.collect.timestamp |
metadata.collected_timestamp |
直接从 logstash.collect.timestamp 字段映射。 |
logstash.ingest.timestamp |
metadata.ingested_timestamp |
直接从 logstash.ingest.timestamp 字段映射。 |
logstash.irm_environment |
additional.fields[irm_environment].value.string_value |
直接从 logstash.irm_environment 字段映射。 |
logstash.irm_region |
additional.fields[irm_region].value.string_value |
直接从 logstash.irm_region 字段映射。 |
logstash.irm_site |
additional.fields[irm_site].value.string_value |
直接从 logstash.irm_site 字段映射。 |
logstash.process.host |
intermediary.hostname |
直接从 logstash.process.host 字段映射。 |
message |
dvc_ip 、json_data 、timestamp |
使用 grok 进行解析,以提取 dvc_ip 、json_data 和 timestamp 。 |
modification_time |
target.resource.attribute.last_update_time |
直接从 modification_time 字段映射。 |
modifier_user_id |
principal.resource.attribute.labels[modifier_user_id].value |
直接从 modifier_user_id 字段映射。 |
object_id |
target.resource.product_object_id |
直接从 object_id 字段映射。 |
object_name |
target.resource.name |
直接从 object_name 字段映射。 |
object_type_name |
target.resource.attribute.labels[object_type_name].value |
直接从 object_type_name 字段映射。 |
PackageName |
additional.fields[PackageName].value.string_value |
直接从 PackageName 字段映射。 |
SourceId |
additional.fields[SourceId].value.string_value |
直接从 SourceId 字段映射。 |
StartTime |
additional.fields[StartTime].value.string_value |
直接从 StartTime 字段映射。 |
Status |
security_result.action |
如果 Status 为“关闭”,则映射到“BLOCK”;如果 Status 为“打开”,则映射到“ALLOW”。 |
Status |
security_result.summary |
直接从 Status 字段映射。 |
tanium_audit_type |
metadata.product_event_type |
直接从 tanium_audit_type 字段映射。 |
timestamp |
metadata.event_timestamp |
直接从 syslog 消息中提取的 timestamp 字段或 message 字段映射而来。 |
type |
additional.fields[type].value.string_value |
直接从 type 字段映射。 |
type_name |
metadata.product_event_type |
直接从 type_name 字段映射。 |
User |
principal.user.userid |
直接从 User 字段映射。由解析器逻辑根据 src_ip 、has_target 和 has_user 的存在情况确定。可以是“NETWORK_CONNECTION”“USER_RESOURCE_ACCESS”“STATUS_UPDATE”或“GENERIC_EVENT”。硬编码为“TANIUM_AUDIT”。硬编码为“网络安全”。硬编码为“TANIUM_AUDIT”。 |
@version |
metadata.product_version |
直接从 @version 字段映射。 |
agent.ephemeral_id |
additional.fields[ephemeral_id].value.string_value |
直接从 agent.ephemeral_id 字段映射。 |
agent.id |
observer.asset_id |
直接从 agent.id 字段映射,带有“filebeat:”前缀。 |
agent.type |
observer.application |
直接从 agent.type 字段映射。 |
agent.version |
observer.platform_version |
直接从 agent.version 字段映射。 |
Comment |
security_result.description |
直接从 Comment 字段映射。 |
host.hostname |
target.hostname |
如果存在,则直接从 host.hostname 字段映射。 |
input.type |
network.ip_protocol |
如果 input.type 为“tcp”或“TCP”,则映射到“TCP”。 |
syslog_severity |
security_result.severity |
如果 syslog_severity 为“error”或“warning”,则映射为“HIGH”;如果为“notice”,则映射为“MEDIUM”;如果为“information”或“info”,则映射为“LOW”。 |
syslog_severity |
security_result.severity_details |
直接从 syslog_severity 字段映射。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。