收集 Armis 漏洞日志

解析器版本:2.0

支持的平台:

本文档介绍了如何使用 Google Cloud Functions 将 Armis 漏洞日志注入到 Google Security Operations。解析器将原始 JSON 格式的安全漏洞日志转换为符合 Google SecOps UDM 的结构化格式。它从原始日志中提取各种字段,将这些字段映射到相应的 UDM 字段,执行数据类型转换,并构建输出以供注入到 Google SecOps 平台中。

准备工作

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

  • 具有客户 ID 和服务账号凭据的 Google SecOps 实例
  • 对 Armis Centrix 平台的特权访问权限
  • Armis API 密钥和服务器网址
  • 对 Google Cloud 的访问权限,以及创建 Cloud Functions 函数、Secret Manager Secret 和 Cloud Scheduler 作业的权限
  • Armis 资产漏洞管理 (AVM) 许可或模块访问权限

获取 Google SecOps 客户 ID

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 配置文件。
  3. 复制并保存组织详细信息部分中的客户 ID。

获取 Google SecOps 服务账号凭据

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理。
  3. 下载数据注入身份验证文件(服务账号 JSON 文件)。
  4. 请根据需要安全地保存此文件,因为您需要将其上传到 Google Secret Manager。

获取 Armis API 密钥

  1. 登录 Armis Centrix 平台。
  2. 前往设置 > API 管理。
  3. 如果您需要生成新的 API 密钥,请点击创建。
  4. 点击显示即可查看密钥。
  5. 复制并妥善保存密钥。

配置 Google Secret Manager

本部分将指导您使用 Google Secret Manager 安全地存储集成所需的服务账号密钥。

添加 Google SecOps 服务账号密钥

  1. 登录 Google Cloud 控制台。
  2. 依次前往安全性 > Secret Manager。
  3. 点击创建 Secret。
  4. 提供以下配置详细信息:
    • 名称:输入 Secret 的名称(例如 secops-service-account)。
    • Secret 值:上传您之前下载的 Google SecOps 服务账号 JSON 文件,或直接粘贴其内容。
  5. 点击创建 Secret。
  6. 复制已创建的 Secret 的资源 ID,格式如下:

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}
    

添加 Armis API 密钥密文

  1. 在 Secret Manager 中,点击创建密钥。
  2. 提供以下配置详细信息:
    • 名称:输入 Secret 的名称(例如 armis-api-secret)。
    • Secret 值:粘贴您之前获得的 Armis API 密钥。
  3. 点击创建 Secret。
  4. 复制已创建的 Secret 的资源 ID,格式如下:

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
    

下载并准备提取脚本

  1. 访问官方 Google SecOps 提取脚本代码库:https://github.com/chronicle/ingestion-scripts。
  2. 从代码库下载 armis 目录的内容。
  3. 从代码库中下载 common 目录(必需的依赖项)。
  4. 在本地机器上为 Cloud Function 部署创建一个新目录。
  5. 将 armis 和 common 目录的内容复制到部署目录中。

配置环境变量

  1. 通过文本编辑器打开 .env.yml 文件。
  2. 修改文件,并进行以下配置:

    CHRONICLE_CUSTOMER_ID: <YOUR_CUSTOMER_ID>
    CHRONICLE_REGION: "us"
    CHRONICLE_SERVICE_ACCOUNT: projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}
    CHRONICLE_NAMESPACE: <YOUR_NAMESPACE>
    POLL_INTERVAL: "10"
    ARMIS_SERVER_URL: https://<your-armis-instance>.armis.com
    ARMIS_API_SECRET_KEY: projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}
    HTTPS_PROXY: 
    CHRONICLE_DATA_TYPE: ARMIS_VULNERABILITIES
    
    • 替换以下值:

      • <YOUR_CUSTOMER_ID>:您的 Google SecOps 客户 ID
      • projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}:Secret Manager 中 Google SecOps 服务账号 Secret 的完整资源 ID 路径
      • <YOUR_NAMESPACE>:Google Security Operations 日志的可选命名空间(例如 armis-vulnerabilities)
      • <your-armis-instance>:您的 Armis 租户子网域(例如,如果您的网址是 https://company.armis.com,请使用 company)
      • projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}:Secret Manager 中 Armis API Secret 的完整资源 ID 路径

部署 Cloud Functions 函数

  1. 打开 Cloud Shell 或安装了 gcloud CLI 的本地终端。
  2. 前往包含提取脚本文件的目录。
  3. 运行以下命令:

    gcloud functions deploy armis-vulnerabilities-ingestion \
      --gen2 \
      --entry-point main \
      --trigger-http \
      --runtime python39 \
      --env-vars-file .env.yml \
      --memory 512MB \
      --timeout 3600s \
      --region us-central1
    

使用 Cloud Function 第 1 代进行部署(替代方案)

  • 运行以下命令:

    gcloud functions deploy armis-vulnerabilities-ingestion \
      --entry-point main \
      --trigger-http \
      --runtime python39 \
      --env-vars-file .env.yml \
      --memory 512MB \
      --timeout 540s \
      --region us-central1
    

创建 Cloud Scheduler 作业

  1. 在 Google Cloud 控制台中,前往 Cloud Scheduler。
  2. 点击创建作业。
  3. 提供以下配置详细信息:
    • 名称:输入作业的名称(例如 armis-vulnerabilities-scheduler)。
    • 区域:选择与您的 Cloud Function 相同的区域(例如 us-central1)。
    • 频率:使用 cron 语法输入时间表(例如,*/10 * * * * 表示每 10 分钟一次)。
    • 时区:选择您偏好的时区(例如 UTC)。
  4. 点击继续。
  5. 选择 HTTP 作为目标类型。
  6. 提供以下配置详细信息:
    • 网址:在 Cloud Functions 控制台中,前往函数的触发器标签页,然后复制触发器网址。粘贴到此处。
    • HTTP 方法:选择 POST。
  7. 依次点击身份验证标头 > 添加 OIDC 令牌。
  8. 选择 Cloud Function 使用的服务账号。
  9. 点击创建。

UDM 映射表

日志字段 UDM 映射 逻辑
affectedDevicesCount read_only_udm.security_result.detection_fields.value 直接映射,转换为字符串。
attackComplexity read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
attackVector read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
availabilityImpact read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
avmRating read_only_udm.security_result.detection_fields.value 直接映射。
僵尸网络 read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 如果存在多个僵尸网络,则串联成一个字符串。
cisaDueDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
collection_time.nanos read_only_udm.metadata.event_timestamp.nanos 直接映射。
collection_time.seconds read_only_udm.metadata.event_timestamp.seconds 直接映射。
commonName read_only_udm.extensions.vulns.vulnerabilities.name 直接映射。
confidentialityImpact read_only_udm.security_result.detection_fields.value 直接映射。
cveUid read_only_udm.extensions.vulns.vulnerabilities.cve_id 直接映射。
cvssScore read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score 直接映射,转换为浮点数。
说明 read_only_udm.metadata.description 直接映射。
epssPercentile read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射,转换为字符串。
epssScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射,转换为字符串。
exploitabilityScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射,转换为字符串。
firstReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.first_found 解析为时间戳,可处理包含和不包含毫秒的格式。
firstWeaponizedReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
hasRansomware read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射,转换为字符串。
id read_only_udm.metadata.product_log_id 直接映射。
impactScore read_only_udm.security_result.detection_fields.value 直接映射,转换为字符串。
integrityImpact read_only_udm.security_result.detection_fields.value 直接映射。
isWeaponized read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射,转换为字符串。
latestExploitUpdate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
numOfExploits read_only_udm.security_result.detection_fields.value 直接映射,转换为字符串。
numberOfThreatActors read_only_udm.security_result.detection_fields.value 直接映射,转换为字符串。
orgPriorityManualChangeReason read_only_udm.security_result.detection_fields.value 直接映射。
orgPriorityManualChangedBy read_only_udm.principal.user.userid 直接映射。
orgPriorityManualUpdateTime read_only_udm.principal.labels.value 直接映射。
privilegesRequired read_only_udm.security_result.detection_fields.value 直接映射。
publishedDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
reportedByGoogleZeroDays read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射,转换为字符串。
范围 read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
和程度上减少 read_only_udm.extensions.vulns.vulnerabilities.severity 根据值映射到 CRITICAL、HIGH、MEDIUM、LOW,原始值也会映射到 severity_details。
状态 read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
threatTags read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 如果存在多个威胁标记,则串联成一个字符串。
userInteraction read_only_udm.about.labels.value 直接映射。
vulnerabilities_matches read_only_udm.metadata.url_back_to_product 直接映射。
read_only_udm.metadata.event_type 设置为“GENERIC_EVENT”。
read_only_udm.metadata.product_name 设置为“ARMIS”。
read_only_udm.metadata.vendor_name 设置为“ARMIS”。
read_only_udm.metadata.log_type 设置为“ARMIS_VULNERABILITIES”。
read_only_udm.extensions.vulns.vulnerabilities.severity_details “严重程度”字段值映射到此字段

更新日志

查看相应解析器的更新日志

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