Coletar registros de vulnerabilidades do Armis

Compatível com:

Este documento explica como ingerir registros de vulnerabilidades do Armis no Google Security Operations usando o Google Cloud Functions. O analisador transforma registros brutos de vulnerabilidade de segurança formatados em JSON em um formato estruturado de acordo com a UDM do Google SecOps. Ele extrai vários campos do registro bruto, mapeia para os campos correspondentes do UDM, realiza conversões de tipo de dados e estrutura a saída para ingestão na plataforma do Google SecOps.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Instância do Google SecOps com ID do cliente e credenciais da conta de serviço
  • Acesso privilegiado à plataforma Armis Centrix.
  • Chave secreta da API Armis e URL do servidor
  • Acesso a Google Cloud com permissões para criar funções do Cloud Functions, secrets do Secret Manager e jobs do Cloud Scheduler
  • Licença ou acesso ao módulo do Armis Asset Vulnerability Management (AVM)

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Receber credenciais da conta de serviço do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Faça o download do arquivo de autenticação de ingestão (arquivo JSON da conta de serviço).
  4. Salve o arquivo com segurança, porque você vai precisar fazer upload dele no Google Secret Manager.

Receber chave secreta da API Armis

  1. Faça login na plataforma Armis Centrix.
  2. Acesse Configurações > Gerenciamento de API.
  3. Clique em Criar se precisar gerar uma nova chave secreta de API.
  4. Clique em Mostrar para ver a chave secreta.
  5. Copie e salve a chave secreta com segurança.

Configurar o Google Secret Manager

Esta seção mostra como usar o Google Secret Manager para armazenar com segurança a chave da conta de serviço necessária para a integração.

Adicionar o secret da conta de serviço do Google SecOps

  1. Faça login no console doGoogle Cloud .
  2. Acesse Segurança > Secret Manager.
  3. Clique em Criar secret.
  4. Informe os seguintes detalhes de configuração:
    • Nome: insira um nome para o secret (por exemplo, secops-service-account).
    • Valor secreto: faça upload do arquivo JSON da conta de serviço do Google SecOps que você baixou antes ou cole o conteúdo diretamente.
  5. Clique em Criar secret.
  6. Copie o ID do recurso do secret criado no seguinte formato:

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

Adicione o secret da chave secreta da API do Armis

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

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

Fazer o download e preparar o script de ingestão

  1. Acesse o repositório oficial de scripts de ingestão do Google SecOps em https://github.com/chronicle/ingestion-scripts.
  2. Faça o download do conteúdo do diretório armis do repositório.
  3. Faça o download do diretório common do repositório (dependência obrigatória).
  4. Crie um diretório para a implantação da função do Cloud na sua máquina local.
  5. Copie o conteúdo dos diretórios armis e common para o diretório de implantação.

Configure as variáveis de ambiente

  1. Abra o arquivo .env.yml em um editor de texto.
  2. Edite o arquivo 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>: 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 secret da conta de serviço do Google SecOps no Secret Manager.
      • <YOUR_NAMESPACE>: namespace opcional para registros do Google Security Operations (por exemplo, armis-vulnerabilities)
      • <your-armis-instance>: seu subdomínio do locatário da Armis. Por exemplo, se o 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 secret da API Armis no Secret Manager

Implante a Função do Cloud

  1. Abra o Cloud Shell ou seu terminal local com a CLI gcloud instalada.
  2. Navegue até o diretório que contém os arquivos de script de ingestão.
  3. Execute este 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
    

Implantar usando o função do Cloud Gen1 (alternativa)

  • Execute este 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
    

Criar um job do Cloud Scheduler

  1. No console Google Cloud , acesse Cloud Scheduler.
  2. Clique em Criar job.
  3. Informe os seguintes detalhes de configuração:
    • Nome: insira um nome para o job (por exemplo, armis-vulnerabilities-scheduler).
    • Região: selecione a mesma região da sua função do Cloud (por exemplo, us-central1).
    • Frequência: insira a programação usando a sintaxe cron (por exemplo, */10 * * * * para cada 10 minutos).
    • Fuso horário: selecione o fuso horário de sua preferência (por exemplo, UTC).
  4. Clique em Continuar.
  5. Selecione HTTP como o tipo de destino.
  6. Informe os seguintes detalhes de configuração:
    • URL: no console do Cloud Functions, acesse a guia GATILHO da sua função e copie o URL do gatilho. Cole aqui.
    • Método HTTP: selecione POST.
  7. Clique em Cabeçalho de autenticação > Adicionar token OIDC.
  8. Selecione a conta de serviço usada pela Função do Cloud.
  9. Clique em Criar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do 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 em uma única string se houver 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 para ponto 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 Analisado para carimbo de data/hora, 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.
escopo read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
gravidade, read_only_udm.extensions.vulns.vulnerabilities.severity Mapeado para CRITICAL, HIGH, MEDIUM, LOW com base no valor. O valor original também é mapeado para severity_details.
status read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Mapeamento direto.
threatTags read_only_udm.extensions.vulns.vulnerabilities.about.labels.value Concatenadas em uma única string se houver 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 Defina como "GENERIC_EVENT".
read_only_udm.metadata.product_name Defina como "ARMIS".
read_only_udm.metadata.vendor_name Defina 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" é mapeado para este campo.

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