Recolha registos de vulnerabilidades do Armis

Suportado em:

Este documento explica como carregar registos de vulnerabilidades da Armis para o Google Security Operations através das Google Cloud Functions. O analisador transforma os registos de vulnerabilidades de segurança formatados em JSON não processado num formato estruturado em conformidade com o UDM do Google SecOps. Extrai vários campos do registo não processado, mapeia-os para os campos da UDM correspondentes, realiza conversões de tipos de dados e estrutura o resultado para carregamento na plataforma Google SecOps.

Antes de começar

Certifique-se de que cumpre os seguintes pré-requisitos:

  • Instância do Google SecOps com o ID de cliente e as credenciais da conta de serviço
  • Acesso privilegiado à plataforma Armis Centrix
  • Chave secreta da API e URL do servidor da Armis
  • Acesso ao Google Cloud com autorizações para criar Cloud Functions, segredos do Secret Manager e tarefas do Cloud Scheduler
  • Acesso ao módulo ou à licença de gestão de vulnerabilidades de recursos (AVM) da Armis

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente na secção Detalhes da organização.

Obtenha as credenciais da conta de serviço do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento (ficheiro JSON da conta de serviço).
  4. Guarde o ficheiro de forma segura, uma vez que tem de o carregar para o Google Secret Manager.

Obtenha a chave secreta da API Armis

  1. Inicie sessão na plataforma Armis Centrix.
  2. Aceda a Definições > Gestão de APIs.
  3. Clique em Criar se precisar de gerar uma nova chave secreta da API.
  4. Clique em Mostrar para ver a chave secreta.
  5. Copie e guarde a chave secreta de forma segura.

Configure o Google Secret Manager

Esta secção explica como usar o Google Secret Manager para armazenar em segurança a chave da conta de serviço necessária para a integração.

Adicione o segredo da conta de serviço do Google SecOps

  1. Inicie sessão na Google Cloud consola.
  2. Aceda a Segurança > Secret Manager.
  3. Clique em Criar segredo.
  4. Forneça os seguintes detalhes de configuração:
    • Nome: introduza um nome para o segredo (por exemplo, secops-service-account).
    • Valor secreto: carregue o ficheiro JSON da conta de serviço do Google SecOps que transferiu anteriormente ou cole diretamente o respetivo conteúdo.
  5. Clique em Criar segredo.
  6. Copie o ID do recurso do segredo criado no seguinte formato:

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}
    

Adicione o segredo da chave secreta da API Armis

  1. No Secret Manager, clique em Criar segredo.
  2. Forneça os seguintes detalhes de configuração:
    • Nome: introduza um nome para o segredo (por exemplo, armis-api-secret).
    • Valor secreto: cole a chave secreta da API Armis que obteve anteriormente.
  3. Clique em Criar segredo.
  4. Copie o ID do recurso do segredo criado no seguinte formato:

    projects/{project_id}/secrets/{secret_id}/versions/{version_id}`
    

Transfira e prepare o script de carregamento

  1. Aceda ao repositório de scripts de carregamento do Google SecOps oficial em https://github.com/chronicle/ingestion-scripts.
  2. Transfira o conteúdo do diretório armis do repositório.
  3. Transfira o diretório common do repositório (dependência necessária).
  4. Crie um novo diretório para a implementação da função da nuvem na sua máquina local.
  5. Copie o conteúdo dos diretórios armis e common para o diretório de implementação.

Configure variáveis de ambiente

  1. Abra o ficheiro .env.yml num editor de texto.
  2. Edite o ficheiro com a seguinte configuração:

    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
    
    • Substitua os seguintes valores:

      • <YOUR_CUSTOMER_ID>: o seu ID de cliente do Google SecOps
      • projects/{project_id}/secrets/{chronicle-secret-id}/versions/{version_id}: o caminho completo do ID do recurso do segredo da conta de serviço do Google SecOps do Secret Manager
      • <YOUR_NAMESPACE>: espaço de nomes opcional para registos do Google Security Operations (por exemplo, armis-vulnerabilities)
      • <your-armis-instance>: o subdomínio do inquilino do Armis (por exemplo, se o seu URL for https://company.armis.com, use company)
      • projects/{project_id}/secrets/{armis-secret-id}/versions/{version_id}: o caminho completo do ID do recurso do seu segredo da API Armis no Secret Manager

Implemente a função do Cloud

  1. Abra o Cloud Shell ou o terminal local com a CLI gcloud instalada.
  2. Navegue para o diretório que contém os ficheiros do script de carregamento.
  3. Execute o seguinte 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
    

Implemente através do Cloud Functions Gen1 (alternativa)

  • Execute o seguinte 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
    

Crie uma tarefa do Cloud Scheduler

  1. Na Google Cloud consola, aceda ao Cloud Scheduler.
  2. Clique em Criar tarefa.
  3. Forneça os seguintes detalhes de configuração:
    • Nome: introduza um nome para a tarefa (por exemplo, armis-vulnerabilities-scheduler).
    • Região: selecione a mesma região que a sua função do Google Cloud (por exemplo, us-central1).
    • Frequência: introduza a programação através da sintaxe cron (por exemplo, */10 * * * * para cada 10 minutos).
    • Fuso horário: selecione o seu fuso horário preferencial (por exemplo, UTC).
  4. Clique em Continuar.
  5. Selecione HTTP como tipo de destino.
  6. Forneça os seguintes detalhes de configuração:
    • URL: na consola do Cloud Functions, aceda ao separador ACIONADOR da sua função e copie o URL do acionador. Cole-o aqui.
    • Método HTTP: selecione POST.
  7. Clique em Cabeçalho de autorização > Adicionar token OIDC.
  8. Selecione a conta de serviço usada pela função do Cloud.
  9. Clique em Criar.

Tabela de mapeamento da UDM

Campo de registo Mapeamento da UDM Lógica
affectedDevicesCount read_only_udm.security_result.detection_fields.value Mapeamento direto, convertido em string.
attackComplexity read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
attackVector read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
availabilityImpact read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
avmRating read_only_udm.security_result.detection_fields.value Mapeamento direto.
botnets read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Concatenado numa única string se existirem várias botnets.
cisaDueDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
collection_time.nanos read_only_udm.metadata.event_timestamp.nanos Mapeamento direto.
collection_time.seconds read_only_udm.metadata.event_timestamp.seconds Mapeamento direto.
commonName read_only_udm.extensions.vulns.vulnerabilities.name Mapeamento direto.
confidentialityImpact read_only_udm.security_result.detection_fields.value Mapeamento direto.
cveUid read_only_udm.extensions.vulns.vulnerabilities.cve_id Mapeamento direto.
cvssScore read_only_udm.extensions.vulns.vulnerabilities.cvss_base_score Mapeamento direto, convertido em flutuante.
descrição read_only_udm.metadata.description Mapeamento direto.
epssPercentile read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto, convertido em string.
epssScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto, convertido em string.
exploitabilityScore read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto, convertido em string.
firstReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.first_found Analisa a indicação de tempo e processa formatos com e sem milissegundos.
firstWeaponizedReferencePublishDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
hasRansomware read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto, convertido em string.
id read_only_udm.metadata.product_log_id Mapeamento direto.
impactScore read_only_udm.security_result.detection_fields.value Mapeamento direto, convertido em string.
integrityImpact read_only_udm.security_result.detection_fields.value Mapeamento direto.
isWeaponized read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto, convertido em string.
latestExploitUpdate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
numOfExploits read_only_udm.security_result.detection_fields.value Mapeamento direto, convertido em string.
numberOfThreatActors read_only_udm.security_result.detection_fields.value Mapeamento direto, convertido em string.
orgPriorityManualChangeReason read_only_udm.security_result.detection_fields.value Mapeamento direto.
orgPriorityManualChangedBy read_only_udm.principal.user.userid Mapeamento direto.
orgPriorityManualUpdateTime read_only_udm.principal.labels.value Mapeamento direto.
privilegesRequired read_only_udm.security_result.detection_fields.value Mapeamento direto.
publishedDate read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
reportedByGoogleZeroDays read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto, convertido em string.
âmbito read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
gravidade read_only_udm.extensions.vulns.vulnerabilities.severity Mapeado para CRÍTICO, ELEVADO, MÉDIO e BAIXO com base no valor. O valor original também é mapeado para severity_details.
estado read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
threatTags read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Concatenado numa única string se existirem várias tags de ameaça.
userInteraction read_only_udm.about.labels.value Mapeamento direto.
vulnerabilities_matches read_only_udm.metadata.url_back_to_product Mapeamento direto.
read_only_udm.metadata.event_type Definido como "GENERIC_EVENT".
read_only_udm.metadata.product_name Definido como "ARMIS".
read_only_udm.metadata.vendor_name Definido como "ARMIS".
read_only_udm.metadata.log_type Definido como "ARMIS_VULNERABILITIES".
read_only_udm.extensions.vulns.vulnerabilities.severity_details O valor do campo "severity" está mapeado para este campo

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.