收集 Uptycs EDR 日志

支持的平台:

本文档介绍了如何使用 Amazon S3 将 Uptycs EDR 日志注入到 Google Security Operations。解析器将原始 JSON 日志转换为统一数据模型 (UDM)。它首先从 JSON 中提取字段,执行数据清理和丰富,然后将相关信息映射到相应的 UDM 字段,处理各种数据类型和边缘情况,以确保在 UDM 架构中准确且一致地表示数据。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • Uptycs 的特权访问权限
  • AWS (S3、IAM) 的特权访问权限

获取 Uptycs 前提条件

  1. 登录 Uptycs 管理控制台
  2. 依次前往配置 > 用户
  3. 选择您的用户或创建服务账号用户。
  4. 点击 User API key(用户 API 密钥)。
  5. 复制以下详细信息并将其保存在安全的位置:
    • API 密钥
    • API Secret
    • 客户 ID
    • API 网域(从您的 Uptycs 网址派生而来,例如 mystack.uptycs.io

为 Google SecOps 配置 AWS S3 存储桶和 IAM

  1. 按照以下用户指南创建 Amazon S3 存储桶创建存储桶
  2. 保存存储桶名称区域以供日后参考(例如 uptycs-telemetry-export)。
  3. 按照以下用户指南创建用户创建 IAM 用户
  4. 选择创建的用户
  5. 选择安全凭据标签页。
  6. 访问密钥部分中,点击创建访问密钥
  7. 选择第三方服务作为使用情形
  8. 点击下一步
  9. 可选:添加说明标记。
  10. 点击创建访问密钥
  11. 点击下载 CSV 文件,保存访问密钥不公开的访问密钥以供日后参考。
  12. 点击完成
  13. 选择权限标签页。
  14. 权限政策部分中,点击添加权限
  15. 选择添加权限
  16. 选择直接附加政策
  17. 搜索 AmazonS3FullAccess 政策。
  18. 选择相应政策。
  19. 点击下一步
  20. 点击添加权限

为 S3 上传配置 IAM 政策和角色

  1. AWS 控制台中,依次前往 IAM > 政策
  2. 依次点击创建政策 > JSON 标签页
  3. 输入以下政策:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowPutObjects",
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::uptycs-telemetry-export/*"
        },
        {
          "Sid": "AllowListBucket",
          "Effect": "Allow",
          "Action": "s3:ListBucket",
          "Resource": "arn:aws:s3:::uptycs-telemetry-export"
        }
      ]
    }
    
    • 如果您输入了其他存储桶名称,请替换 uptycs-telemetry-export
  4. 依次点击下一步 > 创建政策

  5. 将政策命名为 uptycs-s3-write-policy

  6. 前往 IAM > 用户

  7. 选择为 Uptycs 导出创建的用户。

  8. 依次点击添加权限 > 直接附加政策

  9. 搜索并选择 uptycs-s3-write-policy

  10. 依次点击下一步 > 添加权限

配置 Uptycs 导出原始遥测数据

  1. 登录 Uptycs 控制台
  2. 前往导出配置部分。
  3. 配置 S3 导出目标位置。
  4. 提供以下配置详细信息:
    • 导出类型:选择原始遥测数据
    • 目标平台:选择 Amazon S3
    • 格式:选择 JSON
    • S3 存储分区:输入 uptycs-telemetry-export
    • S3 路径前缀:输入 telemetry/
    • AWS 区域:选择您的存储桶区域。
    • AWS 访问密钥 ID:输入 IAM 用户的访问密钥。
    • AWS Secret Access Key:输入私有访问密钥。
    • 事件类型:选择所有必需的遥测类型。
  5. 测试并启用导出功能。

为 Google SecOps 创建只读 IAM 用户

  1. 前往 AWS 控制台 > IAM > 用户
  2. 点击 Add users(添加用户)。
  3. 提供以下配置详细信息:
    • 用户:输入 secops-reader
    • 访问类型:选择访问密钥 - 以程序化方式访问
  4. 点击创建用户
  5. 附加最低限度的读取政策(自定义):用户 > secops-reader > 权限 > 添加权限 > 直接附加政策 > 创建政策
  6. 在 JSON 编辑器中,输入以下政策:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::uptycs-telemetry-export/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::uptycs-telemetry-export"
        }
      ]
    }
    
  7. 将名称设置为 secops-reader-policy

  8. 依次前往创建政策 > 搜索/选择 > 下一步 > 添加权限

  9. 依次前往安全凭据 > 访问密钥 > 创建访问密钥

  10. 下载 CSV(这些值会输入到 Feed 中)。

在 Google SecOps 中配置 Feed 以注入 Uptycs 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击 + 添加新 Feed
  3. Feed 名称字段中,输入 Feed 的名称(例如 Uptycs EDR logs)。
  4. 选择 Amazon S3 V2 作为来源类型
  5. 选择 Uptycs EDR 作为日志类型
  6. 点击下一步
  7. 为以下输入参数指定值:
    • S3 URIs3://uptycs-telemetry-export/telemetry/
    • 源删除选项:根据您的偏好选择删除选项。
    • 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
    • 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥。
    • 私有访问密钥:有权访问 S3 存储桶的用户私有密钥。
    • 资产命名空间资产命名空间
    • 注入标签:应用于此 Feed 中事件的标签。
  8. 点击下一步
  9. 最终确定界面中查看新的 Feed 配置,然后点击提交

UDM 映射表

日志字段 UDM 映射 逻辑
osquery_raw_data.answer read_only_udm.network.dns.answers.name 如果 osquery_raw_data.answer 不为空,则取自 osquery_raw_data.answer 的值。
osquery_raw_data.container_id read_only_udm.metadata.product_log_id 如果 osquery_raw_data.container_id 不为空,则取自 osquery_raw_data.container_id 的值。
osquery_raw_data.local_address read_only_udm.principal.ip 如果 osquery_raw_data.local_address 不为空且是有效的 IP 地址,则取自 osquery_raw_data.local_address。
osquery_raw_data.local read_only_udm.principal.ip 否则,如果 osquery_raw_data.local 不为空且是有效的 IP 地址,则从 osquery_raw_data.local 中获取值。
osquery_raw_data.local_port read_only_udm.principal.port 如果 osquery_raw_data.local_port 不为空,则从 osquery_raw_data.local_port 中提取值并将其转换为整数。
osquery_raw_data.md5 read_only_udm.target.process.file.md5 如果 osquery_raw_data.md5 不为空,则取自 osquery_raw_data.md5 的值。
osquery_raw_data.port read_only_udm.target.port 如果 osquery_raw_data.port 不为空,则从 osquery_raw_data.port 中提取值并将其转换为整数。
osquery_raw_data.question read_only_udm.network.dns.questions.name 如果 osquery_raw_data.question 不为空,则取自 osquery_raw_data.question 的值。
osquery_raw_data.remote_address read_only_udm.intermediary.ip 如果 osquery_raw_data.remote_address 不为空,则从 osquery_raw_data.remote_address 中获取值。
osquery_raw_data.remote_port read_only_udm.intermediary.port 如果 osquery_raw_data.remote_port 不为空,则从 osquery_raw_data.remote_port 中提取值并将其转换为整数。
osquery_raw_data.type read_only_udm.network.dns.questions.type 从 osquery_raw_data.type 中获取的值,如果 osquery_raw_data.type 不为空,则转换为整数。
osquery_raw_data.uid read_only_udm.principal.user.userid 如果 osquery_raw_data.uid 不为空且不等于“0”,则从 osquery_raw_data.uid 中获取值。
osquery_raw_data.worker_instance_id read_only_udm.principal.user.userid 否则,如果 osquery_raw_data.worker_instance_id 不为空,则取自 osquery_raw_data.worker_instance_id。
upt_asset_group_id read_only_udm.principal.user.group_identifiers 如果 upt_asset_group_id 不为空,则取自 upt_asset_group_id。
upt_asset_group_name read_only_udm.principal.group.group_display_name 如果 upt_asset_group_name 不为空,则取自 upt_asset_group_name。
upt_asset_id read_only_udm.principal.asset.asset_id 如果 upt_asset_id 不为空,则为串联的字符串“UPT ASSET ID:”与 upt_asset_id 的值。
upt_hash read_only_udm.target.file.md5 将 upt_hash 中出现的所有“-”替换为“”。然后,如果 upt_hash 不为空,则将该值分配给 read_only_udm.target.file.md5。
upt_hostname read_only_udm.principal.hostname 如果 upt_hostname 不为空,则从 upt_hostname 中获取值。
upt_resource_type read_only_udm.target.resource.type 如果 upt_resource_type 不为空,则取自 upt_resource_type。
upt_time read_only_udm.metadata.event_timestamp.seconds 如果 upt_time 不为空,则取自 upt_time。
read_only_udm.metadata.event_type 如果 osquery_raw_data.pid 不为空,则将值设置为“PROCESS_LAUNCH”。如果 osquery_raw_data.question 不为空,则将值设置为“NETWORK_DNS”。如果 event_type 为空,则将值设置为“GENERIC_EVENT”。
read_only_udm.metadata.log_type 值设置为“UPTYCS_EDR”。
read_only_udm.metadata.product_name 值设置为“UPTYCS_EDR”。
read_only_udm.metadata.vendor_name 值设置为“UPTYCS”。
read_only_udm.network.application_protocol 如果 osquery_raw_data.question 不为空,则将值设置为“DNS”。
read_only_udm.security_result.action 如果 osquery_raw_data.return_code 等于“SUCCESS”或 osquery_raw_data.success 等于“1”,则将值设置为“ALLOW”。
read_only_udm.target.process.command_line 如果 osquery_raw_data.cmdline 不为空,则取自 osquery_raw_data.cmdline。
read_only_udm.target.process.file.full_path 如果 osquery_raw_data.path 不为空,则从 osquery_raw_data.path 中获取值。
read_only_udm.target.process.parent_process 该值是通过迭代 osquery_raw_data.ancestor_list 中的 ancestor_list 数组构建的。对于数组中的每个元素,系统会提取 command_line、文件的 full_path 和 pid,并将其格式化为表示进程链的 JSON 结构。
read_only_udm.target.process.pid 如果 osquery_raw_data.pid 不为空,则取自 osquery_raw_data.pid。

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。