Recolha registos do BeyondTrust Secure Remote Access
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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- 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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de raiz ou sudo.
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
- Para ver opções de instalação adicionais, consulte este guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
Aceda ao ficheiro de configuração:
- 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. - Abra o ficheiro com um editor de texto (por exemplo,
nano,viou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
config.yamlda 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_labelsSubstitua a porta e o endereço IP conforme necessário na sua infraestrutura.
Substitua
<customer_id>pelo ID de cliente real.Atualize
/path/to/ingestion-authentication-file.jsonpara 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-agentPara 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
- Inicie sessão na IU Web da BeyondTrust.
- Selecione Dispositivo > Segurança > Administração do dispositivo.
- 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.
- 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.