Coletar registros do PAM do CyberArk
Esse código de analisador primeiro extrai campos das mensagens do syslog do CyberArk Privileged Access Manager (PAM) usando expressões regulares. Em seguida, ele mapeia os campos extraídos para um modelo de dados unificado (UDM), enriquecendo os dados com mais contexto e padronizando o tipo de evento com base em critérios específicos.
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.
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.
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
- Para a instalação do Windows, execute o seguinte script:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Para a instalação do Linux, execute o seguinte script:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- Outras opções de instalação podem ser encontradas neste guia de instalação.
Configurar o agente BindPlane para ingerir o Syslog e enviar ao Google SecOps
- Acesse a máquina em que o BindPlane está instalado.
Edite o arquivo
config.yaml
da seguinte forma:receivers: tcplog: # Replace the below port <54525> and IP <0.0.0.0> with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: Cyberark_PAM raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Reinicie o agente do BindPlane para aplicar as mudanças:
sudo systemctl restart bindplane
Configurar a exportação de syslog para o CyberArk Vault
- Faça login no servidor do Vault.
- Abra o arquivo de configuração
dbparm.ini
, localizado em:C:\Program Files (x86)\CyberArk\Vault\Server\dbparm.ini
. Adicione ou modifique os seguintes parâmetros:
SyslogServer=<syslog_server_ip> SyslogPort=<syslog_server_port> SyslogProtocol=<TCP or UDP> SyslogFormat=Syslog
Salve o arquivo
dbparm.ini
.Reinicie o servidor do Vault:
net stop CyberArkVault net start CyberArkVault
Configurar a exportação de Syslog no PVWA
- Faça login no servidor PVWA.
- Abra o arquivo
Web.config
, localizado em:C:\inetpub\wwwroot\PasswordVault\
Adicione ou modifique as seguintes chaves:
<add key="SyslogServer" value="<syslog_server_ip>" /> <add key="SyslogPort" value="<syslog_server_port>" /> <add key="SyslogProtocol" value="<TCP or UDP>" /> <add key="SyslogFormat" value="Syslog" />
Salve as alterações no arquivo
Web.config
.Reinicie o serviço do IIS:
iisreset
Configurar a exportação de Syslog no PTA
- Acesse o servidor PTA usando SSH.
- Abra o arquivo
application.properties
, localizado em:/opt/cta/config/application.properties
Adicione ou modifique as seguintes linhas:
syslog.server.ip=<syslog_server_ip> syslog.server.port=<syslog_server_port> syslog.protocol=<TCP or UDP>
Salve o arquivo
application.properties
.Reinicie o serviço PTA para aplicar as mudanças:
sudo service pta restart
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
ato | metadata.description | Mapeado diretamente do campo act . |
cn1 | additional.fields.value.string_value | Mapeado diretamente do campo cn1 quando cn1Label não está vazio. |
cn1Label | additional.fields.key | Mapeado diretamente do campo cn1Label quando cn1 não está vazio. |
cn2 | additional.fields.value.string_value | Mapeado diretamente do campo cn2 quando cn2Label não está vazio. |
cn2Label | additional.fields.key | Mapeado diretamente do campo cn2Label quando cn2 não está vazio. |
cs1 | additional.fields.value.string_value | Mapeado diretamente do campo cs1 quando cs1Label não está vazio. |
cs1Label | additional.fields.key | Mapeado diretamente do campo cs1Label quando cs1 não está vazio. |
cs2 | additional.fields.value.string_value | Mapeado diretamente do campo cs2 quando cs2Label não está vazio. |
cs2Label | additional.fields.key | Mapeado diretamente do campo cs2Label quando cs2 não está vazio. |
cs3 | additional.fields.value.string_value | Mapeado diretamente do campo cs3 quando cs3Label não está vazio. |
cs3Label | additional.fields.key | Mapeado diretamente do campo cs3Label quando cs3 não está vazio. |
cs4 | additional.fields.value.string_value | Mapeado diretamente do campo cs4 quando cs4Label não está vazio. |
cs4Label | additional.fields.key | Mapeado diretamente do campo cs4Label quando cs4 não está vazio. |
cs5 | additional.fields.value.string_value | Mapeado diretamente do campo cs5 quando cs5Label não está vazio. |
cs5Label | additional.fields.key | Mapeado diretamente do campo cs5Label quando cs5 não está vazio. |
dhost | target.hostname | Mapeado do campo dhost se não for um endereço IP. Se dhost estiver vazio, ele será mapeado de shost (IP ou nome do host). |
dhost | target.asset.hostname | Mapeado do campo dhost se não for um endereço IP. Se dhost estiver vazio, ele será mapeado de shost (IP ou nome do host). |
dhost | target.ip | Mapeado do campo dhost se for um endereço IP. |
dhost | target.asset.ip | Mapeado do campo dhost se for um endereço IP. |
duser | target.user.userid | Mapeado diretamente do campo duser . |
dvc | intermediary.ip | Mapeado do campo dvc se for um endereço IP. |
externalId | metadata.product_log_id | Mapeado diretamente do campo externalId . |
fname | target.file.full_path | Mapeado diretamente do campo fname . |
nome | metadata.event_type | Usado para determinar o event_type com base na combinação dos campos name , shost e dhost . Valores possíveis: USER_CHANGE_PASSWORD, FILE_READ, USER_LOGIN, FILE_OPEN, FILE_DELETION. Se nenhuma correspondência for encontrada e has_principal for verdadeiro e has_target for falso, event_type será definido como STATUS_UPDATE. Caso contrário, o padrão será GENERIC_EVENT. |
prin_hostname | principal.hostname | Mapeado diretamente do campo prin_hostname . Se estiver vazio, será mapeado de shost se shost não for um endereço IP. |
prin_hostname | principal.asset.hostname | Mapeado diretamente do campo prin_hostname . Se estiver vazio, será mapeado de shost se shost não for um endereço IP. |
prin_ip | principal.ip | Mapeado diretamente do campo prin_ip . Se estiver vazio, ele será mapeado de shost se shost for um endereço IP. |
prin_ip | principal.asset.ip | Mapeado diretamente do campo prin_ip . Se estiver vazio, ele será mapeado de shost se shost for um endereço IP. |
produto | metadata.product_name | Mapeado diretamente do campo product . O padrão é "PAM" se não estiver presente no registro. |
reason | security_result.description | Mapeado diretamente do campo reason . |
gravidade, | security_result.severity | Mapeado do campo severity com base na seguinte lógica: 1-3: INFORMATIVO, 4: ERRO, 5: CRÍTICO. |
shost | principal.hostname | Mapeado para prin_hostname se prin_hostname estiver vazio e shost não for um endereço IP. |
shost | principal.asset.hostname | Mapeado para prin_hostname se prin_hostname estiver vazio e shost não for um endereço IP. |
shost | principal.ip | Mapeado para prin_ip se prin_ip estiver vazio e shost for um endereço IP. |
shost | principal.asset.ip | Mapeado para prin_ip se prin_ip estiver vazio e shost for um endereço IP. |
shost | target.hostname | Mapeado para target.hostname se dhost estiver vazio e shost não for um endereço IP. |
shost | target.asset.hostname | Mapeado para target.hostname se dhost estiver vazio e shost não for um endereço IP. |
shost | target.ip | Mapeado para target.ip se dhost estiver vazio e shost for um endereço IP. |
shost | target.asset.ip | Mapeado para target.ip se dhost estiver vazio e shost for um endereço IP. |
status | additional.fields.value.string_value | Mapeado diretamente do campo status . |
suser | principal.user.userid | Mapeado do campo suser . Se duser estiver vazio, ele será considerado o ID do usuário de destino. |
tempo | metadata.event_timestamp.seconds | Mapeado diretamente do campo time após a conversão para o formato de carimbo de data/hora. |
tempo | metadata.event_timestamp.nanos | Mapeado diretamente do campo time após a conversão para o formato de carimbo de data/hora. |
fornecedor | metadata.vendor_name | Mapeado diretamente do campo vendor . O padrão é "CYBERARK" se não estiver presente no registro. |
version | metadata.product_version | Mapeado diretamente do campo version . |
metadata.log_type | Fixado em "CYBERARK_PAM". | |
extensions.auth.mechanism | Defina como "USERNAME_PASSWORD" se event_type for "USER_LOGIN". |
Alterações
2024-05-05
- Parser recém-criado.