Coletar registros do VSFTPD

Compatível com:

Neste documento, explicamos como ingerir registros do VSFTPD no Google Security Operations usando o Bindplane. O analisador usa padrões grok para extrair campos dos registros, mapeando-os para a UDM. Ele processa vários tipos de registros, incluindo logins, uploads, downloads e operações de diretório, enriquecendo os dados com contexto adicional, como informações e ações de SSL/TLS (permitir/bloquear). Ele também realiza transformações específicas para diferentes tipos de mensagens de registro, como extrair códigos e descrições de resposta e converter tamanhos de arquivo em números inteiros.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Instância do Google SecOps
  • Windows 2016 ou mais recente ou um host Linux com systemd
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
  • Acesso privilegiado ao host com VSFTPD

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 do 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
    

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
    

Outros recursos de instalação

Para mais opções de instalação, consulte o guia de instalação.

Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:
    • Localize o arquivo config.yaml. Normalmente, ele fica no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    • Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Bloco de Notas).
  2. Edite o arquivo config.yaml da seguinte forma:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            log_type: 'VSFTPD'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
    • Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
    • Substitua <customer_id> pelo ID do cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.

Reinicie o agente do Bindplane para aplicar as mudanças

  • Para reiniciar o agente do Bindplane em Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurar o Syslog no VSFTPD

  1. Faça login no host VSFTPD.
  2. Para instalar o rsyslog no Ubuntu/Debian, execute o seguinte comando:

    sudo apt install rsyslog
    
  3. Para instalar o rsyslog no CentOS/RHEL, execute o seguinte comando:

    sudo yum install rsyslog
    
  4. Edite a configuração do vsftpd para usar o Syslog:

    sudo vi /etc/vsftpd.conf
    
  5. Verifique se os seguintes parâmetros estão definidos:

    syslog_enable=YES
    xferlog_enable=NO
    log_ftp_protocol=YES
    
  6. Salve e saia.

  7. Reinicie o vsftpd:

    sudo systemctl restart vsftpd
    
  8. Edite a configuração do rsyslog para encaminhar registros ao agente do Bindplane:

    sudo nano /etc/rsyslog.d/90-vsftpd.conf
    
  9. Adicione a seguinte linha para encaminhar registros usando UDP (porta padrão 514):

    if ($programname == 'vsftpd') then @@BINDPLANE_IP:514
    
  10. Substitua BINDPLANE_IP pelo endereço IP real do agente do Bindplane.

    • Use @ para UDP e @@ para TCP.
  11. Reinicie o rsyslog:

    sudo systemctl restart rsyslog
    

Tabela de mapeamento da UDM

Campo de registro Mapeamento do UDM Lógica
certificate security_result.detection_fields.key: "cert"
security_result.detection_fields.value: valor de certificate
O valor do campo certificate é mapeado para um objeto security_result.detection_fields com a chave "cert".
cipher network.tls.cipher O valor do campo cipher é mapeado diretamente.
client_ip principal.ip O valor do campo client_ip é mapeado diretamente.
date metadata.event_timestamp Usado com month, year e time para construir o metadata.event_timestamp. O formato é derivado do campo timestamp no registro bruto, analisado e convertido em um objeto de carimbo de data/hora.
day metadata.event_timestamp Usado com month, year e time para construir o metadata.event_timestamp.
desc metadata.description O valor do campo desc (extraído do campo type) é mapeado diretamente. Isso se aplica às operações "MKDIR", "RMDIR" e "DELETE".
description network.ftp.command
security_result.description
target.file.full_path
Se type for "Comando FTP", o valor será mapeado para network.ftp.command. Se type for "DEBUG" e não corresponder a padrões SSL específicos, ele será mapeado para security_result.description. Se type começar com "OK" e não for "OK LOGIN", e o registro descrever uma operação de arquivo (MKDIR, RMDIR, DELETE), ele será mapeado para target.file.full_path.
file_name target.file.full_path O valor do campo file_name é mapeado diretamente.
file_size network.received_bytes
network.sent_bytes
Se type for "OK DOWNLOAD" ou "FAIL DOWNLOAD", o valor será convertido em um número inteiro sem sinal e mapeado para network.received_bytes. Se type for "OK UPLOAD" ou "FAIL UPLOAD", o valor será convertido em um número inteiro sem sinal e mapeado para network.sent_bytes. Definido como "USER_LOGIN" se type for "OK LOGIN". Definido como "FILE_UNCATEGORIZED" se type estiver relacionado a operações de arquivo ("OK UPLOAD", "OK DOWNLOAD", "FAIL DOWNLOAD", "OK MKDIR", "OK RMDIR", "OK DELETE", "FAIL UPLOAD"). Defina como "STATUS_UPDATE" para todos os outros valores de type. Sempre definido como "VSFTPD". Sempre definido como "VSFTPD". Sempre definido como "VSFTPD".
month metadata.event_timestamp Usado com day, year e time para construir o metadata.event_timestamp.
pid principal.process.pid O valor do campo pid é mapeado diretamente.
response_code network.http.response_code O valor do campo response_code é convertido em um número inteiro e mapeado.
reused_status security_result.detection_fields.key: "status reutilizado"
security_result.detection_fields.value: valor de reused_status
O valor do campo reused_status é mapeado para um objeto security_result.detection_fields com a chave "reused status".
speed additional.fields.key: "download_speed" ou "upload_speed"
additional.fields.value.string_value: valor de speed
Se type for "OK DOWNLOAD" ou "FAIL DOWNLOAD", o valor será mapeado para additional.fields com a chave "download_speed". Se type for "OK UPLOAD" ou "FAIL UPLOAD", o valor será mapeado para additional.fields com a chave "upload_speed".
ssl_shutdown_state security_result.detection_fields.key: "SSL Shutdown State"
security_result.detection_fields.value: valor de ssl_shutdown_state
O valor do campo ssl_shutdown_state é mapeado para um objeto security_result.detection_fields com a chave "SSL Shutdown State".
ssl_version network.tls.version O valor do campo ssl_version é mapeado diretamente.
time metadata.event_timestamp Usado com day, month e year para construir o metadata.event_timestamp.
type metadata.description
security_result.action_details
O valor do campo type é mapeado para metadata.description, exceto quando é "OK LOGIN". Ele também é mapeado para security_result.action_details quando indica uma ação de permitir ou bloquear (começa com "OK" ou "FAIL").
userid principal.user.userid
target.user.userid
Se type for "OK LOGIN", o valor será mapeado para target.user.userid. Caso contrário, ele será mapeado para principal.user.userid.
year metadata.event_timestamp Usado com day, month e time para construir o metadata.event_timestamp. Defina como "NETWORK" se type for "OK LOGIN". Defina como "MACHINE" se type for "OK LOGIN". Defina como "ALLOW" se type começar com "OK". Definido como "BLOCK" se type começar com "FAIL".

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