Coletar registros de vulnerabilidades do Armis
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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Receber credenciais da conta de serviço do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Faça o download do arquivo de autenticação de ingestão (arquivo JSON da conta de serviço).
- Salve o arquivo com segurança, porque você vai precisar fazer upload dele no Google Secret Manager.
Receber chave secreta da API Armis
- Faça login na plataforma Armis Centrix.
- Acesse Configurações > Gerenciamento de API.
- Clique em Criar se precisar gerar uma nova chave secreta de API.
- Clique em Mostrar para ver a chave secreta.
- 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
- Faça login no console doGoogle Cloud .
- Acesse Segurança > Secret Manager.
- Clique em Criar secret.
- 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.
- Nome: insira um nome para o secret (por exemplo,
- Clique em Criar secret.
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
- No Secret Manager, clique em Criar secret.
- 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.
- Nome: insira um nome para o secret (por exemplo,
- Clique em Criar secret.
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
- Acesse o repositório oficial de scripts de ingestão do Google SecOps em https://github.com/chronicle/ingestion-scripts.
- Faça o download do conteúdo do diretório armis do repositório.
- Faça o download do diretório common do repositório (dependência obrigatória).
- Crie um diretório para a implantação da função do Cloud na sua máquina local.
- Copie o conteúdo dos diretórios armis e common para o diretório de implantação.
Configure as variáveis de ambiente
- Abra o arquivo
.env.ymlem um editor de texto. 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_VULNERABILITIESSubstitua os seguintes valores:
<YOUR_CUSTOMER_ID>: seu ID de cliente do Google SecOpsprojects/{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, usecompany.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
Implantar usando o função do Cloud Gen2 (recomendado)
- Abra o Cloud Shell ou seu terminal local com a CLI gcloud instalada.
- Navegue até o diretório que contém os arquivos de script de ingestão.
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
- No console Google Cloud , acesse Cloud Scheduler.
- Clique em Criar job.
- 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).
- Nome: insira um nome para o job (por exemplo,
- Clique em Continuar.
- Selecione HTTP como o tipo de destino.
- 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.
- Clique em Cabeçalho de autenticação > Adicionar token OIDC.
- Selecione a conta de serviço usada pela Função do Cloud.
- 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.