收集 Armis Vulnerabilities 日志

解析器版本: 2.0

支持:

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

准备工作

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

  • Google SecOps 实例,具有客户 ID 和服务帐号凭据
  • 对 Armis Centrix 平台的特权访问权限
  • Armis API 密钥和服务器网址
  • 对 Google Cloud 的访问权限,并具有创建 Cloud Functions 函数、Secret Manager 密文和 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. 点击创建密钥
  4. 提供以下配置详细信息:
    • 名称:输入密钥的名称(例如 secops-service-account)。
    • 密钥值:上传您之前下载的 Google SecOps 服务帐号 JSON 文件,或直接粘贴其内容。
  5. 点击创建密钥
  6. 按以下格式复制 所创建密钥的资源 ID

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

添加 Armis API 密钥

  1. Secret Manager 中,点击 创建密钥
  2. 提供以下配置详细信息:
    • 名称:输入密钥的名称(例如 armis-api-secret)。
    • 密钥值:粘贴您之前获取的 Armis API 密钥。
  3. 点击创建密钥
  4. 按以下格式复制 所创建密钥的资源 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 Functions 函数部署创建一个新目录。
  5. armiscommon 目录的内容复制到部署目录中。

配置环境变量

  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 服务帐号密钥的完整资源 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 密钥的完整资源 ID 路径

部署 Cloud Function

  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 Gen1 进行部署(替代方案)

  • 运行以下命令:

    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 直接映射。
botnets 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 直接映射,转换为浮点数。
description 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 直接映射,转换为字符串。
scope read_only_udm.extensions.vulns.vulnerabilities.about.labels.value 直接映射。
severity read_only_udm.extensions.vulns.vulnerabilities.severity 根据值映射到 CRITICAL、HIGH、MEDIUM、LOW,原始值也映射到 severity_details。
status 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 “severity”字段值映射到此字段

更新日志

查看此解析器的更新日志

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