收集 Armis Vulnerabilities 日志
解析器版本: 2.0
支持:
Google SecOps
SIEM
本文档介绍了如何使用 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
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 个人资料。
- 从组织详细信息 部分复制并保存客户 ID 。
获取 Google SecOps 服务帐号凭据
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载数据注入身份验证文件 (服务帐号 JSON 文件)。
- 请妥善保存该文件,因为您需要将其上传到 Google Secret Manager。
获取 Armis API 密钥
- 登录 Armis Centrix 平台。
- 依次前往设置 > API 管理。
- 如果您需要生成新的 API 密钥,请点击创建 。
- 点击显示 以查看密钥。
- 请妥善复制并保存密钥。
配置 Google Secret Manager
本部分将指导您使用 Google Secret Manager 安全地存储集成所需的服务帐号密钥。
添加 Google SecOps 服务帐号密钥
- 登录 Google Cloud 控制台。
- 依次前往安全性 > Secret Manager。
- 点击创建密钥 。
- 提供以下配置详细信息:
- 名称:输入密钥的名称(例如
secops-service-account)。 - 密钥值:上传您之前下载的 Google SecOps 服务帐号 JSON 文件,或直接粘贴其内容。
- 名称:输入密钥的名称(例如
- 点击创建密钥 。
按以下格式复制 所创建密钥的资源 ID :
projects/{project_id}/secrets/{secret_id}/versions/{version_id}
添加 Armis API 密钥
- 在 Secret Manager 中,点击 创建密钥。
- 提供以下配置详细信息:
- 名称:输入密钥的名称(例如
armis-api-secret)。 - 密钥值:粘贴您之前获取的 Armis API 密钥。
- 名称:输入密钥的名称(例如
- 点击创建密钥 。
按以下格式复制 所创建密钥的资源 ID :
projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
下载并准备提取脚本
- 访问官方 Google SecOps 提取脚本代码库,网址为 https://github.com/chronicle/ingestion-scripts。
- 从代码库下载 armis 目录的内容。
- 从代码库下载 common 目录(必需的依赖项)。
- 在本地机器上为 Cloud Functions 函数部署创建一个新目录。
- 将 armis 和 common 目录的内容复制到部署目录中。
配置环境变量
- 通过文本编辑器打开
.env.yml文件。 使用以下配置修改该文件:
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 客户 IDprojects/{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
使用 Cloud Function Gen2 进行部署(推荐)
- 打开 Cloud Shell 或安装了 gcloud CLI 的本地终端。
- 导航到包含提取脚本文件的目录。
运行以下命令:
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 作业
- 在 Google Cloud 控制台中,前往 Cloud Scheduler。
- 点击创建作业 。
- 提供以下配置详细信息:
- 名称:输入作业的名称(例如
armis-vulnerabilities-scheduler)。 - 区域:选择与 Cloud Function 相同的区域(例如
us-central1)。 - 频率:使用 cron 语法输入时间表(例如,
*/10 * * * *表示每 10 分钟一次)。 - 时区:选择您偏好的时区(例如 UTC)。
- 名称:输入作业的名称(例如
- 点击继续 。
- 选择 HTTP 作为目标类型。
- 提供以下配置详细信息:
- 网址:在 Cloud Functions 控制台中,前往函数的触发器 标签页,然后复制触发器网址。请粘贴到此处。
- HTTP 方法:选择 POST。
- 依次点击身份验证标头 > 添加 OIDC 令牌。
- 选择 Cloud Function 使用的服务账号 。
- 点击创建 。
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 专业人士的解答。