Raccogliere i log delle vulnerabilità di Armis
Questo documento spiega come importare i log delle vulnerabilità di Armis in Google Security Operations utilizzando Google Cloud Functions. Il parser trasforma i log delle vulnerabilità di sicurezza formattati in formato JSON non elaborato in un formato strutturato conforme a UDM di Google SecOps. Estrae vari campi dal log non elaborato, li mappa ai campi UDM corrispondenti, esegue conversioni del tipo di dati e struttura l'output per l'importazione nella piattaforma Google SecOps.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza di Google SecOps con ID cliente e credenziali del account di servizio
- Accesso privilegiato alla piattaforma Armis Centrix
- Chiave segreta API e URL del server Armis
- Accesso a Google Cloud con autorizzazioni per creare funzioni Cloud Functions, secret Secret Manager e job Cloud Scheduler
- Licenza o accesso al modulo Armis Asset Vulnerability Management (AVM)
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Recuperare le credenziali del account di servizio Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'importazione (file JSON dell'account di servizio).
- Salva il file in modo sicuro, perché dovrai caricarlo in Google Secret Manager.
Recuperare la chiave segreta dell'API Armis
- Accedi alla piattaforma Armis Centrix.
- Vai a Impostazioni > Gestione API.
- Fai clic su Crea se devi generare una nuova chiave segreta API.
- Fai clic su Mostra per visualizzare la chiave segreta.
- Copia e salva la chiave segreta in modo sicuro.
Configura Google Secret Manager
Questa sezione ti guida nell'utilizzo di Google Secret Manager per archiviare in modo sicuro la chiave del account di servizio necessaria per l'integrazione.
Aggiungi il secret del account di servizio Google SecOps
- Accedi alla consoleGoogle Cloud .
- Vai a Sicurezza > Secret Manager.
- Fai clic su Crea secret.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci un nome per il secret (ad esempio,
secops-service-account). - Valore segreto: carica il file JSON dell'account di servizio Google SecOps scaricato in precedenza o incollane direttamente i contenuti.
- Nome: inserisci un nome per il secret (ad esempio,
- Fai clic su Crea secret.
Copia l'ID risorsa del secret creato nel seguente formato:
projects/{project_id}/secrets/{secret_id}/versions/{version_id}
Aggiungi il secret della chiave segreta dell'API Armis
- In Secret Manager, fai clic su Crea secret.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci un nome per il secret (ad esempio,
armis-api-secret). - Valore del secret: incolla la chiave segreta dell'API Armis che hai ottenuto in precedenza.
- Nome: inserisci un nome per il secret (ad esempio,
- Fai clic su Crea secret.
Copia l'ID risorsa del secret creato nel seguente formato:
projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
Scarica e prepara lo script di importazione
- Accedi al repository ufficiale degli script di importazione di Google SecOps all'indirizzo https://github.com/chronicle/ingestion-scripts.
- Scarica i contenuti della directory armis dal repository.
- Scarica la directory common dal repository (dipendenza obbligatoria).
- Crea una nuova directory per il deployment di Cloud Function sulla macchina locale.
- Copia i contenuti delle directory armis e common nella directory di deployment.
Configura le variabili di ambiente
- Apri il file
.env.ymlin un editor di testo. Modifica il file con la seguente configurazione:
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_VULNERABILITIESSostituisci i seguenti valori:
<YOUR_CUSTOMER_ID>: il tuo ID cliente Google SecOpsprojects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}: il percorso completo dell'ID risorsa del secret del tuo account di servizio Google SecOps da Secret Manager<YOUR_NAMESPACE>: Spazio dei nomi facoltativo per i log di Google Security Operations (ad esempio,armis-vulnerabilities)<your-armis-instance>: il sottodominio del tenant Armis (ad esempio, se il tuo URL è https://company.armis.com, utilizzacompany)projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}: il percorso completo dell'ID risorsa del secret dell'API Armis da Secret Manager
Esegui il deployment della Cloud Function
Esegui il deployment utilizzando Cloud Function (2ª gen.) (consigliato)
- Apri Cloud Shell o il terminale locale con gcloud CLI installato.
- Vai alla directory contenente i file dello script di importazione.
Esegui questo 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
Esegui il deployment utilizzando Cloud Function (1ª gen.) (alternativa)
Esegui questo 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
Crea un job Cloud Scheduler
- Nella console Google Cloud , vai a Cloud Scheduler.
- Fai clic su Crea job.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci un nome per il job (ad esempio,
armis-vulnerabilities-scheduler). - Regione: seleziona la stessa regione della tua Cloud Function (ad esempio,
us-central1). - Frequenza: inserisci la pianificazione utilizzando la sintassi cron (ad esempio,
*/10 * * * *ogni 10 minuti). - Fuso orario: seleziona il fuso orario che preferisci (ad esempio UTC).
- Nome: inserisci un nome per il job (ad esempio,
- Fai clic su Continua.
- Seleziona HTTP come tipo di destinazione.
- Fornisci i seguenti dettagli di configurazione:
- URL: nella console Cloud Functions, vai alla scheda TRIGGER della funzione e copia l'URL del trigger. Incollalo qui.
- Metodo HTTP: seleziona POST.
- Fai clic su Intestazione di autenticazione > Aggiungi token OIDC.
- Seleziona il service account utilizzato dalla Cloud Function.
- Fai clic su Crea.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| affectedDevicesCount | read_only_udm.security_result.detection_fields.value | Mappatura diretta, convertita in stringa. |
| attackComplexity | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta. |
| attackVector | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta. |
| availabilityImpact | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta. |
| avmRating | read_only_udm.security_result.detection_fields.value | Mappatura diretta. |
| botnet | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Concatenati in un'unica stringa se esistono più botnet. |
| cisaDueDate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta. |
| collection_time.nanos | read_only_udm.metadata.event_timestamp.nanos | Mappatura diretta. |
| collection_time.seconds | read_only_udm.metadata.event_timestamp.seconds | Mappatura diretta. |
| commonName | read_only_udm.extensions.vulns.vulnerabilities.name | Mappatura diretta. |
| confidentialityImpact | read_only_udm.security_result.detection_fields.value | Mappatura diretta. |
| cveUid | read_only_udm.extensions.vulns.vulnerabilities.cve_id | Mappatura diretta. |
| cvssScore | read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score | Mappatura diretta, convertita in float. |
| descrizione | read_only_udm.metadata.description | Mappatura diretta. |
| epssPercentile | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta, convertita in stringa. |
| epssScore | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta, convertita in stringa. |
| exploitabilityScore | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta, convertita in stringa. |
| firstReferencePublishDate | read_only_udm.extensions.vulns.vulnerabilities.first_found | Analizzato in timestamp, gestisce formati con e senza millisecondi. |
| firstWeaponizedReferencePublishDate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta. |
| hasRansomware | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta, convertita in stringa. |
| id | read_only_udm.metadata.product_log_id | Mappatura diretta. |
| impactScore | read_only_udm.security_result.detection_fields.value | Mappatura diretta, convertita in stringa. |
| integrityImpact | read_only_udm.security_result.detection_fields.value | Mappatura diretta. |
| isWeaponized | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta, convertita in stringa. |
| latestExploitUpdate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta. |
| numOfExploits | read_only_udm.security_result.detection_fields.value | Mappatura diretta, convertita in stringa. |
| numberOfThreatActors | read_only_udm.security_result.detection_fields.value | Mappatura diretta, convertita in stringa. |
| orgPriorityManualChangeReason | read_only_udm.security_result.detection_fields.value | Mappatura diretta. |
| orgPriorityManualChangedBy | read_only_udm.principal.user.userid | Mappatura diretta. |
| orgPriorityManualUpdateTime | read_only_udm.principal.labels.value | Mappatura diretta. |
| privilegesRequired | read_only_udm.security_result.detection_fields.value | Mappatura diretta. |
| publishedDate | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta. |
| reportedByGoogleZeroDays | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta, convertita in stringa. |
| ambito | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta. |
| gravità | read_only_udm.extensions.vulns.vulnerabilities.severity | Mappato su CRITICA, ALTA, MEDIA, BASSA in base al valore. Il valore originale è mappato anche su severity_details. |
| stato | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Mappatura diretta. |
| threatTags | read_only_udm.extensions.vulns.vulnerabilities.about.labels.value | Concatenati in un'unica stringa se esistono più tag di minaccia. |
| userInteraction | read_only_udm.about.labels.value | Mappatura diretta. |
| vulnerabilities_matches | read_only_udm.metadata.url_back_to_product | Mappatura diretta. |
| read_only_udm.metadata.event_type | Imposta il valore su "GENERIC_EVENT". | |
| read_only_udm.metadata.product_name | Imposta il valore su "ARMIS". | |
| read_only_udm.metadata.vendor_name | Imposta il valore su "ARMIS". | |
| read_only_udm.metadata.log_type | Imposta il valore su "ARMIS_VULNERABILITIES". | |
| read_only_udm.extensions.vulns.vulnerabilities.severity_details | Il valore del campo "severity" è mappato a questo campo |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.