收集 Armis 漏洞記錄

支援的國家/地區:

本文說明如何使用 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

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「設定檔」
  3. 從「機構詳細資料」部分複製並儲存客戶 ID

取得 Google SecOps 服務帳戶憑證

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「收集代理程式」
  3. 下載「Ingestion Authentication File」(擷取驗證檔案,即服務帳戶 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. 依序前往「Security」(安全性) >「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 中,按一下「Create Secret」
  2. 提供下列設定詳細資料:
    • 名稱:輸入密鑰名稱 (例如 armis-api-secret)。
    • 密鑰值:貼上您先前取得的 Armis API 密鑰。
  3. 按一下「建立密鑰」
  4. 複製所建立密鑰的資源 ID,格式如下:

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

下載並準備攝入指令碼

  1. 前往 https://github.com/chronicle/ingestion-scripts,存取 Google SecOps 擷取指令碼的官方存放區。
  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 函式

  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 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 工作

  1. 前往 Google Cloud 控制台的「Cloud Scheduler」
  2. 按一下 [Create Job] (建立工作)
  3. 提供下列設定詳細資料:
    • 名稱:輸入作業名稱 (例如 armis-vulnerabilities-scheduler)。
    • 區域:選取與 Cloud Function 相同的區域 (例如 us-central1)。
    • 頻率:使用 cron 語法輸入排程 (例如 */10 * * * * 代表每 10 分鐘)。
    • 時區:選取偏好的時區 (例如世界標準時間)。
  4. 按一下「繼續」
  5. 選取「HTTP」HTTP做為目標類型。
  6. 提供下列設定詳細資料:
    • 網址:在 Cloud Functions 控制台中,前往函式的「觸發條件」分頁,然後複製觸發條件網址。然後貼到這裡。
    • HTTP 方法:選取「POST」
  7. 依序點選「Auth header」「Add OIDC token」
  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 根據值對應至嚴重、高、中、低,原始值也會對應至 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 專業人員尋求答案。