Raccogli i log delle vulnerabilità di Armis

Versione parser: 2.0

Supportato in:

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 Google SecOps con ID cliente e credenziali del account di servizio
  • Accesso privilegiato alla piattaforma Armis Centrix
  • Chiave segreta e URL del server dell'API Armis
  • Accesso a Google Cloud con autorizzazioni per creare funzioni Cloud Functions, secret di Secret Manager e job Cloud Scheduler
  • Licenza o accesso al modulo Armis Asset Vulnerability Management (AVM)

Recuperare l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Recuperare le credenziali del account di servizio Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'acquisizione (file JSON account di servizio).
  4. Salva il file in modo sicuro, perché dovrai caricarlo in Google Secret Manager.

Ottieni la chiave segreta dell'API Armis

  1. Accedi alla piattaforma Armis Centrix.
  2. Vai a Impostazioni > Gestione API.
  3. Fai clic su Crea se devi generare una nuova chiave segreta API.
  4. Fai clic su Mostra per visualizzare la chiave segreta.
  5. Copia e salva la chiave segreta in modo sicuro.

Configurare 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

  1. Accedi alla consoleGoogle Cloud .
  2. Vai a Sicurezza > Secret Manager.
  3. Fai clic su Crea secret.
  4. 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.
  5. Fai clic su Crea secret.
  6. 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

  1. In Secret Manager, fai clic su Crea secret.
  2. 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.
  3. Fai clic su Crea secret.
  4. 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

  1. Accedi al repository ufficiale degli script di importazione di Google SecOps all'indirizzo https://github.com/chronicle/ingestion-scripts.
  2. Scarica i contenuti della directory armis dal repository.
  3. Scarica la directory common dal repository (dipendenza obbligatoria).
  4. Crea una nuova directory per il deployment di Cloud Function sulla tua macchina locale.
  5. Copia i contenuti delle directory armis e common nella directory di deployment.

Configura le variabili di ambiente

  1. Apri il file .env.yml in un editor di testo.
  2. 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_VULNERABILITIES
    
    • Sostituisci i seguenti valori:

      • <YOUR_CUSTOMER_ID>: il tuo ID cliente Google SecOps
      • projects/{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 il tuo URL è https://company.armis.com, utilizza company)
      • 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

  1. Apri Cloud Shell o il terminale locale con gcloud CLI installato.
  2. Vai alla directory contenente i file dello script di importazione.
  3. 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

  1. Nella console Google Cloud , vai a Cloud Scheduler.
  2. Fai clic su Crea job.
  3. 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 * * * * per ogni 10 minuti).
    • Fuso orario: seleziona il fuso orario che preferisci (ad esempio, UTC).
  4. Fai clic su Continua.
  5. Seleziona HTTP come tipo di destinazione.
  6. 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.
  7. Fai clic su Intestazione di autenticazione > Aggiungi token OIDC.
  8. Seleziona il service account utilizzato dalla Cloud Function.
  9. 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 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 su "GENERIC_EVENT".
read_only_udm.metadata.product_name Imposta "ARMIS".
read_only_udm.metadata.vendor_name Imposta "ARMIS".
read_only_udm.metadata.log_type Imposta "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.