Coletar registros do CyberArk
Este documento explica como ingerir registros do CyberArk no Google Security Operations usando o agente Bindplane.
O CyberArk Privileged Access Manager (PAM) é uma solução de segurança de acesso privilegiado de nível empresarial que protege, gerencia e monitora contas e credenciais privilegiadas em ambientes locais e na nuvem. Ele oferece proteção de credenciais, isolamento e monitoramento de sessões, detecção de ameaças com a análise de ameaças privilegiadas (PTA, na sigla em inglês) e geração de registros de auditoria abrangente de todas as atividades privilegiadas.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Windows Server 2016 ou mais recente ou host Linux com
systemd - Conectividade de rede entre o agente do Bindplane e o servidor do CyberArk Vault
- Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
- Acesso administrativo ao servidor do CyberArk Vault (acesso à pasta de instalação
Server\Conf) - CyberArk Vault versão 10.0 ou mais recente
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.
Baixe o arquivo de autenticação de ingestão. Salve o arquivo com segurança no sistema em que o agente do 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
Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.
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" /quietAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sc query observiq-otel-collectorO status do serviço deve ser EM EXECUÇÃO.
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sudo systemctl status observiq-otel-collectorO status do serviço precisa ser active (running).
Outros recursos de instalação
Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do Bindplane.
Configurar o agente do Bindplane para ingerir o syslog e enviá-lo ao Google SecOps
Localizar o arquivo de configuração
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Editar o arquivo de configuração
Substitua todo o conteúdo de
config.yamlpela seguinte configuração:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/cyberark: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'your-customer-id' endpoint: malachiteingestion-pa.googleapis.com log_type: CYBERARK raw_log_field: body service: pipelines: logs/cyberark_to_chronicle: receivers: - udplog exporters: - chronicle/cyberarkSubstitua os seguintes marcadores de posição:
Configuração do receptor:
listen_address: endereço IP e porta a serem detectados:0.0.0.0:514para detectar em todas as interfaces na porta 514 (requer root no Linux)0.0.0.0:1514para detectar uma porta sem privilégios (recomendado para Linux não root)
Opções de tipo de receptor:
udplogpara syslog UDP (padrão para o CyberArk Vault)tcplogpara syslog TCP- Use
tcplogse o CyberArk Vault estiver configurado comSyslogServerProtocol=TCP
Configuração do exportador:
creds_file_path: caminho completo para o arquivo de autenticação de ingestão do Google SecOps:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: ID do cliente do Google SecOpsendpoint: URL do endpoint regional:- EUA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Ásia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulte a lista completa em Endpoints regionais.
- EUA:
Salve o arquivo de configuração.
Depois de editar, salve o arquivo:
- Linux: pressione
Ctrl+O,EntereCtrl+X. - Windows: clique em Arquivo > Salvar.
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane no Linux:
Execute este comando:
sudo systemctl restart observiq-otel-collectorVerifique se o serviço está sendo executado:
sudo systemctl status observiq-otel-collectorVerifique se há erros nos registros:
sudo journalctl -u observiq-otel-collector -f
Para reiniciar o agente do Bindplane em Windows:
Escolha uma das seguintes opções:
Prompt de comando ou PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole de serviços:
- Pressione
Win+R, digiteservices.msce pressione Enter. - Localize o Coletor do OpenTelemetry da observIQ.
- Clique com o botão direito do mouse e selecione Reiniciar.
- Pressione
Verifique se o serviço está sendo executado:
sc query observiq-otel-collectorVerifique se há erros nos registros:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configurar o encaminhamento de syslog do CyberArk
O CyberArk Vault envia eventos de auditoria em CEF (Common Event Format) via syslog. O servidor do Vault converte registros de auditoria XML em mensagens CEF usando um arquivo tradutor XSL e os encaminha para o agente do Bindplane.
Configurar o servidor do Vault para enviar syslog
- Faça login na máquina host do servidor do Vault do CyberArk com privilégios de administrador.
- Navegue até a pasta de instalação do servidor do Vault do CyberArk (por exemplo, `C:\Program Files (x86)\PrivateArk\Server\Conf`).
- Abra o arquivo
DBParm.iniem um editor de texto. - Copie a seção
[SYSLOG]do arquivoDBParm.sample.ini(localizado na mesma pasta) e cole na parte de baixo deDBParm.ini. Configure os seguintes parâmetros do syslog na seção
[SYSLOG]:[SYSLOG] SyslogServerIP=<BINDPLANE_AGENT_IP> SyslogServerPort=514 SyslogServerProtocol=UDP UseLegacySyslogFormat=No SyslogTranslatorFile=Syslog\Arcsight.sample.xsl SyslogMessageCodeFilter=0-999Substitua os seguintes valores:
- SyslogServerIP: insira o endereço IP do host do agente Bindplane (por exemplo,
192.168.1.100). - SyslogServerPort: digite a porta correspondente ao agente do Bindplane
listen_address(por exemplo,514). SyslogServerProtocol: selecione o protocolo:
UDPpara syslog UDP (padrão)TCPpara syslog TCP
SyslogTranslatorFile: insira o arquivo de tradução XSL para o formato CEF:
Syslog\Arcsight.sample.xslpara saída CEF padrão (recomendado)
SyslogMessageCodeFilter: insira os códigos de mensagem a serem encaminhados:
0-999para encaminhar todos os eventos- Especifique códigos ou intervalos individuais (por exemplo,
1,2,3,5-10,30) para filtrar eventos específicos.
UseLegacySyslogFormat: defina como
Nopara o formato RFC 5424.
- SyslogServerIP: insira o endereço IP do host do agente Bindplane (por exemplo,
Salve o arquivo
DBParm.ini.Reinicie o serviço PrivateArk Server:
- Abra os Serviços do Windows (
services.msc). - Localize o serviço CyberArk Vault Disaster Recovery e pare-o (se estiver em execução).
- Localize o serviço PrivateArk Server.
- Clique com o botão direito do mouse e selecione Reiniciar.
- Inicie o serviço CyberArk Vault Disaster Recovery novamente (se aplicável).
- Abra os Serviços do Windows (
Encaminhar syslog para vários destinos
Para encaminhar eventos do syslog do Vault para o agente do Bindplane e outros destinos (por exemplo, PTA), especifique vários endereços IP e arquivos de tradução separados por vírgulas:
SyslogServerIP=<BINDPLANE_AGENT_IP>,<PTA_SERVER_IP> SyslogTranslatorFile=Syslog\Arcsight.sample.xsl,Syslog\PTA.xsl
Configurar o encaminhamento de syslog do Privileged Threat Analytics (PTA, na sigla em inglês) (opcional)
Se você também quiser encaminhar alertas de segurança do PTA para o Google SecOps, configure a integração do SIEM do PTA:
- Faça login no console do PVWA (acesso à Web do cofre de senhas).
- Acesse Administração > Opções de configuração > Análise de ameaças privilegiada.
- Na seção SIEM, configure o seguinte:
- IP do servidor Syslog: insira o endereço IP do host do agente Bindplane.
- Porta do servidor Syslog: insira a porta correspondente à configuração do agente do Bindplane (por exemplo,
514). - Protocolo: selecione UDP ou TCP para corresponder ao receptor do agente do Bindplane.
- Formato: selecione CEF.
- Clique em Salvar.
Arquivos de tradutor XSL disponíveis
A subpasta
Syslogna pasta de instalação do CyberArk Server contém arquivos de tradutor XSL de exemplo:Arquivo do tradutor Formato Descrição Arcsight.sample.xslCEF Formato CEF padrão (recomendado para o Google SecOps) SplunkCIM.xslCIM Formato do modelo de informações comum do Splunk PTA.xslPersonalizado Formato para encaminhamento ao CyberArk PTA XSIAM.xslCEF Formato do Palo Alto Cortex XSIAM
Verificar o encaminhamento de syslog
- Depois de reiniciar o serviço do PrivateArk Server, faça uma ação de teste no Vault (por exemplo, recupere uma senha ou faça login no PVWA).
- Verifique os registros do agente do Bindplane para mensagens syslog recebidas:
- Linux:
sudo journalctl -u observiq-otel-collector -f - Windows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Linux:
Verifique se as mensagens formatadas em CEF aparecem nos registros. Por exemplo:
CEF:0|Cyber-Ark|Vault|10.0|22|CPM password retrieved|5|suser=Administrator src=10.0.0.1 fname=Root\operating system-server1-admin
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| RequestId_label | additional.fields | Mapeado como par de chave-valor |
| Category_label | additional.fields | Mapeado como par de chave-valor |
| ExtraDetails_label | additional.fields | Mapeado como par de chave-valor |
| CAPolicy_label | additional.fields | Mapeado como par de chave-valor |
| line_number_label | additional.fields | Mapeado como par de chave-valor |
| pasvc_action_label | additional.fields | Mapeado como par de chave-valor |
| control_socket_label | additional.fields | Mapeado como par de chave-valor |
| data_socket_label | additional.fields | Mapeado como par de chave-valor |
| timeout_label | additional.fields | Mapeado como par de chave-valor |
| vault_name_label | additional.fields | Mapeado como par de chave-valor |
| class_name_label | additional.fields | Mapeado como par de chave-valor |
| status_label | additional.fields | Mapeado como par de chave-valor |
| Publisher_Event | additional.fields | Mapeado como par de chave-valor |
| Last_Event | additional.fields | Mapeado como par de chave-valor |
| Total_Events | additional.fields | Mapeado como par de chave-valor |
| cs1_var | additional.fields | Mapeado como par de chave-valor |
| cs3_var | additional.fields | Mapeado como par de chave-valor |
| app_var | additional.fields | Mapeado como par de chave-valor |
| reason_var | additional.fields | Mapeado como par de chave-valor |
| cs5_var | additional.fields | Mapeado como par de chave-valor |
| cs4_var | additional.fields | Mapeado como par de chave-valor |
| _auth_mechanism | extensions.auth.mechanism | Mesclado diretamente |
| dvc | intermediary.ip | Se o valor corresponder ao padrão de endereço IP |
| EventName | metadata.description | Se o processo não corresponder ao padrão exe |
| agir | metadata.description | Se fname estiver vazio |
| EventMessage | metadata.description | Se "act" estiver vazio |
| LastEventDate | metadata.event_timestamp | Convertido usando o formato ISO8601 ou aaaa-MM-ddTHH:mm:ss |
| _temp_datetime | metadata.event_timestamp | Convertido usando o formato dd/MM/aaaa HH:mm:ss |
| datetime | metadata.event_timestamp | Convertido usando o formato ISO8601 ou MMM d HH:mm:ss |
| _event_type | metadata.event_type | Renomeado diretamente |
| nome | metadata.event_type | Definido com base nas condições: FILE_CREATION para "Store File", USER_LOGIN para "Logon", NETWORK_CONNECTION se has_principal e has_target, FILE_UNCATEGORIZED se has_target_file_details, PROCESS_UNCATEGORIZED se has_target_process_details, STATUS_UPDATE se has_principal apenas, NETWORK_UNCATEGORIZED se app_error e has_principal e has_target, caso contrário, GENERIC_EVENT |
| EventType | metadata.product_event_type | Mapeado diretamente |
| signature_id, name | metadata.product_event_type | Concatenado de "signature_id" e "name" |
| LastEventID | metadata.product_log_id | Convertido em string |
| tid | metadata.product_log_id | Mapeado diretamente |
| produto | metadata.product_name | Renomeado diretamente |
| version | metadata.product_version | Renomeado diretamente |
| fornecedor | metadata.vendor_name | Renomeado diretamente |
| host | observer.hostname | Mapeado diretamente |
| LastEventUserName | principal.administrative_domain | Extraído usando o padrão grok domain\user |
| ApplicationType | principal.application | Mapeado diretamente |
| shost | principal.asset.hostname | Se o valor não corresponder ao padrão de endereço IP |
| shost | principal.asset.hostname | Substituição se dhost estiver vazio |
| shost | principal.asset.ip | Se o valor corresponder ao padrão de endereço IP |
| src | principal.asset.ip | Mapeado diretamente |
| ip_address | principal.asset.ip | Mapeado diretamente |
| shost | principal.asset.ip | Substituição se dhost estiver vazio |
| shost | principal.ip | Se o valor corresponder ao padrão de endereço IP, será mesclado |
| src | principal.ip | Mesclado diretamente |
| ip_address | principal.ip | Mesclado diretamente |
| Local | principal.location.name | Mapeado diretamente |
| LastEventSourceName | principal.platform | Definido como WINDOWS se o valor corresponder ao padrão do Windows |
| EventName | principal.process.command_line | Se o processo corresponder ao padrão exe |
| LastEventPackageName | principal.resource.name | Se o valor não for EventName |
| ApplicationType | principal.user.attribute.roles | Definido como ADMINISTRATOR se o valor for igual a AdminTask |
| LastEventUserName | principal.user.user_display_name | Parte do usuário extraída usando o padrão grok domain\user |
| user_name | principal.user.user_display_name | Mapeado diretamente |
| SourceUser | principal.user.userid | Mapeado diretamente |
| suser | principal.user.userid | Se o evento não for do tipo USER_ |
| usrName | principal.user.userid | Mapeado diretamente |
| _action | security_result.action | Mesclado diretamente |
| nome | security_result.action | Definido como BLOCK se o valor começar com "Failure" ou "Failed". Caso contrário, ALLOW. |
| msg | security_result.description | Mapeado diretamente |
| msg, reason | security_result.description | Concatenado de "msg" e "reason" se a condição de falha |
| _sec_result_description | security_result.description | Mapeado diretamente |
| PolicyName | security_result.rule_name | Mapeado diretamente |
| cs2 | security_result.rule_name | Mapeado diretamente |
| gravidade, | security_result.severity | Definido como BAIXO se o valor for <= 5, MÉDIO se o valor for <= 8 e ALTO caso contrário. |
| sev | security_result.severity | Mapeado diretamente |
| sev | security_result.severity_details | Mapeado diretamente |
| Motivo | security_result.summary | Mapeado diretamente |
| nome | security_result.summary | Mapeado diretamente |
| dhost | target.asset.hostname | Se o valor não corresponder ao padrão de endereço IP |
| shost | target.asset.hostname | Substituição se dhost estiver vazio |
| dhost | target.asset.ip | Se o valor corresponder ao padrão de endereço IP |
| GatewayStation | target.asset.ip | Mapeado diretamente |
| shost | target.asset.ip | Substituição se dhost estiver vazio |
| FileQualifier | target.asset_id | Com prefixo "ASSET ID:" e convertido em string |
| Arquivo | target.file.full_path | Mapeado diretamente |
| file_path | target.file.full_path | Mapeado diretamente |
| LastEventSourceName | target.file.full_path | Se o valor começar com "C:" |
| fname | target.file.full_path | Mapeado diretamente |
| Hash | target.file.sha1 | Prefixo "SHA1##" removido e valor convertido para minúsculas, se o tipo for SHA1 |
| GatewayStation | target.ip | Mesclado diretamente |
| pid | target.process.pid | Convertido em string |
| Seguro | target.resource.name | Mapeado diretamente |
| user_name | target.user.user_display_name | Mapeado diretamente |
| TargetUser | target.user.userid | Mapeado diretamente |
| duser | target.user.userid | Mapeado diretamente |
| suser | target.user.userid | Se o evento for do tipo USER_ |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.