VMware Carbon Black Enterprise EDR

本文档介绍了如何将 VMware Carbon Black Enterprise EDR 与 Google SecOps 集成。

产品应用场景

  1. 执行调查操作 - 在 Google Security Operations 中进行提醒分析时,从 CB Enterprise EDR 获取数据。
  2. 执行配置操作 - 从 Google SecOps 配置 CB Enterprise EDR Feed/监视列表。

产品权限

访问 Carbon Black Enterprise EDR (ThreatHunter) API 所需的概念:

  1. 服务主机名
  2. API 密钥
  3. RBAC
  4. 组织密钥

服务主机名

Carbon Black Cloud 主机名有两种:

  • https://defense-<environment>.conferdeploy.net/
  • https://api-<environment>.conferdeploy.net/

此外,我们还有多个环境,例如(非完整列表):

  • prod02
  • prod04
  • prod05

对于 Carbon Black Enterprise EDR (ThreatHunter) API,将使用以下主机名:https://defense-<environment>.conferdeploy.net/

API 密钥

Carbon Black Enterprise EDR (ThreatHunter) API 和服务通过 API 密钥进行身份验证。用户可以在 Carbon Black Cloud 控制台中的设置 > API 密钥下查看 API 密钥设置。

API 密钥包含两部分:

  • API 密钥(之前称为 API 密钥)。
  • API ID(之前称为“连接器 ID”)。

身份验证通过 X-Auth-Token HTTP 标头传递给 API。

  1. 如需生成适当的标头,请将 API 密钥与 API ID 串联起来,并在两者之间加上正斜杠。
  2. 例如,如果 API 密钥为 ABCD,API ID 为 1234,则对应的 X-Auth-Token HTTP 标头将为:X-Auth-Token: ABCD/1234

所有 API 请求都必须使用 API 密钥和 API ID 进行身份验证。 未经身份验证的请求会返回 HTTP 401 错误。

如何获取 API 密钥和 API ID

  1. 登录您的 Carbon Black Cloud 组织。
  2. 依次前往 Settings(设置)> API Keys(API 密钥)。
  3. 点击“添加 API 密钥”。
  4. 配置名称、访问权限级别等。
  5. 获取 API 密钥和 API ID 对。

这样,组织管理员就可以定义 API 密钥,并获取对 API 密钥和 API ID 的访问权限,这些信息是验证 API 请求所必需的。此外,出于安全原因,管理员可以将此 API 密钥的使用范围限制为一组特定的 IP 地址。

API 密钥访问权限级别

目前,“API 密钥”页面中提供了四个主要的 API 密钥访问权限级别。每个访问权限级别都提供对 API 路由的不同访问权限级别:

  1. 自定义密钥访问权限级别:提供可自定义的授权。

    • 自定义 API 密钥是我们基于角色的访问权限控制 (RBAC) 努力的结果。
    • 允许客户应用访问权限控制并创建最小权限 API 密钥。
    • 可以为自定义 API 密钥分配用户角色或访问权限级别。
  2. API 密钥访问权限级别:提供对除 Notifications API 和 Live Response API 之外的所有 API 的访问权限。

  3. SIEM 密钥访问权限级别:提供对 Notifications API 的访问权限。

  4. 实时响应密钥访问权限级别:提供对上述 (1) 中所有可用 API 以及实时响应 API 的访问权限。

Carbon Black Enterprise EDR (ThreatHunter) 服务与 API 访问权限级别的关联 Platform API 以粗体显示

API/服务类别 允许的 API 密钥访问权限级别
PSC /appservices/* 自定义(具有适当权限)
CB-TH /threathunter/* 自定义(具有适当权限)API
CB-LO /livequery/* 自定义(具有适当权限)
CB-D /integrationServices/v3/notification/ SIEM
CB-D /integrationServices/* APILive 响应

组织密钥

除了 API 密钥之外,许多 Carbon Black Cloud API 或服务还需要在 API 请求路径中提供 org_key。这是为了支持管理多个组织的客户。

您可以在 Carbon Black Cloud 控制台中的“设置”>“API 密钥”下找到 org_key。

为 Carbon Black Enterprise EDR (ThreatHunter) Google SecOps 集成配置 API 访问权限

如需为 Carbon Black Enterprise EDR (ThreatHunter) Google SecOps 集成配置 API 访问权限,需要执行以下步骤:

  1. 登录 Carbon Black Cloud 控制台,然后依次前往设置 > API 访问权限。
  2. 在“API 访问权限”页面上,前往“访问权限级别”。
  3. 在“访问权限级别”页面上,点击 + 添加访问权限级别。
  4. 在打开的窗口中,为新的访问权限级别提供名称和说明,然后选择权限,如以下屏幕截图所示:

    所需权限列表

  5. 返回到“API 访问权限”标签页。

  6. 点击“+ 添加 API 密钥”以创建新的 API 密钥。

  7. 在打开的标签页中,填写必填字段,然后选择您在第 4 步中配置的访问权限级别:

    修改 API 密钥设置

  8. 点击保存后,系统会显示 API ID 和 API 密钥。 请保存这些值,因为它们只会显示一次。

  9. 保存 API ID 和 API 密钥后,Carbon Black Enterprise EDR (ThreatHunter) 中的 API 访问权限即已完成。

在 Google SecOps 中配置 VMware Carbon Black Enterprise EDR (Threat Hunter) 集成

有关如何在 Google SecOps 中配置集成的详细说明,请参阅配置集成。

集成参数

使用以下参数配置集成:

参数显示名称 类型 默认值 为必填项 说明
实例名称 字符串 不适用 否 您要为其配置集成的实例的名称。
Dexcription 字符串 不适用 否 实例的说明。
API 根 字符串 不适用 是 VMware Carbon Black Cloud API 根网址。
组织密钥 字符串 不适用 是 VMware Carbon Black Cloud 组织密钥。
API ID 字符串 不适用 是 VMware Carbon Black Cloud API ID(自定义 API 密钥 ID)。
API 密钥 字符串 不适用 是 VMware Carbon Black Cloud API 密钥(自定义 API 密钥)。
远程运行 复选框 不适用 否 勾选此字段,以便远程运行配置的集成。选中后,系统会显示选择远程用户(代理)的选项。

操作

Ping

说明

使用 Google SecOps Content Hub 页面中的集成配置页面上提供的参数,测试与 VMware Carbon Black Enterprise EDR 的连接。

参数

不适用

Playbook 应用场景示例

该操作用于在 Google SecOps Content Hub 页面上的集成配置页面测试连接性,可以作为人工处置措施执行,不用于 playbook。

运行时间

此操作不会对实体运行,也没有强制性输入参数。

操作执行结果

脚本结果
脚本结果名称 值选项 示例
is_success True/False is_success:False
案例墙
结果类型 值/说明 类型
输出消息*

操作不应失败,也不应停止 playbook 执行:

  • 如果成功:输出“Successfully connected to the VMware Carbon Black Enterprise EDR server with the provided connection parameters!”

操作应失败并停止 playbook 执行:

  • 如果未成功:输出“Failed to connect to the VMware Carbon Black Enterprise EDR server! 错误为 {0}”。format(exception.stacktrace)
常规

说明

根据提供的搜索参数,在具有 CB 传感器的宿主机上搜索有关进程活动的信息。该操作接受主机 Google SecOps 实体。

参数

参数显示名称 类型 默认值 为必填项 说明
查询 字符串 不适用 否 要在进程搜索中执行的查询。例如,process_name:svchost.exe - 根据进程名称进行搜索,process_hash:9520a99e77d6196d0d09833146424113 - 根据进程哈希进行搜索。
时间范围 整数 4 否 指定获取提醒的时间范围(以小时为单位)。
记录数上限 整数 20 是 指定操作可返回的记录数。
排序方式 字符串 不适用 否 指定用于对数据进行排序的参数。
排列顺序 DDL 升序 否 排列顺序。

Playbook 应用场景示例

根据提供的搜索参数,搜索由进程引起的事件。

在分析与 CB Platform 管理的特定主机相关的提醒期间,用户希望调查该主机,即根据提供的搜索参数搜索由正在运行的进程引起的特定事件。用户可以运行此操作来执行威胁搜寻活动,即主动搜索相关主机上是否存在任何可疑进程/事件。

运行时间

此操作在主机实体上运行。

操作执行结果

脚本结果
脚本结果名称 值选项 示例
is_success True/False is_success:False
JSON 结果
{
"results": [
    {
        "alert_id": [
            "null/WSD2CQMT"
        ],
        "backend_timestamp": "2020-03-04T21:42:45.080Z",
        "device_id": 3078944,
        "device_name": "qaam\\manticorewin864",
        "device_policy_id": 6525,
        "device_timestamp": "2020-03-04T21:39:33.180Z",
        "enriched": true,
        "enriched_event_type": "CREATE_PROCESS",
        "event_description": "The script \"<share><link hash=\"74fcbbb574bfd505cf0680575a1c025f6cead071fce78ee0cc2c7bac7dd24ce9\">C:\\programdata\\wmirepair.bat</link></share>\" invoked the application \"<share><link hash=\"7eadc73f8aa77148ca289d5ce5c2632f3a157d313079583454c0421bb97d5646\">C:\\windows\\syswow64\\regsvr32.exe</link></share>\". ",
        "event_id": "ecc6954f5e6011eaa0de89cc027330db",
        "event_type": "childproc",
        "ingress_time": 1583358118950,
        "legacy": true,
        "org_id": "7DESJ9GN",
        "parent_guid": "7DESJ9GN-002efb20-00001604-00000000-1d5f26cab1067fe",
        "parent_pid": 5636,
        "process_guid": "7DESJ9GN-002efb20-00000d58-00000000-1d5f26d6615c568",
        "process_hash": [
            "629ae017d28848b68485bd2aeede9129",
            "74fcbbb574bfd505cf0680575a1c025f6cead071fce78ee0cc2c7bac7dd24ce9"
        ],
        "process_name": "c:\\programdata\\wmirepair.bat",
        "process_pid": [
            3416
        ],
        "process_username": [
            "NT AUTHORITY\\SYSTEM"
        ]
    },
    ...
]  }
案例墙
结果类型 值 / 说明 类型
输出消息*

操作不应失败,也不应停止 playbook 执行:

  • 如果成功:输出“Found process information for the following entities:\n {0}”.format( entity.Identifiers list)
  • 如果所有提供的实体 is_success=False:输出“未返回任何搜索结果。”
  • If is_success=False for some of the provided entities because it can't find results for specified search parameters: print "Action was not able to find process information for the following entities:\n {0}".format(entity.Identifiers list)
  • 如果由于运行搜索时出错(例如超时)而导致某些提供的实体的 is_success=False:输出“Failed to get results because of the errors running search for the following entities:/n {0}”。format(entity.identifiers list)

操作应失败并停止 playbook 执行:

  • 如果发生严重错误,例如凭据错误、无法连接到服务器等,请输出“Failed to execute action! 错误为 {0}”。format(exception.stacktrace)
两者
表

表名称:{entityIdentifier} 的流程搜索结果

列:

  • 事件 ID (event_id)
  • 事件类型 ("enriched_event_type")
  • 进程名称 (process_name)
  • 进程 GUID (process_guid)
  • 进程 PID (process_pid)
  • 进程父级 GUID (parent_guid)
  • 进程父级 PID (parent_pid)
  • 进程文件哈希 (process_hash)
  • 进程运行身份 ("process_username")
  • 创建时间 ("device_timestamp")
  • 活动说明 (event_description)
  • 本地 IPv4 地址 (event_network_local_ipv4)
  • 网络协议 (event_network_protocol)
  • 远程 IPv4 地址 (event_network_remote_ipv4)
  • 远程端口 (event_network_remote_port)
实体

按进程 GUID 获取与进程关联的事件

说明

根据 VMware Carbon Black Enterprise EDR 中的信息,获取与特定进程关联的事件。与“进程搜索”操作相比,此操作可以获得有关特定进程活动的更详细结果。请注意,为使该操作正常运行,传递给该操作的 Google SecOps 处理工件应为进程 GUID 类型。

参数

参数显示名称 类型 默认值 为必填项 说明
搜索条件 字符串 不适用 否 为请求指定搜索条件。目前,只有“event_type”值可作为搜索条件,例如 netconn。接受以英文逗号分隔的字符串形式输入多个值。
查询 搜索 不适用 是 要在进程搜索中执行的查询。例如,“netconn_action:ACTION_CONNECTION_CREATE OR netconn_action:ACTION_CONNECTION_ESTABLISHED”
时间范围 整数 4 否 指定获取提醒的时间范围(以小时为单位)。
记录数上限 整数 20 否 指定操作可返回的记录数。
排序方式 字符串 不适用 否 指定用于对数据进行排序的参数。
排列顺序 DDL 升序 否 排列顺序

Playbook 应用场景示例

调查特定进程活动。

在分析与 CB Platform 管理的特定主机相关的提醒时,发现该主机上运行着一个可疑进程。Google SecOps 用户需要执行一项操作,该操作将使用 CB Enterprise EDR 功能从 Google SecOps 获取与给定进程关联的事件。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
脚本结果名称 值选项 示例
is_success True/False is_success:False
JSON 结果
{
    "results": [
        {
            "backend_timestamp": "2020-04-26T18:38:50.128Z",
            "created_timestamp": "2020-05-19T03:56:53.483Z",
            "event_guid": "ufzid3pPQs-yrRlPBe8-ww",
            "event_hash": "ce6a949bcd3879897c9eac258ec6a091",
            "event_timestamp": "2020-04-26T18:34:16.258Z",
            "event_type": "netconn",
            "legacy": false,
            "netconn_action": "ACTION_CONNECTION_CREATE",
            "netconn_inbound": true,
            "netconn_local_ipv6": "FF020000000000000000000000010003",
            "netconn_local_port": 5355,
            "netconn_protocol": "PROTO_UDP",
            "netconn_remote_ipv6": "FE800000000000000000000000000000",
            "netconn_remote_port": 58994,
            "process_guid": "7DESJ9GN-002efb20-000003ec-00000000-1d5fb6d63ba535c",
            "process_pid": 1004
        },
        ...
    ]
}
案例墙
结果类型 值 / 说明 类型
输出消息*

操作不应失败,也不应停止 playbook 执行:

  • 如果成功:输出“Found events for the following process guids:\n {0}”(已找到以下进程 GUID 的事件:\n {0})。format( process guid list)
  • 如果所有提供的进程 GUID 的 is_success=False:输出“未返回任何搜索结果。”
  • 如果由于找不到指定的进程 GUID,导致某些提供的实体 is_success=False:输出“Action was not able to find information for the following processes:\n {0}”。format(process guids list)。
  • 如果由于运行搜索时出错(例如超时)导致某些提供的实体的 is_success=False:输出“Failed to get results because of errors running search for the following process guids:/n {0}”(由于在搜索以下进程 GUID 时出错,未能获取结果:/n )。format(entity.identifiers list)

操作应失败并停止 playbook 执行:

  • 如果发生严重错误,例如凭据错误、无法连接到服务器等,请输出“Failed to execute action! 错误为 {0}”。format(exception.stacktrace)
常规
表

表名称:Found events for process {process artifact identifier}

列:应根据返回的结果自动生成。

实体

丰富哈希

说明

根据 VMware Carbon Black Enterprise EDR 中的信息,丰富 Google SecOps 文件哈希实体。

Playbook 应用场景示例

使用来自 CB Enterprise EDR 的信息丰富 Google SecOps filehash 实体。

在处理与具有 CB Platform 传感器的宿主机相关的可能恶意软件感染提醒期间,用户需要从 CB Enterprise EDR(平台的一部分)获取与相关提醒关联的特定文件哈希的丰富数据,以便进行调查。例如,作为丰富的一部分,用户可以获取相关的 filehash 元数据、首次在组织中检测到此 filehash 的时间以及在哪个主机上。

运行时间

此操作在 Sha256 格式的 Filehash 实体上运行。

操作执行结果

实体丰富化
扩充项字段名称 来源(JSON 密钥) 逻辑 - 适用情形
CB_ENT_EDR.sha256 sha256 始终
CB_ENT_EDR.md5 md5 始终
CB_ENT_EDR.architecture 架构 始终
CB_ENT_EDR.available_file_size available_file_size 始终
CB_ENT_EDR.charset_id charset_id 始终
CB_ENT_EDR.comments 评论 如果非 null
CB_ENT_EDR.company_name company_name 始终
CB_ENT_EDR.copyright 版权 始终
CB_ENT_EDR.file_available file_available 始终
CB_ENT_EDR.file_description file_description 始终
CB_ENT_EDR.file_size file_size 始终
CB_ENT_EDR.file_version file_version 始终
CB_ENT_EDR.internal_name internal_name 始终
CB_ENT_EDR.lang_id lang_id 如果非 null
CB_ENT_EDR.original_filename original_filename 始终
CB_ENT_EDR.os_type os_type 始终
CB_ENT_EDR.private_build private_build 如果非 null
CB_ENT_EDR.product_description product_description 如果非 null
CB_ENT_EDR.product_name product_name 始终
CB_ENT_EDR.product_version product_version 始终
CB_ENT_EDR.special_build special_build 如果非 null
CB_ENT_EDR.trademark trademark 如果非 null
CB_ENT_EDR.found_times num_devices 始终
CB_ENT_EDR.first_seen_device_timestamp first_seen_device_timestamp 始终
CB_ENT_EDR.first_seen_device_id first_seen_device_id 始终
CB_ENT_EDR.first_seen_device_name first_seen_device_name 始终
CB_ENT_EDR.last_seen_device_timestamp last_seen_device_timestamp 始终
CB_ENT_EDR.last_seen_device_id last_seen_device_id 始终
CB_ENT_EDR.last_seen_device_name last_seen_device_name 始终
脚本结果
脚本结果名称 值选项 示例
is_success True/False is_success:False
JSON 结果
{
    "sha256": "e24dd278cec867486b68418c9066ffa9bd4f394dac3ba94125d58415f677f0f4",
    "architecture": [
        "amd64"
    ],
    "available_file_size": 207800,
    "charset_id": 1200,
    "comments": null,
    "company_name": "Example Organization",
    "copyright": "Copyright  © 2019",
    "file_available": true,
    "file_description": "OpenJDK Platform binary",
    "file_size": 207800,
    "file_version": "8.0.2320.9",
    "internal_name": "java",
    "lang_id": null,
    "md5": "afede6f64ed8878bc0cac57e1831a3bc",
    "original_filename": "java.exe",
    "os_type": "WINDOWS",
    "private_build": null,
    "product_description": null,
    "product_name": "OpenJDK Platform 8",
    "product_version": "8.0.2320.9",
    "special_build": null,
    "trademark": null
}
案例墙
结果类型 值 / 说明 类型
输出消息*

操作不应失败,也不应停止 playbook 执行:

  • 如果成功且至少有一个提供的实体被丰富:输出“Successfully enriched entities: {0}”.format([entity.Identifier])。
  • 如果未能丰富所有提供的实体:输出“No entities were enriched.”。
  • 如果未能在 VMware Carbon Black Enterprise EDR 中找到数据来丰富特定实体:输出“Action was not able to find VMware Carbon Black Enterprise EDR info to enrich the following entities: {0}”。format([entity.identifier])
  • 如果未能运行其中一个丰富查询(例如,在获取一个响应时出现错误 500,但另一个响应正常),is_success 应为 False,但操作应使用从其他响应中获取的数据进行丰富,并输出:“由于获取实体数据时出错,以下实体仅部分丰富:/n {0}”。format(entityIdentifier list)

操作应失败并停止 playbook 执行:

  • 如果发生严重错误,例如凭据错误、无法连接到服务器等,请输出“Failed to execute Enrich Entities action! 错误为 {0}”。format(exception.stacktrace)
常规