Collecter les journaux de gestion des failles Qualys
Cet analyseur gère les journaux de gestion des vulnérabilités Qualys au format clé-valeur (KV) ou JSON. Il extrait les détails des failles, les informations sur l'hôte et les métadonnées d'analyse, et les met en correspondance avec la UDM. L'analyseur gère également différentes structures de journaux, donne la priorité à l'analyse KV et revient au format JSON si nécessaire, et divise le tableau DetectionList
en événements de vulnérabilité individuels.
Avant de commencer
- Assurez-vous de disposer d'une instance Google Security Operations.
- Assurez-vous de disposer d'un accès privilégié à la console Qualys VMDR.
Facultatif: Créer un utilisateur d'API dédié dans Qualys
- Connectez-vous à la console Qualys.
- Accédez à Utilisateurs.
- Cliquez sur Nouveau > Utilisateur.
- Saisissez les informations générales requises pour l'utilisateur.
- Sélectionnez l'onglet Rôle utilisateur.
- Assurez-vous que la case Accès aux API est cochée pour le rôle.
- Cliquez sur Enregistrer.
Identifier votre URL d'API Qualys spécifique
Option 1
Identifiez vos URL comme indiqué dans la section Identification de la plate-forme.
Option 2
- Connectez-vous à la console Qualys.
- Accédez à Aide > À propos.
- Faites défiler la page pour afficher ces informations sous "Centre des opérations de sécurité (SOC)".
- Copiez l'URL de l'API Qualys.
Configurer un flux dans Google SecOps pour ingérer les journaux de VM Qulays
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux de VM Qualys).
- Sélectionnez API tierce comme type de source.
- Sélectionnez VM Qualys comme type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- Nom d'utilisateur: saisissez le nom d'utilisateur.
- Secret: saisissez le mot de passe.
- Chemin d'accès complet de l'API: indiquez l'URL du serveur de l'API Qualys (par exemple,
https://<qualys_base_url>/api/2.0/fo/asset/host/?action=list
), où<qualys_base_url>
est l'URL de base du serveur de l'API Qualys sur lequel se trouve votre compte. - Espace de noms des éléments: espace de noms des éléments.
- Libellés d'ingestion: libellé appliqué aux événements de ce flux.
- Cliquez sur Suivant.
- Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
DETECTION.FIRST_FOUND_DATETIME |
extensions.vulns.vulnerabilities.first_found |
Analyse du champ DETECTION.FIRST_FOUND_DATETIME , convertissant la valeur de la chaîne en code temporel. |
DETECTION.LAST_FOUND_DATETIME |
extensions.vulns.vulnerabilities.last_found |
Analyse du champ DETECTION.LAST_FOUND_DATETIME , convertissant la valeur de la chaîne en code temporel. |
DETECTION.QID |
extensions.vulns.vulnerabilities.name |
Concaténe "QID: " avec la valeur de DETECTION.QID . |
DETECTION.RESULTS |
extensions.vulns.vulnerabilities.description |
Correspond directement au champ "Description". Permet également d'extraire network.ip_protocol et principal.port à l'aide de grok. |
DETECTION.SEVERITY |
extensions.vulns.vulnerabilities.severity |
Mappé à partir de DETECTION.SEVERITY . Les valeurs 0, 1 et 2 deviennent "LOW" (BAS), les valeurs 3 et 4 deviennent "MEDIUM" (MOYEN) et les valeurs 5, 6 et 7 deviennent "HIGH" (ÉLEVÉ). |
DETECTION.STATUS |
extensions.vulns.vulnerabilities.about.labels |
Ajouté en tant que libellé avec la clé "État de la détection". |
DETECTION.TYPE |
extensions.vulns.vulnerabilities.about.labels |
Ajouté en tant que libellé avec la clé "Type de détection". |
DNS |
principal.hostname |
Correspond directement à principal.hostname . |
DNSData.DOMAIN |
principal.domain.name |
Correspond directement à principal.domain.name . |
HOST.ASSET_ID |
principal.asset_id |
Concaténe "QUALYS:" avec la valeur de HOST.ASSET_ID . |
HOST.DNS |
principal.hostname |
Mappe directement à principal.hostname si DNS est vide. |
HOST.DNS_DATA.DOMAIN |
principal.domain.name |
Mappe directement à principal.domain.name si DNSData.DOMAIN est vide. |
HOST.ID |
metadata.product_log_id |
Correspond directement à metadata.product_log_id . |
HOST.IP |
principal.ip |
Mappe directement à principal.ip si IP est vide. |
HOST.LAST_SCAN_DATETIME |
extensions.vulns.vulnerabilities.scan_start_time |
Analyse du champ HOST.LAST_SCAN_DATETIME , convertissant la valeur de la chaîne en code temporel. |
HOST.LAST_VM_SCANNED_DATE |
extensions.vulns.vulnerabilities.scan_end_time |
Analyse du champ HOST.LAST_VM_SCANNED_DATE , convertissant la valeur de la chaîne en code temporel. |
HOST.NETBIOS |
additional.fields |
Ajouté en tant que libellé avec la clé "HOST NETBIOS". |
HOST.OS |
principal.platform_version |
Mappe directement à principal.platform_version si OS est vide. |
HOST.QG_HOSTID |
additional.fields |
Ajouté en tant que libellé avec la clé "HOST QG_HOSTID". |
HOST.TRACKING_METHOD |
additional.fields |
Ajouté en tant que libellé avec la clé "HOST TRACKING_METHOD". |
HOST_ID |
principal.asset_id |
Concaténe "QUALYS:" avec la valeur de HOST_ID . |
ID |
metadata.product_log_id |
Correspond directement à metadata.product_log_id . |
IP |
principal.ip |
Correspond directement à principal.ip . |
LastScanDateTime |
extensions.vulns.vulnerabilities.scan_start_time |
Analyse du champ LastScanDateTime , convertissant la valeur de la chaîne en code temporel. |
LastVMAuthScanDuration |
additional.fields |
Ajouté en tant que libellé avec la clé "LastVMAuthScanDuration". |
LastVMScanDate |
extensions.vulns.vulnerabilities.scan_end_time |
Analyse du champ LastVMScanDate , convertissant la valeur de la chaîne en code temporel. |
LastVMScanDuration |
additional.fields |
Ajouté en tant que libellé avec la clé "LastVMScanDuration". |
LAST_FOUND_DATETIME |
extensions.vulns.vulnerabilities.last_found |
Analyse du champ LAST_FOUND_DATETIME , convertissant la valeur de la chaîne en code temporel. |
LAST_SCAN_DATETIME |
extensions.vulns.vulnerabilities.scan_start_time |
Analyse du champ LAST_SCAN_DATETIME , convertissant la valeur de la chaîne en code temporel. |
LAST_VM_SCANNED_DATE |
extensions.vulns.vulnerabilities.scan_end_time |
Analyse du champ LAST_VM_SCANNED_DATE , convertissant la valeur de la chaîne en code temporel. |
NETBIOS |
additional.fields |
Ajouté en tant que libellé avec la clé "NETBIOS". |
NetworkID |
additional.fields |
Ajouté en tant que libellé avec la clé "NetworkID". |
NETWORK_ID |
additional.fields |
Ajouté en tant que libellé avec la clé "NetworkID". |
OS |
principal.platform_version |
Correspond directement à principal.platform_version . |
Os |
principal.platform_version |
Mappe directement à principal.platform_version si OS est vide. |
QID |
extensions.vulns.vulnerabilities.name |
Concaténe "QID: " avec la valeur de QID . |
QgHostID |
principal.asset_id |
Définit principal.asset_id sur "ID de l'hôte:%{QgHostID}". |
SEVERITY |
extensions.vulns.vulnerabilities.severity |
Mappé à partir de SEVERITY . Les valeurs 0, 1 et 2 deviennent "LOW" (BAS), les valeurs 3 et 4 deviennent "MEDIUM" (MOYEN) et les valeurs 5, 6 et 7 deviennent "HIGH" (ÉLEVÉ). |
TRACKING_METHOD |
additional.fields |
Ajouté en tant que libellé avec la clé "TRACKING_METHOD". |
TrackingMethod |
additional.fields |
Ajouté en tant que libellé avec la clé "TRACKING_METHOD". |
N/A | metadata.vendor_name |
Code codé en dur sur "Qualys". |
N/A | metadata.product_name |
Code codé en dur sur "Gestion des failles". |
N/A | metadata.event_type |
Définissez-le sur "SCAN_VULN_HOST" si _vulns n'est pas vide, sur "STATUS_UPDATE" si prin_host ou IP ne sont pas vides, et sur "GENERIC_EVENT" dans le cas contraire. |
N/A | metadata.log_type |
Extrait du champ log_type du journal brut. |
N/A | principal.platform |
Déterminé à partir de OS , Os ou HOST.OS . Si l'un de ces éléments contient "Linux", la plate-forme est définie sur "LINUX". Si l'un d'eux contient "Windows", la plate-forme est définie sur "WINDOWS". Si l'un d'eux contient "mac" ou "IOS", la plate-forme est définie sur "MAC". |
detection.DType |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Ajouté en tant que libellé avec la clé "Type de détection" dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
detection.FirstFoundTime |
extensions.vulns.vulnerabilities.first_found |
Analyse à partir du champ detection.FirstFoundTime , conversion de la valeur de la chaîne en code temporel dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
detection.LastFoundTime |
extensions.vulns.vulnerabilities.last_found |
Analyse à partir du champ detection.LastFoundTime , conversion de la valeur de la chaîne en code temporel dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
detection.LastProcessedDatetime |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Ajouté en tant que libellé avec la clé "LastProcessedDatetime" dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
detection.LastTestDateTime |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Ajouté en tant que libellé avec la clé "LastTestDateTime" dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
detection.LastUpdateDateTime |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Ajouté en tant que libellé avec la clé "LastUpdateDateTime" dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
detection.Qid |
extensions.vulns.vulnerabilities.name |
Concatenates "QID: " avec la valeur de detection.Qid dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
detection.Results |
extensions.vulns.vulnerabilities.description |
Correspond directement au champ de description du tableau des failles pour les événements analysés à partir du champ DetectionList . Les tabulations et les sauts de ligne sont remplacés par des espaces. |
detection.Severity |
extensions.vulns.vulnerabilities.severity |
Mappé à partir de detection.Severity . Les valeurs 0, 1 et 2 deviennent "LOW" (FAIBLE), 3 et 4 deviennent "MEDIUM" (MOYENNE) et 5, 6 et 7 deviennent "HIGH" (ÉLEVÉ) dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
detection.Status |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Ajouté en tant que libellé avec la clé "État de la détection" dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
detection.TimesFound |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Ajouté en tant que libellé avec la clé "TimesFound" dans le tableau des failles pour les événements analysés à partir du champ DetectionList . |
timestamp |
metadata.event_timestamp , timestamp |
Le champ timestamp du journal brut est utilisé à la fois pour l'horodatage de l'événement et l'horodatage de niveau supérieur. |
Modifications
2023-10-27
- Ajout d'une boucle "for" pour diviser les événements en cas de présence de plusieurs "QID".
2023-04-25
- Mappage de "DetectionList.FirstFoundTime" sur "extensions.vulns.vulnerabilities.first_found".
- Mappage de "DetectionList.LastFoundTime" sur "extensions.vulns.vulnerabilities.last_found".
- Mappage de "DetectionList.TimesFound" sur "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
- "DetectionList.LastTestDateTime" a été mappé sur "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
- Mappage de "DetectionList.LastUpdateDateTime" sur "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
- Mappage de "DetectionList.LastProcessedDatetime" sur "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
2023-01-23
- Mise en correspondance des détails du tableau "DetectionList" avec "extensions.vulns.vulnerabilities".
- Mappage de "DetectionList.Qid" sur "extensions.vulns.vulnerabilities.name".
- Mappage de "DetectionList.Severity" sur "extensions.vulns.vulnerabilities.severity".
- Mappage de "DetectionList.Results" sur "extensions.vulns.vulnerabilities.description".
- Mise en correspondance de "DetectionList.Status" et "DetectionList.DType" avec "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
2022-09-29
- Mappage de "ID" sur "metadata.product_log_id".
- Mappage de "Netbios","TrackingMethod" et "NetworkID" sur "additional.fields".
- Mappage de "QgHostID" sur "principal.asset_id".
- "Os" a été mappé sur "principal.platform_version".
- Ajout d'une vérification conditionnelle pour "vulns".
2022-07-20
- Ajout du mappage pour les champs suivants:
- "DETECTION.FIRST_FOUND_DATETIME" mappé sur "event.idm.read_only_udm.extensions.vulns.vulnerabilities.first_found".
- "DETECTION.LAST_FOUND_DATETIME" mappé sur "event.idm.read_only_udm.extensions.vulns.vulnerabilities.last_found".
- "HOST.LAST_VM_SCANNED_DATE" mappé sur "event.idm.read_only_udm.extensions.vulns.vulnerabilities.scan_end_time".
- "HOST.LAST_SCAN_DATETIME" mappé sur "event.idm.read_only_udm.extensions.vulns.vulnerabilities.scan_start_time".
- "DETECTION.QID" mappé sur "event.idm.read_only_udm.extensions.vulns.vulnerabilities.name".
- "DETECTION.SEVERITY" mappé sur "event.idm.read_only_udm.extensions.vulns.vulnerabilities.severity".
- "DETECTION.TYPE" mappé sur "event.idm.read_only_udm.extensions.vulns.vulnerabilities.about.labels".
- "DETECTION.STATUS" mappé sur "event.idm.read_only_udm.extensions.vulns.vulnerabilities.labels".
- "DETECTION.RESULTS" mappé sur "event.idm.read_only_udm.extensions.vulns.vulnerabilities.description".
- "HOST.DNS_DATA.DOMAIN" mappé sur "event.idm.read_only_udm.principal.domain.name".
- "HOST.ASSET_ID" mappé sur "event.idm.read_only_udm.principal.asset_id".
- "HOST.IP" mappé sur "event.idm.read_only_udm.principal.ip".
- "HOST.OS" mappé sur "event.idm.read_only_udm.principal.platform_version".
- "HOST.DNS" mappé sur "event.idm.read_only_udm.principal.hostname".
- "HOST.QG_HOSTID" mappé sur "event.idm.read_only_udm.additional.fields".
- "HOST.NETBIOS" mappé sur "event.idm.read_only_udm.additional.fields".
- "HOST.TRACKING_METHOD" mappé sur "event.idm.read_only_udm.additional.fields".