Recopila registros de SFTP de VanDyke VShell
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
systemdpara 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.
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- 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
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- 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
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalación en Linux
- Abre una terminal con privilegios de raíz o sudo.
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
- Para obtener más opciones de instalación, consulta esta guía de instalación.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
Accede al archivo de configuración:
- 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. - Abre el archivo con un editor de texto (por ejemplo,
nano,vio Bloc de notas).
- Ubica el archivo
Edita el archivo
config.yamlde 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- Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.
- Reemplaza
<customer_id>por el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.jsona la ruta de acceso en la que se guardó el archivo de autenticación en la sección Cómo obtener el archivo de autenticación de la transferencia de datos de Google SecOps. - Para usar TCP en lugar de UDP, reemplaza
udplogportcplog.
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-agentPara 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
- Accede al Panel de control de VShell.
- Ve a la configuración de Registro.
- 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.
- Haz clic en Aplicar > Aceptar.
Para VShell en Linux/macOS
- Edita el archivo vshelld_config (por lo general,
/etc/vshell/vshelld_config). Configura los siguientes parámetros:
SyslogFacility LOG_LOCAL3 LogLevel INFOConfigura el syslog de tu sistema para que reenvíe LOG_LOCAL3 al agente de Bindplane:
- Editar
/etc/rsyslog.confo/etc/syslog-ng/syslog-ng.conf - Agrega:
local3.* @bindplane-agent-ip:514(para UDP) olocal3.* @@bindplane-agent-ip:514(para TCP).
- Editar
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
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket.
- Guarda el Nombre y la Región del bucket para futuras referencias (por ejemplo,
vandyke-sftp-logs). - Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
- Selecciona el usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para consultarlas en el futuro.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- 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)
- Descarga e instala NXLog Community Edition desde 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>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 defaultCrea un perfil de credenciales de AWS:
Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default- 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)
Instala 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 las credenciales de AWS:
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEYInicia Fluent Bit:
sudo systemctl enable fluent-bit sudo systemctl start fluent-bit
Configura un feed en Google SecOps para transferir registros de VanDyke VShell
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
VanDyke VShell SFTP logs). - Selecciona Amazon S3 V2 como el Tipo de fuente.
- Selecciona VanDyke SFTP como el Tipo de registro (personalizado).
- Haz clic en Siguiente.
- 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.
- URI de S3:
- Haz clic en Siguiente.
- 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.