Coletar registros do SFTP do VanDyke VShell
Este documento explica como ingerir registros do VanDyke VShell SFTP no Google Security Operations usando o Bindplane com Syslog ou o Amazon S3 com um expedidor de registros. O analisador transforma registros brutos em um formato UDM estruturado. Ele processa os formatos JSON e SYSLOG, extrai campos relevantes, como endereços IP, portas e detalhes de eventos, e enriquece os dados com informações contextuais, como detalhes da plataforma e gravidade da segurança.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Acesso privilegiado ao servidor ou console de gerenciamento do VanDyke VShell
- Para a opção 1: um host Windows 2016 ou mais recente ou Linux com
systemdpara o agente do Bindplane - Para a opção 2: conta da AWS com acesso ao S3 e NXLog/Fluent Bit no servidor VShell
Opção 1: integração via Bindplane e Syslog
Essa opção oferece streaming de registros em tempo real com latência mínima e é recomendada para a maioria das implantações.
- 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 com segurança no sistema em que o Bindplane será instalado ou em que você vai configurar o feed.
Receber o ID de 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 seu 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 este 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,viou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yamlda 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: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com # Custom log type - requires parser extension log_type: 'VANDYKE_SFTP' 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.jsonpara 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. - Para TCP em vez de UDP, substitua
udplogportcplog.
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 bindplane-agentPara 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 encaminhamento de syslog no VanDyke VShell
Para VShell no Windows
- Faça login no Painel de controle do VShell.
- Acesse as configurações de Registro em log.
- Configurar o registro syslog remoto:
- Ative o registro em um servidor syslog remoto.
- Endereço do servidor: insira o endereço IP do agente do Bindplane.
- Porta: digite 514 (ou a porta configurada).
- Protocolo: selecione UDP (ou TCP, se configurado).
- Grupos de mensagens: selecione Conexão, Autenticação, SFTP, FTPS, HTTPS, Erros, Avisos e Informativo.
- Clique em Aplicar > OK.
Para o VShell no Linux/macOS
- Edite o arquivo vshelld_config (normalmente
/etc/vshell/vshelld_config). Configure os seguintes parâmetros:
SyslogFacility LOG_LOCAL3 LogLevel INFOConfigure o syslog do sistema para encaminhar LOG_LOCAL3 ao agente do Bindplane:
- Edite
/etc/rsyslog.confou/etc/syslog-ng/syslog-ng.conf. - Adicione:
local3.* @bindplane-agent-ip:514(para UDP) oulocal3.* @@bindplane-agent-ip:514(para TCP).
- Edite
Reinicie os serviços VShell e syslog:
sudo systemctl restart vshelld sudo systemctl restart rsyslog
Opção 2: integração via AWS S3
Essa opção é útil para ambientes que exigem arquivamento de registros ou em que o encaminhamento direto do syslog não é viável. Isso exige um shipper de registros no servidor VShell, já que o AWS Lambda não pode acessar arquivos locais.
Configurar o bucket do AWS S3 e o IAM para o Google SecOps
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket.
- Salve o Nome e a Região do bucket para referência futura (por exemplo,
vandyke-sftp-logs). - Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como Caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clique em Próxima.
- Clique em Adicionar permissões
Instalar e configurar o Log Shipper no servidor VShell
Escolha uma das seguintes opções com base no seu sistema operacional:
Opção A: usar o NXLog (Windows)
- Faça o download e instale o NXLog Community Edition em nxlog.co.
Editar
C:\Program Files\nxlog\conf\nxlog.conf:<Extension json> Module xm_json </Extension> <Extension syslog> Module xm_syslog </Extension> <Input vshell_log> Module im_file File "C:\\Program Files\\VanDyke Software\\VShell\\Log\\VShell.log" SavePos TRUE <Exec> # Parse VShell log format if $raw_event =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) "(.*)"$/ { $EventTime = $1; $Protocol = $2; $EventType = $3; $SessionID = $4; $ClientIP = $5; $ClientPort = $6; $Username = $7; $Filename = $9; $BytesDown = $10; $BytesUp = $11; $ServerIP = $14; $ServerPort = $15; $EventMessage = $16; # Convert to JSON to_json(); } </Exec> </Input> <Output s3> Module om_exec Command C:\scripts\upload_to_s3.ps1 Args %FILEPATH% </Output> <Route vshell_to_s3> Path vshell_log => s3 </Route>Crie o script do PowerShell
C:\scripts\upload_to_s3.ps1:param([string]$FilePath) $bucket = "vandyke-sftp-logs" $key = "vshell/$(Get-Date -Format 'yyyy/MM/dd/HH')/$(Get-Date -Format 'yyyyMMddHHmmss').json" # Batch logs $logs = Get-Content $FilePath | ConvertFrom-Json $jsonLines = $logs | ForEach-Object { $_ | ConvertTo-Json -Compress } $content = $jsonLines -join "`n" # Upload to S3 Write-S3Object -BucketName $bucket -Key $key -Content $content -ProfileName defaultCrie um perfil de credenciais da AWS:
Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default- Programe o script do PowerShell para ser executado a cada 5 minutos usando o Agendador de tarefas.
Opção B: usar o Fluent Bit (Linux)
Instale o Fluent Bit:
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | shConfigurar
/etc/fluent-bit/fluent-bit.conf:[SERVICE] Flush 5 Daemon On Log_Level info [INPUT] Name tail Path /var/log/vshell/vshell.log Parser vshell_parser Tag vshell.* Refresh_Interval 5 Mem_Buf_Limit 10MB [PARSER] Name vshell_parser Format regex Regex ^(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?<protocol>\S+) (?<event_type>\S+) (?<session_id>\S+) (?<client_ip>\S+) (?<client_port>\S+) (?<username>\S+) (?<dash>\S+) (?<filename>\S+) (?<bytes_down>\S+) (?<bytes_up>\S+) (?<field1>\S+) (?<field2>\S+) (?<server_ip>\S+) (?<server_port>\S+) "(?<event_message>[^"]*)" [OUTPUT] Name s3 Match vshell.* bucket vandyke-sftp-logs region us-east-1 use_put_object On total_file_size 5M upload_timeout 10s compression gzip s3_key_format /vshell/%Y/%m/%d/%H/%{hostname}_%{uuid}.json.gzConfigure as credenciais da AWS:
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEYInicie o Fluent Bit:
sudo systemctl enable fluent-bit sudo systemctl start fluent-bit
Configurar um feed no Google SecOps para ingerir registros do VanDyke VShell
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
VanDyke VShell SFTP logs). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione VanDyke SFTP como o Tipo de registro (personalizado).
- Clique em Próxima.
- Especifique valores para os seguintes parâmetros de entrada:
- URI do S3:
s3://vandyke-sftp-logs/vshell/ - Opções de exclusão de origem: selecione Manter (recomendado) ou a opção de exclusão de acordo com sua preferência.
- Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
- ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3.
- Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3.
- Namespace do recurso: o namespace do recurso.
- Rótulos de ingestão: o rótulo aplicado aos eventos deste feed.
- URI do S3:
- Clique em Próxima.
- Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| agent.id | read_only_udm.observer.asset_id | Concatena "filebeat:" com o valor do campo "agent.id". |
| agent.type | read_only_udm.observer.application | Mapeia diretamente o valor do campo "agent.type" |
| agent.version | read_only_udm.observer.platform_version | Mapeia diretamente o valor do campo "agent.version". |
| ecs.version | read_only_udm.metadata.product_version | Mapeia diretamente o valor do campo "ecs.version". |
| host.architecture | read_only_udm.target.asset.hardware.cpu_platform | Mapeia diretamente o valor do campo "host.architecture". |
| host.hostname | read_only_udm.target.hostname | Mapeia diretamente o valor do campo "host.hostname". |
| host.id | read_only_udm.principal.asset_id | Concatena "VANDYKE_SFTP:" com o valor do campo host.id. |
| host.ip | read_only_udm.target.ip | Mapeia diretamente cada endereço IP na matriz host.ip para um campo read_only_udm.target.ip separado. |
| host.mac | read_only_udm.target.mac | Mapeia diretamente cada endereço MAC na matriz host.mac para um campo read_only_udm.target.mac separado. |
| host.os.kernel | read_only_udm.target.platform_patch_level | Mapeia diretamente o valor do campo "host.os.kernel". |
| host.os.platform | read_only_udm.target.platform | Mapeia o valor de host.os.platform para WINDOWS, LINUX, MAC ou UNKNOWN_PLATFORM com base no valor. |
| host.os.version | read_only_udm.target.platform_version | Mapeia diretamente o valor do campo "host.os.version". |
| log.file.path | read_only_udm.principal.process.file.full_path | Mapeia diretamente o valor do campo "log.file.path". |
| logstash.collect.timestamp | read_only_udm.metadata.collected_timestamp | Analisa o carimbo de data/hora do campo logstash.collect.timestamp e o converte em um objeto de carimbo de data/hora. |
| logstash.irm_environment | read_only_udm.additional.fields.value.string_value | Mapeia diretamente o valor do campo "logstash.irm_environment". A chave é definida como "irm_environment". |
| logstash.irm_region | read_only_udm.additional.fields.value.string_value | Mapeia diretamente o valor do campo "logstash.irm_region". A chave é definida como "irm_region". |
| logstash.irm_site | read_only_udm.additional.fields.value.string_value | Mapeia diretamente o valor do campo logstash.irm_site. A chave é definida como "irm_site". |
| logstash.process.host | read_only_udm.observer.hostname | Mapeia diretamente o valor do campo "logstash.process.host". |
| mensagem | Usado para extrair vários campos usando padrões grok e expressões regulares. | |
| read_only_udm.metadata.event_type | Defina como "NETWORK_FTP" | |
| read_only_udm.metadata.log_type | Definido como "VANDYKE_SFTP" | |
| read_only_udm.metadata.product_event_type | Extraído do campo de mensagem usando um padrão grok | |
| read_only_udm.metadata.product_name | Definido como "VANDYKE_SFTP" | |
| read_only_udm.metadata.vendor_name | Definido como "VANDYKE SOFTWARE" | |
| read_only_udm.network.application_protocol | Definido como "SSH" se o campo de descrição contiver "SSH2" ou "SSH". Caso contrário, será definido como "HTTP" se o campo de método corresponder a métodos HTTP. | |
| read_only_udm.network.http.method | Extraído do campo "message" usando um padrão grok, somente se corresponder a métodos HTTP comuns. | |
| read_only_udm.network.http.referral_url | Extraído do campo de mensagem usando um padrão grok | |
| read_only_udm.network.http.response_code | Extraído do campo de mensagem usando um padrão grok e convertido em um número inteiro. | |
| read_only_udm.network.ip_protocol | Definido como "TCP" se o campo de descrição contiver "TCP" | |
| read_only_udm.principal.ip | Extraído do campo de mensagem usando um padrão grok | |
| read_only_udm.principal.port | Extraído do campo de mensagem usando um padrão grok e convertido em um número inteiro. | |
| read_only_udm.security_result.description | Extraído do campo de mensagem usando um padrão grok | |
| read_only_udm.security_result.severity | Definido como "HIGH" se syslog_severity for "error" ou "warning", "MEDIUM" se for "notice" e "LOW" se for "information" ou "info". | |
| read_only_udm.security_result.severity_details | Mapeia diretamente o valor do campo syslog_severity. | |
| read_only_udm.target.ip | Extraído do campo de mensagem usando um padrão grok | |
| read_only_udm.target.port | Extraído do campo de mensagem usando um padrão grok e convertido em um número inteiro. | |
| read_only_udm.target.process.pid | Extraído do campo de mensagem usando um padrão grok | |
| syslog_severity | Usado para determinar a gravidade do security_result. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.