Raccogli i log delle vulnerabilità di Armis
Versione parser: 2.0
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 non elaborati in formato JSON in un formato strutturato conforme all'UDM di Google SecOps. Estrae vari campi dal log non elaborato, li mappa ai campi UDM corrispondenti, esegue conversioni dei tipi di dati e struttura l'output per l'importazione nella piattaforma Google SecOps.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps con ID cliente e credenziali dell'account di servizio
- Accesso privilegiato alla piattaforma Armis Centrix
- Chiave segreta dell'API Armis e URL del server
- Accesso a Google Cloud con le autorizzazioni per creare funzioni Cloud Functions, secret di Secret Manager e job di Cloud Scheduler
- Licenza Armis Asset Vulnerability Management (AVM) o accesso al modulo
Ottieni l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni > Amministrazione > Profilo. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli organizzazione.
Ottieni le credenziali del account di servizio Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni > Gestione dei dati > Agenti di raccolta. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > Agenti di raccolta.
- Scarica il file di autenticazione dell'acquisizione (file JSON account di servizio).
- Salva il file in modo sicuro, poiché dovrai caricarlo in Google Secret Manager.
Ottieni la chiave secret dell'API Armis
- Accedi alla piattaforma Armis Centrix.
- Vai a Impostazioni > Gestione delle API.
- Fai clic su Crea se devi generare una nuova chiave secret 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 illustra come utilizzare Google Secret Manager per archiviare in modo sicuro la chiave del account di servizio richiesta 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 secret: carica il file JSON del account di servizio Google SecOps scaricato in precedenza o incolla 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 secret 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 secret: incolla la chiave secret dell'API Armis ottenuta 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 della Cloud Function sulla tua 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 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 l'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 installata.
- Vai alla directory contenente i file degli 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 Cloud Function (ad esempio
us-central1). - Frequenza: inserisci la pianificazione utilizzando la sintassi cron (ad esempio,
*/10 * * * *per 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 | Logica |
|---|---|---|
| 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 i 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 a CRITICAL, HIGH, MEDIUM, LOW in base al valore, valore originale mappato anche a 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 una singola 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 | Impostato su "GENERIC_EVENT". | |
| read_only_udm.metadata.product_name | Imposta su "ARMIS". | |
| read_only_udm.metadata.vendor_name | Imposta su "ARMIS". | |
| read_only_udm.metadata.log_type | Imposta su "ARMIS_VULNERABILITIES". | |
| read_only_udm.extensions.vulns.vulnerabilities.severity_details | Il valore del campo "severity" è mappato a questo campo |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.