Recolha registos do BeyondTrust Secure Remote Access

Compatível com:

Este documento explica como recolher registos do BeyondTrust Secure Remote Access através do Bindplane. O analisador processa dois formatos de syslog. O primeiro formato usa pares de chave/valor numa mensagem estruturada, enquanto o segundo usa campos delimitados por barras verticais. O analisador extrai campos relevantes de ambos os formatos e mapeia-os para o UDM. 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 início/fim de sessão e tipos de autenticação.

Antes de começar

  • Certifique-se de que tem uma instância do Google Security Operations.
  • Certifique-se de que está a usar o Windows 2016 ou posterior, ou um anfitrião Linux com systemd.
  • Se estiver a executar o serviço através de um proxy, certifique-se de que as portas da firewall estão abertas.
  • Certifique-se de que tem acesso privilegiado a um BeyondTrust Secure Remote Access.

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

Instalação do 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
    

Instalação do Linux

  1. Abra um terminal com privilégios de raiz ou sudo.
  2. Execute o seguinte comando:

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

Recursos de instalação adicionais

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

  1. 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).
  2. Edite o ficheiro 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 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.

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

  • 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, pode usar a consola Services ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configure o apoio técnico remoto da BeyondTrust

  1. Inicie sessão na IU Web da BeyondTrust.
  2. Selecione Dispositivo > Segurança > Administração do dispositivo.
  3. Na secção Syslog, faça o seguinte:
    • Formato da mensagem: selecione Formato BSD antigo.
    • Servidor syslog remoto: introduza o endereço IP e a porta do Bindplane.
  4. Clique em Enviar.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
datetime metadata.event_timestamp A data/hora é analisada a partir do campo datetime através do formato RFC3339 se o campo when não estiver presente.
deviceHost target.hostname O valor de deviceHost está diretamente mapeado 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 está diretamente mapeado para target.user.userid.
dstUser target.user.user_display_name O valor de dstUser está diretamente mapeado para target.user.user_display_name.
eventName metadata.event_type Se eventName for login (não é sensível a maiúsculas e minúsculas), metadata.event_type é definido como USER_LOGIN. Se eventName for logout (não é sensível a maiúsculas e minúsculas), metadata.event_type é definido como USER_LOGOUT. Caso contrário, se eventName não estiver vazio, metadata.event_type é definido como USER_UNCATEGORIZED. Se eventName estiver vazio e a mensagem corresponder ao segundo padrão grok, metadata.event_type é definido como GENERIC_EVENT. Se eventName estiver vazio e a mensagem corresponder ao primeiro padrão grok, metadata.event_type é definido como GENERIC_EVENT. Se srcUid, userid ou who não estiverem vazios, metadata.event_type é definido como USER_CHANGE_PERMISSIONS. Se deviceHost ou site não estiverem vazios, metadata.event_type é definido como USER_UNCATEGORIZED. Caso contrário, metadata.event_type é 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 em conjunto 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 em conjunto 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 UDM O campo kv_data é analisado em pares de chave-valor, que são depois mapeados para vários campos da UDM com base nas respetivas chaves (por exemplo, eventName, when, who, who_ip, site, target, status, reason).
kvdata Vários campos UDM O campo kvdata é analisado em pares de chave-valor, que são depois mapeados para vários campos da UDM com base nas respetivas chaves (por exemplo, msg, srcUser, srcUid, srcHost, dstUser, dstUid, dstHost, sessionId, jumpointId, jumpointName, jumpGroupId, jumpGroupName, jumpGroupType, externalKeyLabel, dstPriv).
message Vários campos UDM O campo message é analisado através de padrões grok para extrair vários campos, que são depois mapeados para campos UDM.
msg metadata.description O valor de msg está diretamente mapeado para metadata.description.
product_event_type metadata.product_event_type O valor de product_event_type está diretamente mapeado para metadata.product_event_type.
product_log_id metadata.product_log_id O valor de product_log_id está diretamente mapeado para metadata.product_log_id.
process_id principal.process.pid O valor de process_id está diretamente mapeado para principal.process.pid.
reason security_result.description O valor de reason está diretamente mapeado 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 está diretamente mapeado para network.session_id.
site target.hostname O valor de site está diretamente mapeado 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 está diretamente mapeado para principal.user.userid.
srcUser principal.user.user_display_name O valor de srcUser está diretamente mapeado para principal.user.user_display_name.
status security_result.action Se status for failure (não é sensível a maiúsculas e minúsculas), security_result.action é definido como BLOCK. Caso contrário, security_result.action é definido como ALLOW.
status security_result.action_details O valor de status está diretamente mapeado para security_result.action_details.
target target.application O valor de target está diretamente mapeado 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 é definido como MACHINE. Se target for web/login, extensions.auth.type é definido como SSO. Caso contrário, extensions.auth.type é definido como AUTHTYPE_UNSPECIFIED.
timestamp metadata.event_timestamp O timestamp do registo não processado é usado como alternativa se nem datetime nem when 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 está diretamente mapeado para metadata.product_version.
when metadata.event_timestamp A data/hora é analisada a partir do campo when usando o formato UNIX, se estiver presente.
who principal.user.userid Se o campo who corresponder ao padrão de regex, o valor userid extraído é mapeado para principal.user.userid. Caso contrário, todo o campo who é mapeado para principal.user.userid.
who principal.user.user_display_name Se o campo who corresponder ao padrão de regex, o valor user_display_name extraído é mapeado para principal.user.user_display_name.
who_ip principal.ip O valor de who_ip está diretamente mapeado para principal.ip.
(Lógica do analisador) metadata.log_type O tipo de registo está definido como BEYONDTRUST_REMOTE_ACCESS.
(Lógica do analisador) metadata.product_name O nome do produto está definido como BeyondTrust Secure Remote Access.
(Lógica do analisador) metadata.vendor_name O nome do fornecedor está definido como BeyondTrust.
(Lógica do analisador) security_result.summary O valor é derivado através do formato User %{eventName}.
(Lógica do analisador) extensions.auth.mechanism Se method contiver using password, o mecanismo é definido como USERNAME_PASSWORD. Se method contiver using elevate, o mecanismo é definido como REMOTE.

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