Coletar registros do Hyper-V do Windows

Compatível com:

Este documento explica como ingerir registros do Windows Hyper-V no Google Security Operations usando o Bindplane.

O Windows Hyper-V é um hipervisor da Microsoft que gera logs de eventos de ciclo de vida, rede, armazenamento e ocorrências de segurança de VMs. O agente do Bindplane coleta arquivos de log de eventos do Hyper-V exportados diretamente do sistema de arquivos local.

Antes de começar

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

  • Uma instância do Google SecOps
  • Windows Server 2016 ou mais recente com suporte ao serviço observiq-otel-collector
  • Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
  • Acesso privilegiado ao host do Windows Hyper-V com permissões de administrador

Receber credenciais do Google SecOps para o agente do Bindplane

Para autenticar o agente do Bindplane no Google SecOps, escolha um dos seguintes métodos:

  • Novas implantações: use a API Chronicle (opção 1).
  • Implantações legadas: continue usando o arquivo de autenticação de ingestão (opção 2) até que a API Ingestion seja desativada em 20 de julho de 2027.
  1. Faça login no console doGoogle Cloud e selecione o projeto do Google Cloud vinculado à sua instância do Google SecOps.
  2. Acesse IAM e administrador > Contas de serviço.
  3. Clique em Criar conta de serviço.
  4. Informe os seguintes detalhes de configuração:
    • Nome da conta de serviço: insira um nome para a conta (por exemplo, bindplane-ingest).
    • Descrição da conta de serviço: insira uma descrição (por exemplo, Bindplane agent log ingestion).
  5. Clique em Criar e continuar.
  6. Na seção Conceder a essa conta de serviço acesso ao projeto, clique em Selecionar um papel e escolha Editor do Chronicle.
  7. Clique em Continuar e depois em Concluído.
  8. Clique na conta de serviço que você criou e acesse a guia Chaves.
  9. Clique em Adicionar chave > Criar nova chave.
  10. Selecione JSON e clique em Criar. O download do arquivo de chave é feito no seu computador.
  11. Salve o arquivo de chave como ingestion-auth.json no diretório do coletor do BindPlane (/opt/observiq-otel-collector/ingestion-auth.json no Linux ou C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json no Windows) ou atualize creds_file_path em config.yaml para corresponder ao caminho em que você o salvou.
  12. Acesse IAM e administrador > Configurações e copie o Número do projeto. Você vai precisar dele para configurar o exportador.

Opção 2: fazer o download do arquivo de autenticação de ingestão (legado)

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações > Gerenciamento de dados > Agentes de coleta. Se você estiver em uma plataforma somente SIEM, acesse Configurações > Agentes de coleta.
  3. Faça o download do arquivo de autenticação de ingestão.
  4. Salve o arquivo com segurança no sistema em que o agente do Bindplane será instalado.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações > Administração > Perfil. Se você estiver em uma plataforma somente SIEM, acesse Configurações > Perfil.
  3. Copie e salve o ID de cliente na seção Detalhes da organização.

Instalar o agente do BindPlane

Instale o agente do Bindplane no sistema operacional Windows de acordo com as instruções a seguir.

Instalação do Windows

  1. Abra o Prompt de comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sc query observiq-otel-collector
    

O serviço precisa aparecer como RUNNING.

Outros recursos de instalação

Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do BindPlane.

Configurar o agente do Bindplane para ingerir registros e enviá-los ao Google SecOps

Localize o arquivo de configuração.

  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Editar o arquivo de configuração

  • Substitua todo o conteúdo de config.yaml pela seguinte configuração:

    receivers:
      filelog:
        include:
          - C:\HyperVLogs\*.evtx
        start_at: beginning
    
    exporters:
      chronicle/windows_hyperv:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: WINDOWS_HYPERV
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/hyperv_to_chronicle:
          receivers:
            - filelog
          exporters:
            - chronicle/windows_hyperv
    

Parâmetros de configuração

Substitua os seguintes marcadores de posição:

  • Configuração do receptor:

    • filelog: o tipo de receptor para coletar arquivos de registro do disco.
    • include: lista de caminhos de arquivo a serem monitorados. Defina como o local em que você exporta os logs de eventos do Hyper-V (por exemplo, C:\HyperVLogs\*.evtx).
    • start_at: defina como beginning para ler os registros atuais ou end para ler apenas as novas entradas.
  • Configuração do exportador:

    • windows_hyperv: nome descritivo do exportador.
    • creds_file_path: caminho completo para o arquivo de chave JSON da conta de serviço (opção 1):
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id>: ID de cliente da etapa anterior.
    • location: substitua <LOCATION> pela região da sua instância do Google SecOps (por exemplo, us, europe ou asia-southeast1). O exportador prefixa chronicle.googleapis.com com esse valor. Consulte Endpoints regionais para ver a lista completa.
    • project: substitua <PROJECT_NUMBER> pelo número do projeto em IAM e administrador > Configurações.
    • endpoint: mantenha definido como chronicle.googleapis.com.
    • WINDOWS_HYPERV: tipo de registro exatamente como aparece no Chronicle.
    • ingestion_labels: rótulos opcionais no formato YAML (por exemplo, env: production)
  • Configuração do pipeline:

    • hyperv_to_chronicle: nome descritivo do pipeline.

Exportador da API de ingestão legada

  • Se você usar o arquivo de autenticação de ingestão da Opção 2, substitua o bloco exporters pelo seguinte. Defina creds_file_path como o caminho para o arquivo de autenticação de ingestão e, se a instância estiver fora dos EUA, substitua malachiteingestion-pa.googleapis.com pelo endpoint regional (por exemplo, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/windows_hyperv:
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: WINDOWS_HYPERV
        raw_log_field: body
        ingestion_labels:
          env: production
    

Salve o arquivo de configuração.

  • Depois de editar, salve o arquivo:
    • Windows: clique em Arquivo > Salvar.

Reinicie o agente do BindPlane para aplicar as mudanças:

Para reiniciar o agente do BindPlane no Windows:

  1. Escolha uma das seguintes opções:

    • Prompt de comando ou PowerShell como administrador:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • Console de serviços:
      1. Pressione Win+R, digite services.msc e pressione Enter.
      2. Localize o coletor do OpenTelemetry da observIQ.
      3. Clique com o botão direito do mouse e selecione Reiniciar.
  2. Verifique se o serviço está em execução:

    sc query observiq-otel-collector
    
  3. Verifique se há erros nos registros:

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

Configurar a exportação de registros do Windows Hyper-V

Os registros do Hyper-V do Windows são armazenados como entradas do log de eventos do Windows. É necessário exportar esses registros para arquivos no disco para que o agente do Bindplane possa coletá-los.

  1. Crie um diretório para armazenar os arquivos de registro exportados:

    mkdir C:\HyperVLogs
    
  2. Exporte os logs de eventos do Hyper-V usando wevtutil:

    wevtutil epl Microsoft-Windows-Hyper-V-VMMS-Admin C:\HyperVLogs\hyperv-vmms-admin.evtx
    wevtutil epl Microsoft-Windows-Hyper-V-Worker-Admin C:\HyperVLogs\hyperv-worker-admin.evtx
    

    É possível exportar outros canais de eventos do Hyper-V conforme necessário. Os canais disponíveis incluem:

    • Microsoft-Windows-Hyper-V-VMMS-Admin (serviço de gerenciamento de máquina virtual)
    • Microsoft-Windows-Hyper-V-Worker-Admin (processos de worker da VM)
    • Microsoft-Windows-Hyper-V-Hypervisor-Admin (eventos do hipervisor)
    • Microsoft-Windows-Hyper-V-Config-Admin (eventos de configuração)
  3. (Opcional) Programe exportações regulares usando o PowerShell:

    $action = New-ScheduledTaskAction -Execute "cmd.exe" -Argument '/c wevtutil epl Microsoft-Windows-Hyper-V-VMMS-Admin C:\HyperVLogs\hyperv-vmms-admin.evtx /ow:true && wevtutil epl Microsoft-Windows-Hyper-V-Worker-Admin C:\HyperVLogs\hyperv-worker-admin.evtx /ow:true'
    $trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Hours 1) -Once -At (Get-Date)
    Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "ExportHyperVLogs" -Description "Export Hyper-V logs for Bindplane agent"
    
  4. Verifique se os arquivos de registro exportados estão sendo criados em "C:\HyperVLogs".

  5. Verifique se o caminho include do agente do Bindplane em config.yaml corresponde ao diretório de exportação.

Tabela de mapeamento de UDM

Campo de registro Mapeamento de UDM Lógica
channel, event_data.data, event_id.id, event_id.qualifiers, keywords, task, SeverityValue, OpcodeValue, EventID, ProviderGuid, ActivityId, Version, RecordNumber, ProcessID, ThreadID, Channel, AccountName, UserID, AccountType, Opcode, SourceModuleName, SourceModuleType additional.fields Mesclado com marcadores criados com base nestes campos
system_time, EventReceivedTime metadata.collected_timestamp Analisado de system_time com formatos ou de EventReceivedTime como UNIX ou UNIX_MS
Mensagem metadata.description Valor copiado diretamente
EventTime, EventReceivedTime metadata.event_timestamp Analisado de EventTime como UNIX ou UNIX_MS, ou de EventReceivedTime como UNIX ou UNIX_MS
metadata.event_type Defina como "PROCESS_LAUNCH" se has_principal e has_target_process, caso contrário, "USER_LOGIN" se has_principal e has_target e não has_target_process, caso contrário, "STATUS_UPDATE" se has_principal e não has_target, caso contrário, "USER_RESOURCE_ACCESS" se has_target, caso contrário, "GENERIC_EVENT"
provider.event_source metadata.product_event_type Valor copiado diretamente
record_id, RecordNumber metadata.product_log_id Convertido em string de record_id, se não estiver vazio, ou de RecordNumber, se não estiver vazio
provider.name, SourceName metadata.product_name Valor de provider.name se não estiver vazio, caso contrário, SourceName se não estiver vazio, caso contrário, "Microsoft-Windows-Hyper-V"
Versão metadata.product_version Convertido em string
mensagem network.session_duration.nanos Extraído da mensagem usando o padrão grok, convertido em número inteiro
Domínio principal.administrative_domain Valor copiado diretamente
computador principal.asset.hostname Valor copiado diretamente
computador, nome do host principal.hostname Valor do computador, se não estiver vazio, e do nome do host, se não estiver vazio
AccountName principal.user.role_description Valor copiado diretamente
AccountType principal.user.role_name Valor copiado diretamente
event_data.name principal.user.user_display_name Valor copiado diretamente
security.user_id, UserID principal.user.userid Valor de security.user_id se não estiver vazio, depois de UserID se não estiver vazio
mensagem security_result.description Extraído da mensagem usando o padrão grok
mensagem, ActivityId security_result.detection_fields Mesclado com o rótulo de nt_status extraído da mensagem usando grok e de ActivityId
nível, gravidade security_result.severity Definido com base no valor do nível (1-3 INFORMATIVO, 4 ERRO, 5 CRÍTICO, caso contrário, UNKNOWN_SEVERITY) ou com base na gravidade (INFO INFORMATIVO, WARN MÉDIO, ERROR ERRO)
EventType security_result.severity_details Valor copiado diretamente
execution.process_id, ProcessID target.process.pid Convertido em string de execution.process_id se não estiver vazio ou de ProcessID se não estiver vazio
execution.thread_id, ThreadID target.process.product_specific_process_id Defina como "ThreadID: " de execution.thread_id se não estiver vazio ou de ThreadID se não estiver vazio
provider.guid, ProviderGuid target.resource.id Valor de provider.guid após remover { } ou de ProviderGuid após remover { }
mensagem target.resource.product_object_id Extraído da mensagem usando o padrão grok
provider.guid target.resource.type Defina como "Hyper-V VmSwitch" se não estiver vazio

Registro de alterações

Confira o registro de alterações deste analisador

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