Recolha registos de vulnerabilidades do Armis
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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- 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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- Transfira o ficheiro de autenticação de carregamento (ficheiro JSON da conta de serviço).
- 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
- Inicie sessão na plataforma Armis Centrix.
- Aceda a Definições > Gestão de APIs.
- Clique em Criar se precisar de gerar uma nova chave secreta da API.
- Clique em Mostrar para ver a chave secreta.
- 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
- Inicie sessão na Google Cloud consola.
- Aceda a Segurança > Secret Manager.
- Clique em Criar segredo.
- 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.
- Nome: introduza um nome para o segredo (por exemplo,
- Clique em Criar segredo.
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
- No Secret Manager, clique em Criar segredo.
- 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.
- Nome: introduza um nome para o segredo (por exemplo,
- Clique em Criar segredo.
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
- Aceda ao repositório de scripts de carregamento do Google SecOps oficial em https://github.com/chronicle/ingestion-scripts.
- Transfira o conteúdo do diretório armis do repositório.
- Transfira o diretório common do repositório (dependência necessária).
- Crie um novo diretório para a implementação da função da nuvem na sua máquina local.
- Copie o conteúdo dos diretórios armis e common para o diretório de implementação.
Configure variáveis de ambiente
- Abra o ficheiro
.env.ymlnum editor de texto. 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_VULNERABILITIESSubstitua os seguintes valores:
<YOUR_CUSTOMER_ID>: o seu ID de cliente do Google SecOpsprojects/{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, usecompany)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
Implemente através da função do Cloud de 2.ª geração (recomendado)
- Abra o Cloud Shell ou o terminal local com a CLI gcloud instalada.
- Navegue para o diretório que contém os ficheiros do script de carregamento.
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
- Na Google Cloud consola, aceda ao Cloud Scheduler.
- Clique em Criar tarefa.
- 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).
- Nome: introduza um nome para a tarefa (por exemplo,
- Clique em Continuar.
- Selecione HTTP como tipo de destino.
- 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.
- Clique em Cabeçalho de autorização > Adicionar token OIDC.
- Selecione a conta de serviço usada pela função do Cloud.
- 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.