Collecter les journaux Armis Vulnerabilities

Version de l'analyseur : 2.0

Compatible avec :

Ce document explique comment ingérer des journaux Armis Vulnerabilities dans Google Security Operations à l'aide de Google Cloud Functions. L'analyseur transforme les journaux de failles de sécurité bruts au format JSON en un format structuré conforme à l'UDM Google SecOps. Il extrait différents champs du journal brut, les mappe aux champs UDM correspondants, effectue des conversions de types de données et structure la sortie pour l'ingestion dans la plate-forme Google SecOps.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Instance Google SecOps avec ID client et identifiants de compte de service
  • Accès privilégié à la plate-forme Armis Centrix
  • Clé secrète de l'API Armis et URL du serveur
  • Accès à Google Cloud avec les autorisations nécessaires pour créer des Cloud Functions, des secrets Secret Manager et des jobs Cloud Scheduler
  • Accès à la licence ou au module Armis Asset Vulnerability Management (AVM)

Obtenir le numéro client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres > Administration > Profil. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > Profil.
  3. Copiez et enregistrez le numéro client qui figure dans la section Informations sur l'organisation.

Obtenir les identifiants du compte de service Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres > Gestion des données > Agents de collecte. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion (fichier JSON du compte de service).
  4. Enregistrez le fichier de manière sécurisée, car vous devrez l'importer dans Google Secret Manager.

Obtenir la clé secrète de l'API Armis

  1. Connectez-vous à la plate-forme Armis Centrix.
  2. Accédez à Settings > gestion d'API (Paramètres > Gestion des API).
  3. Cliquez sur Créer si vous devez générer un nouveau code secret de l'API.
  4. Cliquez sur Afficher pour afficher la clé secrète.
  5. Copiez et enregistrez la clé secrète de manière sécurisée.

Configurer Google Secret Manager

Cette section vous explique comment utiliser Google Secret Manager pour stocker de manière sécurisée la clé de compte de service requise pour l'intégration.

Ajouter le secret du compte de service Google SecOps

  1. Connectez-vous à la consoleGoogle Cloud .
  2. Accédez à Sécurité > Secret Manager.
  3. Cliquez sur Créer un secret.
  4. Fournissez les informations de configuration suivantes :
    • Nom : saisissez un nom pour le secret (par exemple, secops-service-account).
    • Valeur du secret : importez le fichier JSON du compte de service Google SecOps que vous avez téléchargé précédemment ou collez directement son contenu.
  5. Cliquez sur Créer un secret.
  6. Copiez l'ID de ressource du secret créé au format suivant :

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

Ajouter le code secret de l'API Armis

  1. Dans Secret Manager, cliquez sur Créer un secret.
  2. Fournissez les informations de configuration suivantes :
    • Nom : saisissez un nom pour le secret (par exemple, armis-api-secret).
    • Valeur du secret : collez la clé secrète de l'API Armis que vous avez obtenue précédemment.
  3. Cliquez sur Créer un secret.
  4. Copiez l'ID de ressource du secret créé au format suivant :

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

Télécharger et préparer le script d'ingestion

  1. Accédez au dépôt officiel des scripts d'ingestion Google SecOps à l'adresse https://github.com/chronicle/ingestion-scripts.
  2. Téléchargez le contenu du répertoire armis à partir du dépôt.
  3. Téléchargez le répertoire common à partir du dépôt (dépendance requise).
  4. Créez un répertoire pour le déploiement de la fonction Cloud sur votre ordinateur local.
  5. Copiez le contenu des répertoires armis et common dans votre répertoire de déploiement.

Configurer les variables d'environnement

  1. Ouvrez le fichier .env.yml dans un éditeur de texte.
  2. Modifiez le fichier avec la configuration suivante :

    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
    
    • Remplacez les valeurs suivantes :

      • <YOUR_CUSTOMER_ID> : ID client Google SecOps
      • projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id} : ID de ressource complet du secret de votre compte de service Google SecOps dans Secret Manager
      • <YOUR_NAMESPACE> : espace de noms facultatif pour les journaux Google Security Operations (par exemple, armis-vulnerabilities)
      • <your-armis-instance> : sous-domaine de votre locataire Armis (par exemple, si votre URL est https://company.armis.com, utilisez company)
      • projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id} : Chemin d'accès complet de l'ID de ressource de votre code secret de l'API Armis dans Secret Manager

Déployer la fonction Cloud

  1. Ouvrez Cloud Shell ou votre terminal local avec gcloud CLI installé.
  2. Accédez au répertoire contenant les fichiers de script d'ingestion.
  3. Exécutez la commande suivante :

    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
    

Déployer à l'aide de Cloud Functions (1re génération) (alternative)

  • Exécutez la commande suivante :

    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
    

Créer une tâche Cloud Scheduler

  1. Dans la console Google Cloud , accédez à Cloud Scheduler.
  2. Cliquez sur Créer une tâche.
  3. Fournissez les informations de configuration suivantes :
    • Nom : saisissez un nom pour le job (par exemple, armis-vulnerabilities-scheduler).
    • Région : sélectionnez la même région que votre fonction Cloud (par exemple, us-central1).
    • Fréquence : saisissez la planification à l'aide de la syntaxe cron (par exemple, */10 * * * * pour toutes les 10 minutes).
    • Fuseau horaire : sélectionnez le fuseau horaire de votre choix (par exemple, UTC).
  4. Cliquez sur Continuer.
  5. Sélectionnez HTTP comme type de cible.
  6. Fournissez les informations de configuration suivantes :
    • URL : dans la console Cloud Functions, accédez à l'onglet DÉCLENCHEUR de votre fonction, puis copiez l'URL du déclencheur. Collez-le ici.
    • Méthode HTTP : sélectionnez POST.
  7. Cliquez sur En-tête d'authentification > Ajouter un jeton OIDC.
  8. Sélectionnez le compte de service utilisé par la fonction Cloud.
  9. Cliquez sur Créer.

Table de mappage UDM

Champ du journal Mappage UDM Logique
affectedDevicesCount read_only_udm.security_result.detection_fields.value Mappage direct, converti en chaîne.
attackComplexity read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct.
attackVector read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct.
availabilityImpact read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct.
avmRating read_only_udm.security_result.detection_fields.value Mappage direct.
botnets read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Concaténé en une seule chaîne si plusieurs botnets existent.
cisaDueDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct.
collection_time.nanos read_only_udm.metadata.event_timestamp.nanos Mappage direct.
collection_time.seconds read_only_udm.metadata.event_timestamp.seconds Mappage direct.
commonName read_only_udm.extensions.vulns.vulnerabilities.name Mappage direct.
confidentialityImpact read_only_udm.security_result.detection_fields.value Mappage direct.
cveUid read_only_udm.extensions.vulns.vulnerabilities.cve_id Mappage direct.
cvssScore read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score Mappage direct, converti en float.
description read_only_udm.metadata.description Mappage direct.
epssPercentile read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct, converti en chaîne.
epssScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct, converti en chaîne.
exploitabilityScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct, converti en chaîne.
firstReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.first_found Analysé en code temporel, gère les formats avec et sans millisecondes.
firstWeaponizedReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct.
hasRansomware read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct, converti en chaîne.
id read_only_udm.metadata.product_log_id Mappage direct.
impactScore read_only_udm.security_result.detection_fields.value Mappage direct, converti en chaîne.
integrityImpact read_only_udm.security_result.detection_fields.value Mappage direct.
isWeaponized read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct, converti en chaîne.
latestExploitUpdate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct.
numOfExploits read_only_udm.security_result.detection_fields.value Mappage direct, converti en chaîne.
numberOfThreatActors read_only_udm.security_result.detection_fields.value Mappage direct, converti en chaîne.
orgPriorityManualChangeReason read_only_udm.security_result.detection_fields.value Mappage direct.
orgPriorityManualChangedBy read_only_udm.principal.user.userid Mappage direct.
orgPriorityManualUpdateTime read_only_udm.principal.labels.value Mappage direct.
privilegesRequired read_only_udm.security_result.detection_fields.value Mappage direct.
publishedDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct.
reportedByGoogleZeroDays read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct, converti en chaîne.
champ d'application read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct.
de gravité, read_only_udm.extensions.vulns.vulnerabilities.severity Mappé sur CRITICAL, HIGH, MEDIUM, LOW en fonction de la valeur. La valeur d'origine est également mappée sur severity_details.
état read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mappage direct.
threatTags read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Concaténé en une seule chaîne si plusieurs tags de menace existent.
userInteraction read_only_udm.about.labels.value Mappage direct.
vulnerabilities_matches read_only_udm.metadata.url_back_to_product Mappage direct.
read_only_udm.metadata.event_type Définissez cette valeur sur "GENERIC_EVENT".
read_only_udm.metadata.product_name Définissez cette option sur "ARMIS".
read_only_udm.metadata.vendor_name Définissez cette option sur "ARMIS".
read_only_udm.metadata.log_type Définissez cette option sur "ARMIS_VULNERABILITIES".
read_only_udm.extensions.vulns.vulnerabilities.severity_details La valeur du champ "severity" est mappée à ce champ.

Journal des modifications

Afficher le journal des modifications de cet analyseur

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.