Recolha registos SFTP do VanDyke VShell
Este documento explica como carregar registos SFTP do VanDyke VShell para o Google Security Operations através do Bindplane com o Syslog ou o Amazon S3 com um carregador de registos. O analisador transforma os registos não processados num formato UDM estruturado. 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
Certifique-se de que cumpre os seguintes pré-requisitos:
- Uma instância do Google SecOps
- Acesso privilegiado ao servidor VShell ou à consola de gestão da VanDyke
- Para a opção 1: um anfitrião Windows 2016 ou posterior, ou Linux com
systemdpara o agente 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 através do Bindplane e do Syslog
Esta opção oferece streaming de registos em tempo real com latência mínima e é recomendada para a maioria das implementações.
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado ou onde vai configurar o feed.
Obtenha o ID de cliente do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instale o agente do Bindplane no seu sistema operativo Windows ou Linux de acordo com as seguintes instruções.
Instalação de janelas
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte 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 raiz ou sudo.
Execute o seguinte comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalação adicionais
- Para ver opções de instalação adicionais, consulte este guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
Aceda ao ficheiro de configuração:
- Localize o ficheiro
config.yaml. Normalmente, encontra-se no diretório/etc/bindplane-agent/no Linux ou no diretório de instalação no Windows. - Abra o ficheiro com um editor de texto (por exemplo,
nano,viou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
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 de cliente real. - Atualize
/path/to/ingestion-authentication-file.jsonpara o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps. - Para TCP em vez de UDP, substitua
udplogportcplog.
Reinicie o agente do Bindplane para aplicar as alterações
Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:
sudo systemctl restart bindplane-agentPara reiniciar o agente Bindplane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configure o encaminhamento de Syslog no VanDyke VShell
Para o VShell no Windows
- Inicie sessão no painel de controlo do VShell.
- Aceda às definições de Registo.
- Configure o registo syslog remoto:
- Ative o registo no servidor syslog remoto.
- Endereço do servidor: introduza o endereço IP do agente do Bindplane.
- Porta: introduza 514 (ou a porta configurada).
- Protocolo: selecione UDP (ou TCP, se estiver configurado).
- Grupos de mensagens: selecione Ligação, Autenticação, SFTP, FTPS, HTTPS, Erros, Avisos e Informações.
- Clique em Aplicar > OK.
Para o VShell no Linux/macOS
- Edite o ficheiro vshelld_config (normalmente
/etc/vshell/vshelld_config). Configure os seguintes parâmetros:
SyslogFacility LOG_LOCAL3 LogLevel INFOConfigure o syslog do seu sistema para encaminhar LOG_LOCAL3 para o agente Bindplane:
- Editar
/etc/rsyslog.confou/etc/syslog-ng/syslog-ng.conf. - Adicione:
local3.* @bindplane-agent-ip:514(para UDP) oulocal3.* @@bindplane-agent-ip:514(para TCP).
- Editar
Reinicie o serviço VShell e o serviço syslog:
sudo systemctl restart vshelld sudo systemctl restart rsyslog
Opção 2: integração através do AWS S3
Esta opção é útil para ambientes que requerem o arquivo de registos ou onde o encaminhamento direto de syslog não é viável. Tenha em atenção que isto requer um remetente de registos no servidor VShell, uma vez que o AWS Lambda não consegue aceder a ficheiros no local.
Configure o contentor do AWS S3 e o IAM para o Google SecOps
- Crie um contentor do Amazon S3 seguindo este manual do utilizador: Criar um contentor.
- Guarde o nome e a região do contentor para referência futura (por exemplo,
vandyke-sftp-logs). - Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
- Selecione o utilizador criado.
- Selecione o separador Credenciais de segurança.
- Clique em Criar chave de acesso na secção Chaves de acesso.
- Selecione Serviço de terceiros como Exemplo de utilização.
- Clicar em Seguinte.
- Opcional: adicione uma etiqueta de descrição.
- Clique em Criar chave de acesso.
- Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione o separador Autorizações.
- Clique em Adicionar autorizações na secção Políticas de autorizações.
- Selecione Adicionar autorizações.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clicar em Seguinte.
- Clique em Adicionar autorizações.
Instale e configure o Log Shipper no servidor VShell
Escolha uma das seguintes opções com base no seu sistema operativo:
Opção A: usar o NXLog (Windows)
- Transfira e instale a NXLog Community Edition a partir de 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 um 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 do AWS:
Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default- Agende a execução do script do PowerShell a cada 5 minutos através do 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 | shConfigure o dispositivo
/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
Configure um feed no Google SecOps para carregar registos do VanDyke VShell
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- No campo Nome do feed, introduza 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 registo (personalizado).
- Clicar em Seguinte.
- Especifique valores para os seguintes parâmetros de entrada:
- URI do S3:
s3://vandyke-sftp-logs/vshell/ - Opções de eliminação da origem: selecione Manter (recomendado) ou a opção de eliminação de acordo com a sua preferência.
- Idade máxima do ficheiro: inclua ficheiros modificados no último número de dias. A predefinição é 180 dias.
- ID da chave de acesso: chave de acesso do utilizador com acesso ao contentor do S3.
- Chave de acesso secreta: chave secreta do utilizador com acesso ao contentor do S3.
- Espaço de nomes do recurso: o espaço de nomes do recurso.
- Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
- URI do S3:
- Clicar em Seguinte.
- Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Tabela de mapeamento da UDM
| Campo de registo | 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 a data/hora do campo logstash.collect.timestamp e converte-a num objeto 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 está 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 está 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 está 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 através de padrões grok e expressões regulares | |
| read_only_udm.metadata.event_type | Definido 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 através de 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, é definido como "HTTP" se o campo de método corresponder aos métodos HTTP | |
| read_only_udm.network.http.method | Extraído do campo de mensagem através de um padrão grok, apenas se corresponder a métodos HTTP comuns | |
| read_only_udm.network.http.referral_url | Extraído do campo de mensagem através de um padrão grok | |
| read_only_udm.network.http.response_code | Extraído do campo de mensagem através de um padrão grok e convertido num 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 através de um padrão grok | |
| read_only_udm.principal.port | Extraído do campo de mensagem através de um padrão grok e convertido num número inteiro | |
| read_only_udm.security_result.description | Extraído do campo de mensagem através de 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 através de um padrão grok | |
| read_only_udm.target.port | Extraído do campo de mensagem através de um padrão grok e convertido num número inteiro | |
| read_only_udm.target.process.pid | Extraído do campo de mensagem através de um padrão grok | |
| syslog_severity | Usado para determinar a gravidade de security_result |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.