Coletar registros do BeyondTrust Secure Remote Access

Compatível com:

Este documento explica como coletar registros do BeyondTrust Secure Remote Access usando o Bindplane. O analisador processa dois formatos de syslog. O primeiro formato usa pares de chave-valor em uma mensagem estruturada, enquanto o segundo usa campos delimitados por pipe. O analisador extrai campos relevantes dos dois formatos e os mapeia para a UDM. Ele também realiza a categorização de tipos de eventos com base em palavras-chave extraídas e processa a lógica específica para eventos de login/logout e tipos de autenticação.

Antes de começar

  • Verifique se você tem uma instância do Google Security Operations.
  • Use o Windows 2016 ou uma versão mais recente ou um host Linux com systemd.
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
  • Verifique se você tem acesso privilegiado a um acesso remoto seguro da BeyondTrust.

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

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
    

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Outros recursos de instalação

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

  1. 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).
  2. Edite o arquivo config.yaml da seguinte forma:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: BEYONDTRUST_REMOTE_ACCESS
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  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.

Reinicie o agente do Bindplane para aplicar as mudanças

  • Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurar o suporte remoto do BeyondTrust

  1. Faça login na UI da Web do BeyondTrust (em inglês).
  2. Selecione Appliance > Segurança > Administração do appliance.
  3. Na seção Syslog, faça o seguinte:
    • Formato da mensagem: selecione Formato BSD legado.
    • Servidor syslog remoto: insira o endereço IP e a porta do Bindplane.
  4. Clique em Enviar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
datetime metadata.event_timestamp O carimbo de data/hora é analisado do campo datetime usando o formato RFC3 339 se o campo when não estiver presente.
deviceHost target.hostname O valor de deviceHost é mapeado diretamente para target.hostname.
dstHost target.ip O valor de dstHost é mapeado diretamente para target.ip depois de ser validado como um endereço IP válido.
dstPriv additional.fields.[key=dstPriv].value.string_value O valor de dstPriv é colocado no campo additional com a chave dstPriv.
dstUid target.user.userid O valor de dstUid é mapeado diretamente para target.user.userid.
dstUser target.user.user_display_name O valor de dstUser é mapeado diretamente para target.user.user_display_name.
eventName metadata.event_type Se eventName for login (sem diferenciar maiúsculas de minúsculas), metadata.event_type será definido como USER_LOGIN. Se eventName for logout (sem diferenciar maiúsculas de minúsculas), metadata.event_type será definido como USER_LOGOUT. Caso contrário, se eventName não estiver vazio, metadata.event_type será definido como USER_UNCATEGORIZED. Se eventName estiver vazio e a mensagem corresponder ao segundo padrão grok, metadata.event_type será definido como GENERIC_EVENT. Se eventName estiver vazio e a mensagem corresponder ao primeiro padrão grok, metadata.event_type será definido como GENERIC_EVENT. Se srcUid, userid ou who não estiverem vazios, metadata.event_type será definido como USER_CHANGE_PERMISSIONS. Se deviceHost ou site não estiverem vazios, metadata.event_type será definido como USER_UNCATEGORIZED. Caso contrário, metadata.event_type será definido como GENERIC_EVENT.
event_name additional.fields.[key=event_name].value.string_value O valor de event_name é colocado no campo additional com a chave event_name.
event_name metadata.product_event_type O valor de event_name é usado com o campo id para preencher metadata.product_event_type no formato [id] -event_name``.
externalKeyLabel additional.fields.[key=externalKeyLabel].value.string_value O valor de externalKeyLabel é colocado no campo additional com a chave externalKeyLabel.
id metadata.product_event_type O valor de id é usado com o campo event_name para preencher metadata.product_event_type no formato [id] -event_name``.
jumpGroupId additional.fields.[key=jumpGroupId].value.string_value O valor de jumpGroupId é colocado no campo additional com a chave jumpGroupId.
jumpGroupName additional.fields.[key=jumpGroupName].value.string_value O valor de jumpGroupName é colocado no campo additional com a chave jumpGroupName.
jumpGroupType additional.fields.[key=jumpGroupType].value.string_value O valor de jumpGroupType é colocado no campo additional com a chave jumpGroupType.
jumpointId additional.fields.[key=jumpointId].value.string_value O valor de jumpointId é colocado no campo additional com a chave jumpointId.
jumpointName additional.fields.[key=jumpointName].value.string_value O valor de jumpointName é colocado no campo additional com a chave jumpointName.
kv_data Vários campos do UDM O campo kv_data é analisado em pares de chave-valor, que são mapeados para vários campos da UDM com base nas chaves (por exemplo, eventName, when, who, who_ip, site, target, status, reason).
kvdata Vários campos do UDM O campo kvdata é analisado em pares de chave-valor, que são mapeados para vários campos da UDM com base nas chaves (por exemplo, msg, srcUser, srcUid, srcHost, dstUser, dstUid, dstHost, sessionId, jumpointId, jumpointName, jumpGroupId, jumpGroupName, jumpGroupType, externalKeyLabel, dstPriv).
message Vários campos do UDM O campo message é analisado usando padrões grok para extrair vários campos, que são mapeados para campos da UDM.
msg metadata.description O valor de msg é mapeado diretamente para metadata.description.
product_event_type metadata.product_event_type O valor de product_event_type é mapeado diretamente para metadata.product_event_type.
product_log_id metadata.product_log_id O valor de product_log_id é mapeado diretamente para metadata.product_log_id.
process_id principal.process.pid O valor de process_id é mapeado diretamente para principal.process.pid.
reason security_result.description O valor de reason é mapeado diretamente para security_result.description.
segment_number additional.fields.[key=segment_number].value.string_value O valor de segment_number é colocado no campo additional com a chave segment_number.
sessionId network.session_id O valor de sessionId é mapeado diretamente para network.session_id.
site target.hostname O valor de site é mapeado diretamente para target.hostname.
site_id additional.fields.[key=site_id].value.string_value O valor de site_id é colocado no campo additional com a chave site_id.
srcHost principal.ip O valor de srcHost é mapeado diretamente para principal.ip depois de ser validado como um endereço IP válido.
srcUid principal.user.userid O valor de srcUid é mapeado diretamente para principal.user.userid.
srcUser principal.user.user_display_name O valor de srcUser é mapeado diretamente para principal.user.user_display_name.
status security_result.action Se status for failure (sem diferenciar maiúsculas de minúsculas), security_result.action será definido como BLOCK. Caso contrário, security_result.action será definido como ALLOW.
status security_result.action_details O valor de status é mapeado diretamente para security_result.action_details.
target target.application O valor de target é mapeado diretamente para target.application. rep_client é substituído por Representative Console e web/login é substituído por Web/Login.
target extensions.auth.type Se target for rep_client, extensions.auth.type será definido como MACHINE. Se target for web/login, extensions.auth.type será definido como SSO. Caso contrário, extensions.auth.type será definido como AUTHTYPE_UNSPECIFIED.
timestamp metadata.event_timestamp O timestamp do registro bruto é usado como substituto se datetime e when não estiverem presentes.
total_segments additional.fields.[key=total_segments].value.string_value O valor de total_segments é colocado no campo additional com a chave total_segments.
device_product additional.fields.[key=device_product].value.string_value O valor de device_product é colocado no campo additional com a chave device_product.
device_vendor additional.fields.[key=device_vendor].value.string_value O valor de device_vendor é colocado no campo additional com a chave device_vendor.
device_version metadata.product_version O valor de device_version é mapeado diretamente para metadata.product_version.
when metadata.event_timestamp O carimbo de data/hora é analisado do campo when usando o formato UNIX, se presente.
who principal.user.userid Se o campo who corresponder ao padrão de regex, o userid extraído será mapeado para principal.user.userid. Caso contrário, todo o campo who será mapeado para principal.user.userid.
who principal.user.user_display_name Se o campo who corresponder ao padrão de regex, o user_display_name extraído será mapeado para principal.user.user_display_name.
who_ip principal.ip O valor de who_ip é mapeado diretamente para principal.ip.
(Lógica do analisador) metadata.log_type O tipo de registro está definido como BEYONDTRUST_REMOTE_ACCESS.
(Lógica do analisador) metadata.product_name O nome do produto é definido como BeyondTrust Secure Remote Access.
(Lógica do analisador) metadata.vendor_name O nome do fornecedor é definido como BeyondTrust.
(Lógica do analisador) security_result.summary O valor é derivado usando o formato User %{eventName}.
(Lógica do analisador) extensions.auth.mechanism Se method contiver using password, o mecanismo será definido como USERNAME_PASSWORD. Se method contiver using elevate, o mecanismo será definido como REMOTE.

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