Raccogliere i log di Qualys Vulnerability Management
Questo parser gestisce i log di Qualys Vulnerability Management in formato chiave-valore (KV) o JSON. Estrae i dettagli delle vulnerabilità, le informazioni sull'host e i metadati della scansione, mappandoli all'UDM. Il parser gestisce anche strutture di log diverse, dando la priorità all'analisi KV e ricorrendo a JSON se necessario, e suddivide l'array DetectionList
in singoli eventi di vulnerabilità.
Prima di iniziare
- Assicurati di avere un'istanza Google Security Operations.
- Assicurati di disporre dell'accesso privilegiato alla console Qualys VMDR.
(Facoltativo) Crea un utente API dedicato in Qualys
- Accedi alla console Qualys.
- Vai a Utenti.
- Fai clic su Nuovo > Utente.
- Inserisci le Informazioni generali richieste per l'utente.
- Seleziona la scheda Ruolo utente.
- Assicurati che per il ruolo sia selezionata la casella di controllo Accesso API.
- Fai clic su Salva.
Identifica l'URL API Qualys specifico
Opzione 1
Identifica i tuoi URL come indicato nell'identificazione della piattaforma.
Opzione 2
- Accedi alla console Qualys.
- Vai a Guida > Informazioni.
- Scorri per visualizzare queste informazioni in Security Operations Center (SOC).
- Copia l'URL dell'API Qualys.
Configura un feed in Google SecOps per importare i log delle VM Qulays
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log VM Qualys).
- Seleziona API di terze parti come Tipo di origine.
- Seleziona VM Qualys come tipo di log.
- Fai clic su Avanti.
- Specifica i valori per i seguenti parametri di input:
- Nome utente: inserisci il nome utente.
- Secret (Segreto): inserisci la password.
- Percorso completo dell'API: fornisci l'URL del server API Qualys (ad esempio
https://<qualys_base_url>/api/2.0/fo/asset/host/?action=list
), dove<qualys_base_url>
è l'URL di base del server API Qualys in cui si trova il tuo account. - Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
DETECTION.FIRST_FOUND_DATETIME |
extensions.vulns.vulnerabilities.first_found |
Analizzata dal campo DETECTION.FIRST_FOUND_DATETIME , che converte il valore della stringa in un timestamp. |
DETECTION.LAST_FOUND_DATETIME |
extensions.vulns.vulnerabilities.last_found |
Analizzata dal campo DETECTION.LAST_FOUND_DATETIME , che converte il valore della stringa in un timestamp. |
DETECTION.QID |
extensions.vulns.vulnerabilities.name |
Concatena "QID: " con il valore di DETECTION.QID . |
DETECTION.RESULTS |
extensions.vulns.vulnerabilities.description |
Viene mappato direttamente al campo della descrizione. Viene utilizzato anche per estrarre network.ip_protocol e principal.port utilizzando grok. |
DETECTION.SEVERITY |
extensions.vulns.vulnerabilities.severity |
Mappatura da DETECTION.SEVERITY . I valori 0, 1, 2 diventano "LOW"; 3, 4 diventano "MEDIUM"; 5, 6, 7 diventano "HIGH". |
DETECTION.STATUS |
extensions.vulns.vulnerabilities.about.labels |
Aggiunto come etichetta con chiave "Stato rilevamento". |
DETECTION.TYPE |
extensions.vulns.vulnerabilities.about.labels |
Aggiunto come etichetta con chiave "Tipo di rilevamento". |
DNS |
principal.hostname |
Si mappa direttamente a principal.hostname . |
DNSData.DOMAIN |
principal.domain.name |
Si mappa direttamente a principal.domain.name . |
HOST.ASSET_ID |
principal.asset_id |
Concatena "QUALYS:" con il valore di HOST.ASSET_ID . |
HOST.DNS |
principal.hostname |
Viene mappato direttamente a principal.hostname se DNS è vuoto. |
HOST.DNS_DATA.DOMAIN |
principal.domain.name |
Viene mappato direttamente a principal.domain.name se DNSData.DOMAIN è vuoto. |
HOST.ID |
metadata.product_log_id |
Si mappa direttamente a metadata.product_log_id . |
HOST.IP |
principal.ip |
Viene mappato direttamente a principal.ip se IP è vuoto. |
HOST.LAST_SCAN_DATETIME |
extensions.vulns.vulnerabilities.scan_start_time |
Analizzata dal campo HOST.LAST_SCAN_DATETIME , che converte il valore della stringa in un timestamp. |
HOST.LAST_VM_SCANNED_DATE |
extensions.vulns.vulnerabilities.scan_end_time |
Analizzata dal campo HOST.LAST_VM_SCANNED_DATE , che converte il valore della stringa in un timestamp. |
HOST.NETBIOS |
additional.fields |
Aggiunto come etichetta con chiave "HOST NETBIOS". |
HOST.OS |
principal.platform_version |
Viene mappato direttamente a principal.platform_version se OS è vuoto. |
HOST.QG_HOSTID |
additional.fields |
Aggiunto come etichetta con chiave "HOST QG_HOSTID". |
HOST.TRACKING_METHOD |
additional.fields |
Aggiunto come etichetta con chiave "HOST TRACKING_METHOD". |
HOST_ID |
principal.asset_id |
Concatena "QUALYS:" con il valore di HOST_ID . |
ID |
metadata.product_log_id |
Si mappa direttamente a metadata.product_log_id . |
IP |
principal.ip |
Si mappa direttamente a principal.ip . |
LastScanDateTime |
extensions.vulns.vulnerabilities.scan_start_time |
Analizzata dal campo LastScanDateTime , che converte il valore della stringa in un timestamp. |
LastVMAuthScanDuration |
additional.fields |
Aggiunto come etichetta con chiave "LastVMAuthScanDuration". |
LastVMScanDate |
extensions.vulns.vulnerabilities.scan_end_time |
Analizzata dal campo LastVMScanDate , che converte il valore della stringa in un timestamp. |
LastVMScanDuration |
additional.fields |
Aggiunto come etichetta con chiave "LastVMScanDuration". |
LAST_FOUND_DATETIME |
extensions.vulns.vulnerabilities.last_found |
Analizzata dal campo LAST_FOUND_DATETIME , che converte il valore della stringa in un timestamp. |
LAST_SCAN_DATETIME |
extensions.vulns.vulnerabilities.scan_start_time |
Analizzata dal campo LAST_SCAN_DATETIME , che converte il valore della stringa in un timestamp. |
LAST_VM_SCANNED_DATE |
extensions.vulns.vulnerabilities.scan_end_time |
Analizzata dal campo LAST_VM_SCANNED_DATE , che converte il valore della stringa in un timestamp. |
NETBIOS |
additional.fields |
Aggiunto come etichetta con chiave "NETBIOS". |
NetworkID |
additional.fields |
Aggiunto come etichetta con chiave "NetworkID". |
NETWORK_ID |
additional.fields |
Aggiunto come etichetta con chiave "NetworkID". |
OS |
principal.platform_version |
Si mappa direttamente a principal.platform_version . |
Os |
principal.platform_version |
Viene mappato direttamente a principal.platform_version se OS è vuoto. |
QID |
extensions.vulns.vulnerabilities.name |
Concatena "QID: " con il valore di QID . |
QgHostID |
principal.asset_id |
Imposta principal.asset_id su "ID host:%{QgHostID}". |
SEVERITY |
extensions.vulns.vulnerabilities.severity |
Mappatura da SEVERITY . I valori 0, 1, 2 diventano "LOW"; 3, 4 diventano "MEDIUM"; 5, 6, 7 diventano "HIGH". |
TRACKING_METHOD |
additional.fields |
Aggiunto come etichetta con chiave "TRACKING_METHOD". |
TrackingMethod |
additional.fields |
Aggiunto come etichetta con chiave "TRACKING_METHOD". |
N/D | metadata.vendor_name |
Hardcoded su "Qualys". |
N/D | metadata.product_name |
Hardcoded to "Vulnerability Management". |
N/D | metadata.event_type |
Imposta su "SCAN_VULN_HOST" se _vulns non è vuoto, su "STATUS_UPDATE" se prin_host o IP non sono vuoti e su "GENERIC_EVENT" in caso contrario. |
N/D | metadata.log_type |
Tratto dal campo log_type del log non elaborato. |
N/D | principal.platform |
Determinato da OS , Os o HOST.OS . Se uno di questi contiene "Linux", la piattaforma è impostata su "LINUX". Se uno di questi contiene "Windows", la piattaforma è impostata su "WINDOWS". Se uno di questi contiene "mac" o "iOS", la piattaforma è impostata su "MAC". |
detection.DType |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Aggiunto come etichetta con la chiave "Tipo di rilevamento" nell'array delle vulnerabilità per gli eventi analizzati dal campo DetectionList . |
detection.FirstFoundTime |
extensions.vulns.vulnerabilities.first_found |
Analizzata dal campo detection.FirstFoundTime , converte il valore di stringa in un timestamp all'interno dell'array di vulnerabilità per gli eventi analizzati dal campo detection.FirstFoundTime .DetectionList |
detection.LastFoundTime |
extensions.vulns.vulnerabilities.last_found |
Analizzata dal campo detection.LastFoundTime , converte il valore di stringa in un timestamp all'interno dell'array di vulnerabilità per gli eventi analizzati dal campo detection.LastFoundTime .DetectionList |
detection.LastProcessedDatetime |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Aggiunto come etichetta con chiave "LastProcessedDatetime" nell'array delle vulnerabilità per gli eventi analizzati dal campo DetectionList . |
detection.LastTestDateTime |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Aggiunto come etichetta con chiave "LastTestDateTime" all'interno dell'array delle vulnerabilità per gli eventi analizzati dal campo DetectionList . |
detection.LastUpdateDateTime |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Aggiunto come etichetta con chiave "LastUpdateDateTime" all'interno dell'array delle vulnerabilità per gli eventi analizzati dal campo DetectionList . |
detection.Qid |
extensions.vulns.vulnerabilities.name |
Concatena "QID: " con il valore di detection.Qid all'interno dell'array delle vulnerabilità per gli eventi analizzati dal campo DetectionList . |
detection.Results |
extensions.vulns.vulnerabilities.description |
Si mappa direttamente al campo descrizione all'interno dell'array di vulnerabilità per gli eventi analizzati dal campo DetectionList . I tabulatori e i nuovi riga vengono sostituiti da spazi. |
detection.Severity |
extensions.vulns.vulnerabilities.severity |
Mappatura da detection.Severity . I valori 0, 1, 2 diventano "LOW"; 3, 4 diventano "MEDIUM"; 5, 6, 7 diventano "HIGH" all'interno dell'array delle vulnerabilità per gli eventi analizzati dal campo DetectionList . |
detection.Status |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Aggiunto come etichetta con la chiave "Stato rilevamento" nell'array delle vulnerabilità per gli eventi analizzati dal campo DetectionList . |
detection.TimesFound |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Aggiunto come etichetta con chiave "TimesFound" all'interno dell'array delle vulnerabilità per gli eventi analizzati dal campo DetectionList . |
timestamp |
metadata.event_timestamp , timestamp |
Il campo timestamp del log non elaborato viene utilizzato sia per il timestamp dell'evento sia per il timestamp di primo livello. |
Modifiche
2023-10-27
- È stato aggiunto un ciclo "for" per suddividere gli eventi quando sono presenti più "QID".
2023-04-25
- È stata mappata la colonna "DetectionList.FirstFoundTime" a "extensions.vulns.vulnerabilities.first_found".
- "DetectionList.LastFoundTime" è stato mappato a "extensions.vulns.vulnerabilities.last_found".
- È stata mappata la colonna "DetectionList.TimesFound" a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
- "DetectionList.LastTestDateTime" è stato mappato a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
- "DetectionList.LastUpdateDateTime" è stato mappato a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
- "DetectionList.LastProcessedDatetime" è stato mappato a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
2023-01-23
- Sono stati mappati i dettagli dell'array "DetectionList" a "extensions.vulns.vulnerabilities".
- "DetectionList.Qid" è stato mappato a "extensions.vulns.vulnerabilities.name".
- "DetectionList.Severity" è stato mappato a "extensions.vulns.vulnerabilities.severity".
- "DetectionList.Results" è stato mappato a "extensions.vulns.vulnerabilities.description".
- "DetectionList.Status" e "DetectionList.DType" sono stati mappati a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
2022-09-29
- "ID" mappato a "metadata.product_log_id".
- "Netbios","TrackingMethod" e "NetworkID" sono stati mappati a "additional.fields".
- "QgHostID" è stato mappato a "principal.asset_id".
- "Os" è stato mappato a "principal.platform_version".
- È stato aggiunto il controllo condizionale per "vulns".
2022-07-20
- è stata aggiunta la mappatura per i seguenti campi:
- "DETECTION.FIRST_FOUND_DATETIME" mappato a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.first_found".
- "DETECTION.LAST_FOUND_DATETIME" mappato a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.last_found".
- "HOST.LAST_VM_SCANNED_DATE" mappato a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.scan_end_time".
- "HOST.LAST_SCAN_DATETIME" mappato a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.scan_start_time".
- "DETECTION.QID" mappato a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.name".
- "DETECTION.SEVERITY" mappato a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.severity".
- "DETECTION.TYPE" mappato a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.about.labels".
- "DETECTION.STATUS" mappato a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.labels".
- "DETECTION.RESULTS" mappato a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.description".
- "HOST.DNS_DATA.DOMAIN" mappato a "event.idm.read_only_udm.principal.domain.name".
- "HOST.ASSET_ID" mappato a "event.idm.read_only_udm.principal.asset_id".
- "HOST.IP" mappato a "event.idm.read_only_udm.principal.ip".
- "HOST.OS" mappato a "event.idm.read_only_udm.principal.platform_version".
- "HOST.DNS" mappato a "event.idm.read_only_udm.principal.hostname".
- "HOST.QG_HOSTID" mappato a "event.idm.read_only_udm.additional.fields".
- "HOST.NETBIOS" mappato a "event.idm.read_only_udm.additional.fields".
- "HOST.TRACKING_METHOD" mappato a "event.idm.read_only_udm.additional.fields".