Recopila registros de SFTP de VanDyke VShell

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de SFTP de VanDyke VShell a Google Security Operations con Bindplane a través de Syslog o Amazon S3 con un transportador de registros. El analizador transforma los registros sin procesar en un formato UDM estructurado. Maneja los formatos JSON y SYSLOG, extrae campos relevantes, como direcciones IP, puertos y detalles de eventos, y enriquece los datos con información contextual, como detalles de la plataforma y gravedad de la seguridad.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Acceso con privilegios al servidor o a la consola de administración de VanDyke VShell
  • Para la opción 1: Un host de Windows 2016 o posterior, o Linux con systemd para el agente de Bindplane
  • Opción 2: Cuenta de AWS con acceso a S3 y NXLog/Fluent Bit en el servidor de VShell

Opción 1: Integración a través de BindPlane y Syslog

Esta opción proporciona transmisión de registros en tiempo real con una latencia mínima y se recomienda para la mayoría de las implementaciones.

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane o en el que configurarás el feed.

Obtén el ID de cliente de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instala el agente de BindPlane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.

Instalación en Windows

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el comando siguiente:

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

Instalación en Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. Ejecuta el comando siguiente:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Recursos de instalación adicionales

Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:

    1. Ubica el archivo config.yaml. Por lo general, se encuentra en el directorio /etc/bindplane-agent/ en Linux o en el directorio de instalación en Windows.
    2. Abre el archivo con un editor de texto (por ejemplo, nano, vi o Bloc de notas).
  2. Edita el archivo config.yaml de la siguiente manera:

    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
    

Reinicia el agente de Bindplane para aplicar los cambios

  • Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar el agente de Bindplane en Windows, puedes usar la consola de Servicios o ingresar el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configura el reenvío de Syslog en VanDyke VShell

Para VShell en Windows

  1. Accede al Panel de control de VShell.
  2. Ve a la configuración de Registro.
  3. Configura el registro remoto de Syslog:
    • Habilita el registro en el servidor syslog remoto.
    • Dirección del servidor: Ingresa la dirección IP del agente de BindPlane.
    • Puerto: Ingresa 514 (o el puerto que configuraste).
    • Protocolo: Selecciona UDP (o TCP si está configurado).
    • Grupos de mensajes: Selecciona Conexión, Autenticación, SFTP, FTPS, HTTPS, Errores, Advertencias y Informativos.
  4. Haz clic en Aplicar > Aceptar.

Para VShell en Linux/macOS

  1. Edita el archivo vshelld_config (por lo general, /etc/vshell/vshelld_config).
  2. Configura los siguientes parámetros:

    SyslogFacility LOG_LOCAL3
    LogLevel INFO
    
  3. Configura el syslog de tu sistema para que reenvíe LOG_LOCAL3 al agente de Bindplane:

    • Editar /etc/rsyslog.conf o /etc/syslog-ng/syslog-ng.conf
    • Agrega: local3.* @bindplane-agent-ip:514 (para UDP) o local3.* @@bindplane-agent-ip:514 (para TCP).
  4. Reinicia el servicio de VShell y el servicio de syslog:

    sudo systemctl restart vshelld
    sudo systemctl restart rsyslog
    

Opción 2: Integración a través de AWS S3

Esta opción es útil para los entornos que requieren el archivado de registros o en los que el reenvío directo de syslog no es factible. Ten en cuenta que esto requiere un transportador de registros en el servidor de VShell, ya que AWS Lambda no puede acceder a los archivos locales.

Configura el bucket de AWS S3 y el IAM para Google SecOps

  1. Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket.
  2. Guarda el Nombre y la Región del bucket para futuras referencias (por ejemplo, vandyke-sftp-logs).
  3. Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
  4. Selecciona el usuario creado.
  5. Selecciona la pestaña Credenciales de seguridad.
  6. Haz clic en Crear clave de acceso en la sección Claves de acceso.
  7. Selecciona Servicio de terceros como Caso de uso.
  8. Haz clic en Siguiente.
  9. Opcional: Agrega una etiqueta de descripción.
  10. Haz clic en Crear clave de acceso.
  11. Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para consultarlas en el futuro.
  12. Haz clic en Listo.
  13. Selecciona la pestaña Permisos.
  14. Haz clic en Agregar permisos en la sección Políticas de permisos.
  15. Selecciona Agregar permisos.
  16. Selecciona Adjuntar políticas directamente.
  17. Busca la política AmazonS3FullAccess.
  18. Selecciona la política.
  19. Haz clic en Siguiente.
  20. Haz clic en Agregar permisos.

Instala y configura Log Shipper en el servidor de VShell

Elige una de las siguientes opciones según tu sistema operativo:

Opción A: Usa NXLog (Windows)

  1. Descarga e instala NXLog Community Edition desde nxlog.co.
  2. 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>
    
  3. Crea el script de 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 perfil de credenciales de AWS:

    Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default
    
    1. Programa la secuencia de comandos de PowerShell para que se ejecute cada 5 minutos con el Programador de tareas.

Opción B: Usa Fluent Bit (Linux)

  1. Instala 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 las credenciales de AWS:

    export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
    export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
    
  4. Inicia Fluent Bit:

    sudo systemctl enable fluent-bit
    sudo systemctl start fluent-bit
    

Configura un feed en Google SecOps para transferir registros de VanDyke VShell

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, VanDyke VShell SFTP logs).
  4. Selecciona Amazon S3 V2 como el Tipo de fuente.
  5. Selecciona VanDyke SFTP como el Tipo de registro (personalizado).
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:
    • URI de S3: s3://vandyke-sftp-logs/vshell/
    • Opciones de eliminación de la fuente: Selecciona Conservar (recomendado) o la opción de eliminación según tus preferencias.
    • Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.
    • ID de clave de acceso: Clave de acceso del usuario con acceso al bucket de S3.
    • Clave de acceso secreta: Clave secreta del usuario con acceso al bucket de S3.
    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.
    • Etiquetas de transmisión: Es la etiqueta que se aplica a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
agent.id read_only_udm.observer.asset_id Concatena "filebeat:" con el valor del campo agent.id
agent.type read_only_udm.observer.application Asigna directamente el valor del campo agent.type.
agent.version read_only_udm.observer.platform_version Asigna directamente el valor del campo agent.version.
ecs.version read_only_udm.metadata.product_version Asigna directamente el valor del campo ecs.version
host.architecture read_only_udm.target.asset.hardware.cpu_platform Asigna directamente el valor del campo host.architecture
host.hostname read_only_udm.target.hostname Asigna directamente el valor del campo host.hostname.
host.id read_only_udm.principal.asset_id Concatena "VANDYKE_SFTP:" con el valor del campo host.id.
host.ip read_only_udm.target.ip Asigna directamente cada dirección IP del array host.ip a un campo read_only_udm.target.ip independiente.
host.mac read_only_udm.target.mac Asigna directamente cada dirección MAC del array host.mac a un campo read_only_udm.target.mac independiente.
host.os.kernel read_only_udm.target.platform_patch_level Asigna directamente el valor del campo host.os.kernel.
host.os.platform read_only_udm.target.platform Asigna el valor de host.os.platform a WINDOWS, LINUX, MAC o UNKNOWN_PLATFORM según el valor.
host.os.version read_only_udm.target.platform_version Asigna directamente el valor del campo host.os.version.
log.file.path read_only_udm.principal.process.file.full_path Asigna directamente el valor del campo log.file.path
logstash.collect.timestamp read_only_udm.metadata.collected_timestamp Analiza la marca de tiempo del campo logstash.collect.timestamp y la convierte en un objeto de marca de tiempo.
logstash.irm_environment read_only_udm.additional.fields.value.string_value Asigna directamente el valor del campo logstash.irm_environment. La clave se establece en "irm_environment".
logstash.irm_region read_only_udm.additional.fields.value.string_value Asigna directamente el valor del campo logstash.irm_region. La clave se establece en "irm_region".
logstash.irm_site read_only_udm.additional.fields.value.string_value Asigna directamente el valor del campo logstash.irm_site. La clave se establece en "irm_site".
logstash.process.host read_only_udm.observer.hostname Asigna directamente el valor del campo logstash.process.host
mensaje Se usa para extraer varios campos con patrones de Grok y expresiones regulares.
read_only_udm.metadata.event_type Se establece en "NETWORK_FTP".
read_only_udm.metadata.log_type Se establece en "VANDYKE_SFTP".
read_only_udm.metadata.product_event_type Se extrae del campo de mensaje con un patrón de Grok.
read_only_udm.metadata.product_name Se establece en "VANDYKE_SFTP".
read_only_udm.metadata.vendor_name Se establece en "VANDYKE SOFTWARE".
read_only_udm.network.application_protocol Se establece en "SSH" si el campo de descripción contiene "SSH2" o "SSH". De lo contrario, se establece en "HTTP" si el campo de método coincide con los métodos HTTP.
read_only_udm.network.http.method Se extrae del campo de mensaje con un patrón de grok, solo si coincide con métodos HTTP comunes.
read_only_udm.network.http.referral_url Se extrae del campo de mensaje con un patrón de Grok.
read_only_udm.network.http.response_code Se extrae del campo de mensaje con un patrón de Grok y se convierte en un número entero.
read_only_udm.network.ip_protocol Se establece en "TCP" si el campo de descripción contiene "TCP".
read_only_udm.principal.ip Se extrae del campo de mensaje con un patrón de Grok.
read_only_udm.principal.port Se extrae del campo de mensaje con un patrón de Grok y se convierte en un número entero.
read_only_udm.security_result.description Se extrae del campo de mensaje con un patrón de Grok.
read_only_udm.security_result.severity Se establece en "ALTA" si syslog_severity es "error" o "advertencia", en "MEDIA" si es "aviso" y en "BAJA" si es "información" o "info".
read_only_udm.security_result.severity_details Asigna directamente el valor del campo syslog_severity
read_only_udm.target.ip Se extrae del campo de mensaje con un patrón de Grok.
read_only_udm.target.port Se extrae del campo de mensaje con un patrón de Grok y se convierte en un número entero.
read_only_udm.target.process.pid Se extrae del campo de mensaje con un patrón de Grok.
syslog_severity Se usa para determinar la gravedad de security_result

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.