Recolha registos do PowerShell

Compatível com:

Este documento explica como recolher registos do PowerShell para o Google Security Operations através do Bindplane. O analisador transforma os registos não processados do Microsoft PowerShell num modelo de dados unificado (UDM). Primeiro, extrai campos da mensagem de registo não processada, normaliza-os em campos UDM e, em seguida, enriquece os dados com contexto adicional com base em IDs de eventos específicos, criando, em última análise, um evento UDM estruturado para análise de segurança.

Antes de começar

  • Certifique-se de que tem uma instância do Google SecOps.
  • Certifique-se de que tem o Windows 2016 ou posterior.
  • Se estiver a executar o serviço através de um proxy, certifique-se de que as portas da firewall estão abertas.

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane no Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Recursos de instalação adicionais

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. Antes de configurar o ficheiro YAML, pare o observIQ Distro for Open Telemetry Collector serviço no painel de serviços.
  2. Aceda ao ficheiro de configuração:

    1. Localize o ficheiro config.yaml. Normalmente, encontra-se no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. Abra o ficheiro com um editor de texto (por exemplo, nano, vi ou Bloco de notas).
  3. Edite o ficheiro 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 de cliente real.

  5. Atualize /path/to/ingestion-authentication-file.json para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.

  6. Depois de guardar o ficheiro config.yaml, inicie o observIQ Distro for Open Telemetry Collector serviço.

Reinicie o agente do Bindplane para aplicar as alterações

  • Para reiniciar o agente do Bindplane no Windows, pode usar a consola Services ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
AccountName principal.user.userid Mapeado diretamente a partir do campo AccountName no registo não processado.
ActivityID security_result.detection_fields[0].value Mapeado diretamente a partir do campo ActivityID no registo não processado. As chavetas são removidas.
Canal Não está mapeado para o objeto IDM.
collection_time.nanos Não está mapeado para o objeto IDM.
collection_time.seconds Não está mapeado para o objeto IDM.
Comando Não está mapeado para o objeto IDM.
CommandLine Não está mapeado para o objeto IDM.
Computador principal.hostname Mapeado diretamente a partir do campo Computer no registo não processado, se estiver presente.
ContextInfo Não está mapeado para o objeto IDM.
ContextInfo_Command Name security_result.detection_fields[0].value Mapeado diretamente a partir do campo ContextInfo_Command Name no registo não processado, se estiver presente.
ContextInfo_Command Type security_result.detection_fields[1].value Mapeado diretamente a partir do campo ContextInfo_Command Type no registo não processado, se estiver presente.
ContextInfo_Host Application target.process.command_line Mapeado diretamente a partir do campo ContextInfo_Host Application no registo não processado se powershell.Host Application não estiver presente.
ContextInfo_Host ID target.asset.asset_id Mapeado diretamente a partir do campo ContextInfo_Host ID no registo não processado se powershell.Host ID não estiver presente. O valor tem o prefixo Host ID:.
ContextInfo_Host Name target.hostname Mapeado diretamente a partir do campo ContextInfo_Host Name no registo não processado se powershell.Host Name não estiver presente.
ContextInfo_Script Name target.process.file.full_path Mapeado diretamente a partir do campo ContextInfo_Script Name no registo não processado se script_name não estiver presente.
ContextInfo_Sequence Number security_result.detection_fields[2].value Mapeado diretamente a partir do campo ContextInfo_Sequence Number no registo não processado, se estiver presente. Convertido numa string.
ContextInfo_Severity Não está mapeado para o objeto IDM.
create_time.nanos Não está mapeado para o objeto IDM.
create_time.seconds Não está mapeado para o objeto IDM.
customer_id Não está mapeado para o objeto IDM.
dados Não está mapeado para o objeto IDM.
Dados security_result.detection_fields[0].value Mapeado diretamente a partir do campo Data no registo não processado, se estiver presente.
Data_1 security_result.detection_fields[1].value Mapeado diretamente a partir do campo Data_1 no registo não processado, se estiver presente.
Data_2 security_result.detection_fields[2].value Mapeado diretamente a partir do campo Data_2 no registo não processado, se estiver presente.
Domínio principal.administrative_domain Mapeado diretamente a partir do campo Domain no registo não processado.
entradas Não está mapeado para o objeto IDM.
ERROR_EVT_UNRESOLVED Não está mapeado para o objeto IDM.
EventCategory Não está mapeado para o objeto IDM.
EventData Não está mapeado para o objeto IDM.
EventID metadata.product_event_type, security_result.rule_name Mapeado diretamente a partir do campo EventID no registo não processado. O valor tem o prefixo EventID: para o campo security_result.rule_name.
EventLevel Não está mapeado para o objeto IDM.
EventLevelName security_result.severity Mapeado com base no valor de EventLevelName:
. Information é mapeado para INFORMATIONAL.
- Verbose mapeia para LOW.
EventLog Não está mapeado para o objeto IDM.
EventReceivedTime Não está mapeado para o objeto IDM.
EventType Não está mapeado para o objeto IDM.
EventTime metadata.event_timestamp Usado para extrair a data/hora, se estiver presente.
ExecutionProcessID principal.process.pid Mapeado diretamente a partir do campo ExecutionProcessID no registo não processado, se estiver presente e não estiver vazio ou for 0. Convertido numa string.
ExecutionThreadID security_result.detection_fields[2].value Mapeado diretamente a partir do campo ExecutionThreadID no registo não processado, se estiver presente e não estiver vazio ou for 0. Convertido numa string.
Ficheiro target.process.file.full_path Mapeado diretamente a partir do campo File no registo não processado, se estiver presente.
Aplicação anfitriã Não está mapeado para o objeto IDM.
HostApplication Não está mapeado para o objeto IDM.
Nome do anfitrião principal.hostname Mapeado diretamente a partir do campo Hostname no registo não processado.
id Não está mapeado para o objeto IDM.
Keywords Não está mapeado para o objeto IDM.
log_type metadata.log_type Mapeado diretamente a partir do campo log_type no registo não processado.
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 do computador tem o prefixo Machine ID:. A plataforma está mapeada para a enumeração UDM com base no valor:
. win é mapeado para WINDOWS.
- mac mapeia para MAC.
- lin mapeia para LINUX.
– Outros valores são mapeados para UNKNOWN_PLATFORM.
ManagementGroupName additional.fields[0].value.string_value Mapeado diretamente a partir do campo ManagementGroupName no registo não processado, se estiver presente.
Message.EventTime metadata.event_timestamp Usado para extrair a data/hora, se estiver presente. Convertido numa string.
Message.Message security_result.description Mapeado diretamente a partir do campo Message.Message no registo não processado se EventID estiver em [403, 4103, 4104] e message_message_not_found. As mudanças de linha e as tabulações são substituídas por vírgulas.
Mensagem security_result.description Mapeado diretamente a partir do campo Message no registo não processado, se estiver presente.
MessageNumber Não está mapeado para o objeto IDM.
MessageSourceAddress principal.ip Mapeado diretamente a partir do campo MessageSourceAddress no registo não processado, se estiver presente.
MessageTotal Não está mapeado para o objeto IDM.
MG Não está mapeado para o objeto IDM.
Código de operação metadata.description Mapeado diretamente a partir do campo Opcode no registo não processado.
OpcodeValue Não está mapeado para o objeto IDM.
Resultado security_result.detection_fields[0].value Mapeado diretamente a partir do campo Output no registo não processado, se estiver presente.
powershell.Command Name security_result.detection_fields[0].value Mapeado diretamente a partir do campo powershell.Command Name, se estiver presente.
powershell.Command Type security_result.detection_fields[1].value Mapeado diretamente a partir do campo powershell.Command Type, se estiver presente.
powershell.Host Application target.process.command_line Mapeado diretamente a partir do campo powershell.Host Application no registo não processado, se estiver presente.
powershell.Host ID target.asset.asset_id Mapeado diretamente a partir do campo powershell.Host ID no registo não processado, se estiver presente. O valor tem o prefixo Host ID:.
powershell.Host Name target.hostname Mapeado diretamente a partir do campo powershell.Host Name no registo não processado, se estiver presente.
powershell.HostApplication target.process.command_line Mapeado diretamente a partir do campo powershell.HostApplication no registo não processado, se estiver presente.
powershell.HostId target.asset.asset_id Mapeado diretamente a partir do campo powershell.HostId no registo não processado, se estiver presente. O valor tem o prefixo Host ID:.
powershell.HostName target.hostname Mapeado diretamente a partir do campo powershell.HostName no registo não processado, se estiver presente.
powershell.Script Name target.process.file.full_path Mapeado diretamente a partir do campo powershell.Script Name no registo não processado, se estiver presente.
powershell.ScriptName target.process.file.full_path Mapeado diretamente a partir do campo powershell.ScriptName no registo não processado, se estiver presente.
powershell.Sequence Number security_result.detection_fields[2].value Mapeado diretamente a partir do campo powershell.Sequence Number no registo não processado, se estiver presente.
powershell.SequenceNumber security_result.detection_fields[0].value Mapeado diretamente a partir do campo powershell.SequenceNumber no registo não processado, se estiver presente.
powershell.UserId principal.user.userid Mapeado diretamente a partir do campo powershell.UserId no registo não processado, se estiver presente.
ID do processo principal.process.pid Mapeado diretamente a partir do campo Process ID no registo não processado se ExecutionProcessID e ProcessID não estiverem presentes, estiverem vazios ou forem 0. Convertido numa string.
ProcessID principal.process.pid Mapeado diretamente a partir do campo ProcessID no registo não processado se ExecutionProcessID não estiver presente, estiver vazio ou for 0. Convertido numa string.
ProviderGuid metadata.product_deployment_id Mapeado diretamente a partir do campo ProviderGuid no registo não processado. As chavetas são removidas.
PSEdition Não está mapeado para o objeto IDM.
PSRemotingProtocolVersion Não está mapeado para o objeto IDM.
PSVersion Não está mapeado para o objeto IDM.
RecordNumber metadata.product_log_id Mapeado diretamente a partir do campo RecordNumber no registo não processado. Convertido numa string.
RenderedDescription security_result.description Mapeado diretamente a partir do campo RenderedDescription no registo não processado, se estiver presente.
Utilizador RunAs Não está mapeado para o objeto IDM.
ScriptBlockId Não está mapeado para o objeto IDM.
ScriptBlockText security_result.detection_fields[0].value Mapeado diretamente a partir do campo ScriptBlockText no registo não processado, se estiver presente.
ID do ScriptBlock Não está mapeado para o objeto IDM.
Gravidade security_result.severity, security_result.severity_details Mapeado com base no valor de Severity:
. verbose ou info é mapeado para LOW.
- warn ou err é mapeado para MEDIUM.
- crit mapeia para HIGH.
O valor bruto também está mapeado para security_result.severity_details.
source.collector_id Não está mapeado para o objeto IDM.
source.customer_id Não está mapeado para o objeto IDM.
Origem additional.fields[1].value.string_value Mapeado diretamente a partir do campo Source no registo não processado, se estiver presente.
SourceModuleName principal.resource.name Mapeado diretamente a partir do campo SourceModuleName no registo não processado.
SourceModuleType principal.resource.resource_subtype Mapeado diretamente a partir do campo SourceModuleType no registo não processado.
SourceName metadata.product_name Mapeado diretamente a partir do campo SourceName no registo não processado.
start_time.nanos Não está mapeado para o objeto IDM.
start_time.seconds Não está mapeado para o objeto IDM.
TenantId additional.fields[2].value.string_value Mapeado diretamente a partir do campo TenantId no registo não processado, se estiver presente.
ThreadID Não está mapeado para o objeto IDM.
timestamp.nanos Não está mapeado para o objeto IDM.
timestamp.seconds Não está mapeado para o objeto IDM.
escrever Não está mapeado para o objeto IDM.
UserID principal.user.windows_sid Mapeado diretamente a partir do campo UserID no registo não processado.
Nome de utilizador principal.user.userid Mapeado diretamente a partir do campo Username no registo não processado se AccountName não estiver presente.
metadata.vendor_name Definido como Microsoft.
metadata.event_type Definido 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. Definido como PROCESS_TERMINATION se EventID for 403 e _HostApplication estiver presente em Message, ou se EventID for 403 e NewEngineState for Stopped. Definido 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. Definido 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 Definido como Powershell se SourceName não estiver presente.
security_result.action Definido como ALLOW.
security_result.detection_fields[0].key Definido como Activity ID.
security_result.detection_fields[1].key Definido como Sequence Number.
security_result.detection_fields[2].key Definido como ExecutionThreadID.
additional.fields[0].key Definido como Management Group Name.
additional.fields[1].key Definido como Source.
additional.fields[2].key Definido como TenantId.
principal.asset.platform_software.platform Definido 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 Definido como _Path se EventID for 4104 e _Path estiver presente em Message. Definido como file_path se EventID for 4104 e file_path estiver presente em Message. Definido como _HostApplication se EventID for 403 e _HostApplication estiver presente em Message.

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