Recopilar registros de contexto de recursos de Qualys

Disponible en:

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:

  1. Inicia sesión en la Google Cloud consola.
  2. Ve a APIs y servicios > Biblioteca.
  3. 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

  1. Inicia sesión en la Google Cloud consola.
  2. Ve a la página Segmentos de Cloud Storage.

    Ir a Contenedores

  3. Haz clic en Crear.

  4. 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).
  5. Haz clic en Crear.

Crear una cuenta de servicio de Google Cloud

  1. Ve a IAM y administración > Cuentas de servicio.
  2. Crear una nueva cuenta de servicio.
  3. Asigna un nombre descriptivo (por ejemplo, qualys-user).
  4. 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.
  5. Asigna a la cuenta de servicio el rol Invocador de Cloud Functions.
  6. Crea una clave SSH para la cuenta de servicio.
  7. 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

  1. Inicia sesión en la consola de Qualys.
  2. Ve a Usuarios.
  3. Haz clic en Nuevo > Usuario.
  4. Introduce la información general necesaria del usuario.
  5. Selecciona la pestaña Rol de usuario.
  6. Asegúrate de que el rol tenga marcada la casilla Acceso a la API.
  7. 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

  1. Inicia sesión en la consola de Qualys.
  2. Ve a Ayuda > Información.
  3. Desplázate para ver esta información en Centro de operaciones de seguridad (SOC).
  4. Copia la URL de la API de Qualys.

Configurar la función de Cloud

  1. Ve a Cloud Functions en la Google Cloud consola.
  2. Haz clic en Crear función.
  3. 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!"
    
    ```
    
  4. Haz clic en Implementar después de completar la configuración.

Configurar Cloud Scheduler

  1. Ve a Cloud Scheduler en la Google Cloud consola.
  2. Haz clic en Crear trabajo.
  3. 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.
  4. Crea el trabajo.

Configurar feeds

Para configurar un feed, sigue estos pasos:

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Añadir feed.
  3. En la página siguiente, haga clic en Configurar un solo feed.
  4. En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Registros de contexto de activos de Qualys).
  5. Selecciona Google Cloud Storage V2 como Tipo de origen.
  6. Seleccione Qualys Asset Context como Tipo de registro.
  7. Haz clic en Siguiente.
  8. 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.
  9. Haz clic en Siguiente.

  10. 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.