Coletar registros do PowerShell

Compatível com:

Este documento explica como coletar registros do PowerShell para o Google Security Operations usando o Bindplane. O analisador transforma registros brutos do Microsoft PowerShell em um modelo de dados unificado (UDM). Primeiro, ele extrai campos da mensagem de registro bruta, normaliza-os em campos da UDM e enriquece os dados com contexto adicional com base em IDs de eventos específicos, criando um evento estruturado da UDM para análise de segurança.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem o Windows 2016 ou uma versão mais recente.
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.

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 > Agentes de coleta.
  3. Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.

Receber o ID do 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 no 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
    

Outros recursos de instalação

Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps

  1. Antes de configurar o arquivo YAML, pare o Service observIQ Distro for Open Telemetry Collector no painel "Serviços".
  2. Acesse o arquivo de configuração:

    1. Localize o arquivo config.yaml. Normalmente, ele fica no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Bloco de Notas).
  3. Edite o arquivo config.yaml da seguinte forma:

    receivers:
      windowseventlog/powershell:
        channel: Microsoft-Windows-PowerShell/Operational
        max_reads: 100
        poll_interval: 5s
        raw: true
        start_at: end
    
    processors:
      batch:
    
    exporters:
      chronicle/powershell:
        endpoint: malachiteingestion-pa.googleapis.com
        # Adjust the path to the credentials file you downloaded in Step 1
        creds: '/path/to/ingestion-authentication-file.json'
        log_type: 'POWERSHELL'
        override_log_type: false
        raw_log_field: body
        customer_id: '<customer_id>'
    
    service:
      pipelines:
        logs/winpowershell:
          receivers:
            - windowseventlog/powershell
          processors: [batch]
          exporters: [chronicle/powershell] 
    
  4. Substitua <customer_id> pelo ID do cliente real.

  5. Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.

  6. Depois de salvar o arquivo config.yaml, inicie o Serviço observIQ Distro for Open Telemetry Collector.

Reinicie o agente do Bindplane para aplicar as mudanças

  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
AccountName principal.user.userid Mapeado diretamente do campo AccountName no registro bruto.
ActivityID security_result.detection_fields[0].value Mapeado diretamente do campo ActivityID no registro bruto. As chaves são removidas.
Canal Não mapeado para o objeto IDM.
collection_time.nanos Não mapeado para o objeto IDM.
collection_time.seconds Não mapeado para o objeto IDM.
Comando Não mapeado para o objeto IDM.
CommandLine Não mapeado para o objeto IDM.
Computador principal.hostname Mapeado diretamente do campo Computer no registro bruto, se presente.
ContextInfo Não mapeado para o objeto IDM.
ContextInfo_Command Name security_result.detection_fields[0].value Mapeado diretamente do campo ContextInfo_Command Name no registro bruto, se presente.
ContextInfo_Command Type security_result.detection_fields[1].value Mapeado diretamente do campo ContextInfo_Command Type no registro bruto, se presente.
ContextInfo_Host Application target.process.command_line Mapeado diretamente do campo ContextInfo_Host Application no registro bruto se powershell.Host Application não estiver presente.
ContextInfo_Host ID target.asset.asset_id Mapeado diretamente do campo ContextInfo_Host ID no registro bruto se powershell.Host ID não estiver presente. O valor tem o prefixo Host ID:.
ContextInfo_Host Name target.hostname Mapeado diretamente do campo ContextInfo_Host Name no registro bruto se powershell.Host Name não estiver presente.
ContextInfo_Script Name target.process.file.full_path Mapeado diretamente do campo ContextInfo_Script Name no registro bruto se script_name não estiver presente.
ContextInfo_Sequence Number security_result.detection_fields[2].value Mapeado diretamente do campo ContextInfo_Sequence Number no registro bruto, se presente. Convertido em uma string.
ContextInfo_Severity Não mapeado para o objeto IDM.
create_time.nanos Não mapeado para o objeto IDM.
create_time.seconds Não mapeado para o objeto IDM.
customer_id Não mapeado para o objeto IDM.
dados Não mapeado para o objeto IDM.
Dados security_result.detection_fields[0].value Mapeado diretamente do campo Data no registro bruto, se presente.
Data_1 security_result.detection_fields[1].value Mapeado diretamente do campo Data_1 no registro bruto, se presente.
Data_2 security_result.detection_fields[2].value Mapeado diretamente do campo Data_2 no registro bruto, se presente.
Domínio principal.administrative_domain Mapeado diretamente do campo Domain no registro bruto.
entries Não mapeado para o objeto IDM.
ERROR_EVT_UNRESOLVED Não mapeado para o objeto IDM.
EventCategory Não mapeado para o objeto IDM.
EventData Não mapeado para o objeto IDM.
EventID metadata.product_event_type, security_result.rule_name Mapeado diretamente do campo EventID no registro bruto. O valor tem o prefixo EventID: para o campo security_result.rule_name.
EventLevel Não mapeado para o objeto IDM.
EventLevelName security_result.severity Mapeado com base no valor de EventLevelName:
. Information é mapeado para INFORMATIONAL.
: Verbose é mapeado para LOW.
EventLog Não mapeado para o objeto IDM.
EventReceivedTime Não mapeado para o objeto IDM.
EventType Não mapeado para o objeto IDM.
EventTime metadata.event_timestamp Usado para extrair o carimbo de data/hora, se presente.
ExecutionProcessID principal.process.pid Mapeado diretamente do campo ExecutionProcessID no registro bruto, se presente e não vazio ou 0. Convertido em uma string.
ExecutionThreadID security_result.detection_fields[2].value Mapeado diretamente do campo ExecutionThreadID no registro bruto, se presente e não vazio ou 0. Convertido em uma string.
Arquivo target.process.file.full_path Mapeado diretamente do campo File no registro bruto, se presente.
Aplicativo host Não mapeado para o objeto IDM.
HostApplication Não mapeado para o objeto IDM.
Nome do host principal.hostname Mapeado diretamente do campo Hostname no registro bruto.
ID Não mapeado para o objeto IDM.
Palavras-chave Não mapeado para o objeto IDM.
log_type metadata.log_type Mapeado diretamente do campo log_type no registro bruto.
Máquina principal.asset.asset_id, principal.asset.platform_software.platform_version O campo Machine é analisado para extrair o ID da máquina e as informações da plataforma. O ID da máquina é prefixado com Machine ID:. A plataforma é mapeada para a enumeração da UDM com base no valor:
- win mapeia para WINDOWS.
: mac é mapeado para MAC.
: lin é mapeado para LINUX.
: outros valores são mapeados para UNKNOWN_PLATFORM.
ManagementGroupName additional.fields[0].value.string_value Mapeado diretamente do campo ManagementGroupName no registro bruto, se presente.
Message.EventTime metadata.event_timestamp Usado para extrair o carimbo de data/hora, se presente. Convertido em uma string.
Message.Message security_result.description Mapeado diretamente do campo Message.Message no registro bruto se EventID estiver em [403, 4103, 4104] e message_message_not_found. Retornos de carro e tabulações são substituídos por vírgulas.
Mensagem security_result.description Mapeado diretamente do campo Message no registro bruto, se presente.
MessageNumber Não mapeado para o objeto IDM.
MessageSourceAddress principal.ip Mapeado diretamente do campo MessageSourceAddress no registro bruto, se presente.
MessageTotal Não mapeado para o objeto IDM.
MG Não mapeado para o objeto IDM.
Opcode metadata.description Mapeado diretamente do campo Opcode no registro bruto.
OpcodeValue Não mapeado para o objeto IDM.
Saída security_result.detection_fields[0].value Mapeado diretamente do campo Output no registro bruto, se presente.
powershell.Command Name security_result.detection_fields[0].value Mapeado diretamente do campo powershell.Command Name, se presente.
powershell.Command Type security_result.detection_fields[1].value Mapeado diretamente do campo powershell.Command Type, se presente.
powershell.Host Application target.process.command_line Mapeado diretamente do campo powershell.Host Application no registro bruto, se presente.
powershell.Host ID target.asset.asset_id Mapeado diretamente do campo powershell.Host ID no registro bruto, se presente. O valor tem o prefixo Host ID:.
powershell.Host Name target.hostname Mapeado diretamente do campo powershell.Host Name no registro bruto, se presente.
powershell.HostApplication target.process.command_line Mapeado diretamente do campo powershell.HostApplication no registro bruto, se presente.
powershell.HostId target.asset.asset_id Mapeado diretamente do campo powershell.HostId no registro bruto, se presente. O valor tem o prefixo Host ID:.
powershell.HostName target.hostname Mapeado diretamente do campo powershell.HostName no registro bruto, se presente.
powershell.Script Name target.process.file.full_path Mapeado diretamente do campo powershell.Script Name no registro bruto, se presente.
powershell.ScriptName target.process.file.full_path Mapeado diretamente do campo powershell.ScriptName no registro bruto, se presente.
powershell.Sequence Number security_result.detection_fields[2].value Mapeado diretamente do campo powershell.Sequence Number no registro bruto, se presente.
powershell.SequenceNumber security_result.detection_fields[0].value Mapeado diretamente do campo powershell.SequenceNumber no registro bruto, se presente.
powershell.UserId principal.user.userid Mapeado diretamente do campo powershell.UserId no registro bruto, se presente.
ID do processo principal.process.pid Mapeado diretamente do campo Process ID no registro bruto se ExecutionProcessID e ProcessID não estiverem presentes, vazios ou forem 0. Convertido em uma string.
ProcessID principal.process.pid Mapeado diretamente do campo ProcessID no registro bruto se ExecutionProcessID não estiver presente, vazio ou for 0. Convertido em uma string.
ProviderGuid metadata.product_deployment_id Mapeado diretamente do campo ProviderGuid no registro bruto. As chaves são removidas.
PSEdition Não mapeado para o objeto IDM.
PSRemotingProtocolVersion Não mapeado para o objeto IDM.
PSVersion Não mapeado para o objeto IDM.
RecordNumber metadata.product_log_id Mapeado diretamente do campo RecordNumber no registro bruto. Convertido em uma string.
RenderedDescription security_result.description Mapeado diretamente do campo RenderedDescription no registro bruto, se presente.
Usuário RunAs Não mapeado para o objeto IDM.
ScriptBlockId Não mapeado para o objeto IDM.
ScriptBlockText security_result.detection_fields[0].value Mapeado diretamente do campo ScriptBlockText no registro bruto, se presente.
ID do ScriptBlock Não mapeado para o objeto IDM.
Gravidade security_result.severity, security_result.severity_details Mapeado com base no valor de Severity:
- verbose ou info mapeia para LOW.
- warn ou err é mapeado para MEDIUM.
: crit é mapeado para HIGH.
O valor bruto também é mapeado para security_result.severity_details.
source.collector_id Não mapeado para o objeto IDM.
source.customer_id Não mapeado para o objeto IDM.
Origem additional.fields[1].value.string_value Mapeado diretamente do campo Source no registro bruto, se presente.
SourceModuleName principal.resource.name Mapeado diretamente do campo SourceModuleName no registro bruto.
SourceModuleType principal.resource.resource_subtype Mapeado diretamente do campo SourceModuleType no registro bruto.
SourceName metadata.product_name Mapeado diretamente do campo SourceName no registro bruto.
start_time.nanos Não mapeado para o objeto IDM.
start_time.seconds Não mapeado para o objeto IDM.
TenantId additional.fields[2].value.string_value Mapeado diretamente do campo TenantId no registro bruto, se presente.
ThreadID Não mapeado para o objeto IDM.
timestamp.nanos Não mapeado para o objeto IDM.
timestamp.seconds Não mapeado para o objeto IDM.
tipo Não mapeado para o objeto IDM.
UserID principal.user.windows_sid Mapeado diretamente do campo UserID no registro bruto.
Nome de usuário principal.user.userid Mapeado diretamente do campo Username no registro bruto se AccountName não estiver presente.
metadata.vendor_name Defina como Microsoft.
metadata.event_type Defina como PROCESS_LAUNCH se EventID for 4104 e _Path estiver presente em Message, ou se EventID for 4103, ou se EventID estiver em [800, 600, 400] e powershell.ScriptName e powershell.HostApplication estiverem presentes. Defina como PROCESS_TERMINATION se EventID for 403 e _HostApplication estiver presente em Message, ou se EventID for 403 e NewEngineState for Stopped. Defina como STATUS_UPDATE se EventID for 4104 e _Path não estiver presente em Message, ou se EventID for 4103 e no_value, script_name estiver vazio, script_name_not_found e host_application_not_found forem todos verdadeiros, ou se EventID for 53504, ou se EventID for 40962, ou se EventID for 40961, ou se EventID estiver vazio e MessageSourceAddress estiver presente. Defina como USER_UNCATEGORIZED se EventID estiver vazio e Username estiver presente. Definido como GENERIC_EVENT se EventID estiver vazio e MessageSourceAddress e Username não estiverem presentes.
metadata.product_name Defina como Powershell se SourceName não estiver presente.
security_result.action Defina como ALLOW.
security_result.detection_fields[0].key Defina como Activity ID.
security_result.detection_fields[1].key Defina como Sequence Number.
security_result.detection_fields[2].key Defina como ExecutionThreadID.
additional.fields[0].key Defina como Management Group Name.
additional.fields[1].key Defina como Source.
additional.fields[2].key Defina como TenantId.
principal.asset.platform_software.platform Defina como WINDOWS se platform_software contiver win, MAC se contiver mac, LINUX se contiver lin e UNKNOWN_PLATFORM caso contrário.
target.process.file.full_path Defina como _Path se EventID for 4104 e _Path estiver presente em Message. Defina como file_path se EventID for 4104 e file_path estiver presente em Message. Defina como _HostApplication se EventID for 403 e _HostApplication estiver presente em Message.

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