收集 Armis 漏洞記錄
支援的國家/地區:
Google SecOps
SIEM
本文說明如何使用 Google Cloud Functions,將 Armis 弱點記錄匯入 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 Asset Vulnerability Management (AVM) 授權或模組存取權
取得 Google SecOps 客戶 ID
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「設定檔」。
- 從「機構詳細資料」部分複製並儲存客戶 ID。
取得 Google SecOps 服務帳戶憑證
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「收集代理程式」。
- 下載「Ingestion Authentication File」(擷取驗證檔案,即服務帳戶 JSON 檔案)。
- 請妥善儲存這個檔案,因為您需要將其上傳至 Google Secret Manager。
取得 Armis API 密鑰
- 登入 Armis Centrix 平台。
- 依序前往「設定」>「API 管理」。
- 如要產生新的 API 密鑰,請按一下「建立」。
- 按一下「顯示」即可查看私密金鑰。
- 複製並妥善儲存密鑰。
設定 Google Secret Manager
本節將說明如何使用 Google Secret Manager 安全地儲存整合所需的服務帳戶金鑰。
新增 Google SecOps 服務帳戶密碼
- 登入Google Cloud 控制台。
- 依序前往「Security」(安全性) >「Secret Manager」(密鑰管理)。
- 按一下「建立密鑰」。
- 提供下列設定詳細資料:
- 名稱:輸入密鑰名稱 (例如
secops-service-account)。 - 密鑰值:上傳您先前下載的 Google SecOps 服務帳戶 JSON 檔案,或直接貼上檔案內容。
- 名稱:輸入密鑰名稱 (例如
- 按一下「建立密鑰」。
複製所建立密鑰的資源 ID,格式如下:
projects/{project_id}/secrets/{secret_id}/versions/{version_id}
新增 Armis API 密鑰密鑰
- 在 Secret Manager 中,按一下「Create Secret」。
- 提供下列設定詳細資料:
- 名稱:輸入密鑰名稱 (例如
armis-api-secret)。 - 密鑰值:貼上您先前取得的 Armis API 密鑰。
- 名稱:輸入密鑰名稱 (例如
- 按一下「建立密鑰」。
複製所建立密鑰的資源 ID,格式如下:
projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
下載並準備攝入指令碼
- 前往 https://github.com/chronicle/ingestion-scripts,存取 Google SecOps 擷取指令碼的官方存放區。
- 從存放區下載 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 函式
使用 Cloud Functions 第 2 代部署 (建議)
- 開啟 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 Functions 第 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 工作
- 前往 Google Cloud 控制台的「Cloud Scheduler」。
- 按一下 [Create Job] (建立工作)。
- 提供下列設定詳細資料:
- 名稱:輸入作業名稱 (例如
armis-vulnerabilities-scheduler)。 - 區域:選取與 Cloud Function 相同的區域 (例如
us-central1)。 - 頻率:使用 cron 語法輸入排程 (例如
*/10 * * * *代表每 10 分鐘)。 - 時區:選取偏好的時區 (例如世界標準時間)。
- 名稱:輸入作業名稱 (例如
- 按一下「繼續」。
- 選取「HTTP」HTTP做為目標類型。
- 提供下列設定詳細資料:
- 網址:在 Cloud Functions 控制台中,前往函式的「觸發條件」分頁,然後複製觸發條件網址。然後貼到這裡。
- HTTP 方法:選取「POST」。
- 依序點選「Auth header」「Add OIDC token」。
- 選取 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 | 直接對應。 |
| 殭屍網路 | 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 | 根據值對應至嚴重、高、中、低,原始值也會對應至 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 專業人員尋求答案。