Raccogliere i log SFTP di VanDyke VShell

Supportato in:

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 systemd per 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.

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. 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

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. 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

  1. Apri il prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Installazione di Linux

  1. Apri un terminale con privilegi root o sudo.
  2. 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

Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps

  1. Accedi al file di configurazione:

    1. Individua il file config.yaml. In genere si trova nella directory /etc/bindplane-agent/ su Linux o nella directory di installazione su Windows.
    2. Apri il file utilizzando un editor di testo (ad esempio nano, vi o Blocco note).
  2. Modifica il file config.yaml come 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.json al 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 udplog con tcplog.

Riavvia l'agente Bindplane per applicare le modifiche

  • Per riavviare l'agente Bindplane in Linux, esegui questo comando:

    sudo systemctl restart bindplane-agent
    
  • Per 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

  1. Accedi al pannello di controllo di VShell.
  2. Vai alle impostazioni di registrazione.
  3. 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.
  4. Fai clic su Applica > Ok.

Per VShell su Linux/macOS

  1. Modifica il file vshelld_config (in genere /etc/vshell/vshelld_config).
  2. Configura i seguenti parametri:

    SyslogFacility LOG_LOCAL3
    LogLevel INFO
    
  3. Configura syslog del sistema per inoltrare LOG_LOCAL3 all'agente Bindplane:

    • Modifica /etc/rsyslog.conf o /etc/syslog-ng/syslog-ng.conf.
    • Aggiungi: local3.* @bindplane-agent-ip:514 (per UDP) o local3.* @@bindplane-agent-ip:514 (per TCP).
  4. 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

  1. Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket.
  2. Salva il nome e la regione del bucket per riferimento futuro (ad esempio, vandyke-sftp-logs).
  3. Crea un utente seguendo questa guida utente: Creazione di un utente IAM.
  4. Seleziona l'utente creato.
  5. Seleziona la scheda Credenziali di sicurezza.
  6. Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
  7. Seleziona Servizio di terze parti come Caso d'uso.
  8. Fai clic su Avanti.
  9. (Facoltativo) Aggiungi un tag di descrizione.
  10. Fai clic su Crea chiave di accesso.
  11. Fai clic su Scarica file CSV per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
  12. Fai clic su Fine.
  13. Seleziona la scheda Autorizzazioni.
  14. Fai clic su Aggiungi autorizzazioni nella sezione Norme relative alle autorizzazioni.
  15. Seleziona Aggiungi autorizzazioni.
  16. Seleziona Collega direttamente i criteri.
  17. Cerca i criteri AmazonS3FullAccess.
  18. Seleziona la policy.
  19. Fai clic su Avanti.
  20. 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)

  1. Scarica e installa NXLog Community Edition da nxlog.co.
  2. 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>
    
  3. 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 default
    
  4. Crea un profilo delle credenziali AWS:

    Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default
    
    1. Pianifica l'esecuzione dello script di PowerShell ogni 5 minuti utilizzando Pianificazione attività.

Opzione B: utilizzo di Fluent Bit (Linux)

  1. Installa Fluent Bit:

    curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
    
  2. Configura /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.gz
    
  3. Configura le credenziali AWS:

    export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
    export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
    
  4. Avvia 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

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, VanDyke VShell SFTP logs).
  4. Seleziona Amazon S3 V2 come Tipo di origine.
  5. Seleziona VanDyke SFTP come Tipo di log (personalizzato).
  6. Fai clic su Avanti.
  7. 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.
  8. Fai clic su Avanti.
  9. 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.