Collecter les journaux Armis Vulnerabilities
Version de l'analyseur : 2.0
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres > Administration > Profil. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > Profil.
- 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
- Connectez-vous à la console Google SecOps.
- 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.
- Téléchargez le fichier d'authentification d'ingestion (fichier JSON du compte de service).
- 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
- Connectez-vous à la plate-forme Armis Centrix.
- Accédez à Settings > gestion d'API (Paramètres > Gestion des API).
- Cliquez sur Créer si vous devez générer un nouveau code secret de l'API.
- Cliquez sur Afficher pour afficher la clé secrète.
- 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
- Connectez-vous à la consoleGoogle Cloud .
- Accédez à Sécurité > Secret Manager.
- Cliquez sur Créer un secret.
- 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.
- Nom : saisissez un nom pour le secret (par exemple,
- Cliquez sur Créer un secret.
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
- Dans Secret Manager, cliquez sur Créer un secret.
- 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.
- Nom : saisissez un nom pour le secret (par exemple,
- Cliquez sur Créer un secret.
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
- Accédez au dépôt officiel des scripts d'ingestion Google SecOps à l'adresse https://github.com/chronicle/ingestion-scripts.
- Téléchargez le contenu du répertoire armis à partir du dépôt.
- Téléchargez le répertoire common à partir du dépôt (dépendance requise).
- Créez un répertoire pour le déploiement de la fonction Cloud sur votre ordinateur local.
- Copiez le contenu des répertoires armis et common dans votre répertoire de déploiement.
Configurer les variables d'environnement
- Ouvrez le fichier
.env.ymldans un éditeur de texte. 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_VULNERABILITIESRemplacez les valeurs suivantes :
<YOUR_CUSTOMER_ID>: ID client Google SecOpsprojects/{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, utilisezcompany)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
Déployer à l'aide de Cloud Functions (2e génération) (recommandé)
- Ouvrez Cloud Shell ou votre terminal local avec gcloud CLI installé.
- Accédez au répertoire contenant les fichiers de script d'ingestion.
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
- Dans la console Google Cloud , accédez à Cloud Scheduler.
- Cliquez sur Créer une tâche.
- 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).
- Nom : saisissez un nom pour le job (par exemple,
- Cliquez sur Continuer.
- Sélectionnez HTTP comme type de cible.
- 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.
- Cliquez sur En-tête d'authentification > Ajouter un jeton OIDC.
- Sélectionnez le compte de service utilisé par la fonction Cloud.
- 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.