Raccogliere i log SFTP di VanDyke VShell
Questo documento spiega come importare i log SFTP di VanDyke VShell in Google Security Operations utilizzando Bindplane con Syslog o Amazon S3 con un log shipper. Il parser trasforma i log non elaborati in un formato UDM strutturato. Gestisce i formati JSON e SYSLOG, estrae i campi pertinenti come indirizzi IP, porte e dettagli degli eventi e arricchisce i dati con informazioni contestuali come dettagli della piattaforma e gravità della sicurezza.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Accesso con privilegi al server o alla console di gestione VanDyke VShell
- Per l'opzione 1: un host Windows 2016 o versioni successive o Linux con
systemdper l'agente Bindplane - Per l'opzione 2: account AWS con accesso S3 e NXLog/Fluent Bit sul server VShell
Opzione 1: integrazione tramite Bindplane e Syslog
Questa opzione fornisce lo streaming dei log in tempo reale con una latenza minima ed è consigliata per la maggior parte delle implementazioni.
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane o in cui configurerai il feed.
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa l'agente Bindplane
Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
Installazione di Windows
- Apri il prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installazione di Linux
- Apri un terminale con privilegi root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Risorse aggiuntive per l'installazione
- Per ulteriori opzioni di installazione, consulta questa guida all'installazione.
Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps
Accedi al file di configurazione:
- Individua il file
config.yaml. In genere si trova nella directory/etc/bindplane-agent/su Linux o nella directory di installazione su Windows. - Apri il file utilizzando un editor di testo (ad esempio
nano,vio Blocco note).
- Individua il file
Modifica il file
config.yamlcome segue: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- Sostituisci la porta e l'indirizzo IP in base alle esigenze della tua infrastruttura.
- Sostituisci
<customer_id>con l'ID cliente effettivo. - Aggiorna
/path/to/ingestion-authentication-file.jsonal percorso in cui è stato salvato il file di autenticazione nella sezione Recupera il file di autenticazione per l'importazione di Google SecOps. - Per TCP anziché UDP, sostituisci
udplogcontcplog.
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart bindplane-agentPer riavviare l'agente Bindplane in Windows, puoi utilizzare la console Servizi o inserire il seguente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configura l'inoltro di Syslog su VanDyke VShell
Per VShell su Windows
- Accedi al pannello di controllo di VShell.
- Vai alle impostazioni di registrazione.
- Configura la registrazione syslog remota:
- Attiva la registrazione sul server syslog remoto.
- Indirizzo server: inserisci l'indirizzo IP dell'agente Bindplane.
- Porta: inserisci 514 (o la porta configurata).
- Protocollo: seleziona UDP (o TCP se configurato).
- Messaggi di gruppo: seleziona Connessione, Autenticazione, SFTP, FTPS, HTTPS, Errori, Avvisi e Informativi.
- Fai clic su Applica > Ok.
Per VShell su Linux/macOS
- Modifica il file vshelld_config (in genere
/etc/vshell/vshelld_config). Configura i seguenti parametri:
SyslogFacility LOG_LOCAL3 LogLevel INFOConfigura syslog del sistema per inoltrare LOG_LOCAL3 all'agente Bindplane:
- Modifica
/etc/rsyslog.confo/etc/syslog-ng/syslog-ng.conf. - Aggiungi:
local3.* @bindplane-agent-ip:514(per UDP) olocal3.* @@bindplane-agent-ip:514(per TCP).
- Modifica
Riavvia il servizio VShell e il servizio syslog:
sudo systemctl restart vshelld sudo systemctl restart rsyslog
Opzione 2: integrazione tramite AWS S3
Questa opzione è utile per gli ambienti che richiedono l'archiviazione dei log o in cui l'inoltro diretto di syslog non è fattibile. Tieni presente che è necessario un log shipper sul server VShell, poiché AWS Lambda non può accedere ai file on-premise.
Configura il bucket AWS S3 e IAM per Google SecOps
- Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket.
- Salva il nome e la regione del bucket per riferimento futuro (ad esempio,
vandyke-sftp-logs). - Crea un utente seguendo questa guida utente: Creazione di un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi un tag di descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file CSV per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- Fai clic su Aggiungi autorizzazioni nella sezione Norme relative alle autorizzazioni.
- Seleziona Aggiungi autorizzazioni.
- Seleziona Collega direttamente i criteri.
- Cerca i criteri AmazonS3FullAccess.
- Seleziona la policy.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Installare e configurare Log Shipper sul server VShell
Scegli una delle seguenti opzioni in base al tuo sistema operativo:
Opzione A: utilizzo di NXLog (Windows)
- Scarica e installa NXLog Community Edition da nxlog.co.
Modifica
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>Crea lo script 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 defaultCrea un profilo delle credenziali AWS:
Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default- Pianifica l'esecuzione dello script di PowerShell ogni 5 minuti utilizzando Pianificazione attività.
Opzione B: utilizzo di Fluent Bit (Linux)
Installa Fluent Bit:
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | shConfigura
/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.gzConfigura le credenziali AWS:
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEYAvvia Fluent Bit:
sudo systemctl enable fluent-bit sudo systemctl start fluent-bit
Configura un feed in Google SecOps per importare i log di VanDyke VShell
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
VanDyke VShell SFTP logs). - Seleziona Amazon S3 V2 come Tipo di origine.
- Seleziona VanDyke SFTP come Tipo di log (personalizzato).
- Fai clic su Avanti.
- Specifica i valori per i seguenti parametri di input:
- URI S3:
s3://vandyke-sftp-logs/vshell/ - Opzioni di eliminazione della fonte: seleziona Mantieni (opzione consigliata) o l'opzione di eliminazione in base alle tue preferenze.
- Età massima del file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
- ID chiave di accesso: chiave di accesso utente con accesso al bucket S3.
- Chiave di accesso segreta: chiave segreta dell'utente con accesso al bucket S3.
- Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- URI S3:
- Fai clic su Avanti.
- Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| agent.id | read_only_udm.observer.asset_id | Concatena "filebeat:" con il valore del campo agent.id |
| agent.type | read_only_udm.observer.application | Mappa direttamente il valore del campo agent.type |
| agent.version | read_only_udm.observer.platform_version | Mappa direttamente il valore del campo agent.version |
| ecs.version | read_only_udm.metadata.product_version | Mappa direttamente il valore del campo ecs.version |
| host.architecture | read_only_udm.target.asset.hardware.cpu_platform | Mappa direttamente il valore del campo host.architecture |
| host.hostname | read_only_udm.target.hostname | Mappa direttamente il valore del campo host.hostname |
| host.id | read_only_udm.principal.asset_id | Concatena "VANDYKE_SFTP:" con il valore del campo host.id |
| host.ip | read_only_udm.target.ip | Mappa direttamente ogni indirizzo IP nell'array host.ip a un campo read_only_udm.target.ip separato |
| host.mac | read_only_udm.target.mac | Mappa direttamente ogni indirizzo MAC nell'array host.mac su un campo read_only_udm.target.mac separato |
| host.os.kernel | read_only_udm.target.platform_patch_level | Mappa direttamente il valore del campo host.os.kernel |
| host.os.platform | read_only_udm.target.platform | Mappa il valore di host.os.platform su WINDOWS, LINUX, MAC o UNKNOWN_PLATFORM in base al valore |
| host.os.version | read_only_udm.target.platform_version | Mappa direttamente il valore del campo host.os.version |
| log.file.path | read_only_udm.principal.process.file.full_path | Mappa direttamente il valore del campo log.file.path |
| logstash.collect.timestamp | read_only_udm.metadata.collected_timestamp | Analizza il timestamp dal campo logstash.collect.timestamp e lo converte in un oggetto timestamp |
| logstash.irm_environment | read_only_udm.additional.fields.value.string_value | Mappa direttamente il valore del campo logstash.irm_environment. La chiave è impostata su "irm_environment" |
| logstash.irm_region | read_only_udm.additional.fields.value.string_value | Mappa direttamente il valore del campo logstash.irm_region. La chiave è impostata su "irm_region" |
| logstash.irm_site | read_only_udm.additional.fields.value.string_value | Mappa direttamente il valore del campo logstash.irm_site. La chiave è impostata su "irm_site" |
| logstash.process.host | read_only_udm.observer.hostname | Mappa direttamente il valore del campo logstash.process.host |
| messaggio | Utilizzato per estrarre vari campi utilizzando pattern grok ed espressioni regolari | |
| read_only_udm.metadata.event_type | Imposta su "NETWORK_FTP" | |
| read_only_udm.metadata.log_type | Imposta su "VANDYKE_SFTP" | |
| read_only_udm.metadata.product_event_type | Estratto dal campo del messaggio utilizzando un pattern grok | |
| read_only_udm.metadata.product_name | Imposta su "VANDYKE_SFTP" | |
| read_only_udm.metadata.vendor_name | Imposta su "VANDYKE SOFTWARE" | |
| read_only_udm.network.application_protocol | Impostato su "SSH" se il campo della descrizione contiene "SSH2" o "SSH", altrimenti impostato su "HTTP" se il campo del metodo corrisponde ai metodi HTTP | |
| read_only_udm.network.http.method | Estratto dal campo del messaggio utilizzando un pattern grok, solo se corrisponde a metodi HTTP comuni | |
| read_only_udm.network.http.referral_url | Estratto dal campo del messaggio utilizzando un pattern grok | |
| read_only_udm.network.http.response_code | Estratto dal campo del messaggio utilizzando un pattern grok e convertito in un numero intero | |
| read_only_udm.network.ip_protocol | Imposta su "TCP" se il campo della descrizione contiene "TCP" | |
| read_only_udm.principal.ip | Estratto dal campo del messaggio utilizzando un pattern grok | |
| read_only_udm.principal.port | Estratto dal campo del messaggio utilizzando un pattern grok e convertito in un numero intero | |
| read_only_udm.security_result.description | Estratto dal campo del messaggio utilizzando un pattern grok | |
| read_only_udm.security_result.severity | Imposta "HIGH" se syslog_severity è "error" o "warning", "MEDIUM" se è "notice" e "LOW" se è "information" o "info". | |
| read_only_udm.security_result.severity_details | Mappa direttamente il valore del campo syslog_severity | |
| read_only_udm.target.ip | Estratto dal campo del messaggio utilizzando un pattern grok | |
| read_only_udm.target.port | Estratto dal campo del messaggio utilizzando un pattern grok e convertito in un numero intero | |
| read_only_udm.target.process.pid | Estratto dal campo del messaggio utilizzando un pattern grok | |
| syslog_severity | Utilizzato per determinare la gravità di security_result |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.