Recopila registros de Qualys Vulnerability Management
Este analizador controla los registros de Qualys Vulnerability Management en formato JSON o par clave-valor (KV). Extrae detalles de vulnerabilidades, información del host y metadatos de análisis, y los asigna a la UDM. El analizador también controla diferentes estructuras de registro, prioriza el análisis de KV y recurre a JSON si es necesario, y divide el array DetectionList
en eventos de vulnerabilidad individuales.
Antes de comenzar
- Asegúrate de tener una instancia de Google Security Operations.
- Asegúrate de tener acceso con privilegios a la consola de Qualys VMDR.
Opcional: Crea un usuario de API dedicado en Qualys
- Accede a la consola de Qualys.
- Ve a Usuarios.
- Haz clic en Nuevo > Usuario.
- Ingresa la información general requerida para el usuario.
- Selecciona la pestaña Rol del usuario.
- Asegúrate de que el rol tenga seleccionada la casilla de verificación Acceso a la API.
- Haz clic en Guardar.
Identifica tu URL específica de la API de Qualys
Opción 1
Identifica tus URLs como se menciona en la identificación de la plataforma.
Opción 2
- Accede a la consola de Qualys.
- Ve a Ayuda > Acerca de.
- Desplázate para ver esta información en el Centro de operaciones de seguridad (SOC).
- Copia la URL de la API de Qualys.
Configura un feed en Google SecOps para transferir registros de VMs de Qulays
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de VM de Qualys).
- Selecciona API de terceros como el Tipo de origen.
- Selecciona Qualys VM como el tipo de registro.
- Haz clic en Siguiente.
- Especifica valores para los siguientes parámetros de entrada:
- Nombre de usuario: Ingresa el nombre de usuario.
- Secreto: Ingresa la contraseña.
- Ruta completa de la API: Proporciona la URL del servidor de la API de Qualys (por ejemplo,
https://<qualys_base_url>/api/2.0/fo/asset/host/?action=list
), en la que<qualys_base_url>
es la URL base del servidor de la API de Qualys en el que se encuentra tu cuenta. - Espacio de nombres de recursos: Es el espacio de nombres de recursos.
- Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
- Haz clic en Siguiente.
- Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
DETECTION.FIRST_FOUND_DATETIME |
extensions.vulns.vulnerabilities.first_found |
Se analiza desde el campo DETECTION.FIRST_FOUND_DATETIME y se convierte el valor de la cadena en una marca de tiempo. |
DETECTION.LAST_FOUND_DATETIME |
extensions.vulns.vulnerabilities.last_found |
Se analiza desde el campo DETECTION.LAST_FOUND_DATETIME y se convierte el valor de la cadena en una marca de tiempo. |
DETECTION.QID |
extensions.vulns.vulnerabilities.name |
Concatena "QID: " con el valor de DETECTION.QID . |
DETECTION.RESULTS |
extensions.vulns.vulnerabilities.description |
Se asigna directamente al campo de descripción. También se usa para extraer network.ip_protocol y principal.port con grok. |
DETECTION.SEVERITY |
extensions.vulns.vulnerabilities.severity |
Se asigna desde DETECTION.SEVERITY . Los valores 0, 1 y 2 se convierten en “BAJO”, 3 y 4 en “MEDIO” y 5, 6 y 7 en “ALTO”. |
DETECTION.STATUS |
extensions.vulns.vulnerabilities.about.labels |
Se agregó como una etiqueta con la clave "Estado de detección". |
DETECTION.TYPE |
extensions.vulns.vulnerabilities.about.labels |
Se agregó como una etiqueta con la clave "Tipo de detección". |
DNS |
principal.hostname |
Se asigna directamente a principal.hostname . |
DNSData.DOMAIN |
principal.domain.name |
Se asigna directamente a principal.domain.name . |
HOST.ASSET_ID |
principal.asset_id |
Concatena "QUALYS:" con el valor de HOST.ASSET_ID . |
HOST.DNS |
principal.hostname |
Se asigna directamente a principal.hostname si DNS está vacío. |
HOST.DNS_DATA.DOMAIN |
principal.domain.name |
Se asigna directamente a principal.domain.name si DNSData.DOMAIN está vacío. |
HOST.ID |
metadata.product_log_id |
Se asigna directamente a metadata.product_log_id . |
HOST.IP |
principal.ip |
Se asigna directamente a principal.ip si IP está vacío. |
HOST.LAST_SCAN_DATETIME |
extensions.vulns.vulnerabilities.scan_start_time |
Se analiza desde el campo HOST.LAST_SCAN_DATETIME y se convierte el valor de la cadena en una marca de tiempo. |
HOST.LAST_VM_SCANNED_DATE |
extensions.vulns.vulnerabilities.scan_end_time |
Se analiza desde el campo HOST.LAST_VM_SCANNED_DATE y se convierte el valor de la cadena en una marca de tiempo. |
HOST.NETBIOS |
additional.fields |
Se agregó como etiqueta con la clave "HOST NETBIOS". |
HOST.OS |
principal.platform_version |
Se asigna directamente a principal.platform_version si OS está vacío. |
HOST.QG_HOSTID |
additional.fields |
Se agregó como etiqueta con la clave "HOST QG_HOSTID". |
HOST.TRACKING_METHOD |
additional.fields |
Se agregó como una etiqueta con la clave "HOST TRACKING_METHOD". |
HOST_ID |
principal.asset_id |
Concatena "QUALYS:" con el valor de HOST_ID . |
ID |
metadata.product_log_id |
Se asigna directamente a metadata.product_log_id . |
IP |
principal.ip |
Se asigna directamente a principal.ip . |
LastScanDateTime |
extensions.vulns.vulnerabilities.scan_start_time |
Se analiza desde el campo LastScanDateTime y se convierte el valor de la cadena en una marca de tiempo. |
LastVMAuthScanDuration |
additional.fields |
Se agregó como una etiqueta con la clave "LastVMAuthScanDuration". |
LastVMScanDate |
extensions.vulns.vulnerabilities.scan_end_time |
Se analiza desde el campo LastVMScanDate y se convierte el valor de la cadena en una marca de tiempo. |
LastVMScanDuration |
additional.fields |
Se agregó como una etiqueta con la clave "LastVMScanDuration". |
LAST_FOUND_DATETIME |
extensions.vulns.vulnerabilities.last_found |
Se analiza desde el campo LAST_FOUND_DATETIME y se convierte el valor de la cadena en una marca de tiempo. |
LAST_SCAN_DATETIME |
extensions.vulns.vulnerabilities.scan_start_time |
Se analiza desde el campo LAST_SCAN_DATETIME y se convierte el valor de la cadena en una marca de tiempo. |
LAST_VM_SCANNED_DATE |
extensions.vulns.vulnerabilities.scan_end_time |
Se analiza desde el campo LAST_VM_SCANNED_DATE y se convierte el valor de la cadena en una marca de tiempo. |
NETBIOS |
additional.fields |
Se agregó como una etiqueta con la clave "NETBIOS". |
NetworkID |
additional.fields |
Se agregó como etiqueta con la clave "NetworkID". |
NETWORK_ID |
additional.fields |
Se agregó como etiqueta con la clave "NetworkID". |
OS |
principal.platform_version |
Se asigna directamente a principal.platform_version . |
Os |
principal.platform_version |
Se asigna directamente a principal.platform_version si OS está vacío. |
QID |
extensions.vulns.vulnerabilities.name |
Concatena "QID: " con el valor de QID . |
QgHostID |
principal.asset_id |
Establece principal.asset_id en "Host Id:%{QgHostID}". |
SEVERITY |
extensions.vulns.vulnerabilities.severity |
Se asigna desde SEVERITY . Los valores 0, 1 y 2 se convierten en “BAJO”, 3 y 4 en “MEDIO” y 5, 6 y 7 en “ALTO”. |
TRACKING_METHOD |
additional.fields |
Se agregó como una etiqueta con la clave "TRACKING_METHOD". |
TrackingMethod |
additional.fields |
Se agregó como una etiqueta con la clave "TRACKING_METHOD". |
N/A | metadata.vendor_name |
Se codifica de forma fija en “Qualys”. |
N/A | metadata.product_name |
Se codifica de forma fija en "Vulnerability Management". |
N/A | metadata.event_type |
Establece el valor en "SCAN_VULN_HOST" si _vulns no está vacío, en "STATUS_UPDATE" si prin_host o IP no están vacíos y en "GENERIC_EVENT" en caso contrario. |
N/A | metadata.log_type |
Se toma del campo log_type del registro sin procesar. |
N/A | principal.platform |
Se determina a partir de OS , Os o HOST.OS . Si alguno de ellos contiene "Linux", la plataforma se establece en "LINUX". Si alguno contiene "Windows", la plataforma se establece en "WINDOWS". Si alguno contiene "mac" o "IOS", la plataforma se establece en "MAC". |
detection.DType |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Se agregó como una etiqueta con la clave "Detection Type" dentro del array de vulnerabilidades para los eventos analizados desde el campo DetectionList . |
detection.FirstFoundTime |
extensions.vulns.vulnerabilities.first_found |
Se analiza desde el campo detection.FirstFoundTime y convierte el valor de cadena en una marca de tiempo dentro del array de vulnerabilidades para los eventos analizados desde el campo DetectionList . |
detection.LastFoundTime |
extensions.vulns.vulnerabilities.last_found |
Se analiza desde el campo detection.LastFoundTime y convierte el valor de cadena en una marca de tiempo dentro del array de vulnerabilidades para los eventos analizados desde el campo DetectionList . |
detection.LastProcessedDatetime |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Se agregó como una etiqueta con la clave "LastProcessedDatetime" dentro del array de vulnerabilidades para los eventos analizados del campo DetectionList . |
detection.LastTestDateTime |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Se agregó como una etiqueta con la clave "LastTestDateTime" dentro del array de vulnerabilidades para los eventos analizados desde el campo DetectionList . |
detection.LastUpdateDateTime |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Se agregó como una etiqueta con la clave "LastUpdateDateTime" dentro del array de vulnerabilidades para los eventos analizados del campo DetectionList . |
detection.Qid |
extensions.vulns.vulnerabilities.name |
Concatena "QID: " con el valor de detection.Qid dentro del array de vulnerabilidades para los eventos analizados del campo DetectionList . |
detection.Results |
extensions.vulns.vulnerabilities.description |
Se asigna directamente al campo de descripción dentro del array de vulnerabilidades para los eventos analizados del campo DetectionList . Las tabulaciones y los saltos de línea se reemplazan por espacios. |
detection.Severity |
extensions.vulns.vulnerabilities.severity |
Se asigna desde detection.Severity . Los valores 0, 1 y 2 se convierten en "LOW"; 3 y 4 se convierten en "MEDIUM"; 5, 6 y 7 se convierten en "HIGH" dentro del array de vulnerabilidades para los eventos analizados desde el campo DetectionList . |
detection.Status |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Se agregó como una etiqueta con la clave "Estado de detección" dentro del array de vulnerabilidades para los eventos analizados del campo DetectionList . |
detection.TimesFound |
extensions.vulns.vulnerabilities.about.resource.attribute.labels |
Se agregó como una etiqueta con la clave "TimesFound" dentro del array de vulnerabilidades para los eventos analizados del campo DetectionList . |
timestamp |
metadata.event_timestamp , timestamp |
El campo timestamp del registro sin procesar se usa para la marca de tiempo del evento y la marca de tiempo de nivel superior. |
Cambios
2023-10-27
- Se agregó un bucle "for" para dividir los eventos cuando hay varios "QID".
2023-04-25
- Se asignó "DetectionList.FirstFoundTime" a "extensions.vulns.vulnerabilities.first_found".
- Se asignó "DetectionList.LastFoundTime" a "extensions.vulns.vulnerabilities.last_found".
- Se asignó "DetectionList.TimesFound" a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
- Se asignó "DetectionList.LastTestDateTime" a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
- Se asignó "DetectionList.LastUpdateDateTime" a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
- Se asignó "DetectionList.LastProcessedDatetime" a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
2023-01-23
- Se asignaron los detalles del array "DetectionList" a "extensions.vulns.vulnerabilities".
- Se asignó "DetectionList.Qid" a "extensions.vulns.vulnerabilities.name".
- Se asignó "DetectionList.Severity" a "extensions.vulns.vulnerabilities.severity".
- Se asignó "DetectionList.Results" a "extensions.vulns.vulnerabilities.description".
- Se asignaron "DetectionList.Status" y "DetectionList.DType" a "extensions.vulns.vulnerabilities.about.resource.attribute.labels".
2022-09-29
- Se asignó "ID" a "metadata.product_log_id".
- Se asignaron "Netbios","TrackingMethod" y "NetworkID" a "additional.fields".
- Se asignó "QgHostID" a "principal.asset_id".
- Se asignó "Os" a "principal.platform_version".
- Se agregó la verificación condicional de "vulnerabilidades".
2022-07-20
- Se agregó la asignación para los siguientes campos:
- "DETECTION.FIRST_FOUND_DATETIME" se asignó a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.first_found".
- "DETECTION.LAST_FOUND_DATETIME" se asignó a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.last_found".
- "HOST.LAST_VM_SCANNED_DATE" se asignó a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.scan_end_time".
- "HOST.LAST_SCAN_DATETIME" se asignó a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.scan_start_time".
- "DETECTION.QID" se asignó a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.name".
- "DETECTION.SEVERITY" se asignó a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.severity".
- "DETECTION.TYPE" se asignó a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.about.labels".
- "DETECTION.STATUS" se asignó a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.labels".
- "DETECTION.RESULTS" se asignó a "event.idm.read_only_udm.extensions.vulns.vulnerabilities.description".
- "HOST.DNS_DATA.DOMAIN" asignado a "event.idm.read_only_udm.principal.domain.name".
- "HOST.ASSET_ID" se asignó a "event.idm.read_only_udm.principal.asset_id".
- "HOST.IP" se asignó a "event.idm.read_only_udm.principal.ip".
- “HOST.OS” se asignó a “event.idm.read_only_udm.principal.platform_version”.
- "HOST.DNS" se asignó a "event.idm.read_only_udm.principal.hostname".
- "HOST.QG_HOSTID" se asignó a "event.idm.read_only_udm.additional.fields".
- "HOST.NETBIOS" se asignó a "event.idm.read_only_udm.additional.fields".
- "HOST.TRACKING_METHOD" asignado a "event.idm.read_only_udm.additional.fields".