Recopilar registros de vulnerabilidades de Armis

Disponible en:

En este documento se explica cómo ingerir registros de vulnerabilidades de Armis en Google Security Operations mediante Google Cloud Functions. El analizador transforma los registros de vulnerabilidades de seguridad sin procesar en formato JSON en un formato estructurado que se ajusta al UDM de Google SecOps. Extrae varios campos del registro sin procesar, los asigna a los campos de UDM correspondientes, realiza conversiones de tipos de datos y estructura la salida para que se pueda ingerir en la plataforma de Google SecOps.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Instancia de Google SecOps con el ID de cliente y las credenciales de la cuenta de servicio
  • Acceso con privilegios a la plataforma Armis Centrix
  • Clave secreta de la API de Armis y URL del servidor
  • Acceso a Google Cloud con permisos para crear funciones de Cloud, secretos de Secret Manager y trabajos de Cloud Scheduler
  • Licencia de Gestión de Vulnerabilidades de Recursos (AVM) de Armis o acceso al módulo

Obtener el ID de cliente de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Obtener las credenciales de la cuenta de servicio de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recogida.
  3. Descarga el archivo de autenticación de ingestión (archivo JSON de la cuenta de servicio).
  4. Guarda el archivo de forma segura, ya que tendrás que subirlo a Google Secret Manager.

Obtener la clave secreta de la API de Armis

  1. Inicia sesión en la plataforma Armis Centrix.
  2. Ve a Ajustes > Gestión de APIs.
  3. Haga clic en Crear si necesita generar una nueva clave secreta de API.
  4. Haz clic en Mostrar para ver la clave secreta.
  5. Copia y guarda la clave secreta de forma segura.

Configurar Google Secret Manager

En esta sección se explica cómo usar Google Secret Manager para almacenar de forma segura la clave de la cuenta de servicio necesaria para la integración.

Añadir el secreto de la cuenta de servicio de Google SecOps

  1. Inicia sesión en la consolaGoogle Cloud .
  2. Ve a Seguridad > Gestor de secretos.
  3. Haz clic en Crear secreto.
  4. Proporcione los siguientes detalles de configuración:
    • Nombre: introduce un nombre para el secreto (por ejemplo, secops-service-account).
    • Valor del secreto: sube el archivo JSON de la cuenta de servicio de Google SecOps que has descargado antes o pega su contenido directamente.
  5. Haz clic en Crear secreto.
  6. Copia el ID de recurso del secreto creado con el siguiente formato:

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}
    

Añadir el secreto de la clave secreta de la API de Armis

  1. En Secret Manager, haz clic en Crear secreto.
  2. Proporcione los siguientes detalles de configuración:
    • Nombre: introduce un nombre para el secreto (por ejemplo, armis-api-secret).
    • Valor secreto: pega la clave secreta de la API de Armis que has obtenido antes.
  3. Haz clic en Crear secreto.
  4. Copia el ID de recurso del secreto creado con el siguiente formato:

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
    

Descargar y preparar la secuencia de comandos de ingestión

  1. Accede al repositorio oficial de secuencias de comandos de ingestión de Google SecOps en https://github.com/chronicle/ingestion-scripts.
  2. Descarga el contenido del directorio armis del repositorio.
  3. Descarga el directorio common del repositorio (dependencia obligatoria).
  4. Crea un directorio para la implementación de la función de Cloud en tu máquina local.
  5. Copia el contenido de los directorios armis y common en tu directorio de implementación.

Configurar variables de entorno

  1. Abre el archivo .env.yml en un editor de texto.
  2. Edita el archivo con la siguiente configuración:

    CHRONICLE_CUSTOMER_ID: <YOUR_CUSTOMER_ID>
    CHRONICLE_REGION: "us"
    CHRONICLE_SERVICE_ACCOUNT: projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}
    CHRONICLE_NAMESPACE: <YOUR_NAMESPACE>
    POLL_INTERVAL: "10"
    ARMIS_SERVER_URL: https://<your-armis-instance>.armis.com
    ARMIS_API_SECRET_KEY: projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}
    HTTPS_PROXY: 
    CHRONICLE_DATA_TYPE: ARMIS_VULNERABILITIES
    
    • Sustituye los siguientes valores:

      • <YOUR_CUSTOMER_ID>: tu ID de cliente de Google SecOps
      • projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}: la ruta completa del ID de recurso del secreto de tu cuenta de servicio de Google SecOps en Secret Manager
      • <YOUR_NAMESPACE>: espacio de nombres opcional para los registros de Google Security Operations (por ejemplo, armis-vulnerabilities)
      • <your-armis-instance>: el subdominio de tu arrendatario de Armis (por ejemplo, si tu URL es https://company.armis.com, usa company)
      • projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}: ruta completa del ID de recurso de tu secreto de la API de Armis en Secret Manager

Desplegar la función de Cloud

  1. Abre Cloud Shell o tu terminal local con la CLI de gcloud instalada.
  2. Desplázate hasta el directorio que contiene los archivos de la secuencia de comandos de ingestión.
  3. Ejecuta el siguiente comando:

    gcloud functions deploy armis-vulnerabilities-ingestion \
      --gen2 \
      --entry-point main \
      --trigger-http \
      --runtime python39 \
      --env-vars-file .env.yml \
      --memory 512MB \
      --timeout 3600s \
      --region us-central1
    

Desplegar con Cloud Functions (1.ª gen.) (alternativa)

  • Ejecuta el siguiente comando:

    gcloud functions deploy armis-vulnerabilities-ingestion \
      --entry-point main \
      --trigger-http \
      --runtime python39 \
      --env-vars-file .env.yml \
      --memory 512MB \
      --timeout 540s \
      --region us-central1
    

Crear una tarea de Cloud Scheduler

  1. En la Google Cloud consola, ve a Cloud Scheduler.
  2. Haz clic en Crear trabajo.
  3. Proporcione los siguientes detalles de configuración:
    • Nombre: introduce un nombre para el trabajo (por ejemplo, armis-vulnerabilities-scheduler).
    • Región: selecciona la misma región que tu función de Cloud (por ejemplo, us-central1).
    • Frecuencia: introduce la programación con la sintaxis cron (por ejemplo, */10 * * * * para que se ejecute cada 10 minutos).
    • Zona horaria: selecciona la zona horaria que prefieras (por ejemplo, UTC).
  4. Haz clic en Continuar.
  5. Selecciona HTTP como tipo de destino.
  6. Proporcione los siguientes detalles de configuración:
    • URL: en la consola de Cloud Functions, ve a la pestaña ACTIVADOR de tu función y copia la URL del activador. Pégala aquí.
    • Método HTTP: selecciona POST.
  7. Haz clic en Encabezado de autorización > Añadir token de OIDC.
  8. Selecciona la cuenta de servicio que usa la función de Cloud.
  9. Haz clic en Crear.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
affectedDevicesCount read_only_udm.security_result.detection_fields.value Mapeo directo, convertido en cadena.
attackComplexity read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa.
attackVector read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa.
availabilityImpact read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa.
avmRating read_only_udm.security_result.detection_fields.value Asignación directa.
redes de robots read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Se concatenan en una sola cadena si existen varias botnets.
cisaDueDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa.
collection_time.nanos read_only_udm.metadata.event_timestamp.nanos Asignación directa.
collection_time.seconds read_only_udm.metadata.event_timestamp.seconds Asignación directa.
commonName read_only_udm.extensions.vulns.vulnerabilities.name Asignación directa.
confidentialityImpact read_only_udm.security_result.detection_fields.value Asignación directa.
cveUid read_only_udm.extensions.vulns.vulnerabilities.cve_id Asignación directa.
cvssScore read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score Mapeo directo, convertido a float.
description read_only_udm.metadata.description Asignación directa.
epssPercentile read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeo directo, convertido en cadena.
epssScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeo directo, convertido en cadena.
exploitabilityScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeo directo, convertido en cadena.
firstReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.first_found Se analiza como marca de tiempo y admite formatos con y sin milisegundos.
firstWeaponizedReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa.
hasRansomware read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeo directo, convertido en cadena.
id read_only_udm.metadata.product_log_id Asignación directa.
impactScore read_only_udm.security_result.detection_fields.value Mapeo directo, convertido en cadena.
integrityImpact read_only_udm.security_result.detection_fields.value Asignación directa.
isWeaponized read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeo directo, convertido en cadena.
latestExploitUpdate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa.
numOfExploits read_only_udm.security_result.detection_fields.value Mapeo directo, convertido en cadena.
numberOfThreatActors read_only_udm.security_result.detection_fields.value Mapeo directo, convertido en cadena.
orgPriorityManualChangeReason read_only_udm.security_result.detection_fields.value Asignación directa.
orgPriorityManualChangedBy read_only_udm.principal.user.userid Asignación directa.
orgPriorityManualUpdateTime read_only_udm.principal.labels.value Asignación directa.
privilegesRequired read_only_udm.security_result.detection_fields.value Asignación directa.
publishedDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa.
reportedByGoogleZeroDays read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeo directo, convertido en cadena.
permiso read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa.
gravedad read_only_udm.extensions.vulns.vulnerabilities.severity Se asigna a CRÍTICO, ALTO, MEDIO o BAJO en función del valor. El valor original también se asigna a severity_details.
status read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa.
threatTags read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Se concatenan en una sola cadena si hay varias etiquetas de amenaza.
userInteraction read_only_udm.about.labels.value Asignación directa.
vulnerabilities_matches read_only_udm.metadata.url_back_to_product Asignación directa.
read_only_udm.metadata.event_type Se asigna el valor "GENERIC_EVENT".
read_only_udm.metadata.product_name Selecciona "ARMIS".
read_only_udm.metadata.vendor_name Selecciona "ARMIS".
read_only_udm.metadata.log_type Se ha definido como "ARMIS_VULNERABILITIES".
read_only_udm.extensions.vulns.vulnerabilities.severity_details El valor del campo "severity" se asigna a este campo.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.