收集 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
  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 私有访问密钥:输入私有访问密钥。
    • 事件类型:选择所有必需的遥测数据类型。
  5. 测试并启用导出。

为 Google SecOps 创建只读 IAM 用户

  1. 依次前往 AWS 控制台 > IAM > 用户
  2. 点击 Add users
  3. 提供以下配置详细信息:
    • 用户:输入 secops-reader
    • 访问类型:选择 Access key – Programmatic access
  4. 点击创建用户
  5. 添加最低限度的读取政策(自定义):Users > secops-reader > Permissions > Add permissions > Attach policies directly > Create policy
  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. 依次前往 Create policy > search/select > Next > Add permissions

  9. 依次前往 Security credentials > Access keys > Create access key

  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 URI: s3://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 专业人士的解答。