Coletar registros do Windows Hyper-V

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 registros de eventos de ciclo de vida, rede, armazenamento e segurança de VMs. O agente do Bindplane coleta arquivos de registro 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 sendo executado 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 descontinuada em 20 de julho de 2027.
  1. Faça login no Google Cloud console e selecione o Google Cloud projeto 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: digite 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 criada e acesse a guia Chaves.
  9. Selecione Adicionar chave > Criar nova chave.
  10. Selecione JSON e clique em Criar. O arquivo de chave é baixado para o 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 salva.
  12. Acesse IAM e administrador > Configurações e copie o Número do projeto. Você vai precisar dele para a configuração do exportador.

Opção 2: baixar o arquivo de autenticação de ingestão (legado)

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Baixe o 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 do SIEM > 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 vai aparecer como EM EXECUÇÃO.

Outros recursos de instalação

Para outras 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 enviar ao Google SecOps

Localizar 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 isso para o local em que você exporta os registros 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 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 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 Ingestion 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
    

Salvar o arquivo de configuração

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

Reiniciar 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 observIQ OpenTelemetry.
      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 Windows Hyper-V são armazenados como entradas do registro de eventos do Windows. Você precisa 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áquinas virtuais)
    • Microsoft-Windows-Hyper-V-Worker-Admin (processos de trabalho 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 rótulos criados com base nesses 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 Definido 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, caso contrário, 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, caso contrário, 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 a 3 INFORMATIONAL, 4 ERROR, 5 CRITICAL, caso contrário, UNKNOWN_SEVERITY) ou com base na gravidade (INFO INFORMATIONAL, WARN MEDIUM, ERROR ERROR)
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 Definido 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 Definido como "Hyper-V VmSwitch" se não estiver vazio

Registro de alterações

Consulte o registro de alterações desse analisador

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