收集 Armis 漏洞日志

支持的平台:

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

准备工作

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

  • 具有客户 ID 和服务账号凭据的 Google SecOps 实例
  • 对 Armis Centrix 平台的特权访问权限
  • Armis API Secret Key 和服务器网址
  • 对 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 服务账号 Secret

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

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

添加 Armis API Secret Key 密文

  1. Secret Manager 中,点击创建密钥
  2. 提供以下配置详细信息:
    • 名称:输入 Secret 的名称(例如 armis-api-secret)。
    • Secret 值:粘贴您之前获得的 Armis API Secret 密钥。
  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. 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}:Google SecOps 服务账号 Secret 在 Secret Manager 中的完整资源 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 专业人士的解答。