Coletar registros do Cisco Secure ACS
Este documento explica como ingerir registros do Cisco Secure ACS no Google Security Operations usando o Bindplane.
O analisador extrai campos do syslog do Cisco Secure ACS e registros formatados de chave-valor. Ele usa grok e/ou kv para analisar a mensagem de registro e mapeia esses valores para o modelo de dados unificado (UDM). Ele também define valores de metadados padrão para a origem e o tipo do evento.
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 - 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 Bindplane.
- Acesso privilegiado à interface da Web do Cisco Secure ACS
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 de forma segura 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
Instale o agente do Bindplane no 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-collector
O serviço vai aparecer como 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-collector
O serviço vai aparecer como ativo (em execução).
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 syslog e enviar 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/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'CISCO_ACS' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Parâmetros de configuração
Substitua os seguintes marcadores de posição:
Configuração do receptor:
udplog: useudplogpara syslog UDP outcplogpara syslog TCP.0.0.0.0: endereço IP para escutar (0.0.0.0para escutar em todas as interfaces)514: número da porta a ser detectada (porta syslog padrão).
Configuração do exportador:
creds_file_path: caminho completo para o arquivo de autenticação de ingestão:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: ID do cliente da seção "Receber ID do cliente"endpoint: 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:
log_type: tipo de registro exatamente como aparece no Chronicle (CISCO_ACS)
Salve o arquivo de configuração.
- Depois de editar, salve o arquivo:
- Linux: pressione
Ctrl+O,EntereCtrl+X. - Windows: clique em Arquivo > Salvar.
- Linux: pressione
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:
sudo systemctl restart observiq-otel-collectorVerifique se o serviço está em execução:
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.
Verifique se o serviço está em execução:
sc query observiq-otel-collectorVerifique se há erros nos registros:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Pressione
Configurar o encaminhamento do Syslog no Cisco Secure ACS
- Faça login na interface da Web do Cisco Secure ACS.
- Acesse Administração do sistema > Configuração > Configuração de registros > Destinos de registros remotos.
- Clique em Criar para adicionar um novo destino de registro remoto.
- Informe os seguintes detalhes de configuração:
- Nome: insira um nome descritivo, por exemplo,
Google-SecOps-Bindplane. - Descrição: digite uma descrição (opcional).
- Endereço IP: insira o endereço IP do host do agente do Bindplane.
- Porta: insira
514. - Código da instalação: selecione LOCAL6 (ou a instalação de sua preferência).
- Nome: insira um nome descritivo, por exemplo,
- Clique em Enviar.
- Acesse Administração do sistema > Configuração > Configuração de registro > Categorias de registro.
- Selecione as categorias de registros a serem encaminhadas:
- Auditoria da AAA
- Diagnóstico de AAA
- Auditoria administrativa e operacional
- Diagnóstico do sistema
- Para cada categoria selecionada, clique no nome dela.
- Acesse a guia Destino de registro remoto.
- Mova o destino de registro remoto criado (por exemplo,
Google-SecOps-Bindplane) de Disponível para Selecionado. - Clique em Salvar.
- Verifique se as mensagens syslog estão sendo enviadas conferindo os registros do agente Bindplane.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| Acct-Authentic | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Authentic". |
| Acct-Delay-Time | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Delay-Time". |
| Acct-Input-Octets | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Input-Octets". |
| Acct-Input-Packets | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Input-Packets". |
| Acct-Output-Octets | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Output-Octets". |
| Acct-Output-Packets | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Output-Packets". |
| Acct-Session-Id | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Session-Id". |
| Acct-Session-Time | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Session-Time". |
| Acct-Status-Type | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Status-Type". |
| Acct-Terminate-Cause | additional.fields[].value.string_value | O valor é extraído do campo "Acct-Terminate-Cause". |
| ACSVersion | additional.fields[].value.string_value | O valor é extraído do campo "ACSVersion". |
| AD-Domain | principal.group.group_display_name | O valor é extraído do campo "AD-Domain". |
| AD-IP-Address | principal.ip | O valor é extraído do campo "AD-IP-Address". |
| Called-Station-ID | additional.fields[].value.string_value | O valor é extraído do campo "Called-Station-ID". |
| Calling-Station-ID | additional.fields[].value.string_value | O valor é extraído do campo "Calling-Station-ID". |
| Turma | additional.fields[].value.string_value | O valor é extraído do campo "Classe". |
| CmdSet | (não mapeado) | Não mapeado para o objeto IDM. |
| ConfigVersionId | additional.fields[].value.number_value | O valor é extraído do campo "ConfigVersionId" e convertido em um ponto flutuante. |
| DestinationIPAddress | target.ip, intermediary.ip | O valor é extraído do campo "DestinationIPAddress". "intermediary.ip" é derivado do endereço IP do dispositivo. |
| DestinationPort | target.port | O valor é extraído do campo "DestinationPort" e convertido em um número inteiro. |
| Endereço IP do dispositivo | intermediary.ip | O valor é extraído do campo "Endereço IP do dispositivo". |
| Porta do dispositivo | intermediary.port | O valor é extraído do campo "Porta do dispositivo" e convertido em um número inteiro. |
| DetailedInfo | security_result.summary, security_result.description, security_result.action | Se DetailedInfo for "Authentication succeed", security_result.summary será "successful login occurred" e security_result.action será ALLOW. Se DetailedInfo contiver "Invalid username or password specified", security_result.summary será "failed login occurred" e security_result.action será BLOCK. security_result.description é derivado de log_header. |
| Framed-IP-Address | principal.ip | O valor é extraído do campo "Framed-IP-Address". |
| Framed-Protocol | additional.fields[].value.string_value | O valor é extraído do campo "Framed-Protocol". |
| NAS-IP-Address | target.ip | O valor é extraído do campo "NAS-IP-Address". |
| NAS-Port | additional.fields[].value.string_value | O valor é extraído do campo "NAS-Port". |
| NAS-Port-Id | target.port | O valor é extraído do campo "NAS-Port-Id" e convertido em um número inteiro. |
| NAS-Port-Type | additional.fields[].value.string_value | O valor é extraído do campo "NAS-Port-Type". |
| NetworkDeviceName | target.hostname | O valor é extraído do campo "NetworkDeviceName". |
| Protocolo | additional.fields[].value.string_value | O valor é extraído do campo "Protocolo". |
| RadiusPacketType | (não mapeado) | Não mapeado para o objeto IDM. |
| Remote-Address | principal.ip, target.ip | O valor é extraído do campo "Remote-Address" e analisado como um endereço IP. Ele é mapeado para principal.ip em eventos de autenticação e target.ip em eventos de contabilidade e diagnóstico. |
| RequestLatency | additional.fields[].value.string_value | O valor é extraído do campo "RequestLatency". |
| Resposta | principal.user.userid | Se a resposta contiver "User-Name", o nome de usuário será extraído e mapeado para principal.user.userid. |
| SelectedAccessService | additional.fields[].value.string_value | O valor é extraído do campo "SelectedAccessService". |
| SelectedAuthenticationIdentityStores | security_result.detection_fields[].value | O valor é extraído do campo "SelectedAuthenticationIdentityStores". |
| SelectedAuthorizationProfiles | security_result.detection_fields[].value | O valor é extraído do campo "SelectedAuthorizationProfiles". |
| Service-Type | additional.fields[].value.string_value | O valor é extraído do campo "Tipo de serviço". |
| Tunnel-Client-Endpoint | additional.fields[].value.string_value | O valor é extraído do campo "Tunnel-Client-Endpoint" e analisado como um endereço IP. |
| Usuário | target.user.userid | O valor é extraído do campo "Usuário". |
| Nome de usuário | target.user.userid, principal.mac | Se UserName for um endereço MAC, ele será analisado e mapeado para principal.mac. Caso contrário, será mapeado para target.user.userid. |
| ac-user-agent | network.http.user_agent | O valor é extraído do campo "ac-user-agent". |
| gato | metadata.description | O valor é extraído do campo "cat". |
| device-mac | principal.mac | O valor é extraído do campo "device-mac", dois-pontos são adicionados e o valor é convertido para minúsculas. Se device-mac for "00", ele será substituído por "00:00:00:00:00:00". |
| device-platform | principal.asset.platform_software.platform | Se device-platform for "win", o valor "WINDOWS" será atribuído a principal.asset.platform_software.platform. |
| device-platform-version | principal.asset.platform_software.platform_version | O valor é retirado do campo "device-platform-version". |
| device-public-mac | principal.mac | O valor é extraído do campo "device-public-mac", os hífens são substituídos por dois-pontos, e o valor é convertido em minúsculas. |
| device-type | principal.asset.hardware.model | O valor é extraído do campo "tipo de dispositivo". |
| device-uid | principal.asset.asset_id | O valor é extraído do campo "device-uid" e precedido por "ASSET ID: ". |
| device-uid-global | principal.asset.product_object_id | O valor é extraído do campo "device-uid-global". |
| nome do host | principal.hostname | O valor é extraído do campo "Nome do host". |
| ip:source-ip | principal.ip | O valor é extraído do campo "ip:source-ip". |
| kv.ADDomain | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.Airespace-Wlan-Id | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.AuthenticationIdentityStore | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.AVPair | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.CVPN3000/ASA/PIX7.x-DAP-Tunnel-Group-Name | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.CVPN3000/ASA/PIX7.x-Group-Based-Address-Pools | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.ExternalGroups | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.FailureReason | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.IdentityAccessRestricted | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.IdentityGroup | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.NAS-Identifier | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.SelectedShellProfile | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.ServiceSelectionMatchedRule | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.State | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.Step | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.Tunnel-Medium-Type | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.Tunnel-Private-Group-ID | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.Tunnel-Type | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.UseCase | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.UserIdentityGroup | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.VendorSpecific | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.attribute-131 | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.attribute-89 | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.cisco-av-pair | (não mapeado) | Não mapeado para o objeto IDM. |
| kv.cisco-av-pair:CiscoSecure-Group-Id | (não mapeado) | Não mapeado para o objeto IDM. |
| leef_version | (não mapeado) | Não mapeado para o objeto IDM. |
| log_header | metadata.description | O valor é extraído do campo "log_header". |
| log_id | metadata.product_log_id | O valor é extraído do campo "log_id". |
| log_type | metadata.product_event_type | O valor é extraído do campo "log_type". |
| message_severity | (não mapeado) | Não mapeado para o objeto IDM. |
| produto | metadata.product_name | O valor é extraído do campo do produto. |
| product_version | metadata.product_version | O valor é extraído do campo "product_version". |
| server_host | target.hostname | O valor é extraído do campo "server_host". |
| timestamp | metadata.event_timestamp | O valor é extraído dos campos de carimbo de data/hora e fuso horário (depois de remover os dois pontos). O valor combinado é analisado como um carimbo de data/hora. |
| url | network.dns.questions[].name | O valor é extraído do campo "URL". |
| fornecedor | metadata.vendor_name | O valor é extraído do campo "fornecedor". Definido como "GENERIC_EVENT" inicialmente e, em seguida, substituído com base no log_type e nos campos analisados. Pode ser "USER_LOGIN", "USER_UNCATEGORIZED", "NETWORK_DNS", "NETWORK_CONNECTION", "STATUS_UPDATE" ou "STATUS_UNCATEGORIZED". Definido como "Cisco" inicialmente e, em seguida, possivelmente substituído pelo campo "vendor". Definido como "ACS" inicialmente e, em seguida, possivelmente substituído pelo campo do produto. Defina como "CISCO_ACS". Defina como "USERNAME_PASSWORD". Defina como "TACACS". Definido como "UDP" para eventos de diagnóstico e contabilidade RADIUS. Definido como "DNS" para eventos de DNS. Derivado do campo "security_action", que é definido com base no sucesso ou não do login. Definido como "login bem-sucedido" para logins bem-sucedidos e "falha no login" para logins com falha. Também pode ser definido como "passed" para determinados eventos de diagnóstico do armazenamento de identidades. Definido como "LOW" para tentativas de login com falha. Construído adicionando "ASSET ID: " ao campo "device-uid". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.