Coletar registros do Delinea Secret Server
Este documento explica como coletar registros do servidor secreto do Delinea (anteriormente Thycotic). O analisador transforma registros brutos em um formato estruturado que segue o UDM do Google Security Operations. Primeiro, ele extrai campos importantes, como carimbos de data/hora, tipos de evento e informações do usuário. Em seguida, usa a lógica condicional com base no tipo de evento específico para mapear os dados nos campos apropriados do UDM, enriquecendo os dados para análise no Google SecOps.
Antes de começar
- Verifique se você tem uma instância do Google Security Operations.
- Verifique se você está usando o Windows 2016 ou uma versão mais recente ou um host Linux com
systemd
. - Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
- Verifique se você tem acesso privilegiado ao Delinea.
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Faça o download do arquivo de autenticação de transferência. Salve o arquivo com segurança no sistema em que o BindPlane será instalado.
Receber o ID de cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do BindPlane
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este 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 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
- Para mais opções de instalação, consulte este guia de instalação.
Configurar o agente BindPlane para ingerir o Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele está no diretório/etc/bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano
,vi
ou Notepad).
- Localize o arquivo
Edite o arquivo
config.yaml
da seguinte forma:receivers: udplog: # Replace with your specific IP and port listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Path to the ingestion authentication file creds: '/path/to/your/ingestion-auth.json' # Your Chronicle customer ID customer_id: 'your_customer_id' endpoint: malachiteingestion-pa.googleapis.com ingestion_labels: log_type: SYSLOG namespace: thycotic raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
Substitua
<customer_id>
pelo ID real do cliente.Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber o arquivo de autenticação de ingestão do Google SecOps.
Reinicie o agente BindPlane para aplicar as mudanças.
Para reiniciar o agente BindPlane no Linux, execute o seguinte comando:
sudo systemctl restart bindplane-agent
Para reiniciar o agente BindPlane no Windows, use o console Services ou digite o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o Delinea Secret Server para enviar registros usando o Syslog
- Faça login no Delinea Secret Server com credenciais de administrador.
- Acesse Administrador > Configuração.
- Clique em Editar.
- Marque a caixa de seleção Ativar o registro do Syslog/CEF e especifique os seguintes detalhes:
- Servidor syslog/CEF: insira o endereço IP do BindPlane.
- Protocolo Syslog/CEF: selecione UDP ou TCP (dependendo da configuração do Bindplane).
- Porta CEF/Syslog: digite o número da porta em que o BindPlane está configurado para detectar.
- Clique em Salvar.
Mapeamento do UDM
Campo de registro | Mapeamento de UDM | Lógica |
---|---|---|
Account_Domain | event1.idm.read_only_udm.principal.domain | O valor é extraído do campo "Account_Domain" no campo "msg" do registro bruto. |
Por usuário | event1.idm.read_only_udm.principal.user.userid | O valor é retirado do campo "Por usuário" no campo "msg" do registro bruto. |
ID do contêiner | event1.idm.read_only_udm.principal.asset.asset_id | O valor é extraído do campo "ID do contêiner" no campo "msg" do registro bruto e tem o prefixo "container_id:". |
Nome do contêiner | event1.idm.read_only_udm.principal.resource.name | O valor é extraído do campo "Nome do contêiner" no campo "msg" do registro bruto. |
cs2 | event1.idm.read_only_udm.additional.fields[].value.string_value | O valor é extraído do campo "cs2" no campo "msg" do registro bruto. |
cs3 | event1.idm.read_only_udm.target.file.full_path | O valor é extraído do campo "cs3" no campo "msg" do registro bruto. |
cs4 | event1.idm.read_only_udm.principal.user.user_display_name | O valor é extraído do campo "cs4" no campo "msg" do registro bruto. |
Detalhes | event1.idm.read_only_udm.additional.fields[].value.string_value | O valor é extraído do campo "Detalhes" no campo "msg" do registro bruto. |
fname | event1.idm.read_only_udm.target.file.full_path | O valor é retirado do campo "fname" no campo "msg" do registro bruto. |
Host | event1.idm.read_only_udm.principal.hostname, event1.idm.read_only_udm.principal.asset.hostname | O valor é retirado do campo "Host" no campo "msg" do registro bruto. |
Nome do item | event1.idm.read_only_udm.target.user.userid | O valor é extraído do campo "Item Name" no campo "msg" do registro bruto. |
event1.idm.read_only_udm.additional.fields[].key | O valor é fixado em "fname". | |
event1.idm.read_only_udm.additional.fields[].key | O valor é fixado em "Grupo ou usuário". | |
event1.idm.read_only_udm.additional.fields[].key | O valor é fixado em "Detalhes". | |
event1.idm.read_only_udm.additional.fields[].key | O valor é codificado como "type_id". | |
event1.idm.read_only_udm.extensions.auth.type | O valor é codificado como "MACHINE". | |
event1.idm.read_only_udm.metadata.description | O valor é retirado do campo "thycotic_event", que é extraído do registro bruto usando um padrão grok. | |
event1.idm.read_only_udm.metadata.event_timestamp.seconds | O valor é derivado do campo "rt", se presente, ou do campo "ts". Os dois campos são extraídos do registro bruto usando padrões grok. | |
event1.idm.read_only_udm.metadata.event_type | O valor é determinado com base no campo "thycotic_event" e em outras condições. Por exemplo, se "thycotic_event" for "USER - LOGIN", o tipo de evento será definido como "USER_LOGIN". | |
event1.idm.read_only_udm.metadata.log_type | O valor é fixado em "THYCOTIC". | |
event1.idm.read_only_udm.metadata.product_event_type | O valor é retirado do campo "thycotic_event", que é extraído do registro bruto usando um padrão grok. | |
event1.idm.read_only_udm.metadata.product_log_id | O valor é retirado do campo "action_id", que é extraído do registro bruto usando um padrão grok. | |
event1.idm.read_only_udm.metadata.product_name | O valor é retirado do campo "device_product", que é extraído do registro bruto usando um padrão grok. Se o campo estiver vazio, o valor será codificado como "Servidor secreto". | |
event1.idm.read_only_udm.metadata.product_version | O valor é retirado do campo "device_version", que é extraído do registro bruto usando um padrão grok. | |
event1.idm.read_only_udm.metadata.vendor_name | O valor é codificado como "Thycotic". | |
event1.idm.read_only_udm.network.ip_protocol | O valor será definido como "TCP" se o campo "input.type" for "tcp". | |
event1.idm.read_only_udm.observer.application | O valor é retirado do campo "agent.type", se presente. Caso contrário, ele é codificado como "Secret Server". | |
event1.idm.read_only_udm.observer.asset_id | O valor é definido como "ID do agente:" concatenado com o campo "agent.id". | |
event1.idm.read_only_udm.observer.hostname | O valor é retirado do campo "agent.hostname", se presente, ou do campo "server". | |
event1.idm.read_only_udm.observer.platform_version | O valor é extraído do campo "agent.version". | |
event1.idm.read_only_udm.observer.user.userid | O valor é retirado do campo "agent.name". | |
event1.idm.read_only_udm.principal.asset.asset_id | O valor é definido como "ID:" concatenado com o campo "host.id". | |
event1.idm.read_only_udm.principal.asset.hardware.cpu_platform | O valor é extraído do campo "host.architecture". | |
event1.idm.read_only_udm.principal.asset.hostname | O valor é retirado do campo "server", se presente, ou do campo "host.hostname". | |
event1.idm.read_only_udm.principal.asset.ip | O valor é retirado do campo "src", se presente, ou do campo "src_ip". | |
event1.idm.read_only_udm.principal.hostname | O valor é retirado do campo "host.hostname", se presente, ou do campo "server". | |
event1.idm.read_only_udm.principal.ip | O valor é retirado do campo "src", se presente, ou do campo "src_ip" ou "host.ip". | |
event1.idm.read_only_udm.principal.mac | O valor é extraído do campo "host.mac". | |
event1.idm.read_only_udm.principal.platform | O valor é definido como "LINUX" se o campo "host_os_platform" for "centos". Caso contrário, ele será definido como o valor em maiúsculas do campo "host_os_platform". | |
event1.idm.read_only_udm.principal.platform_patch_level | O valor é extraído do campo "host.os.kernel". | |
event1.idm.read_only_udm.principal.platform_version | O valor é retirado do campo "host.os.version". | |
event1.idm.read_only_udm.principal.port | O valor é retirado do campo "src_port", que é extraído do campo "log.source.address" usando um padrão grok. | |
event1.idm.read_only_udm.principal.user.user_display_name | O valor é extraído do campo "cs4" no campo "msg" do registro bruto. | |
event1.idm.read_only_udm.principal.user.userid | O valor é extraído do campo "suser" no campo "msg" do registro bruto ou do campo "Por usuário" se "thycotic_event" for "USER - LOGIN", "USER - LOGOUT", "USER - LOGINFAILURE" ou "USER - EDIT". | |
event1.idm.read_only_udm.security_result.action | O valor é retirado do campo "Ação" no campo "msg" do registro bruto. Também pode ser definido como "ALLOW" ou "BLOCK" com base no valor de "thycotic_event". | |
event1.idm.read_only_udm.security_result.description | O valor é retirado do campo "temp_message", que contém a parte restante do campo "msg" após a extração de outros campos. | |
event1.idm.read_only_udm.security_result.severity | O valor é determinado com base no campo "syslog_severity". Por exemplo, se "syslog_severity" contiver "error" ou "warning", a gravidade será definida como "HIGH". Se "thycotic_event" for "System Log", a gravidade será definida como "INFORMATIONAL". | |
event1.idm.read_only_udm.security_result.severity_details | O valor é retirado do campo "syslog_severity". | |
event1.idm.read_only_udm.target.file.full_path | O valor é construído concatenando os campos "cs3" e "fname" com um separador "/" se ambos os campos estiverem presentes. Se apenas um campo estiver presente, o valor será retirado dele. | |
event1.idm.read_only_udm.target.resource.product_object_id | O valor é extraído do campo "type_id". | |
event1.idm.read_only_udm.target.user.userid | O valor é extraído do campo "item_name" no campo "msg" do registro bruto ou do campo "Item Name" se "thycotic_event" for "USER - LOGIN", "USER - LOGOUT", "USER - LOGINFAILURE" ou "USER - EDIT". | |
events.timestamp.seconds | O valor é derivado do campo "rt", se presente, ou do campo "ts". Os dois campos são extraídos do registro bruto usando padrões grok. | |
rt | event1.idm.read_only_udm.metadata.event_timestamp.seconds | O valor é retirado do campo "rt" no campo "msg" do registro bruto e é usado para definir o carimbo de data/hora do evento. |
src | event1.idm.read_only_udm.principal.asset.ip, event1.idm.read_only_udm.principal.ip | O valor é extraído do campo "src" no campo "msg" do registro bruto. |
src_ip | event1.idm.read_only_udm.principal.asset.ip, event1.idm.read_only_udm.principal.ip | O valor é retirado do campo "src_ip", que é extraído do campo "log.source.address" usando um padrão grok. |
Alterações
2024-06-04
- Melhoria na análise de registros não analisados.
- Os campos "Host" e "Server" foram mapeados para campos do UDM relacionados ao nome do host.
- Mapeou "Container_Id" e "Container_name" para campos do UDM relacionados a nomes de recursos e ativos.
2023-09-22
- A lógica de análise foi ajustada para lidar melhor com registros não analisados.
- Adição de tratamento de erros para os campos "rt" e "ts".
2023-06-12
- Atualização da lógica de análise para oferecer suporte a um novo formato de registro.
- Os campos "fname", "cs2" e "details" foram mapeados para campos do UDM para mais informações e resumo dos resultados de segurança.
2022-08-01
- Foi adicionado suporte para análise de registros no formato JSON.
- Mapeamos vários campos dos registros JSON para os campos correspondentes do UDM, incluindo campos relacionados a informações de dispositivo e agente, endereços IP, detalhes do host, informações da plataforma e gravidade da segurança.
- Adição de análise para registros com o tipo "SECRET - SECRETPASSWORDCHANGEFAILURE".
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.