Recolha registos do CyberArk PAM
Este código de análise extrai primeiro campos de mensagens syslog do CyberArk Privileged Access Manager (PAM) através de expressões regulares. Em seguida, mapeia os campos extraídos para um modelo de dados unificado (UDM), enriquecendo os dados com contexto adicional e normalizando o tipo de evento com base em critérios específicos.
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.
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.
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
- 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
- Pode encontrar opções de instalação adicionais neste guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
- Aceda à máquina onde o agente Bindplane está instalado.
Edite o ficheiro
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 alterações:
sudo systemctl restart bindplane
Configure a exportação de Syslog para o CyberArk Vault
- Inicie sessão no servidor do Vault.
- Abra o ficheiro 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
Guarde o ficheiro
dbparm.ini
.Reinicie o servidor do Vault:
net stop CyberArkVault net start CyberArkVault
Configure a exportação de Syslog no PVWA
- Inicie sessão no servidor PVWA.
- Abra o ficheiro
Web.config
, localizado em:C:\inetpub\wwwroot\PasswordVault\
Adicione ou modifique as seguintes teclas:
<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" />
Guarde as alterações ao ficheiro
Web.config
.Reinicie o serviço IIS:
iisreset
Configure a exportação de Syslog no PTA
- Aceda ao servidor PTA através de SSH.
- Abra o ficheiro
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>
Guarde o ficheiro
application.properties
.Reinicie o serviço PTA para aplicar as alterações:
sudo service pta restart
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
agir | metadata.description | Mapeado diretamente a partir do campo act . |
cn1 | additional.fields.value.string_value | Mapeado diretamente a partir do campo cn1 quando cn1Label não está vazio. |
cn1Label | additional.fields.key | Mapeado diretamente a partir do campo cn1Label quando cn1 não está vazio. |
cn2 | additional.fields.value.string_value | Mapeado diretamente a partir do campo cn2 quando cn2Label não está vazio. |
cn2Label | additional.fields.key | Mapeado diretamente a partir do campo cn2Label quando cn2 não está vazio. |
cs1 | additional.fields.value.string_value | Mapeado diretamente a partir do campo cs1 quando cs1Label não está vazio. |
cs1Label | additional.fields.key | Mapeado diretamente a partir do campo cs1Label quando cs1 não está vazio. |
cs2 | additional.fields.value.string_value | Mapeado diretamente a partir do campo cs2 quando cs2Label não está vazio. |
cs2Label | additional.fields.key | Mapeado diretamente a partir do campo cs2Label quando cs2 não está vazio. |
cs3 | additional.fields.value.string_value | Mapeado diretamente a partir do campo cs3 quando cs3Label não está vazio. |
cs3Label | additional.fields.key | Mapeado diretamente a partir do campo cs3Label quando cs3 não está vazio. |
cs4 | additional.fields.value.string_value | Mapeado diretamente a partir do campo cs4 quando cs4Label não está vazio. |
cs4Label | additional.fields.key | Mapeado diretamente a partir do campo cs4Label quando cs4 não está vazio. |
cs5 | additional.fields.value.string_value | Mapeado diretamente a partir do campo cs5 quando cs5Label não está vazio. |
cs5Label | additional.fields.key | Mapeado diretamente a partir do campo cs5Label quando cs5 não está vazio. |
dhost | target.hostname | Mapeado a partir do campo dhost se não for um endereço IP. Se dhost estiver vazio, é mapeado a partir de shost (IP ou nome de anfitrião). |
dhost | target.asset.hostname | Mapeado a partir do campo dhost se não for um endereço IP. Se dhost estiver vazio, é mapeado a partir de shost (IP ou nome de anfitrião). |
dhost | target.ip | Mapeado a partir do campo dhost se for um endereço IP. |
dhost | target.asset.ip | Mapeado a partir do campo dhost se for um endereço IP. |
duser | target.user.userid | Mapeado diretamente a partir do campo duser . |
dvc | intermediary.ip | Mapeado a partir do campo dvc se for um endereço IP. |
externalId | metadata.product_log_id | Mapeado diretamente a partir do campo externalId . |
fname | target.file.full_path | Mapeado diretamente a partir 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 e FILE_DELETION. Se não for encontrada nenhuma correspondência, e has_principal for verdadeiro e has_target for falso, event_type é definido como STATUS_UPDATE. Caso contrário, é predefinido como GENERIC_EVENT. |
prin_hostname | principal.hostname | Mapeado diretamente a partir do campo prin_hostname . Se estiver vazio, é mapeado a partir de shost se shost não for um endereço IP. |
prin_hostname | principal.asset.hostname | Mapeado diretamente a partir do campo prin_hostname . Se estiver vazio, é mapeado a partir de shost se shost não for um endereço IP. |
prin_ip | principal.ip | Mapeado diretamente a partir do campo prin_ip . Se estiver vazio, é mapeado a partir de shost se shost for um endereço IP. |
prin_ip | principal.asset.ip | Mapeado diretamente a partir do campo prin_ip . Se estiver vazio, é mapeado a partir de shost se shost for um endereço IP. |
produto | metadata.product_name | Mapeado diretamente a partir do campo product . A predefinição é "PAM" se não estiver presente no registo. |
motivo | security_result.description | Mapeado diretamente a partir do campo reason . |
gravidade | security_result.severity | Mapeado a partir do campo severity com base na seguinte lógica: 1 a 3: INFORMATIONAL, 4: ERROR, 5: CRITICAL. |
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. |
estado | additional.fields.value.string_value | Mapeado diretamente a partir do campo status . |
suser | principal.user.userid | Mapeado a partir do campo suser . Se duser estiver vazio, é considerado o ID do utilizador de destino. |
tempo | metadata.event_timestamp.seconds | Mapeado diretamente a partir do campo time após a conversão para o formato de data/hora. |
tempo | metadata.event_timestamp.nanos | Mapeado diretamente a partir do campo time após a conversão para o formato de data/hora. |
fornecedor | metadata.vendor_name | Mapeado diretamente a partir do campo vendor . A predefinição é "CYBERARK" se não estiver presente no registo. |
versão | metadata.product_version | Mapeado diretamente a partir do campo version . |
metadata.log_type | Codificado de forma rígida para "CYBERARK_PAM". | |
extensions.auth.mechanism | Definido como "USERNAME_PASSWORD" se event_type for "USER_LOGIN". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.