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 y Syslog, o bien Amazon S3 con un transportador de registros.
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 - Para la opción 2: Cuenta de AWS con acceso a S3 y NXLog/Fluent Bit en el servidor de VShell
Obtén el archivo de autenticación de transferencia de Google SecOps
- 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.
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.
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 la guía de instalación del agente de Bindplane.
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/opt/observiq-otel-collector/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
YOUR_CUSTOMER_IDpor el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.jsona la ruta de acceso al archivo en la que se guardó el archivo de autenticación. - Para 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 observiq-otel-collectorPara reiniciar el agente de Bindplane en Windows, puedes usar la consola de Servicios o ingresar el siguiente comando:
net stop observiq-otel-collector && net start observiq-otel-collector
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 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 Informativo.
- 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:
- Edita
/etc/rsyslog.confo/etc/syslog-ng/syslog-ng.conf. - Agrega:
local3.* @bindplane-agent-ip:514(para UDP) olocal3.* @@bindplane-agent-ip:514(para TCP).
- Edita
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 remitente 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: Crea un bucket
- Guarda el Nombre y la Región del bucket para consultarlos en el futuro (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 defaultPrograma 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 del código fuente: Selecciona Conservar (opción recomendada) o la opción de eliminación según tu preferencia.
- Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días más reciente. 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 transferencia: 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 |
Mapea 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. |
message |
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. |
Registro de cambios
Consulta el registro de cambios de este analizador
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.