Raccogliere i log di contesto delle risorse Qualys

Supportato in:

Questo parser estrae le informazioni sul contesto degli asset dai log JSON di Qualys e le trasforma nel formato UDM. Analizza vari campi come ID, IP, nome host, dettagli delle risorse cloud, sistema operativo e tag, mappandoli ai campi UDM corrispondenti e creando relazioni tra asset e risorse. Il parser gestisce anche una logica specifica per i cloud provider e i sistemi operativi, garantendo una rappresentazione accurata nell'UDM.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google Security Operations.
  • Accesso privilegiato a Google Cloud.
  • Accesso con privilegi a Qualys.

Abilita le API richieste:

  1. Accedi alla Google Cloud console.
  2. Vai ad API e servizi > Libreria.
  3. Cerca le seguenti API e attivale:
    • API Cloud Functions
    • API Cloud Scheduler
    • Cloud Pub/Sub (necessario per Cloud Scheduler per richiamare le funzioni)

Crea un Google Cloud bucket di archiviazione

  1. Accedi alla Google Cloud console.
  2. Vai alla pagina Bucket Cloud Storage.

    Vai a Bucket

  3. Fai clic su Crea.

  4. Configura il bucket:

    • Nome: inserisci un nome univoco che soddisfi i requisiti per i nomi dei bucket (ad esempio, qualys-asset-bucket).
    • Scegli dove archiviare i tuoi dati: seleziona una località.
    • Scegli una classe di archiviazione per i tuoi dati: seleziona una classe di archiviazione predefinita per il bucket oppure seleziona Autoclass per la gestione automatica della classe di archiviazione.
    • Scegli come controllare l'accesso agli oggetti: seleziona no per applicare la prevenzione dell'accesso pubblico e seleziona un modello di controllo dell'accesso per gli oggetti del bucket.
    • Classe di archiviazione: scegli in base alle tue esigenze (ad esempio, Standard).
  5. Fai clic su Crea.

Crea un service account Google Cloud

  1. Vai a IAM e amministrazione > Service Accounts.
  2. Crea un nuovo account di servizio.
  3. Assegna un nome descrittivo (ad esempio qualys-user).
  4. Concedi al account di servizio il ruolo Storage Object Admin nel bucket Cloud Storage che hai creato nel passaggio precedente.
  5. Concedi al account di servizio il ruolo Invoker di Cloud Functions.
  6. Crea una chiave SSH per il account di servizio.
  7. Scarica un file della chiave JSON per il account di servizio. Conserva questo file in modo sicuro.

(Facoltativo) Crea un utente API dedicato in Qualys

  1. Accedi alla console Qualys.
  2. Vai a Utenti.
  3. Fai clic su Nuovo > Utente.
  4. Inserisci le informazioni generali richieste per l'utente.
  5. Seleziona la scheda Ruolo utente.
  6. Assicurati che la casella di controllo Accesso API sia selezionata per il ruolo.
  7. Fai clic su Salva.

Identificare l'URL API Qualys specifico

Opzione 1

Identifica i tuoi URL come indicato nell'identificazione della piattaforma.

Opzione 2

  1. Accedi alla console Qualys.
  2. Vai ad Aiuto > Informazioni.
  3. Scorri per visualizzare queste informazioni nella sezione Security Operations Center (SOC).
  4. Copia l'URL dell'API Qualys.

Configura la Cloud Function

  1. Vai a Cloud Functions nella console Google Cloud .
  2. Fai clic su Crea funzione.
  3. Configura la funzione:

    • Nome: inserisci un nome per la funzione, ad esempio fetch-qualys-assets.
    • Regione: seleziona una regione vicina al tuo bucket.
    • Trigger: scegli il trigger HTTP, se necessario, o Cloud Pub/Sub per l'esecuzione pianificata.
    • Autenticazione: protetto con l'autenticazione.
    • Scrivi il codice con un editor incorporato:
    ```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. Fai clic su Esegui il deployment dopo aver completato la configurazione.

Configura Cloud Scheduler

  1. Vai a Cloud Scheduler nella console Google Cloud .
  2. Fai clic su Crea job.
  3. Configura il job:

    • Nome: inserisci un nome per il job (ad esempio, trigger-fetch-qualys-assets).
    • Frequenza: utilizza la sintassi cron per specificare la pianificazione (ad esempio, 0 0 * * * per tutti i giorni a mezzanotte).
    • Fuso orario: imposta il fuso orario che preferisci.
    • Tipo di trigger: scegli HTTP.
    • URL trigger: inserisci l'URL di Cloud Function (disponibile nei dettagli della funzione dopo il deployment).
    • Metodo: scegli POST.
  4. Crea il job.

Configurare i feed

Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:

  • Impostazioni SIEM > Feed
  • Hub dei contenuti > Pacchetti di contenuti

Configura i feed da Impostazioni SIEM > Feed

Per configurare un feed:

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed, ad esempio Qualys Asset Context Logs.
  5. Seleziona Google Cloud Storage come Tipo di origine.
  6. Seleziona Qualys Asset Context come Tipo di log.
  7. Fai clic su Avanti.
  8. Specifica i valori per i seguenti parametri di input:

    • URI GCS: l'URI Cloud Storage.
    • URI è un: seleziona Singolo file.
    • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
  9. Fai clic su Avanti.

  10. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Configurare i feed dall'hub dei contenuti

Specifica i valori per i seguenti campi:

  • URI GCS: l'URI Cloud Storage.
  • URI è un: seleziona Singolo file.
  • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.

Opzioni avanzate

  • Nome feed:un valore precompilato che identifica il feed.
  • Tipo di origine:metodo utilizzato per raccogliere i log in Google SecOps.
  • Spazio dei nomi dell'asset:lo spazio dei nomi associato al feed.
  • Etichette di importazione:etichette applicate a tutti gli eventi di questo feed.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
ASSET_ID entity.entity.asset.asset_id Mappato direttamente dal campo ASSET_ID.
CLOUD_PROVIDER entity.relations.entity.resource.resource_subtype Mappato direttamente dal campo CLOUD_PROVIDER.
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME entity.relations.entity.resource.attribute.labels.key Mappato direttamente dal campo CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME.
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE entity.relations.entity.resource.attribute.labels.value Mappato direttamente dal campo CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE.
CLOUD_RESOURCE_ID entity.relations.entity.resource.id Mappato direttamente dal campo CLOUD_RESOURCE_ID.
CLOUD_SERVICE entity.relations.entity.resource.resource_type Se CLOUD_SERVICE è "VM", il valore è impostato su "VIRTUAL_MACHINE".
DNS_DATA.HOSTNAME entity.entity.asset.hostname Mappato direttamente dal campo DNS_DATA.HOSTNAME.
EC2_INSTANCE_ID entity.relations.entity.resource.product_object_id Mappato direttamente dal campo EC2_INSTANCE_ID.
ID entity.entity.asset.product_object_id Mappato direttamente dal campo ID.
IP entity.entity.asset.ip Mappato direttamente dal campo IP.
METADATA.AZURE.ATTRIBUTE[].NAME entity.relations.entity.resource.attribute.labels.key Mappato direttamente dal campo METADATA.AZURE.ATTRIBUTE[].NAME.
METADATA.AZURE.ATTRIBUTE[].VALUE entity.relations.entity.resource.attribute.labels.value Mappato direttamente dal campo METADATA.AZURE.ATTRIBUTE[].VALUE.
OS entity.entity.asset.platform_software.platform Se OS contiene "windows" (senza distinzione tra maiuscole e minuscole), il valore viene impostato su "WINDOWS".
TAGS.TAG[].NAME entity.relations.entity.resource.attribute.labels.key Mappato direttamente dal campo TAGS.TAG[].NAME.
TAGS.TAG[].TAG_ID entity.relations.entity.resource.attribute.labels.value Stringa concatenata "TAG_ID: " con il valore di TAGS.TAG[].TAG_ID. Copiato dal campo create_time del log non elaborato. Codificato come "ASSET". Codificato in modo permanente su "QUALYS ASSET CONTEXT". Codificato in modo permanente su "QUALYS ASSET CONTEXT". Codificato come "RESOURCE". Codificato come "MEMBER". Copiato dal campo create_time del log non elaborato.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.