Collecter les journaux des failles Armis

Compatible avec :

Ce document explique comment ingérer les journaux des failles Armis 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 et URL du serveur de l'API Armis
  • Accès à Google Cloud avec les autorisations permettant de créer des fonctions Cloud Functions, des secrets Secret Manager et des jobs Cloud Scheduler
  • Accès à la licence ou au module Armis Asset Vulnerability Management (AVM)

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Profil.
  3. Copiez et enregistrez le numéro client de 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 du SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification pour l'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 à Paramètres > Gestion des API.
  3. Cliquez sur Créer si vous devez générer une clé secrète 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é du compte de service requise pour l'intégration.

Ajouter le code 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 secrète : 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 secret de clé secrète 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> : votre numéro client Google SecOps
      • projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id} : chemin d'accès complet à l'ID de ressource 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 à l'ID de ressource de votre secret d'API Armis depuis Secret Manager

Déployer la fonction Cloud

  1. Ouvrez Cloud Shell ou votre terminal local sur lequel gcloud CLI est 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 :
    • Name (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 programmation en utilisant 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 et 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 de 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 réseaux de robots 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 CRITIQUE, ÉLEVÉE, MOYENNE, FAIBLE 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ées 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éfini sur "GENERIC_EVENT".
read_only_udm.metadata.product_name Défini sur "ARMIS".
read_only_udm.metadata.vendor_name Défini sur "ARMIS".
read_only_udm.metadata.log_type Défini sur "ARMIS_VULNERABILITIES".
read_only_udm.extensions.vulns.vulnerabilities.severity_details La valeur du champ "severity" est mappée à ce champ.

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