Coletar registros do VSFTPD
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
- 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 do 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" /quiet
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.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
- 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).
- Localize o arquivo
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
- Faça login no host VSFTPD.
Para instalar o rsyslog no Ubuntu/Debian, execute o seguinte comando:
sudo apt install rsyslog
Para instalar o rsyslog no CentOS/RHEL, execute o seguinte comando:
sudo yum install rsyslog
Edite a configuração do vsftpd para usar o Syslog:
sudo vi /etc/vsftpd.conf
Verifique se os seguintes parâmetros estão definidos:
syslog_enable=YES xferlog_enable=NO log_ftp_protocol=YES
Salve e saia.
Reinicie o vsftpd:
sudo systemctl restart vsftpd
Edite a configuração do rsyslog para encaminhar registros ao agente do Bindplane:
sudo nano /etc/rsyslog.d/90-vsftpd.conf
Adicione a seguinte linha para encaminhar registros usando
UDP
(porta padrão514
):if ($programname == 'vsftpd') then @@BINDPLANE_IP:514
Substitua
BINDPLANE_IP
pelo endereço IP real do agente do Bindplane.- Use
@
para UDP e@@
para TCP.
- Use
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.