收集 Qualys 資產情境記錄

支援的國家/地區:

這個剖析器會從 Qualys JSON 記錄中擷取資產環境資訊,並轉換為 UDM 格式。這項功能會剖析各種欄位,例如 ID、IP、主機名稱、雲端資源詳細資料、OS 和標記,將這些欄位對應至相應的 UDM 欄位,並在資產和資源之間建立關係。剖析器也會處理雲端服務供應商和作業系統的特定邏輯,確保 UDM 中的表示方式正確無誤。

事前準備

請確認您已完成下列事前準備事項:

  • Google Security Operations 執行個體。
  • Google Cloud的特殊存取權。
  • Qualys 的特殊存取權。

啟用必要的 API:

  1. 登入 Google Cloud 主控台。
  2. 依序前往「API 和服務」>「程式庫」
  3. 搜尋並啟用下列 API:
    • Cloud Functions API
    • Cloud Scheduler API
    • Cloud Pub/Sub (Cloud Scheduler 必須使用這項服務才能叫用函式)

建立 Google Cloud 儲存空間 bucket

  1. 登入 Google Cloud 主控台。
  2. 前往「Cloud Storage Buckets」(Cloud Storage bucket) 頁面。

    前往「Buckets」(值區) 頁面

  3. 點選「建立」

  4. 設定 bucket:

    • 名稱:輸入符合值區名稱規定的專屬名稱 (例如 qualys-asset-bucket)。
    • 選擇資料的儲存位置:選取位置。
    • 為資料選擇儲存空間級別:選取值區的預設儲存空間級別,或選取「Autoclass」(自動分類),讓系統自動管理儲存空間級別。
    • 選擇如何控制物件的存取權:選取「否」可強制禁止公開存取,並為 bucket 物件選取存取權控管模型
    • 儲存空間級別:依需求選擇 (例如「Standard」)。
  5. 點選「建立」

建立 Google Cloud 服務帳戶

  1. 依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)
  2. 建立新的服務帳戶。
  3. 為其設定描述性名稱 (例如 qualys-user)。
  4. 在您於上一個步驟建立的 Cloud Storage bucket 中,將「Storage 物件管理員」角色授予服務帳戶。
  5. Cloud Functions 叫用者角色授予服務帳戶。
  6. 為服務帳戶建立 SSH 金鑰
  7. 下載服務帳戶的 JSON 金鑰檔案。請妥善保管這個檔案。

選用:在 Qualys 中建立專屬的 API 使用者

  1. 登入 Qualys 控制台。
  2. 前往使用者
  3. 依序點選「新增」>「使用者」
  4. 輸入使用者的一般資訊
  5. 選取「使用者角色」分頁標籤。
  6. 確認角色已勾選「API 存取權」核取方塊。
  7. 按一下 [儲存]

找出特定 Qualys API 網址

選項 1

如「平台識別」一節所述,找出網址。

選項 2

  1. 登入 Qualys 控制台。
  2. 依序點選「說明」>「關於」
  3. 捲動畫面,即可在「資安營運中心 (SOC)」下方查看這項資訊。
  4. 複製 Qualys API 網址。

設定 Cloud 函式

  1. 前往 Google Cloud 控制台的「Cloud Functions」
  2. 按一下 [Create Function] (建立函式)
  3. 設定函式:

    • 名稱:輸入函式名稱 (例如 fetch-qualys-assets)。
    • 「Region」(區域):選取靠近 Bucket 的區域。
    • 觸發條件:視需要選擇 HTTP 觸發條件,或選擇 Cloud Pub/Sub 進行排程執行。
    • 驗證:透過驗證確保安全。
    • 使用內嵌編輯器編寫程式碼
    ```python
    from google.cloud import storage
    import requests
    import base64
    import json
    
    # Cloud Storage configuration
    BUCKET_NAME = "<bucket-name>"
    FILE_NAME = "qualys_assets.json"
    
    # Qualys API credentials
    QUALYS_USERNAME = "<qualys-username>"
    QUALYS_PASSWORD = "<qualys-password>"
    QUALYS_BASE_URL = "https://<qualys_base_url>"
    
    def fetch_qualys_assets():
        auth = base64.b64encode(f"{QUALYS_USERNAME}:{QUALYS_PASSWORD}".encode()).decode()
        headers = {
            "Authorization": f"Basic {auth}",
            "Content-Type": "application/xml"
        }
        payload = """
        <ServiceRequest>
            <filters>
                <Criteria field="asset.name" operator="LIKE">%</Criteria>
            </filters>
        </ServiceRequest>
        """
        response = requests.post(f"{QUALYS_BASE_URL}/qps/rest/2.0/search/am/asset", headers=headers, data=payload)
        return response.json()
    
    def upload_to_gcs(data):
        client = storage.Client()
        bucket = client.get_bucket(BUCKET_NAME)
        blob = bucket.blob(FILE_NAME)
        blob.upload_from_string(json.dumps(data), content_type="application/json")
    
    def main(request):
        assets = fetch_qualys_assets()
        upload_to_gcs(assets)
        return "Data uploaded to Cloud Storage successfully!"
    
    ```
    
  4. 完成設定後,按一下「Deploy」(部署)

設定 Cloud Scheduler

  1. 前往控制台的「Cloud Scheduler」頁面。 Google Cloud
  2. 按一下 [Create Job] (建立工作)
  3. 設定工作:

    • 名稱:輸入工作的名稱 (例如 trigger-fetch-qualys-assets)。
    • 頻率:使用 cron 語法指定排程 (例如,0 0 * * * 代表每天午夜)。
    • 時區:設定偏好的時區。
    • 觸發條件類型:選擇「HTTP」
    • 「觸發網址」:輸入 Cloud Functions 的網址 (部署後可在函式詳細資料中找到)。
    • 方法:選擇「POST」
  4. 建立工作。

設定動態饋給

在 Google SecOps 平台中,有兩種不同的進入點可設定動態饋給:

  • 「SIEM 設定」>「動態消息」
  • 內容中心 > 內容包

依序前往「SIEM 設定」>「動態饋給」,設定動態饋給

如要設定動態消息,請按照下列步驟操作:

  1. 依序前往「SIEM 設定」>「動態消息」
  2. 按一下「新增動態消息」
  3. 在下一個頁面中,按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中,輸入動態饋給的名稱,例如「Qualys 資產內容記錄」
  5. 選取「Google Cloud Storage」做為「來源類型」。
  6. 選取「Qualys 資產內容」做為「記錄類型」
  7. 點選「下一步」
  8. 指定下列輸入參數的值:

    • GCS URI:Cloud Storage URI。
    • URI 為:選取「單一檔案」
    • 來源刪除選項:根據偏好選取刪除選項。
  9. 點選「下一步」

  10. 在「Finalize」畫面上檢查新的動態饋給設定,然後按一下「Submit」

從內容中心設定動態饋給

為下列欄位指定值:

  • GCS URI:Cloud Storage URI。
  • URI 為:選取「單一檔案」
  • 來源刪除選項:根據偏好選取刪除選項。

進階選項

  • 動態饋給名稱:系統預先填入的值,用於識別動態饋給。
  • 來源類型:將記錄收集到 Google SecOps 的方法。
  • 資產命名空間:與動態饋給相關聯的命名空間。
  • 擷取標籤:套用至這個動態饋給所有事件的標籤。

UDM 對應表

記錄欄位 UDM 對應 邏輯
ASSET_ID entity.entity.asset.asset_id 直接從「ASSET_ID」欄位對應。
CLOUD_PROVIDER entity.relations.entity.resource.resource_subtype 直接從「CLOUD_PROVIDER」欄位對應。
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME entity.relations.entity.resource.attribute.labels.key 直接從「CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME」欄位對應。
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE entity.relations.entity.resource.attribute.labels.value 直接從「CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE」欄位對應。
CLOUD_RESOURCE_ID entity.relations.entity.resource.id 直接從「CLOUD_RESOURCE_ID」欄位對應。
CLOUD_SERVICE entity.relations.entity.resource.resource_type 如果 CLOUD_SERVICE 為「VM」,值會設為「VIRTUAL_MACHINE」。
DNS_DATA.HOSTNAME entity.entity.asset.hostname 直接從「DNS_DATA.HOSTNAME」欄位對應。
EC2_INSTANCE_ID entity.relations.entity.resource.product_object_id 直接從「EC2_INSTANCE_ID」欄位對應。
ID entity.entity.asset.product_object_id 直接從「ID」欄位對應。
IP entity.entity.asset.ip 直接從「IP」欄位對應。
METADATA.AZURE.ATTRIBUTE[].NAME entity.relations.entity.resource.attribute.labels.key 直接從「METADATA.AZURE.ATTRIBUTE[].NAME」欄位對應。
METADATA.AZURE.ATTRIBUTE[].VALUE entity.relations.entity.resource.attribute.labels.value 直接從「METADATA.AZURE.ATTRIBUTE[].VALUE」欄位對應。
OS entity.entity.asset.platform_software.platform 如果 OS 包含「windows」(不區分大小寫),則值會設為「WINDOWS」。
TAGS.TAG[].NAME entity.relations.entity.resource.attribute.labels.key 直接從「TAGS.TAG[].NAME」欄位對應。
TAGS.TAG[].TAG_ID entity.relations.entity.resource.attribute.labels.value 將字串「TAG_ID: 」與 TAGS.TAG[].TAG_ID 的值串連。從原始記錄的 create_time 欄位複製。已硬式編碼為「ASSET」。已硬式編碼為「QUALYS ASSET CONTEXT」。已硬式編碼為「QUALYS ASSET CONTEXT」。已硬式編碼為「RESOURCE」。已硬式編碼為「MEMBER」。從原始記錄的 create_time 欄位複製。

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。