Coletar registros do Cisco Secure ACS

Compatível com:

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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. 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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. 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

  1. Abra o prompt de comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Aguarde a conclusão da instalação.

  4. 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

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Aguarde a conclusão da instalação.

  4. 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.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Editar o arquivo de configuração

  • Substitua todo o conteúdo de config.yaml pela 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: use udplog para syslog UDP ou tcplog para syslog TCP.
      • 0.0.0.0: endereço IP para escutar (0.0.0.0 para 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
      • 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.
      • 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, Enter e Ctrl+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 o seguinte comando:

    sudo systemctl restart observiq-otel-collector
    
    1. Verifique se o serviço está em execução:

        sudo systemctl status observiq-otel-collector
      
    2. Verifique 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-collector
      
    • Console de serviços:

      1. Pressione Win+R, digite services.msc e pressione Enter.
      2. Localize o Coletor do OpenTelemetry da observIQ.
      3. Clique com o botão direito do mouse e selecione Reiniciar.

      4. Verifique se o serviço está em execução:

        sc query observiq-otel-collector
        
      5. Verifique se há erros nos registros:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configurar o encaminhamento do Syslog no Cisco Secure ACS

  1. Faça login na interface da Web do Cisco Secure ACS.
  2. Acesse Administração do sistema > Configuração > Configuração de registros > Destinos de registros remotos.
  3. Clique em Criar para adicionar um novo destino de registro remoto.
  4. 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).
  5. Clique em Enviar.
  6. Acesse Administração do sistema > Configuração > Configuração de registro > Categorias de registro.
  7. Selecione as categorias de registros a serem encaminhadas:
    • Auditoria da AAA
    • Diagnóstico de AAA
    • Auditoria administrativa e operacional
    • Diagnóstico do sistema
  8. Para cada categoria selecionada, clique no nome dela.
  9. Acesse a guia Destino de registro remoto.
  10. Mova o destino de registro remoto criado (por exemplo, Google-SecOps-Bindplane) de Disponível para Selecionado.
  11. Clique em Salvar.
  12. 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.