Coletar registros do Juniper Junos

Compatível com:

Este documento explica como ingerir registros do Juniper Junos no Google Security Operations usando o Bindplane.

O Juniper Junos OS é o sistema operacional que alimenta roteadores, switches e dispositivos de segurança da Juniper Networks. Ela oferece uma plataforma unificada para gerenciamento de infraestrutura de rede, roteamento, comutação e funções de segurança com registro abrangente de eventos do sistema, de segurança e tráfego de rede. O analisador extrai campos do syslog do Juniper Junos e registros formatados em 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 ao dispositivo Juniper que executa o Junos OS

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: 'JUNIPER_JUNOS'
            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 (JUNIPER_JUNOS)

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 de syslog no Juniper Junos

  1. Conecte-se ao dispositivo Juniper via SSH ou console.
  2. Insira o modo de configuração:

    configure
    
  3. Configure o host syslog com os seguintes comandos:

    set system syslog host BINDPLANE_IP any info
    set system syslog host BINDPLANE_IP port 514
    set system syslog host BINDPLANE_IP facility-override local7
    set system syslog host BINDPLANE_IP log-prefix JUNOS
    
    • Substitua BINDPLANE_IP pelo endereço IP do host do agente do Bindplane.
  4. Configure outras origens de registros (opcional, mas recomendado):

    set system syslog host BINDPLANE_IP authorization info
    set system syslog host BINDPLANE_IP daemon info
    set system syslog host BINDPLANE_IP kernel info
    set system syslog host BINDPLANE_IP firewall any
    set system syslog host BINDPLANE_IP interactive-commands info
    
  5. Configurar dados estruturados do syslog (opcional para análise avançada):

    set system syslog host BINDPLANE_IP structured-data
    
  6. Confirme a configuração:

    commit and-quit
    
  7. Verifique a configuração do syslog:

    show system syslog host BINDPLANE_IP
    
  8. 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
DPT target.port A porta de destino da conexão de rede, convertida em um número inteiro.
DST target.ip O endereço IP de destino da conexão de rede.
FLAG additional.fields{}.key: "FLAG", additional.fields{}.value.string_value: Value of FLAG A flag TCP associada à conexão de rede.
ID additional.fields{}.key: "ID", additional.fields{}.value.string_value: Value of ID O campo de identificação de IP.
IN additional.fields{}.key: "IN", additional.fields{}.value.string_value: Value of IN A interface de rede de entrada.
LEN additional.fields{}.key: "LEN", additional.fields{}.value.string_value: Value of LEN O comprimento do pacote IP.
MAC principal.mac O endereço MAC extraído do campo MAC.
OUT additional.fields{}.key: "OUT", additional.fields{}.value.string_value: Value of OUT A interface de rede de saída.
PREC additional.fields{}.key: "PREC", additional.fields{}.value.string_value: Value of PREC O campo "Precedência" no cabeçalho IP.
PROTO network.ip_protocol O protocolo IP usado na conexão de rede.
RES additional.fields{}.key: "RES", additional.fields{}.value.string_value: Value of RES Campo reservado no cabeçalho TCP.
SPT principal.port A porta de origem da conexão de rede, convertida em um número inteiro.
SRC principal.ip O endereço IP de origem da conexão de rede.
TOS additional.fields{}.key: "TOS", additional.fields{}.value.string_value: Value of TOS O campo "Tipo de serviço" no cabeçalho IP.
TTL network.dns.additional.ttl Valor de tempo de vida, convertido em um número inteiro sem sinal.
URGP additional.fields{}.key: "URGP", additional.fields{}.value.string_value: Value of URGP Campo de ponteiro urgente no cabeçalho TCP.
WINDOW additional.fields{}.key: "WINDOW_SIZE", additional.fields{}.value.string_value: Value of WINDOW O tamanho da janela TCP.
ação security_result.action A ação realizada pelo firewall, extraída da mensagem CEF.
agt observer.ip O endereço IP do agente.
amac target.mac O endereço MAC do destino, convertido em letras minúsculas e com hífens substituídos por dois-pontos.
app target.application O aplicativo envolvido no evento.
artz observer.zone O fuso horário do observador.
atz target.location.country_or_region O fuso horário de destino.
categoryBehavior additional.fields{}.key: "Category Behavior", additional.fields{}.value.string_value: Value of categoryBehavior with slashes removed O comportamento da categoria.
categoryDeviceGroup additional.fields{}.key: "Category Device Group", additional.fields{}.value.string_value: Value of categoryDeviceGroup with slashes removed O grupo de dispositivos de categoria.
categoryObject additional.fields{}.key: "Category Object", additional.fields{}.value.string_value: Value of categoryObject with slashes removed O objeto de categoria.
categoryOutcome additional.fields{}.key: "Category Outcome", additional.fields{}.value.string_value: Value of categoryOutcome with slashes removed O resultado da categoria.
categorySignificance additional.fields{}.key: "category Significance", additional.fields{}.value.string_value: Value of categorySignificance A significância da categoria.
comando target.process.command_line O comando foi executado.
cs1Label additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: Value of corresponding CEF field Rótulo e valor do campo de string personalizada 1 da mensagem CEF.
cs2Label additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: Value of corresponding CEF field Rótulo e valor do campo de string personalizada 2 da mensagem CEF.
cs3Label additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Value of corresponding CEF field Rótulo e valor do campo de string personalizada 3 da mensagem CEF.
cs4Label additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Value of corresponding CEF field Rótulo e valor do campo de string personalizada 4 da mensagem CEF.
cs5Label additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Value of corresponding CEF field Rótulo e valor do campo de string personalizada 5 da mensagem CEF.
cs6Label additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: Value of corresponding CEF field Rótulo e valor do campo de string personalizado 6 da mensagem CEF.
dhost target.hostname Nome do host de destino.
deviceCustomString1 additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: Value of deviceCustomString1 String personalizada do dispositivo 1.
deviceCustomString2 additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: Value of deviceCustomString2 String personalizada do dispositivo 2.
deviceCustomString3 additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Value of deviceCustomString3 String personalizada do dispositivo 3.
deviceCustomString4 additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Value of deviceCustomString4 String personalizada do dispositivo 4.
deviceCustomString5 additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Value of deviceCustomString5 String personalizada do dispositivo 5.
deviceCustomString6 additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: Value of deviceCustomString6 String personalizada do dispositivo 6.
deviceDirection network.direction A direção do tráfego de rede.
deviceEventClassId additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of deviceEventClassId O ID da classe de evento do dispositivo.
deviceFacility observer.product.subproduct A instalação do dispositivo.
deviceProcessName about.process.command_line O nome do processo do dispositivo.
deviceSeverity security_result.severity A gravidade do dispositivo.
deviceTimeZone observer.zone O fuso horário do dispositivo.
deviceVendor metadata.vendor_name O fornecedor do dispositivo.
deviceVersion metadata.product_version A versão do dispositivo.
dpt target.port A porta de destino.
dst target.ip O endereço IP de destino.
duser target.user.user_display_name O usuário de destino.
eventId additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of eventId ID do evento.
event_time metadata.event_timestamp O horário em que o evento ocorreu, analisado da mensagem.
firewall_action security_result.action_details A ação tomada pelo firewall.
host principal.hostname, intermediary.hostname O nome do host do dispositivo que gerou o log. Usado para principal e intermediário em casos diferentes.
msg security_result.summary A mensagem associada ao evento, usada como um resumo do resultado de segurança.
nome metadata.product_event_type O nome do evento.
process_name additional.fields{}.key: "process_name", additional.fields{}.value.string_value: Value of process_name O nome do processo.
p_id target.process.pid O ID do processo, convertido em uma string.
sha256 principal.process.file.sha256 O hash SHA256 de um arquivo, extraído das informações da chave SSH2.
shost principal.hostname Nome do host de origem.
source_address principal.ip O endereço IP de origem.
source_port principal.port A porta de origem, convertida em um número inteiro.
src principal.ip O endereço IP de origem.
src_ip principal.ip O endereço IP de origem.
src_port principal.port A porta de origem, convertida em um número inteiro.
ssh2 security_result.detection_fields{}.key: "ssh2", security_result.detection_fields{}.value: Value of ssh2 Informações da chave SSH2.
subtype metadata.product_event_type O subtipo do evento.
task_summary security_result.description O resumo da tarefa, usado como a descrição do resultado de segurança.
timestamp metadata.event_timestamp O carimbo de data/hora do evento.
usuário target.user.userid O usuário associado ao evento.
nome de usuário principal.user.userid O nome de usuário associado ao evento.
user_name principal.user.userid O nome de usuário.
metadata.vendor_name Fixado no código como "Juniper Firewall". Fixado no código como "Juniper Firewall". Codificado como "JUNIPER_JUNOS". Determinado pela lógica do analisador com base no conteúdo do registro. O padrão é "STATUS_UPDATE" se não for uma mensagem CEF e nenhum outro tipo de evento específico for identificado. Defina como "NETWORK_HTTP" para mensagens CEF. Se nenhum campo "desc" estiver presente, este campo será preenchido com a "message_description" extraída da mensagem de registro bruta.

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