Coletar registros do Microsoft PowerShell

Compatível com:

Este documento explica como ingerir registros do Microsoft PowerShell no Google Security Operations usando o agente Bindplane.

O Microsoft PowerShell é uma estrutura de gerenciamento de configuração e automação de tarefas da Microsoft, composta por um shell de linha de comando e uma linguagem de script. Os registros do PowerShell capturam a execução de scripts, a atividade de módulos e as invocações de comandos, oferecendo visibilidade das operações do PowerShell para monitoramento de segurança e análise forense.

Antes de começar

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

  • Instância do Google SecOps
  • Windows Server 2016 ou mais recente
  • Conectividade de rede entre o host do Windows e o Google SecOps
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente Bindplane.
  • Acesso administrativo ao host do Windows para configurar o registro em log do PowerShell e instalar o agente do Bindplane

Configurar a geração de registros do PowerShell

A geração de registros do PowerShell precisa ser ativada em hosts Windows antes da coleta de registros. Por padrão, o registro em log do PowerShell é mínimo. Ative o registro em bloco de scripts para capturar atividades detalhadas do PowerShell.

Ativar o registro de bloqueio de script usando a política de grupo

  1. Abra o Editor de Política de Grupo Local executando gpedit.msc como administrador.
  2. Acesse Configuração do computador > Modelos administrativos > Componentes do Windows > Windows PowerShell.
  3. Clique duas vezes em Ativar o registro em log de blocos de script do PowerShell.
  4. Selecione Ativado.
  5. Se quiser, marque Registrar eventos de início / fim de invocação de bloco de script para capturar eventos de início e fim de cada bloco de script. Essa opção gera um grande volume de registros.
  6. Clique em OK.
  7. Abra o Prompt de comando como administrador e execute gpupdate /force para aplicar a política imediatamente.

Ativar o registro de bloqueio de script usando o registro

Como alternativa, é possível ativar o registro de bloqueio de script definindo o seguinte valor de registro:

  1. Abra o Editor do Registro executando regedit como administrador.
  2. Acesse HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging.
  3. Se a chave não existir, crie-a.
  4. Crie um Valor DWORD (32 bits) chamado EnableScriptBlockLogging e defina o valor como 1.
  5. Reinicie as sessões do PowerShell para que a mudança entre em vigor.

O registro em bloco de scripts do PowerShell grava eventos no canal de log de eventos Microsoft-Windows-PowerShell/Operational com a ID do evento 4104.

Opcional: ativar a geração de registros de módulos

O Module Logging registra detalhes da execução do pipeline para módulos especificados. Para ativar o registro de módulos em todos os módulos, faça o seguinte:

  1. No Editor de Política de Grupo Local, acesse Configuração do Computador > Modelos Administrativos > Componentes do Windows > Windows PowerShell.
  2. Clique duas vezes em Ativar o registro de módulos.
  3. Selecione Ativado.
  4. Clique em Mostrar ao lado de Nomes dos módulos.
  5. Insira * para registrar todos os módulos.
  6. Clique em OK na janela Nomes de módulos.
  7. Clique em OK na janela Registro do módulo.
  8. Execute gpupdate /force para aplicar a política.

Os eventos de registro do módulo são gravados no log de eventos do Windows PowerShell com o ID do evento 4103.

Opcional: ativar a transcrição

A transcrição cria um registro baseado em texto de todas as entradas e saídas da sessão do PowerShell. Para ativar a transcrição, faça o seguinte:

  1. No Editor de Política de Grupo Local, acesse Configuração do Computador > Modelos Administrativos > Componentes do Windows > Windows PowerShell.
  2. Clique duas vezes em Ativar a transcrição do PowerShell.
  3. Selecione Ativado.
  4. Opcionalmente, especifique um diretório de saída da transcrição. Se ficar em branco, as transcrições serão salvas na pasta "Documentos" de cada usuário.
  5. Marque Incluir cabeçalhos de invocação para incluir carimbos de data/hora e metadados.
  6. Clique em OK.
  7. Execute gpupdate /force para aplicar a política.

As transcrições são gravadas em arquivos de texto com nomes que começam com PowerShell_transcript.

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agente de coleta.
  3. Clique em Fazer o download para baixar o arquivo de autenticação de ingestão.
  4. Salve o arquivo com segurança no host do Windows 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 do cliente na seção Detalhes da organização.

Instalar o agente do BindPlane

Instale o agente do Bindplane no host do 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 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 coletar registros do PowerShell

Localizar o arquivo de configuração do Windows

  • Localize o arquivo de configuração do Windows da seguinte maneira:

    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:
      windowseventlog/powershell:
        channel: Microsoft-Windows-PowerShell/Operational
        max_reads: 100
        poll_interval: 5s
        raw: true
        start_at: end
    
    processors:
      batch:
    
    exporters:
      chronicle/powershell:
        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: 'POWERSHELL'
        raw_log_field: body
        override_log_type: false
    
    service:
      pipelines:
        logs/powershell:
          receivers:
            - windowseventlog/powershell
          processors:
            - batch
          exporters:
            - chronicle/powershell
    

Parâmetros de configuração

Substitua os seguintes marcadores de posição:

  • Configuração do receptor:

    • channel: o canal de registro de eventos do Windows a ser coletado. Para o registro em bloco de script do PowerShell, use Microsoft-Windows-PowerShell/Operational. Para o registro de módulos, use Windows PowerShell.
    • raw: defina como true para enviar XML bruto do log de eventos do Windows para o Google SecOps.
    • start_at: defina como end para coletar apenas novos eventos depois que o agente for iniciado. Defina como beginning para coletar todos os eventos atuais.
  • Configuração do exportador:

    • <CUSTOMER_ID>: substitua pelo ID do cliente da etapa anterior.
    • creds_file_path: caminho completo para o arquivo de autenticação de ingestão. Copie o arquivo de autenticação baixado para esse local.
    • endpoint: URL do endpoint regional. Use o endpoint da sua região do Google SecOps:

      • EUA: malachiteingestion-pa.googleapis.com
      • Europa: europe-malachiteingestion-pa.googleapis.com
      • Ásia: asia-southeast1-malachiteingestion-pa.googleapis.com
      • Consulte a lista completa em Endpoints regionais.
    • log_type: defina como POWERSHELL para usar o analisador do PowerShell.

Salve o arquivo de configuração.

Depois de editar, salve o arquivo clicando em Arquivo > Salvar.

Reinicie o agente do Bindplane para aplicar as mudanças

Windows

  • Usando o prompt de comando ou o PowerShell como administrador:

    net stop observiq-otel-collector && net start observiq-otel-collector
    
  • Ou usando o 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.
    4. Verifique se o serviço está em execução:

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

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

Verificar a ingestão de registros

Depois de configurar o agente do Bindplane e reiniciar o serviço, os registros do PowerShell vão começar a fluir para o Google SecOps.

  1. Faça login no console do Google SecOps.
  2. Acesse Investigar > Pesquisar.
  3. Execute a seguinte pesquisa para verificar se os registros do PowerShell estão sendo ingeridos:

    metadata.log_type = "POWERSHELL"
    
  4. Verifique se os eventos aparecem com carimbos de data/hora recentes.

Os eventos de registro em bloco de script do PowerShell (ID do evento 4104) vão aparecer com detalhes dos blocos de script executados, incluindo o conteúdo do script, o ID do bloco de script e o contexto de execução.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
HostId principal.resource.product_object_id Identificador exclusivo do objeto de produto associado ao recurso principal.
System.Version metadata.product_version Versão do produto que gerou o evento
System.EventId, EventID, winlog.event_id metadata.product_event_type Tipo de evento conforme definido pelo produto
Computer, System.Computer, computer, winlog.computer_name principal.hostname Nome do host da entidade principal
Computer, System.Computer, computer, winlog.computer_name principal.asset.hostname Nome do host do recurso associado ao principal
System.EventRecordID, RecordNumber, winlog.record_id metadata.product_log_id Identificador exclusivo da entrada de registro no sistema de geração de registros do produto.
System.Opcode, opcode, winlog.opcode metadata.description Descrição do evento ou contexto adicional
ProviderGuid, winlog.provider_guid metadata.product_deployment_id Identificador exclusivo da implantação do produto.
System.ProcessID, ProcessID, ExecutionProcessID, execution.process_id, winlog.process.pid principal.process.pid ID do processo principal
SourceModuleName principal.resource.name Nome do recurso associado ao principal
SourceModuleType principal.resource.resource_subtype Subtipo do recurso associado ao principal
security.user_id, UserID, winlog.user.identifier principal.user.windows_sid Identificador de segurança (SID) do Windows para o usuário principal
metadata.event_type Tipo de evento (por exemplo, USER_LOGIN, NETWORK_CONNECTION)
SourceName, winlog.provider_name metadata.product_name Nome do produto que gerou o evento
AccountName, Username, UserName, winlog.user.name principal.user.userid ID do usuário principal
Domínio, winlog.user.domain principal.administrative_domain Domínio administrativo do principal
Path, target_file, ScriptName, script_name, ContextInfo_Script Name, file_path target.process.file.full_path Caminho completo para o arquivo associado ao processo de destino.
HostName, powershell.Host Name, ContextInfo_Host Name target.hostname Nome do host da entidade de destino
HostName, powershell.Host Name, ContextInfo_Host Name target.asset.hostname Nome do host do recurso associado ao destino
Host ID, HostID, ContextInfo_Host ID target.asset.asset_id Identificador exclusivo do recurso de destino
Nombre_de_comando, ContextInfo_Command Name, CommandName target.application Nome do aplicativo associado ao destino
HostApplication, ContextInfo_Host Application target.process.command_line Linha de comando usada para iniciar o processo de destino
ScriptBlockText target.process.command_line Linha de comando usada para iniciar o processo de destino
MessageSourceAddress principal.ip Endereço IP do principal
MessageSourceAddress principal.asset.ip Endereço IP do recurso associado ao principal
Nombre_de_host principal.application Nome do aplicativo associado ao principal
Version_de_host principal.platform_version Versão da plataforma associada ao principal.
Id_de_host principal.resource.id Identificador exclusivo do recurso principal
Application_host principal.process.file.full_path Caminho completo para o arquivo associado ao processo principal.
HostApplication principal.process.command_line Linha de comando usada para iniciar o processo principal
Usuario, admin_domain principal.user.userid ID do usuário principal
Usuario, admin_domain principal.administrative_domain Domínio administrativo do principal
CommandLine principal.process.command_line Linha de comando usada para iniciar o processo principal
Machine, machine_id principal.asset.asset_id Identificador exclusivo do recurso principal.
Machine, platform_software principal.asset.platform_software.platform Tipo de plataforma do recurso (por exemplo, WINDOWS, LINUX)
Machine, platform_software principal.asset.platform_software.platform_version Versão do software da plataforma no recurso
MessageSourceAddress intermediary.ip Endereço IP da entidade intermediária
MessageSourceAddress, Hostname intermediary.hostname Nome do host da entidade intermediária
MessageSourceAddress, Hostname intermediary.asset.hostname Nome do host do recurso associado ao intermediário.
MessageSourceAddress intermediary.port Número da porta usada pelo intermediário
HostApplication target.process.command_line Linha de comando usada para iniciar o processo de destino
HostId target.asset.asset_id Identificador exclusivo do recurso de destino
SequenceNumber, ContextInfo_Sequence Number, Sequence Number security_result.detection_fields Pares de chave-valor de informações de detecção adicionais
ProviderName principal.resource.attribute.labels Rótulos ou atributos associados ao recurso principal
NewEngineState additional.fields Outros campos personalizados não cobertos pelo esquema UDM padrão
PreviousEngineState additional.fields Outros campos personalizados não cobertos pelo esquema UDM padrão
ScriptName additional.fields Outros campos personalizados não cobertos pelo esquema UDM padrão
ManagementGroupName additional.fields Outros campos personalizados não cobertos pelo esquema UDM padrão
Origem additional.fields Outros campos personalizados não cobertos pelo esquema UDM padrão
RenderedDescription security_result.description Descrição do resultado de segurança ou da ação realizada
TenantId additional.fields Outros campos personalizados não cobertos pelo esquema UDM padrão
Nome de usuário principal.user.userid ID do usuário principal
ActivityID security_result.detection_fields Pares de chave-valor de informações de detecção adicionais
ExecutionThreadID, execution.thread_id, winlog.process.thread.id security_result.detection_fields Pares de chave-valor de informações de detecção adicionais
Saída security_result.detection_fields Pares de chave-valor de informações de detecção adicionais
Dados security_result.detection_fields Pares de chave-valor de informações de detecção adicionais
Data_1 additional.fields Outros campos personalizados não cobertos pelo esquema UDM padrão
data_1 security_result.detection_fields Pares de chave-valor de informações de detecção adicionais
Data_2 security_result.detection_fields Pares de chave-valor de informações de detecção adicionais
winlog.activity_id security_result.detection_fields Pares de chave-valor de informações de detecção adicionais
winlog.api additional.fields Outros campos personalizados não cobertos pelo esquema UDM padrão
winlog.channel principal.resource.attribute.labels Rótulos ou atributos associados ao recurso principal
Deslocamento additional.fields Outros campos personalizados não cobertos pelo esquema UDM padrão
SeverityValue security_result.detection_fields Pares de chave-valor de informações de detecção adicionais
intermediário intermediário Detalhes sobre entidades intermediárias envolvidas no evento
security_result security_result Resultado geral de segurança, incluindo ações, gravidades e detecções
metadata.vendor_name Nome do fornecedor que produziu o evento.
SourceName metadata.product_name Nome do produto que gerou o evento

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