Recopila registros de vulnerabilidades de Armis

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de vulnerabilidades de Armis a Google Security Operations con Google Cloud Functions. El analizador transforma los registros de vulnerabilidades de seguridad sin procesar con formato JSON en un formato estructurado que cumple con el UDM de Google SecOps. Extrae varios campos del registro sin procesar, los asigna a los campos correspondientes del UDM, realiza conversiones de tipos de datos y estructura el resultado para su transferencia a la plataforma de Google SecOps.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Instancia de SecOps de Google con ID de cliente y credenciales de la cuenta de servicio
  • Acceso con privilegios a la plataforma de Armis Centrix
  • Clave secreta y URL del servidor de la API de Armis
  • Acceso a Google Cloud con permisos para crear Cloud Functions, secretos de Secret Manager y trabajos de Cloud Scheduler
  • Acceso al módulo o a la licencia de Armis Asset Vulnerability Management (AVM)

Obtén el ID de cliente de Google SecOps

  1. Accede a 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.

Obtén las credenciales de la cuenta de servicio de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de la transferencia (archivo JSON de la cuenta de servicio).
  4. Guarda el archivo de forma segura, ya que deberás subirlo a Google Secret Manager.

Obtén la clave secreta de la API de Armis

  1. Accede a la plataforma de Armis Centrix.
  2. Ve a Configuración > Administración de APIs.
  3. Haz clic en Crear si necesitas generar una nueva clave secreta de la API.
  4. Haz clic en Mostrar para ver la clave secreta.
  5. Copia y guarda la clave secreta de forma segura.

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

Agrega el secreto de la cuenta de servicio de Google SecOps

  1. Accede a la consola deGoogle Cloud .
  2. Ve a Seguridad > Secret Manager.
  3. Haz clic en Crear secreto.
  4. Proporciona los siguientes detalles de configuración:
    • Nombre: Ingresa 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 descargaste anteriormente o pega su contenido directamente.
  5. Haz clic en Crear secreto.
  6. Copia el ID de recurso del Secret creado en el siguiente formato:

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

Agrega el secreto de la clave secreta de la API de Armis

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

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

Descarga y prepara la secuencia de comandos de transferencia

  1. Accede al repositorio oficial de secuencias de comandos de transferencia 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 nuevo para la implementación de Cloud Function en tu máquina local.
  5. Copia el contenido de los directorios armis y common en tu directorio de implementación.

Configure las 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
    
    • Reemplaza los siguientes valores:

      • <YOUR_CUSTOMER_ID>: Tu ID de cliente de Google SecOps
      • projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}: Es la ruta de acceso completa del ID de recurso del secreto de tu cuenta de servicio de Google SecOps desde Secret Manager.
      • <YOUR_NAMESPACE>: Es el espacio de nombres opcional para los registros de Google Security Operations (por ejemplo, armis-vulnerabilities).
      • <your-armis-instance>: 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}: Es la ruta de ID de recurso completa de tu secreto de la API de Armis desde Secret Manager.

Implementa la función de Cloud Functions

  1. Abre Cloud Shell o tu terminal local con gcloud CLI instalado.
  2. Navega al directorio que contiene los archivos de la secuencia de comandos de transferencia.
  3. Ejecuta el comando siguiente:

    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
    

Implementa con Cloud Function Gen1 (alternativa)

  • Ejecuta el comando siguiente:

    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
    

Crea un trabajo de Cloud Scheduler

  1. En la consola Google Cloud , ve a Cloud Scheduler.
  2. Haz clic en Crear trabajo.
  3. Proporciona los siguientes detalles de configuración:
    • Nombre: Ingresa un nombre para el trabajo (por ejemplo, armis-vulnerabilities-scheduler).
    • Región: Selecciona la misma región que tu Cloud Function (por ejemplo, us-central1).
    • Frecuencia: Ingresa la programación con la sintaxis cron (por ejemplo, */10 * * * * para cada 10 minutos).
    • Zona horaria: Selecciona tu zona horaria preferida (por ejemplo, UTC).
  4. Haz clic en Continuar.
  5. Selecciona HTTP como el tipo de destino.
  6. Proporciona 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égalo aquí.
    • Método HTTP: Selecciona POST.
  7. Haz clic en Encabezado de autenticación > Agregar token de OIDC.
  8. Selecciona la cuenta de servicio que usa Cloud Function.
  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 Es el 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
botnets read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Se concatena 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 Es la asignación directa, convertida a float.
descripción read_only_udm.metadata.description Asignación directa
epssPercentile read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Es el mapeo directo, convertido en cadena.
epssScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Es el mapeo directo, convertido en cadena.
exploitabilityScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Es el mapeo directo, convertido en cadena.
firstReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.first_found Se analiza como marca de tiempo y controla 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 Es el 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 Es el 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 Es el 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 Es el mapeo directo, convertido en cadena.
numberOfThreatActors read_only_udm.security_result.detection_fields.value Es el 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 Es el mapeo directo, convertido en cadena.
alcance read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Asignación directa
gravedad, read_only_udm.extensions.vulns.vulnerabilities.severity Se asigna a CRITICAL, HIGH, MEDIUM o LOW según el valor. El valor original también se asigna a severity_details.
estado 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 existen varias etiquetas de amenazas.
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 debe establecer en "GENERIC_EVENT".
read_only_udm.metadata.product_name Se debe establecer en "ARMIS".
read_only_udm.metadata.vendor_name Se debe establecer en "ARMIS".
read_only_udm.metadata.log_type Se establece en "ARMIS_VULNERABILITIES".
read_only_udm.extensions.vulns.vulnerabilities.severity_details El valor del campo "severity" se asigna a este campo.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.