Coletar registros de switches da Dell

Versão do analisador:11.0

Compatível com:

Este documento explica como ingerir registros de switches Dell no Google Security Operations usando o agente Bindplane.

Esse analisador extrai registros de switch da Dell, normaliza carimbos de data/hora e usa padrões grok para estruturar a mensagem de registro em pares de chave-valor. Em seguida, ele mapeia esses campos extraídos para o Modelo de Dados Unificado (UDM), processando vários formatos de registro e enriquecendo os dados com informações contextuais, como detalhes de recursos e gravidade de segurança.

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 do Linux com systemd
  • Conectividade de rede entre o agente do Bindplane e o switch da Dell
  • Se estiver em execução atrás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
  • Uma conexão ativa e credenciais administrativas para um switch Dell

Receber credenciais do Google SecOps para o agente do Bindplane

Para autenticar o agente do Bindplane no Google SecOps, escolha um dos seguintes métodos:

  • Novas implantações: use a API Chronicle (opção 1).
  • Implantações legadas: continue usando o arquivo de autenticação de ingestão (opção 2) até que a API Ingestion seja desativada em 20 de julho de 2027.
  1. Faça login no consoleGoogle Cloud e selecione o projeto Google Cloud vinculado à sua instância do Google SecOps.
  2. Acesse IAM e administrador > Contas de serviço.
  3. Clique em Criar conta de serviço.
  4. Informe os seguintes detalhes de configuração:
    • Nome da conta de serviço: insira um nome para a conta (por exemplo, bindplane-ingest).
    • Descrição da conta de serviço: insira uma descrição (por exemplo, Bindplane agent log ingestion).
  5. Clique em Criar e continuar.
  6. Na seção Conceder a essa conta de serviço acesso ao projeto, clique em Selecionar um papel e escolha Editor do Chronicle.
  7. Clique em Continuar e depois em Concluído.
  8. Clique na conta de serviço que você criou e acesse a guia Chaves.
  9. Clique em Adicionar chave > Criar nova chave.
  10. Selecione JSON e clique em Criar. O arquivo de chave é baixado para o computador.
  11. Salve o arquivo de chave como ingestion-auth.json no diretório do coletor do BindPlane (/opt/observiq-otel-collector/ingestion-auth.json no Linux ou C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json no Windows) ou atualize creds_file_path em config.yaml para corresponder ao caminho em que você o salvou.
  12. Acesse IAM e administrador > Configurações e copie o Número do projeto. Você vai precisar dele para a configuração do exportador.

Opção 2: baixar o arquivo de autenticação de ingestão (legado)

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Faça o download do arquivo de autenticação de ingestão.
  4. Salve o arquivo com segurança no sistema em que o agente do 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 de 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

  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 precisa aparecer como RUNNING.

Instalação do Linux

  1. Abra um terminal com privilégios de raiz 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 precisa aparecer como 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 enviar ao Google SecOps

Localizar o arquivo de configuração

  • Linux:

    sudo nano /opt/observiq-otel-collector/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/dell_switch:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: DELL_SWITCH
        raw_log_field: body
    
    service:
      pipelines:
        logs/dell_switch_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/dell_switch
    

Parâmetros de configuração

Substitua os seguintes marcadores de posição:

  • Configuração do receptor:

    • listen_address: endereço IP e porta a serem detectados:
      • 0.0.0.0 para ouvir em todas as interfaces (recomendado)
      • A porta 514 é a porta syslog padrão (requer raiz no Linux; use 1514 para não raiz)
  • Configuração do exportador:

    • creds_file_path: caminho completo para o arquivo de chave JSON da conta de serviço (opção 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: ID do cliente copiado do console do Google SecOps
    • location: substitua <LOCATION> pela região da sua instância do Google SecOps (por exemplo, us, europe ou asia-southeast1). O exportador adiciona esse valor ao prefixo chronicle.googleapis.com. Consulte Endpoints regionais para ver a lista completa.
    • project: substitua <PROJECT_NUMBER> pelo número do projeto em IAM e administrador > Configurações.
    • endpoint: mantenha definido como chronicle.googleapis.com.

Exportador da API de ingestão legada

  • Se você usar o arquivo de autenticação de ingestão da opção 2, substitua o bloco exporters pelo seguinte. Defina creds_file_path como o caminho para o arquivo de autenticação de ingestão e, se a instância estiver fora dos EUA, substitua malachiteingestion-pa.googleapis.com pelo endpoint regional (por exemplo, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/dell_switch:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: DELL_SWITCH
        raw_log_field: body
    

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 no 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 a exportação de syslog de um switch Dell

  1. Conecte-se ao switch da Dell usando SSH ou a porta do console.
  2. Faça login com credenciais administrativas.
  3. Use o comando a seguir para especificar o endereço IP ou o nome do host do servidor syslog (substitua <syslog-server-ip>, <udp|tcp> e <syslog-port-number> pelos detalhes reais):

    logging host <syslog-server-ip> transport <udp|tcp> port <syslog-port-number>
    
  4. Opcional: defina o nível mínimo de gravidade para que as mensagens sejam enviadas ao servidor syslog. Por exemplo, para registrar mensagens informativas e acima:

    logging level informational
    
  5. Salve a configuração em execução na configuração de inicialização para garantir que as mudanças persistam em reinicializações:

    copy running-config startup-config
    
  6. Salve a configuração:

    write memory
    

Exemplos de registros de switch da Dell compatíveis

  • SYSLOG

    {
      "priority": 165,
      "version": 1,
      "timestamp": "2023-10-12T12:37:17.249566+00:00",
      "hostname": "switch-lon-01",
      "app_name": "dn_alm",
      "proc_id": "940",
      "message": "Node.1-Unit.1:PRI [event], Dell EMC (OS10) %ALM_AUTH_EVENT: Authentication event was raised MESSAGE=pam_unix(sshd:session): session opened for user service_account by (uid=0)"
    }
    
  • JSON

    {
      "appname": "SNOOP",
      "facility": 23,
      "hostname": "access-switch-a1",
      "message": "snooping.c(2177) 70820228 %% DBG Report from intf Gi6/0/11 ignored -- no router ports on vlan 193",
      "priority": 191,
      "proc_id": "snoopTask"
    }
    
  • Formato de KV / eventos

    Events: 
      Eventid        = {38812} 
      Occurrencetime = {3 Sept 2024 00:06:06} 
      Eventseverity  = {Minor} 
      Jobid          = {30506} 
      Computer       = {backup-server-01} 
      Program        = {DatabaseAgent} 
      Description    = {Block Change Tracking is found DISABLED on Oracle DB [PROD_DB]. Incremental backups may run slow.}
    
  • Auditar SYSLOG

    {
        "priority": 110,
        "version": 1,
        "timestamp": "2023-12-12T00:58:26.893679+00:00",
        "hostname": "core-switch-palf",
        "app_name": ".clish",
        "proc_id": "29156",
        "message": "Node.1-Unit.1:PRI [audit], User sec_admin on /dev/pts/0 from 10.0.0.50 used cmd: 'terminal length 0' - completed"
    }
    
  • Formato de trap SNMP / TRAPMGR

    {
      "priority": 189,
      "version": 1,
      "timestamp": "2023-12-28T23:37:27.394Z",
      "hostname": "dist-switch-01",
      "app_name": "TRAPMGR",
      "proc_id": "trapTask",
      "extensions": {
        "origin_ip": "192.168.1.1",
        "software": "N3000_Series",
        "swVersion": "6.3.2.3"
      },
      "message": "traputil.c(721) 1056839 %% Gi1/0/5 is transitioned from the Learning state to the Forwarding state"
    }
    

Tabela de mapeamento de UDM

Campo de registro Mapeamento de UDM Lógica
acct principal.user.userid Usado como userid se o campo user não estiver presente.
addr principal.asset.ip, principal.ip Analisado como um endereço IP e usado para o IP do principal e do recurso se for um IP válido e diferente do nome do host.
application principal.application Mapeado diretamente.
asset principal.asset.attribute.labels.value Mapeado diretamente para o valor do rótulo do recurso, com a chave codificada como "Nome do recurso". Se o campo de recurso estiver vazio e a mensagem contiver "Dell", o recurso será definido como "Dell".
auid principal.resource.attribute.labels.value Mapeado diretamente para um rótulo com a chave auid em principal.resource.attribute.labels.
datetime metadata.event_timestamp Analisado de vários formatos no campo de mensagem e convertido em um carimbo de data/hora.
dest_ip target.asset.ip, target.ip Mapeado para o IP de destino e o IP do recurso de destino.
enterpriseId principal.resource.attribute.labels.value Mapeado para um rótulo com a chave enterpriseId em principal.resource.attribute.labels.
exe sec_result.detection_fields.value Mapeado para um campo de detecção com a chave exe.
File target.file.full_path Mapeado diretamente.
grantors principal.resource.attribute.labels.value Mapeado para um rótulo com a chave grantors em principal.resource.attribute.labels.
host principal.hostname, principal.asset.hostname, metadata.event_type Usado como nome do host principal e nome do host do recurso. Se host estiver presente, metadata.event_type será definido como STATUS_UPDATE. Se o nome do host estiver presente, mas o host não, o nome do host será usado como host.
hostname principal.asset.ip, principal.ip, host Se for um IP válido, usado para o IP principal e o IP do recurso. Se host estiver vazio, ele será usado como host.
ID principal.resource.attribute.labels.value Mapeado para um rótulo com a chave ID em principal.resource.attribute.labels.
ip principal.asset.ip, principal.ip Mapeado para o IP principal e o IP do recurso.
is_synced sec_result.detection_fields.value Mapeado para um campo de detecção com a chave is_synced.
local target.asset.ip, target.ip, target.port Analisado para extrair o IP e a porta locais, mapeados para o IP de destino, o IP do recurso de destino e a porta de destino.
local_ip target.asset.ip, target.ip Extraído do campo local e mapeado para o IP de destino e o IP do recurso de destino.
local_port target.port Extraído do campo local e mapeado para a porta de destino.
mac principal.mac Se for um endereço MAC válido, mapeado para o endereço MAC principal.
msg metadata.description Usado como a descrição do evento, se houver. Também analisado para campos adicionais.
msg1 metadata.description Usado como descrição do evento se msg2 não estiver presente.
msg2 sec_result.description, metadata.event_type, extensions.auth.type Usado como descrição do resultado de segurança. Se ele contiver "opened for user", o tipo de evento será definido como USER_LOGIN e o tipo de autenticação como MACHINE. Se ele contiver "closed for user", o tipo de evento será definido como USER_LOGOUT e o tipo de autenticação como MACHINE.
op metadata.product_event_type Usado como tipo de evento de produto, se presente.
pid principal.process.pid Mapeado diretamente.
port principal.port Mapeado diretamente.
prod_event_type metadata.product_event_type Usado como tipo de evento de produto, se presente.
res sec_result.summary Mapeado diretamente.
sec_description sec_result.description, target.url, target.ip, target.asset.ip, sec_result.action_details Analisado para URL de destino, IP, detalhes da ação e usado como descrição do resultado de segurança.
Server_ID target.resource.product_object_id Mapeado diretamente.
server principal.asset.ip, principal.ip, principal.port Analisado para extrair o IP e a porta do servidor, mapeados para o IP principal, o IP do recurso principal e a porta principal.
server_ip principal.asset.ip, principal.ip Extraído do campo server e mapeado para o IP principal e o IP do recurso principal.
server_port principal.port Extraído do campo server e mapeado para a porta principal.
ses network.session_id Mapeado diretamente.
severity sec_result.severity, metadata.product_event_type Usado para determinar a gravidade do resultado de segurança e o tipo de evento do produto com base em valores específicos.
software principal.asset.software Mapeado diretamente.
softwareName software.name Mapeado diretamente.
Status sec_result.summary Usado como o resumo do resultado de segurança se res não estiver presente.
subj principal.resource.attribute.labels.value Mapeado para um rótulo com a chave subj em principal.resource.attribute.labels.
swVersion software.version Mapeado diretamente.
target_host target.hostname, target.asset.hostname Mapeado diretamente para o nome do host de destino e o nome do host do recurso de destino.
target_ip target.asset.ip, target.ip Mapeado diretamente para o IP de destino e o IP do recurso de destino.
target_url target.url Mapeado diretamente.
target_user_id target.user.userid Mapeado diretamente.
terminal principal.resource.attribute.labels.value Mapeado para um rótulo com a chave terminal em principal.resource.attribute.labels.
tzknown sec_result.detection_fields.value Associado a um campo de detecção com a chave tzknown.
uid principal.resource.attribute.labels.value Mapeado para um rótulo com a chave uid em principal.resource.attribute.labels.
user principal.user.userid, metadata.event_type Usado como ID do usuário principal. Se user estiver presente, metadata.event_type será definido como USER_UNCATEGORIZED.
username target.user.userid Mapeado diretamente para o ID do usuário de destino.
N/A metadata.vendor_name Fixado no código como "Dell".
N/A metadata.product_name Fixado no código como "Dell Switch".
N/A extensions.auth.type Definido como MACHINE para eventos específicos de login/logout.
N/A metadata.event_type Determinado por uma lógica complexa com base em vários campos e condições. O padrão é GENERIC_EVENT, a menos que seja definido de outra forma. Pode ser USER_LOGIN, USER_LOGOUT, USER_UNCATEGORIZED, NETWORK_CONNECTION, NETWORK_UNCATEGORIZED, STATUS_UPDATE ou GENERIC_EVENT.
reason_code event.idm.read_only_udm.security_result.detection_fields Mapeado do registro de alterações
Eventid metadata.product_log_id Mapeado do registro de alterações
Eventseverity security_result.severity Mapeado do registro de alterações
Computer principal.hostname Mapeado do registro de alterações
Program principal.application Mapeado do registro de alterações
Description security_result.description Mapeado do registro de alterações
tzknown", "is_synced" and "exe security_result.detection_fields Mapeado do registro de alterações
res security_result.summary Mapeado do registro de alterações
status security_result.summary Mapeado do registro de alterações
uid", "enterpriseId", "auid", "terminal", "subj", "grantors", and "ID principal.resource.attribute.labels Mapeado do registro de alterações
sec_description security_result.description Mapeado do registro de alterações
action_details security_result.action_details Mapeado do registro de alterações
softwareName principal.asset.software.name Mapeado do registro de alterações
swVersion principal.asset.software.version Mapeado do registro de alterações
port principal_port Mapeado do registro de alterações

Registro de alterações

Ver o registro de alterações deste analisador

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.