Recopilar registros de contexto de recursos de Qualys
Este analizador extrae información de contexto de los recursos de los registros JSON de Qualys y la transforma al formato UDM. Analiza varios campos, como el ID, la IP, el nombre de host, los detalles de los recursos en la nube, el SO y las etiquetas, los asigna a los campos de UDM correspondientes y crea relaciones entre los activos y los recursos. El analizador también gestiona la lógica específica de los proveedores de servicios en la nube y los sistemas operativos, lo que garantiza una representación precisa en el UDM.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google Security Operations.
- Acceso privilegiado a Google Cloud.
- Acceso privilegiado a Qualys.
Habilita las APIs obligatorias:
- Inicia sesión en la Google Cloud consola.
- Ve a APIs y servicios > Biblioteca.
- Busca las siguientes APIs y habilítalas:
- Cloud Functions API
- API Scheduler de Cloud
- Cloud Pub/Sub (necesario para que Cloud Scheduler invoque funciones)
Crea un Google Cloud segmento de almacenamiento
- Inicia sesión en la Google Cloud consola.
Ve a la página Segmentos de Cloud Storage.
Haz clic en Crear.
Configure el segmento:
- Nombre: introduzca un nombre único que cumpla los requisitos de nombres de segmentos (por ejemplo, qualys-asset-bucket).
- Elige dónde quieres almacenar los datos: selecciona una ubicación.
- Elige una clase de almacenamiento para tus datos: selecciona una clase de almacenamiento predeterminada para el segmento o Autoclass para gestionar automáticamente la clase de almacenamiento.
- Elige cómo quieres controlar el acceso a los objetos: selecciona no para aplicar la prevención del acceso público y elige un modelo de control de acceso para los objetos del segmento.
- Clase de almacenamiento: elige la que mejor se adapte a tus necesidades (por ejemplo, Standard).
Haz clic en Crear.
Crear una cuenta de servicio de Google Cloud
- Ve a IAM y administración > Cuentas de servicio.
- Crear una nueva cuenta de servicio.
- Asigna un nombre descriptivo (por ejemplo, qualys-user).
- Concede a la cuenta de servicio el rol Administrador de objetos de Storage en el segmento de Cloud Storage que has creado en el paso anterior.
- Asigna a la cuenta de servicio el rol Invocador de Cloud Functions.
- Crea una clave SSH para la cuenta de servicio.
- Descarga un archivo de clave JSON de la cuenta de servicio. Guarda este archivo de forma segura.
Opcional: Crea un usuario de API específico en Qualys
- Inicia sesión en la consola de Qualys.
- Ve a Usuarios.
- Haz clic en Nuevo > Usuario.
- Introduce la información general necesaria del usuario.
- Selecciona la pestaña Rol de usuario.
- Asegúrate de que el rol tenga marcada la casilla Acceso a la API.
- Haz clic en Guardar.
Identificar tu URL de API de Qualys específica
Opción 1
Identifique sus URLs tal como se indica en la sección Identificación de la plataforma.
Opción 2
- Inicia sesión en la consola de Qualys.
- Ve a Ayuda > Información.
- Desplázate para ver esta información en Centro de operaciones de seguridad (SOC).
- Copia la URL de la API de Qualys.
Configurar la función de Cloud
- Ve a Cloud Functions en la Google Cloud consola.
- Haz clic en Crear función.
Configura la función:
- Nombre: introduce un nombre para la función (por ejemplo, fetch-qualys-assets).
- Región: selecciona una región cercana a tu contenedor.
- Activador: elige el activador HTTP si es necesario o Cloud Pub/Sub para la ejecución programada.
- Autenticación: protege con autenticación.
- Escribe el código con un editor insertado:
```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!" ```
Haz clic en Implementar después de completar la configuración.
Configurar Cloud Scheduler
- Ve a Cloud Scheduler en la Google Cloud consola.
- Haz clic en Crear trabajo.
Configura el trabajo:
- Nombre: introduce un nombre para el trabajo (por ejemplo, trigger-fetch-qualys-assets).
- Frecuencia: usa la sintaxis cron para especificar la programación (por ejemplo, 0 0 * * * para que se ejecute todos los días a medianoche).
- Zona horaria: define tu zona horaria preferida.
- Tipo de activador: elige HTTP.
- URL de activación: introduce la URL de Cloud Functions (que se encuentra en los detalles de la función después de la implementación).
- Método: elige POST.
Crea el trabajo.
Configurar feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir feed.
- En la página siguiente, haga clic en Configurar un solo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Registros de contexto de activos de Qualys).
- Selecciona Google Cloud Storage V2 como Tipo de origen.
- Seleccione Qualys Asset Context como Tipo de registro.
- Haz clic en Siguiente.
Especifique los valores de los siguientes parámetros de entrada:
- URI de GCS: el URI de Cloud Storage.
- Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
Haz clic en Siguiente.
Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
ASSET_ID |
entity.entity.asset.asset_id |
Se asigna directamente desde el campo ASSET_ID . |
CLOUD_PROVIDER |
entity.relations.entity.resource.resource_subtype |
Se asigna directamente desde el campo CLOUD_PROVIDER . |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Se asigna directamente desde el campo CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME . |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Se asigna directamente desde el campo CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE . |
CLOUD_RESOURCE_ID |
entity.relations.entity.resource.id |
Se asigna directamente desde el campo CLOUD_RESOURCE_ID . |
CLOUD_SERVICE |
entity.relations.entity.resource.resource_type |
Si CLOUD_SERVICE es "VM", el valor se asigna a "VIRTUAL_MACHINE". |
DNS_DATA.HOSTNAME |
entity.entity.asset.hostname |
Se asigna directamente desde el campo DNS_DATA.HOSTNAME . |
EC2_INSTANCE_ID |
entity.relations.entity.resource.product_object_id |
Se asigna directamente desde el campo EC2_INSTANCE_ID . |
ID |
entity.entity.asset.product_object_id |
Se asigna directamente desde el campo ID . |
IP |
entity.entity.asset.ip |
Se asigna directamente desde el campo IP . |
METADATA.AZURE.ATTRIBUTE[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Se asigna directamente desde el campo METADATA.AZURE.ATTRIBUTE[].NAME . |
METADATA.AZURE.ATTRIBUTE[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Se asigna directamente desde el campo METADATA.AZURE.ATTRIBUTE[].VALUE . |
OS |
entity.entity.asset.platform_software.platform |
Si OS contiene "windows" (sin distinguir entre mayúsculas y minúsculas), el valor se asigna a "WINDOWS". |
TAGS.TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Se asigna directamente desde el campo TAGS.TAG[].NAME . |
TAGS.TAG[].TAG_ID |
entity.relations.entity.resource.attribute.labels.value |
Cadena concatenada "TAG_ID: " con el valor de TAGS.TAG[].TAG_ID . Copiado del campo create_time del registro sin procesar. Codificado como "ASSET". Codificado como "QUALYS ASSET CONTEXT". Codificado como "QUALYS ASSET CONTEXT". Codificado como "RESOURCE". Codificado como "MEMBER". Copiado del campo create_time del registro sin procesar. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.