Coletar registros do antirransomware do Halcyon
Este documento explica como ingerir registros do Halcyon Anti-Ransomware no Google Security Operations usando o Google Cloud Storage V2.
O Halcyon é uma plataforma antirransomware que usa IA para detectar, prevenir e se recuperar de ataques de ransomware. Ele gera alertas para eventos de detecção de ransomware, tentativas de criptografia e ações de recuperação. O analisador mapeia campos de registro formatados em JSON para o modelo de dados unificado (UDM), processando tipos de eventos como operações de arquivo, atividade do usuário e resultados de segurança.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Um projeto do GCP com a API Storage do Cloud ativada
- Permissões para criar e gerenciar buckets do GCS e políticas do IAM
- Acesso privilegiado ao console do Halcyon com recursos de exportação de registros
Criar um bucket do Google Cloud Storage
- Acesse o Console do Google Cloud.
- Selecione seu projeto ou crie um novo.
- No menu de navegação, acesse Cloud Storage > Buckets.
- Clique em Criar bucket.
Informe os seguintes detalhes de configuração:
Configuração Valor Nomeie seu bucket Insira um nome globalmente exclusivo (por exemplo, halcyon-logs)Tipo de local Escolha de acordo com suas necessidades (região, birregional, multirregional) Local Selecione o local (por exemplo, us-central1).Classe de armazenamento Padrão (recomendado para registros acessados com frequência) Controle de acesso Uniforme (recomendado) Ferramentas de proteção Opcional: ativar o controle de versões de objetos ou a política de retenção Clique em Criar.
Exportar registros do Halcyon para o Google Cloud Storage
O Halcyon é compatível com a exportação de dados de registro no formato JSON. Use uma das seguintes abordagens para entregar registros ao GCS.
Opção A: exportar registros usando a API Halcyon e fazer upload para o GCS
- Faça login no console de gerenciamento do Halcyon.
- Acesse Configurações > Acesso à API e gere uma chave de API com permissões de leitura.
- Copie e salve a chave de API.
- Use um script programado ou uma função do Cloud Run para chamar a API REST do Halcyon, buscar logs de eventos e gravá-los no GCS em formato JSON.
Opção B: configurar a integração do SIEM e encaminhar para o GCS
- Faça login no console de gerenciamento do Halcyon.
- Acesse Configurações > Integrações > SIEM.
- Configure o destino de exportação de registros para gravar eventos formatados em JSON em um diretório local ou armazenamento intermediário.
Use uma função do Cloud Run para fazer upload periódico de registros para seu bucket do GCS.
- Verifique se os arquivos exportados estão no formato JSON.
- Cada arquivo precisa conter um ou mais registros de eventos.
Recuperar a conta de serviço do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- Selecione Google Cloud Storage V2 como o Tipo de origem.
- Selecione Halcyon Anti Ransomware como o Tipo de registro.
Clique em Receber conta de serviço. Um e-mail exclusivo da conta de serviço será exibido, por exemplo:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopie o endereço de e-mail. Você vai usá-la na próxima etapa.
Conceder permissões do IAM à conta de serviço do Google SecOps
- Acesse Cloud Storage > Buckets.
- Clique no nome do bucket.
- Acesse a guia Permissões.
- Clique em Conceder acesso.
- Informe os seguintes detalhes de configuração:
- Adicionar participantes: cole o e-mail da conta de serviço do Google SecOps.
- Atribuir papéis: selecione Leitor de objetos do Storage.
Clique em Salvar.
- Se você planeja usar a opção de exclusão (excluir arquivos transferidos), conceda o papel Administrador de objetos do Storage em vez de Leitor de objetos do Storage.
Configurar um feed no Google SecOps para ingerir registros do Halcyon Anti-Ransomware
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Halcyon Anti-Ransomware logs). - Selecione Google Cloud Storage V2 como o Tipo de origem.
- Selecione Halcyon Anti Ransomware como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
Campo Valor URI do bucket de armazenamento gs://halcyon-logs/halcyon/events/Opção de exclusão da origem Selecione a opção de exclusão de acordo com sua preferência. Idade máxima do arquivo (dias) O padrão é 180 dias. Namespace do recurso O namespace do recurso Rótulos de ingestão O rótulo a ser aplicado aos eventos deste feed - Substitua
halcyon-logspelo nome real do bucket do GCS. - Sempre inclua a barra final (
/) no final do URI.
- Substitua
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento de UDM
| Campo de registro | Mapeamento de UDM | Lógica |
|---|---|---|
| sshd, tty, euid, dataType, filterName, totalOccurrences, occurredAt, count, occurrences.IncorrectPasswords, occurrences.FailedPassword, occurrences.AuthFailure, policyMode, action | additional.fields | Mesclado com rótulos criados em cada campo, se houver; campos totalOccurrences, count e occurrences convertidos em string |
| dnsArtifact.uri | network.dns.questions | Unido à matriz de perguntas que contém o nome |
| asset.id | principal.asset.asset_id | Concatenado como "ASSET:" + asset.id |
| asset.kind | principal.asset.attribute.labels | Mesclado com "asset_kind_label" criado com base em "asset.kind" |
| asset.name | principal.asset.hostname | Valor copiado diretamente |
| ipArtifact.ipAddress | principal.asset.ip | Valor copiado diretamente |
| summary.applicationName | principal.application | Valor copiado diretamente |
| phost, asset.name | principal.hostname | Valor de phost, se presente, substituído por asset.name, se presente |
| ipArtifact.ipAddress | principal.ip | Valor copiado diretamente |
| process.commandLine | principal.process.command_line | Valor copiado diretamente |
| modifiedFilePath, artifact.filePath, process.artifact.filePath, processes.artifact.filePath | principal.process.file.full_path | Valor definido como modifiedFilePath, se presente, substituído por artifact.filePath, se presente, substituído por process.artifact.filePath, se presente, substituído por processes.artifact.filePath, se presente (aspas removidas para processes.artifact.filePath) |
| lastOccurredAt | principal.process.file.last_seen_time | Convertido usando o filtro de data com o formato ISO8601 |
| process.artifact.kind, artifact.kind, primaryProcess.artifact.kind | principal.process.file.mime_type | Valor de process.artifact.kind, se presente, substituído por artifact.kind, se presente, substituído por primaryProcess.artifact.kind, se presente |
| artifact.sha256, process.artifact.sha256, processes.artifact.sha256 | principal.process.file.sha256 | Valor de artifact.sha256, se houver, substituído por process.artifact.sha256, se houver, substituído por processes.artifact.sha256, se houver |
| process.parentPid | principal.process.parent_pid | Valor copiado diretamente |
| process.pid | principal.process.pid | Valor copiado diretamente |
| user_displayname | principal.user.user_display_name | Valor copiado diretamente |
| usuário | principal.user.userid | Valor copiado diretamente |
| summary.artifact.filePath | target.file.full_path | Valor copiado diretamente |
| summary.artifact.sha256 | target.file.sha256 | Valor copiado diretamente |
| primaryProcess.commandLine | target.process.command_line | Valor copiado diretamente após a remoção das aspas |
| primaryProcess.kind | target.process.file.mime_type | Valor copiado diretamente |
| primaryProcess.parentPid | target.process.parent_process.pid | Valor copiado diretamente |
| primaryProcess.pid | target.process.pid | Valor copiado diretamente |
| uid | target.user.userid | Valor copiado diretamente |
| ID | target.asset_id | Concatenado como "ASSET:" + id |
| ação | security_result.action | Em maiúsculas se a ação for "Bloquear" ou "Permitir" |
| reason.exitCode | security_result.action_details | Valor copiado diretamente |
| dxpRule, monitoringReason, tenantId | security_result.detection_fields | Mesclado com rótulos criados em cada campo, se houver; barras invertidas removidas para dxpRule |
| dxpRuleType | security_result.rule_type | Valor copiado diretamente |
| ipArtifact.version | security_result.rule_version | Valor copiado diretamente |
| msg, reason.cause | security_result.summary | Valor de msg, se presente, substituído por reason.cause, se presente |
| timestamp | metadata.event_timestamp | Convertido usando o filtro de data com os formatos MMM dd HH:mm:ss ou MMM d HH:mm:ss |
| phost, ipArtifact.ipAddress, asset.name, user, uid, summary.artifact.sha256, summary.artifact.filePath | metadata.event_type | Definido como FILE_UNCATEGORIZED se has_principal e has_target_file; USER_UNCATEGORIZED se has_principal e has_target; STATUS_UPDATE se has_principal; caso contrário, GENERIC_EVENT (flags derivadas de fontes) |
| kind | metadata.product_event_type | Valor copiado diretamente |
| gupid, guid | metadata.product_log_id | Valor de gupid, se presente, substituído por guid, se presente |
| metadata.product_name | Definido como "Halcyon Anti Ransomware" | |
| metadata.vendor_name | Defina como "Halcyon" | |
primaryProcess.kind |
event.idm.read_only_udm.target.process.file.mime_type |
Mapeado do registro de alterações |
primaryProcess.artifact.kind |
event.idm.read_only_udm.principal.process.file.mime_type |
Mapeado do registro de mudanças |
processes.artifact.filePath |
event.idm.read_only_udm.principal.process.file.full_path |
Mapeado do registro de mudanças |
processes.artifact.sha256 |
event.idm.read_only_udm.principal.process.file.sha256 |
Mapeado do registro de mudanças |
action |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
filterName |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
policyMode |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
euid |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
occurrences.AuthFailure |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
occurrences.FailedPassword |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
occurredAt |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
occurrences.IncorrectPasswords |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
guid |
event.idm.read_only_udm.metadata.product_log_id |
Mapeado do registro de mudanças |
gupid |
event.idm.read_only_udm.metadata.product_log_id |
Mapeado do registro de mudanças |
count |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
artifact.filePath |
event.idm.read_only_udm.principal.process.file.full_path |
Mapeado do registro de mudanças |
artifact.sha256 |
event.idm.read_only_udm.principal.process.file.sha256 |
Mapeado do registro de mudanças |
artifact.kind |
event.idm.read_only_udm.principal.process.file.mime_type |
Mapeado do registro de mudanças |
monitoringReason |
event.idm.read_only_udm.security_result.detection_fields |
Mapeado do registro de mudanças |
dxpRule |
event.idm.read_only_udm.security_result.detection_fields |
Mapeado do registro de mudanças |
modifiedFilePath |
event.idm.read_only_udm.principal.process.file.full_path |
Mapeado do registro de mudanças |
ipArtifact.version |
event.idm.read_only_udm.security_result.rule_version |
Mapeado do registro de mudanças |
ipArtifact.ipAddress |
event.idm.read_only_udm.principal.ip |
Mapeado do registro de mudanças |
ipArtifact.ipAddress |
event.idm.read_only_udm.principal.asset.ip |
Mapeado do registro de mudanças |
process.parentPid |
event.idm.read_only_udm.principal.process.parent_pid |
Mapeado do registro de mudanças |
dxpRuleType |
event.idm.read_only_udm.security_result.rule_type |
Mapeado do registro de mudanças |
summary.applicationName |
event.idm.read_only_udm.principal.application |
Mapeado do registro de mudanças |
process.pid |
event.idm.read_only_udm.principal.process.pid |
Mapeado do registro de mudanças |
reason.exitCode |
event.idm.read_only_udm.security_result.action_details |
Mapeado do registro de mudanças |
reason.cause |
event.idm.read_only_udm.security_result.summary |
Mapeado do registro de mudanças |
dnsArtifact_uri |
event.idm.read_only_udm.network.dns.questions |
Mapeado do registro de mudanças |
uid |
event.idm.read_only_udm.target.user.userid |
Mapeado do registro de mudanças |
tty |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
sshd |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
phost |
event.idm.read_only_udm.principal.hostname |
Mapeado do registro de mudanças |
user_displayname |
event.idm.read_only_udm.principal.user.user_display_name |
Mapeado do registro de mudanças |
msg |
event.idm.read_only_udm.security_result.summary |
Mapeado do registro de mudanças |
timestamp |
event.idm.read_only_udm.metadata.event_timestamp |
Mapeado do registro de mudanças |
user |
event.idm.read_only_udm.principal.user.userid |
Mapeado do registro de alterações |
Registro de alterações
Ver o registro de alterações deste analisador
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.